Aws lambda 无法从Lambda函数查询DynamoDB表
执行Lambda函数时接收错误: “AccessDeniedException:用户: arn:aws:sts::342213474092:假定角色/testServerlessStack-ExecRole-YZCIWMHK86D8/testServerlessStack-GetFailureKeysByOrder-OR3YS1NLQY0M 未授权对资源执行:dynamodb:扫描: arn:aws:dynamodb:us-east-2:342213474092:table/Bar“ 函数的执行角色具有以下权限:Aws lambda 无法从Lambda函数查询DynamoDB表,aws-lambda,amazon-dynamodb,amazon-cloudformation,Aws Lambda,Amazon Dynamodb,Amazon Cloudformation,执行Lambda函数时接收错误: “AccessDeniedException:用户: arn:aws:sts::342213474092:假定角色/testServerlessStack-ExecRole-YZCIWMHK86D8/testServerlessStack-GetFailureKeysByOrder-OR3YS1NLQY0M 未授权对资源执行:dynamodb:扫描: arn:aws:dynamodb:us-east-2:342213474092:table/Bar“ 函数的执行
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"dynamodb:Query",
"dynamodb:Scan"
],
"Resource": [
"arn:aws:dynamodb:us-east-2:342213474092:table/Foo/*",
"arn:aws:dynamodb:us-east-2:342213474092:table/Bar/*"
],
"Effect": "Allow"
},
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
Lambda查询
Foo
然后扫描Bar
根据文档,资源的格式应为:
要查询表,请执行以下操作:
arn:aws:dynamodb:region:account id:表/表名
或:
arn:aws:dynamodb:地区:帐户id:表格/*
扫描也是如此:
要扫描表格,请执行以下操作:
arn:aws:dynamodb:region:account id:表/表名
或:
arn:aws:dynamodb:地区:帐户id:表格/*
您是否尝试将资源更改为:
"Resource": [
"arn:aws:dynamodb:us-east-2:342213474092:table/Foo",
"arn:aws:dynamodb:us-east-2:342213474092:table/Bar"
],
此处的文档:
根据您最后的评论,这应该适合您:
arn:aws:dynamodb:region:account-id:table/*/index/*
看起来您在权限(dynamodb表ARNs)中有不同的帐号,这是故意的吗?它们匹配。所有资源(Lambda和DynamoDB表)都在同一个帐户中。我认为问题出在我的资源规范中,但我在IAM权限的那部分上找不到文档。我查询的表有索引。当我按照您的建议调整资源名称时(这是个好主意),我查询的索引会失败。但是,如果我将资源更改为“*”(星号)。它很好用。因此,要跳过前面的步骤,我如何在不枚举每个表和索引或使用星号的情况下配置此访问?文档显示:arn:aws:dynamodb:region:account id:table/table name/index/index name或:arn:aws:dynamodb:region:account id:table/table name/index/*用于索引,因此,从理论上讲,您可以使用:arn:aws:dynamodb:region:account id:table/*/index/*这仍然使用星号,但不在顶级资源级别。这有点过于宽松。我正试图通过桌子来锁定操作。我最终得到了如下结果:
arn:aws:dynamodb:us-east-2:642113479024:table/Foo
和arn:aws:dynamodb:us-east-2:642113479024:table/Foo/index/*
我必须对每个使用索引和表的表执行此操作。我可以将它锁定到特定的索引,但这对我来说太多了。