如何在 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。

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

一个 S3 存储桶 一个 IAM 角色 具有 IAM 角色的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,或者您可以切换到 IAM 角色 IAM 实体的唯一 ID,或者您可以执行 IAM API 调用以获得唯一 ID

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

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

Deny 块中的 StringNotLike

"Condition": {
                "StringNotLike": {
                    "aws:userid": 
                }
            }

以下是完整策略:

{
    "Version": "2012-10-17",
    "Statement": ,
            "Action": ,
            "Resource": "arn:aws:s3:::awsexamplebucket1"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": ,
            "Action": ,
            "Resource": "arn:aws:s3:::awsexamplebucket1/*"
        },
        {
            "Sid": "",
            "Effect": "Deny",
            "Principal": "*",
            "Action": ,
            "Resource": ,
            "Condition": {
                "StringNotLike": {
                    "aws:userid": 
                }
            }
        }
    ]
}