关于 amazon web services:IAM Policy Cognito Variables for DynamoDB LeadingKeys Restriction

IAM Policy Cognito Variables for DynamoDB LeadingKeys Restriction

我的设置:
- 移动中心
- Cognito 用户池
- API 网关
- DynamoDB

到目前为止我所做的工作:
用户可以注册/登录 Cognito 用户池并获得 Id 和 AccessToken。
IdToken 与 Api Gateway Cognito Authorizer 一起使用以访问 Api Gateway。
将用户 sub 映射到集成消息到 DynamoDb 有效。

1
2
3
"userId": {
   "S":"$context.authorizer.claims.sub"
}

限制对 DynamoDb 表中非用户行的访问不起作用。
DynamoDb 表是使用 Mobile Hubs Protected Table 功能创建的,该功能创建了以下策略:

1
2
3
4
5
6
7
   "Condition": {
       "ForAllValues:StringEquals": {
           "dynamodb:LeadingKeys": [
               "${cognito-identity.amazonaws.com:sub}"
            ]
        }
    }

但这不起作用,因为此表达式返回身份用户 ID 而不是用户池子。起初我没有使用身份池,其次我想在这里使用 User Sub。

我发现了
${cognito-idp.<REGION>.amazonaws.com/<POOL-ID>:sub} 应该可以解决问题,但那也行不通。

如果我对 Condition 进行硬编码以使用我的测试用户的 Sub,一切都按预期工作,因此 Policy 本身没问题,只是获取当前用户的 sub 的表达式无法正常工作。<铅>

是否可以调试 IAM 策略以查看运行时表达式的值是什么?

任何想法、提示、建议?

提前致谢。


我现在从 AWS 开发人员那里得到了答案。您只能使用

1
${cognito-idp.us-east-1.amazonaws.com/us-east-1_XXXXXXX:sub}

变量,如果您将 Cognito 用户池配置为直接针对 IAM 的开放 ID Connect 提供程序。

但是有一个大问题,因为如果 Open ID Connector 配置中的证书发生变化,您需要更新服务端点的 SSL Thumbprint。但是您无法判断 aws 证书何时发生更改。