AWS:S3 存储桶策略和用户策略之间有什么关系?

Sto*_*row 2 amazon-s3 amazon-web-services aws-cli

S3 存储桶策略与其指定管理员的用户策略之间是什么(或应该是什么)关系?

例如,假设我新创建了一个存储桶:

$ aws --profile admin --endpoint-url http://localhost:4572 s3 mb s3://foo
make_bucket: foo
Run Code Online (Sandbox Code Playgroud)

我希望用户bucket_admin能够管理存储桶(不一定是唯一的)。为此,我应该按照以下方式创建/应用存储桶策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:*"],
      "Principal": { "AWS": "arn:aws:iam::000000000000:user/bucket_admin" },
      "Resource": "arn:aws:s3:::foo/*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

...或按照以下方式创建/应用用户策略:

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

Mar*_*cin 5

您的存储桶策略仅适用于一个原则,即 bucket_admin用户。如果您希望有更多身份能够管理存储桶,则它不能由角色、其他 IAM 用户或组使用。

IAM 策略没有定义原则。这意味着您必须将其附加到身份,例如 IAM 角色、用户或组。这使您可以更加灵活地向存储桶分配权限。它可以只是bucket_admin,或者您可以创建一组存储桶管理员,或者具有可由 EC2 实例承担的角色。

此外,通过 IAM 策略,可以更轻松地检查谁/什么在使用它。您只需转到 IAM 控制台,然后Policy Usage您将获得使用该策略的所有身份的列表。使用存储桶策略,您必须手动检查所有存储桶并检查其策略以检查谁可以管理存储桶。

资源与 IAM 策略的良好总体比较如下:

也很有用,因为 IAM 策略可以附加到角色: