Aws lambda 无法从Lambda函数查询DynamoDB表

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“ 函数的执行

执行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/*
我必须对每个使用索引和表的表执行此操作。我可以将它锁定到特定的索引,但这对我来说太多了。