Amazon S3 条件键
访问策略语言使您可以在授予权限时指定条件。要指定策略生效时的条件,您可以使用可选 Condition
元素或 Condition
块来指定策略生效时的条件。您可以使用预定义的 Amazon 范围内的键和特定于 Amazon S3 的键来指定 Amazon S3 访问策略中的条件。
在 Condition
元素中,您可构建表达式并使用布尔运算符(等于、小于等)将条件与请求中的值进行匹配。例如,当授予用户上传对象的权限时,存储桶拥有者可通过添加 StringEquals
条件要求此对象可公开读取,如下所示:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
awsexamplebucket1
/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "public-read" } } } ] }
在本例中,Condition
块指定应用于指定的键值对 "s3:x-amz-acl":["public-read"]
的 StringEquals
条件。有一组预定义键可用于表达条件。此示例使用 s3:x-amz-acl
条件键。此条件要求用户包含 x-amz-acl
标头,并且值 public-read
位于每个 PUT 对象请求中。
Amazon 范围的条件键
Amazon 提供一组常用键,所有支持策略的 Amazon 服务均支持这些键。这些键称为 Amazon 范围的键并使用前缀 aws:
。有关 Amazon 范围的条件键的完整列表,请参阅 IAM 用户指南中的可用的 Amazon 条件键。您可以在 Amazon S3 中使用 Amazon 范围的条件键。如果请求源自特定 IP 地址范围(192.0.2.0.*),则以下示例存储桶策略可使已经过身份验证的用户具有使用 s3:GetObject
操作的权限,除非此 IP 地址为 192.0.2.188。在条件块中,IpAddress
和 NotIpAddress
为条件,每个条件均提供了一个键值对用于评估。此示例中的两个键-值对均使用 aws:SourceIp
Amazon 范围内的键。
注意
请注意,在条件中指定的 IPAddress
和 NotIpAddress
键值使用 RFC 4632 中描述的 CIDR 表示法。有关更多信息,请参阅 http://www.rfc-editor.org/rfc/rfc4632.txt
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": "*", "Action":"s3:GetObject", "Resource": "arn:aws:s3:::
awsexamplebucket1
/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "192.0.2.0/24" }, "NotIpAddress" : { "aws:SourceIp": "192.0.2.188/32" } } } ] }
您还可以在 Amazon S3 策略中使用其他 Amazon 范围的条件键。例如,您可以在适用于 VPC 端点的存储桶策略中指定 aws:SourceVpce
和 aws:SourceVpc
条件键。有关特定示例,请参阅使用存储桶策略控制从 VPC 端点的访问。
注意
对于某些 Amazon 全局条件键,仅支持某些资源类型。因此,请检查 Amazon S3 是否支持您要使用的全局条件键和资源类型,或者是否需要改用 Amazon S3 特定的条件键。有关 Amazon S3 的受支持资源类型和条件键的完整列表,请参阅《Service Authorization Reference》中的 Actions, resources, and condition keys for Amazon S3。
特定于 Amazon S3 的条件键
您可以将 Amazon S3 条件键与特定的 Amazon S3 操作一起使用。每个条件键均映射到可设置条件的 API 所允许的相同名称请求标头。特定于 Amazon S3 的条件键指定同名请求标头的行为。有关 Amazon S3 特定条件键的完整列表,请参阅《Service Authorization Reference》中的 Actions, resources, and condition keys for Amazon S3。
例如,条件键 s3:x-amz-acl
可用于对 s3:PutObject
权限授予条件权限,它定义 PUT 对象 API 支持的 x-amz-acl
请求标头的行为。条件键 s3:VersionId
可用于对 s3:GetObjectVersion
权限授予条件权限,它定义您在 GET Object 请求中设置的查询参数 versionId
的行为。
如果请求包含可使对象公开可读的 x-amz-acl
标头,则以下存储桶策略向两个 Amazon Web Services 账户授予 s3:PutObject
权限。Condition
块使用 StringEquals
条件,并且提供键值对 "s3:x-amz-acl":["public-read"
,以进行评估。在该键值对中,s3:x-amz-acl
是特定于 Amazon S3 的键,如前缀 s3:
所示。
{ "Version":"2012-10-17", "Statement": [ { "Sid":"AddCannedAcl", "Effect":"Allow", "Principal": { "AWS": [ "arn:aws:iam::
Account1-ID
:root", "arn:aws:iam::Account2-ID
:root" ] }, "Action":"s3:PutObject", "Resource": ["arn:aws:s3:::awsexamplebucket1
/*"], "Condition": { "StringEquals": { "s3:x-amz-acl":["public-read"] } } } ] }
重要
并非所有条件对所有操作都有意义。例如,在授予 s3:CreateBucket
Amazon S3 权限的策略上包含 s3:LocationConstraint
条件是有意义的。但是,在授予 s3:GetObject
权限的策略中包含此条件没有意义。Amazon S3 可测试是否存在此类涉及 Amazon S3 特定条件的语义错误。但如果要创建针对 IAM 用户或角色的策略,并且包含了语义上无效的 Amazon S3 条件,则不报告错误,因为 IAM 无法验证 Amazon S3 条件。