我有一个S3存储桶,该存储桶在其策略权限中具有CloudFront原始访问身份:

{
  "Version": "2008-10-17",
  "Id": "PolicyForCloudFrontPrivateContent",
  "Statement": [
    {
      "Sid": "1",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <mine>"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::<my-bucket>/*"
    }
  ]
}

另外,我创建了一个组,并将AmazonS3FullAccess托管策略附加到该组,并将IAM用户添加到该组。托管策略如下所示:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

但是,当该用户尝试向存储桶添加任何内容时,我收到403(访问被拒绝)。我不确定是否有其他操作可行,我还没有编写代码来尝试这些操作。仅当我明确允许用户的ARN在存储桶策略中直接访问存储桶时,才允许他们添加对象。我想念什么?似乎上述组策略应该允许该组的成员访问所有存储桶中的所有操作,但事实并非如此。

编辑:在对文档进行了大量研究之后,我想我发现Amazon不打算以这种方式使用组。他们希望您改用角色,您可以将角色分配给EC2实例以进行自动凭证管理。很好,但是后来我不知道如何在本地测试我的代码(使用aws-sdk Ruby gem)。亚马逊说要为您的访问ID和 key 定义环境变量-但是什么访问ID和 key 呢?没有这样的角色...

最佳答案

尝试更换(在您的政策中):

"Resource": "arn:aws:s3:::<my-bucket>/*"

和:
"Resource": ["arn:aws:s3:::<my-bucket>", "arn:aws:s3:::<my-bucket>/*",]

和:
"Principal": {"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <mine>"},

和:
"Principal": {"AWS": "arn:aws:iam::ACCOUNT_ID:user/USERNAME"},

关于amazon-web-services - 组上的AmazonS3FullAccess托管策略没有授予S3权限?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28742320/

10-16 11:55