如何将 DynamoDB 细粒度访问控制与 Cognito 用户池一起使用?

How to use DynamoDB fine grained access control with Cognito User Pools?

我无法理解在使用 Cognito 用户池登录时如何在 DynamoDB 上使用细粒度访问控制。我已按照文档进行搜索并四处搜索,但出于某种原因,我似乎无法使其正常工作。

下面列出了我的 AWS 设置。如果我删除角色策略中的条件,我可以毫无问题地获取和放置项目,所以看起来很可能是条件问题。但我无法弄清楚如何或在何处调试依赖于经过身份验证的身份的策略 - 哪些变量可用,它们的值是什么,等等。

如有任何帮助,我们将不胜感激!

DynamoDB table

DynamoDB 示例行

{
  "attributes": {},
  "docID": "0f332745-f749-4b1a-b26d-4593959e9847",
  "lastModifiedNumeric": 1470175027561,
  "lastModifiedText": "Wed Aug 03 2016 07:57:07 GMT+1000 (AEST)",
  "type": "documents",
  "userID": "4fbf0c06-03a9-4cbe-b45c-ca4cd0f5f3cb"
}

Cognito 用户池用户

"RoleName"

的角色策略
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:PutItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:ap-southeast-2:NUMBER:table/documents"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": [
                        "${cognito-identity.amazonaws.com:sub}"
                    ]
                }
            }
        }
    ]
}

从cognitoUser.getUserAttributes()

返回的登录信息
attribute sub has value 4fbf0c06-03a9-4cbe-b45c-ca4cd0f5f3cb
attribute email_verified has value true
attribute email has value ****@****com

错误信息

Code: "AccessDeniedException"
Message: User: arn:aws:sts::NUMBER:assumed-role/ROLE_NAME/CognitoIdentityCredentials is not authorized to perform: dynamodb:GetItem on resource: arn:aws:dynamodb:ap-southeast-2:NUMBER:table/documents

策略变量 "${cognito-identity.amazonaws.com:sub}" 不是您从 Cognito 用户池中获取的用户子。实际上,当您将来自 Cognito 用户池的用户与联合身份服务联合时,Cognito 联合身份服务生成的用户身份 ID。

因为 "${cognito-identity.amazonaws.com:sub}" 中的值与您在 DynamoDB 行中的值不匹配,它会因 AccessDenied 而失败。为此,Dynamo 条目中的 userId 实际上应该是身份 ID,而不是 sub。目前,IAM 策略变量和 Cognito 用户池服务之间没有直接 link。

这里有一些文档 link,可能会有帮助。
1. IAM roles with Cognito Federated Identity Service
2.Integrating User Pools with Cognito Federated Identity Service