【发布时间】:2021-12-09 08:52:46
【问题描述】:
我尝试通过 AWS 中的 boto3 (Python) 访问 dynamodb。让它在我的本地机器上工作。据我了解,在 AWS 运行中,它只使用 IAM 角色来获取访问权限。但它不起作用。
Lambda execution failed with status 200 due to customer function error: An error occurred (AccessDeniedException) when calling the Scan operation:
User: arn:aws:sts::021517822274:assumed-role/CodeStar-tt-api-subjects-Execution/
awscodestar-tt-api-subjects-lambda-HelloWorld is not authorized to perform: dynamodb:
Scan on resource: arn:aws:dynamodb:us-east-1:021517822274:table/tt-subjects.
这里发送了完全相同的问题:
我应用了建议的 AmazonDynamoDBFullAccess 政策。也尝试过:
我自己添加的策略(另外)是:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListAndDescribe",
"Effect": "Allow",
"Action": [
"dynamodb:List*",
"dynamodb:DescribeReservedCapacity*",
"dynamodb:DescribeLimits",
"dynamodb:DescribeTimeToLive"
],
"Resource": "*"
},
{
"Sid": "SpecificTable",
"Effect": "Allow",
"Action": [
"dynamodb:BatchGet*",
"dynamodb:DescribeStream",
"dynamodb:DescribeTable",
"dynamodb:Get*",
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": "arn:aws:dynamodb:*:*:table/tt-subjects"
}
]
}
但我仍然遇到同样的错误。
应用这些政策是否需要很长时间,或者仍然是什么原因造成的?
【问题讨论】:
-
从外观上看,您附加到 lambda 的角色似乎没有所需的权限。考虑到错误,如果您还发布了附加到 lambda 的角色的政策,那就太好了
-
如前所述,我还添加了此策略:AmazonDynamoDBFullAccess 和我自己的。我尝试在上面添加它。
-
明白,但这是一个模板策略……它指的是示例表,您需要将其替换为您的表名。需要查看实际使用的策略。
-
我是否正确假设上述策略适用于角色 awscodestar-tt-api-subjects-lambda-HelloWorld
-
Boundaries 描述了您可以达到的限制 - 如果您尝试访问的内容在外部或未定义为该边界的一部分,则您不能去那里 - 所以如果 Lambda 执行角色有一个不包括发电机的束缚,它将无法访问它。至于您的格式错误,响应 - 代理 lambda 必须返回带有 { statusCode:200, body:payload} 的类似 json 的对象
标签: aws-lambda amazon-dynamodb boto3