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。
我发现了
如果我对 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 证书何时发生更改。