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" 
     ] 
    } 
    ] 
} 

http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html