0

我正在尝试使用我的存储桶策略限制用户访问我的存储桶。我有一组用户,他们都有一个 S3FullAccess 策略。我无法更改 IAM 中的任何内容。我只能访问我的存储桶策略。所以我想使用存储桶策略来控制用户的访问。我将用户分为 3 类。

  1. 对我的存储桶的管理员访问权限(对我的存储桶的所有访问权限)
  2. 对我的存储桶具有有限访问权限的用户(例如 get-bucket-policy、get-bucket-location)
  3. 无法访问我的存储桶。(无法访问我的存储桶)

以下策略是我尝试过的策略,但它不起作用。

{
    "Version": "2012-10-17",
    "Id": "PolicyTesting",
    "Statement": [
        {
            "Sid": "0",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<<account_id>>:user/users_with_limited_access"
            },
            "Action": [
                "s3:GetBucketPolicy",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<<my_bucket_name>>",
                "arn:aws:s3:::<<my_bucket_name>>/*"
            ]
        },
        {
            "Sid": "1",
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": "arn:aws:iam::<<account_id>>:user/admin_users"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::<<my_bucket_name>>",
                "arn:aws:s3:::<<my_bucket_name>>/*"
            ]
        }
    ]
}

我尝试了上述策略,但只有管理员用户才能访问存储桶。访问受限的用户无法执行他们授予的操作,例如 get-bucket-policy、get-bucket-location。他们正在收到拒绝访问异常。帮我解决这个问题。

4

2 回答 2

1

你应该非常小心NotPrincipal。最好避免一起使用它们。大多数情况下,无需使用 "dangerous" 就很容易实现相同的功能(策略语义)NotPrincipal

我认为您最好创建特定的 IAM 角色并将它们分配给您希望允许访问 S3 存储桶的相应用户组。Deny之后,使用明确的 for"Principal" : "*"aws:userIdor阻止对存储桶的所有其他访问aws:PrincipalArn

查看这篇文章了解更多详情https://levelup.gitconnected.com/how-i-locked-the-whole-company-out-of-an-amazon-s3-bucket-1781de51e4be

最好的,斯特凡

于 2021-06-11T17:25:41.677 回答
1

AWS IAM 策略中没有优先顺序。请参考此处的策略评估逻辑。

AWS 执行代码评估账户中适用于请求的所有策略。如果代码发现甚至有一个明确的拒绝适用,则代码会返回拒绝的最终决定。

您当前的策略拒绝除 admin-users 之外的所有用户任何 S3 操作。因此 users_with_limited_access 无法执行授予的操作。

请使用适当的委托人更新您的政策(根据您问题中的评论),并参考下面的更新政策以使其发挥作用。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/s3-limited-access-user"
            },
            "Action": [
                "s3:GetBucketPolicy",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket",
                "arn:aws:s3:::example-bucket/*"
            ]
        },
        {
            "Sid": "2",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/s3-no-access-user"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::example-bucket",
                "arn:aws:s3:::example-bucket/*"
            ]
        },
        {
            "Sid": "3",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/admin-user"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::example-bucket",
                "arn:aws:s3:::example-bucket/*"
            ]
        }
    ]
}
于 2021-06-10T22:42:52.340 回答