DynamoDB细粒度访问Lambda



我正在尝试使用标识级别的细粒度访问来访问DynamoDB表中的用户数据。对于用户身份验证,我使用开发人员身份验证标识。

为了实现这一点,我的政策包括:

{
        "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表访问用户数据时——在Lambda函数中,我得到了以下错误:

更新用户时出错:AccessDeniedException:用户:arn:aws:sts::12312313:假定角色/LambdAuthEditAccount/awslambda_123_20160410184653936未被授权在资源上执行:generandb:UpdateItemarn:aws:generanddb:eu-west-1:1212312:table/Users"}

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

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

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

相关内容

  • 没有找到相关文章