abb*_*bbm 13 amazon-web-services amazon-dynamodb amazon-iam amazon-cognito
在使用Cognito用户池登录时,我无法理解如何在DynamoDB上使用细粒度访问控制.我跟着文档和谷歌搜索,但由于某种原因我似乎无法让它工作.
我的AWS设置如下所示.如果我删除角色策略中的条件,我可以获取并放置项目没有问题,所以似乎条件是问题.但我无法弄清楚如何或在何处调试依赖于经过身份验证的身份的策略 - 可用的变量,它们的值是什么等等.
任何帮助将不胜感激!
DynamoDB表
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"
}
Run Code Online (Sandbox Code Playgroud)
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}"
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
从cognitoUser.getUserAttributes()返回的登录信息
attribute sub has value 4fbf0c06-03a9-4cbe-b45c-ca4cd0f5f3cb
attribute email_verified has value true
attribute email has value ****@****com
Run Code Online (Sandbox Code Playgroud)
错误信息
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
Run Code Online (Sandbox Code Playgroud)
Che*_*hta 20
策略变量"${cognito-identity.amazonaws.com:sub}"不是您从Cognito用户池获得的用户子.事实上,当您将Cognito用户池中的用户与联合身份服务联合时,由Cognito Federated Identity服务生成的用户的身份ID.
因为,值"${cognito-identity.amazonaws.com:sub}"永远不会与DynamoDB行中的值相匹配,所以它与AccessDenied失败.为此,userIdDynamo条目中的实际应该是身份ID,而不是sub.目前,IAM策略变量与Cognito User Pools服务之间没有直接链接.
以下是一些可能有用的文档链接.
1. 使用Cognito联合身份服务的IAM角色
2. 将用户池与Cognito联合身份服务集成
| 归档时间: |
|
| 查看次数: |
2635 次 |
| 最近记录: |