首页 > 解决方案 > 使用 Cognito 和 Lambda 函数的 AWS 无服务器 DynamoDB 行级授权

问题描述

好的,所以我目前几乎可以按照此处的本指南和其他几条指南进行操作。

https://aws.amazon.com/blogs/mobile/building-fine-grained-authorization-using-amazon-cognito-user-pools-groups/

但是,我没有让用户直接访问 DynamoDB,而是通过 API 网关运行它,然后使用授权标头和 Cognito 会话 ID 运行 Lambda 函数。

我有那部分工作。

在我的 lambda 函数中,我调用了更新函数

const data = await documentClient.update(params).promise();

我已将 AWSLambdaBasicExecutionRole 策略和以下策略添加到我的 lambda 函数角色以允许更新的行级别访问

"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor1",
        "Effect": "Allow",
        "Action": [
            "dynamodb:UpdateItem"
        ],
        "Resource": [
            "arn:aws:dynamodb:us-east-2:mydynamodbid:table/userdata"
        ],
        "Condition": {
            "ForAllValues:StringEquals": {
                "dynamodb:LeadingKeys": "${cognito-identity.amazonaws.com:sub}"
            }
        }
    }
]

它适用于 AmazonDynamoDBFullAccess 但我不确定它是否完成了我正在寻找的东西,因为我认为它只是完全绕过了条件。

我收到以下错误

 "User: arn:aws:sts::**********:assumed-role/db-crud/update-user-info-by-id is not 
authorized to perform: dynamodb:UpdateItem on resource: arn:aws:dynamodb:us-east-
2:************:table/userdata"

有没有人遇到过这样的事情或看到我可能出错的地方?

这是我要进行的流程,这与第 6 步有关 在此处输入图像描述

标签: amazon-web-servicesaws-lambdapermissionsamazon-cognitoamazon-iam

解决方案


推荐阅读