组上的AmazonS3FullAccess托管策略不授予S3权限?

bko*_*cik 6 amazon-s3 amazon-web-services

我有一个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>/*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

另外,我创建了一个组,并将AmazonS3FullAccess托管策略附加到该组,并将IAM用户添加到该组。托管策略如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

小智 1

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

"Resource": "arn:aws:s3:::<my-bucket>/*"
Run Code Online (Sandbox Code Playgroud)

和:

"Resource": ["arn:aws:s3:::<my-bucket>", "arn:aws:s3:::<my-bucket>/*",]
Run Code Online (Sandbox Code Playgroud)

和:

"Principal": {"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <mine>"},
Run Code Online (Sandbox Code Playgroud)

和:

"Principal": {"AWS": "arn:aws:iam::ACCOUNT_ID:user/USERNAME"},
Run Code Online (Sandbox Code Playgroud)