我通过成功进行身份验证的 Cognito 用户访问新的 DynamoDB 表时遇到问题。
我在尝试扫描表(使用 AWS JavaScript 开发工具包)时收到以下 AccessDeniedException:
Unable to scan. Error: {
"message": "User: arn:aws:sts::MY-ACCOUNT-NUM:assumed-role/Cognito_VODStreamTestAuth_Role/CognitoIdentityCredentials
is not authorized to perform: dynamodb:Scan on resource: arn:aws:dynamodb:us-east-1:MY-ACCOUNT-NUM:table/VideoCatalog",
"code": "AccessDeniedException",
"time": "2019-01-27T02:25:27.686Z",
"requestId": "blahblah",
"statusCode": 400,
"retryable": false,
"retryDelay": 18.559011800834146
}
经过身份验证的 Cognito 用户策略已通过以下 DynamoDB 部分进行了扩展:
{
"Sid": "AllowedCatalogActions",
"Effect": "Allow",
"Action": [
"dynamodb:BatchGetItem",
"dynamodb:GetItem",
"dynamodb:Scan",
"dynamodb:Query",
"dynamodb:UpdateItem"
],
"Resource": [
"arn:aws:dynamodb:us-east-2:MY-ACCOUNT-NUM:table/VideoCatalog"
]
}
只要我像上面那样指定表资源,这是否足以让我经过身份验证的 Cognito 用户访问我可能创建的任何 DynamoDB 表?还是我还需要在表的"访问控制"选项卡下添加"精细访问控制"?
我可以说,我在我的非根管理员 IAM 角色(上面由 MY-ACCOUNT-NUM 表示)下创建了 VideoCatalog DynamoDB 表。这是个问题吗?(在尝试移动到 DynamoDB 表之前,我在 S3 上使用 JSON 文件作为视频目录。
一头雾水!
查看来自 AWS 的错误消息和您提供的策略文档,我可以看到这里有两个不同的区域。
AWS 表示您的用户无权访问 aws:dynamodb:us-east-1:MY-ACCOUNT-NUM:table/VideoCatalog,而您的策略文档提供对 aws:dynamodb:us-east-2:MY-ACCOUNT-NUM:table/VideoCatalog 的访问权限。
您是否可能错误地在两个不同的区域中预配资源?