通过身份验证的Cognito用户进行DynamoDB表访问的AWS IAM策略问题

时间:2019-01-27 23:38:07

标签: amazon-web-services amazon-dynamodb amazon-cognito amazon-iam

我无法通过成功通过身份验证的Cognito用户访问新的DynamoDB表。

尝试扫描表(使用AWS JavaScript SDK)时,我得到以下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表,只要我像上面那样指定表资源?还是我需要在表格的“访问控制”标签下添加"Fine-grained access control"

我可以说我是在非根管理员IAM角色(上面由MY-ACCOUNT-NUM表示)下创建的VideoCatalog DynamoDB表。那是问题吗? (在尝试移至DynamoDB表之前,我曾在S3上使用JSON文件作为视频目录。)

IAM感到困惑!

1 个答案:

答案 0 :(得分:1)

查看来自AWS的错误消息和您提供的策略文档,我可以看到这里有两个不同的区域。

AWS表示您的用户无权访问aws:dynamodb: us-east-1 :MY-ACCOUNT-NUM:table / VideoCatalog,而您的策略文档却提供对aws的访问:dynamodb: us-east-2 :MY-ACCOUNT-NUM:表格/视频目录。

您是否可能会错误地在两个不同的区域中配置资源?