AWS Bucket Policy Error:策略具有无效操作

fan*_*yna 4 amazon-s3 bucket amazon-web-services

我有一个非常基本的目标:将我的存储桶的所有内容分享给特定用户列表,只读.这曾经使用一个名为s3cmd的工具.我需要做的就是将用户(通过电子邮件识别)添加到具有读取权限的访问控制列表中,他们可以顺利地列出或下载数据.

但最近,这突然间不再起作用了.系统只是拒绝任何访问我的存储桶的尝试.

然后我开始考虑编辑存储桶策略.以下是策略生成器生成的策略草稿(敏感信息是匿名的):

{
  "Id": "Policy123456789",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1512705836469",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:ListObjects"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::mybucketname",
      "Principal": {
        "AWS": [
          "arn:aws:iam::anotheruserid:user/admin"
        ]
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

当我点击"保存"时,我收到"策略有无效操作"错误.然后我尝试删除"ListObjects",以便策略成为

{
  "Id": "Policy123456789",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1512705836469",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::mybucketname",
      "Principal": {
        "AWS": [
          "arn:aws:iam::anotheruserid:user/admin"
        ]
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

并得到另一条错误消息"操作不适用于语句中的任何资源".这两个错误对我来说没有意义.如果我错了,请纠正我.如果我没有朝着正确的方向前进,请帮助我.

顺便说一句:我试图按照http://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example2.html上的教程进行操作, 但没有成功.通过使用以下存储桶策略:

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "Example permissions",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::AccountB-ID:root"
         },
         "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket"
         ],
         "Resource": [
            "arn:aws:s3:::examplebucket"
         ]
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

使用AccountB的awscli执行"aws s3 ls s3:// examplebucket"时收到错误消息.错误消息是"调用ListObjects操作时发生错误(AccessDenied):访问被拒绝".这让我很困惑.如果我添加ListObjects,我收到"无效"错误.如果我删除"ListObjects",则另一个用户无法读取我的存储桶内容.

我该怎么办?

Joh*_*ein 6

我怀疑是策略编辑器已经变得更加聪明,当涉及到经营业务上水桶,而不是水桶内.

此外,ListObjects似乎令人心烦,所以不要理会.

此策略允许列出存储桶的内容并检索对象:

{
    "Id": "Policy1",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket",
                "arn:aws:s3:::my-bucket/*"
            ],
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/user-name"
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

ListBucket 在Bucket上运作.

GetObject对桶的内容进行操作.

它可以写成策略中的两个单独的语句(一个在存储桶上,一个在存储桶的内容上),但是通常更容易按上面的方式编写它.

  • [`s3:ListObjects`](http://docs.aws.amazon.com/IAM/latest/UserGuide/list_s3.html)似乎是文档错误.`s3:ListBucket`是允许列出存储桶中对象的操作的不幸名称.我提交了一份文档反馈. (5认同)