是否可以使用AWS S3存储桶策略将不同的访问类型限制为不同的用户

时间:2016-11-09 23:32:23

标签: amazon-web-services amazon-s3

我有一个AWS S3存储桶,让我们称之为'mybucket',以及一群AWS IAM用户,其中一个,比如'alice',应该可以对'mybucket'做任何事情,而其他AWS IAM用户应该能够列出内容并在'mybucket'中获取对象。

我已经设置了一个桶策略,如:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Allow 'alice' user complete access.",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::XXXXXXXXXXXX:user/alice"
      },
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::mybucket",
        "arn:aws:s3:::mybucket/*"
      ]
    },
    {
      "Sid": "Allow all other users read access",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::XXXXXXXXXXXX:root"
      },
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::mybucket",
        "arn:aws:s3:::mybucket/*"
      ]
    }
  ]
}

根据这项政策,我仍然可以写信给'mybucket'。我甚至删除了第二个语句对象,并得到了相同的结果。

这是实现我想达到目标的正确方法吗?如果是这样,我的存储桶策略有什么问题?如果没有,我应该采取什么方法?

非常感谢!

1 个答案:

答案 0 :(得分:1)

Amazon S3存储桶策略通常用于授予对所有人(例如,公共用户)的访问权限。

如果您希望向特定IAM用户授予特定权限,则最好将策略直接添加到IAM用户或组

例如,将此策略添加到alice IAM用户,以允许她在存储桶和存储桶中的对象上运行任何API命令:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::mybucket/*",
                "arn:aws:s3:::mybucket"
            ]
        }
    ]
}

您会注意到没有Principal字段,因为它会自动应用于放置此政策的用户。

当Amazon S3评估权限时,它会同时查看Bucket Policy和与User关联的任何策略。可以授予访问权限。