如何在 Amazon S3 存储桶策略中对包含 Principal 元素(而非 NotPrincipal 元素)的显式拒绝使用通配符?

上次更新时间:2020 年 9 月 18 日

如何在 Amazon Simple Storage Service (Amazon S3) 存储桶策略中对包含 Principal 元素(而非 NotPrincipal 元素)的显式拒绝使用通配符?

简短描述

您可以通过在使用 NotPrincipal 元素和显式拒绝的存储桶策略中指定权限,来防止特定 AWS Identity and Access Management (IAM) 实体访问您的 Amazon S3 存储桶。有关详细信息,请参阅将 NotPrincipal 与 Deny 结合使用。

但是,由于 NotPrincipal 元素不支持通配符,因此必须使用 Principal 作为每个语句块中的目标实体,其中包括每个 Allow 块的 Condition。

解决方法

不使用 NotPrincipal,而使用 Principal 作为每个语句块中的目标实体,这包括每个 Allow 块的 Condition。

开始之前,您必须具备以下资源:

在本示例中,在 aws:userid 中使用通配符,以包含进行调用以获取临时凭证时这一调用过程(例如应用程序、服务或实例 ID)传递的所有名称。有关更多信息,请参阅所有请求中的可用信息。包含根账户以防止锁定。

注意:务必将示例名称替换为您自己的角色 ID 和存储桶名称。

Deny 块中的 StringNotLike

"Condition": {
                "StringNotLike": {
                    "aws:userid": [
                        "AROAID2GEXAMPLEROLEID:*",
                        "444455556666"
                    ]
                }
            }

以下是完整策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": [
                "arn:aws:iam::444455556666:role/cross-account-read-only-role"
            ],
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::awsexamplebucket1"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": [
                "arn:aws:iam::444455556666:role/cross-account-read-only-role"
            ],
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::awsexamplebucket1/*"
        },
        {
            "Sid": "",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplebucket1/*",
                "arn:aws:s3:::awsexamplebucket1"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userid": [
                        "AROAID2GEXAMPLEROLEID:*",
                        "444455556666"
                    ]
                }
            }
        }
    ]
}

这篇文章对您有帮助吗?


您是否需要账单或技术支持?