【发布时间】:2018-03-21 11:29:09
【问题描述】:
我是 AWS 新手,并且继承了一个现有项目。
项目使用Vue.js作为前端,数据存储在DynamoDB中。用户身份验证是使用 Cognito 完成的,并附加了 IAM 角色。通过 APIGateway 和 Lambda 从数据库中通过不同的角色检索数据。
前端角色
可信实体:cognito-identity.amazonaws.com
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": [
"*"
]
}
]
}
后端角色
可信实体: 身份提供者 apigateway.amazonaws.com, 身份提供者 lambda.amazonaws.com
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1493183261000",
"Effect": "Allow",
"Action": [
"dynamodb:BatchGetItem",
"dynamodb:BatchWriteItem",
"dynamodb:DeleteItem",
"dynamodb:DescribeStream",
"dynamodb:DescribeTable",
"dynamodb:GetItem",
"dynamodb:GetRecords",
"dynamodb:GetShardIterator",
"dynamodb:ListStreams",
"dynamodb:ListTables",
"dynamodb:PutItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:UpdateItem",
"dynamodb:UpdateTable"
],
"Resource": [
"arn:aws:dynamodb:us-east-1:*:table/foo",
"arn:aws:dynamodb:us-east-1:*:table/bar",
"arn:aws:dynamodb:us-east-1:*:table/bar/index/dayKey-captureTime-index"
]
}
]
}
但是,我需要对用户进行授权,这样我就可以将 Group 分配给某些用户,这样他们就可以访问特定的项目,并限制对 dynamoDB 中其他项目的访问
我阅读了有关 IAM 细粒度访问控制的信息,但它不起作用,因为用户通过 APIGateway 与数据库通信,APIGateway 可以访问所有数据。
我可以放弃 APIGateway 和 Lambda,让用户直接与 DynamoDB 对话(这似乎是个坏主意,因为 Lambda 对数据做了一些工作,而这种方法会使我的应用程序与 AWS 的连接过于紧密)。
或者我可以创建具有不同权限的其他 API,这似乎不是正确的方法。
有人有什么建议吗?或者知道更好的方法?
【问题讨论】:
-
你是怎么解决这个问题的?
标签: lambda amazon-dynamodb aws-api-gateway amazon-iam access-control