AWS IAM细粒度访问控制虽然APIGateway和Lambda
问题描述:
我是AWS的新手,并且继承了现有项目。AWS IAM细粒度访问控制虽然APIGateway和Lambda
该项目使用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, 身份提供者(s)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"
]
}
]
}
但是,我需要为用户实施授权,以便我可以将组分配给特定用户,以便他们可以访问特定项目,并限制对DynamoDB中其他项的访问
我读了关于IAM细粒度访问控制,但它不起作用,因为用户通过APIGateway与数据库交谈,可以访问所有数据。
我可以放弃APIGateway和Lambda,让用户直接与DynamoDB对话(这似乎是一个坏主意,因为Lambda对数据做了一些工作,而且这种方法会使我的应用程序与AWS紧密相连) 。
或者我可以用不同的权限创建额外的API,这似乎不是正确的方法。
有没有人有任何建议?或者知道更好的方法?
答
API网关支持直至方法级别的访问控制。很难动态控制对DDB中特定项目的访问,但如果您正在讨论特定的静态项目,那么您可以将表格/项目硬编码到API GW或Lambda层,并使用API控制对该API方法的访问网关权限。
使用API网关访问控制可能会强制您稍微调整/重新设计API。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Permission",
"Action": [
"execute-api:Invoke"
],
"Resource": [
"arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/resource-path"
]
}
]
}