S3存储桶策略允许特定用户访问并限制所有其他用户的访问。

7

我搜索了现有的问题,但没有找到答案。因此在这里发布。

我想使用S3 Bucket策略将对S3存储桶的访问限制为除少数用户之外的所有用户。我知道IAM策略易于管理和维护,但我不喜欢为此特定情况创建角色和组,并希望创建S3存储桶策略。

以下是我迄今为止尝试过的内容,但它未按预期限制用户访问。

{
  "Version": "2012-10-17",
  "Id": "bucketPolicy",
  "Statement": [
    {

      "Effect": "Allow",
      "Principal": {
        "AWS": ["arn:aws:iam::1234567890:user/allowedusername"]
      },
      "Action": "s3:*",
      "Resource": ["arn:aws:s3:::examplebucket",
                   "arn:aws:s3:::examplebucket/*"]
    },
    {

      "Effect": "Deny",
      "Principal": {
        "AWS": ["arn:aws:iam::1234567890:user/denieduser"]
      },
      "Action": "s3:*",
      "Resource": ["arn:aws:s3:::examplebucket",
                   "arn:aws:s3:::examplebucket/*"]
    }

  ]
}

我尝试像下面这样拒绝所有权限,但是明确的拒绝优先于允许,现在我自己无法访问存储桶。这是另一个问题。;-(
{

          "Effect": "Deny",
          "Principal": {
            "AWS": ["*"]
          },
          "Action": "s3:*",
          "Resource": ["arn:aws:s3:::examplebucket",
                       "arn:aws:s3:::examplebucket/*"]
        }
1个回答

10
为了实现您的目标,请使用一个明确拒绝(explicit deny)并设置一个包含NotPrincipal策略元素的策略。下面这个策略将确保除在NotPrincipal元素中列出的用户之外,没有其他用户可以访问这些桶:
{
        "Id": "bucketPolicy",
        "Statement": [
                {
                        "Action": "s3:*",
                        "Effect": "Deny",
                        "NotPrincipal": {
                                "AWS": [
                                        "arn:aws:iam::1234567890:user/alloweduser"
                                ]
                        },
                        "Resource": [
                                "arn:aws:s3:::examplebucket",
                                "arn:aws:s3:::examplebucket/*"
                        ]
                }
        ],
        "Version": "2012-10-17"
}

2
我收到了以下错误信息:此策略包含以下错误:已禁止使用Id字段。有关IAM策略语法的更多信息,请参阅AWS IAM策略。 - lft93ryt
2
如果任何AWS服务想要访问这个存储桶,例如EMR或Redshift,该怎么办? - ImPurshu
和@ImPurshu一样的问题,如果我们同时希望其他服务访问存储桶怎么办? - user1297406
我们在哪里添加上述策略?你不能将主要策略添加到“策略”部分或附加到用户。您是否将其添加到存储桶中?如果是,该如何添加? - clg4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接