使用 Lambda 的 DynamoDB 细粒度访问

DynamoDB fine-grain access with Lambda

我正在尝试使用 identity level fine grained access 访问 DynamoDB table 中的用户数据。对于用户身份验证,我使用的是 Developer Authenicated Identities。

为此,我的政策包括:

{
        "Action": [
            "dynamodb:GetItem",
            "dynamodb:UpdateItem"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:dynamodb:eu-west-1:817949094961:table/Users",
        "Condition": {
            "ForAllValues:StringEquals": {
                "dynamodb:LeadingKeys": [
                    "${cognito-identity.amazonaws.com:sub}"
                ]
            }
        }
    }

尝试从 DynamoDB 访问用户数据时 table - 在 Lambda 函数中出现以下错误:

Error in updateUser: AccessDeniedException: User: arn:aws:sts::12312313:assumed-role/LambdAuthEditAccount/awslambda_123_20160410184653936 is not authorized to perform: dynamodb:UpdateItem on resource: arn:aws:dynamodb:eu-west-1:12312312:table/Users"}

然而,当使用 JS API 从客户端浏览器直接访问 DynamoDB 时,它工作得很好 - 细粒度访问控制工作正常。上面的策略块被添加到用户身份验证角色和 Lambda 函数承担的角色。

我想知道 Lambda 承担的角色(包含在上述错误中)是否不应解析为用户身份验证角色?

以上策略不适用于 lambda 函数担任的角色,因为它需要 Cognito 颁发的 id 令牌来担任角色并获取凭据。 您可以尝试以下方法: 1) 将身份 ID 和令牌(从 GetOpenIdTokenForDeveloperIdentity 接收)传递给 lambda 函数。 2) 从 lambda 函数调用 getCredentialsforIdentity 并在登录映射中传递身份 ID 和以上令牌。 3) 使用这些凭据访问 dynamoDB。