标签和访问控制策略
您还可以使用权限策略(桶和用户策略)管理对象标签相关权限。有关策略操作,请参阅以下主题:
对象标签支持用于管理权限的精细访问控制。您可以基于对象标签授予条件权限。Amazon S3 支持以下条件键,这些键可用于授予基于对象标签的条件权限:
-
s3:ExistingObjectTag/
- 使用此条件键可验证现有对象标签是否有特定标签键和值。<tag-key>
注意
当授予
PUT Object
和DELETE Object
操作的权限时,此条件键不受支持。也就是说,您无法创建这样一个策略:允许或拒绝用户基于对象的现有标签删除或覆盖该对象。 -
s3:RequestObjectTagKeys
- 使用此条件键可限制要在对象上允许的标签键。当使用 PutObjectTagging 和 PutObject 以及 POST 对象请求将标签添加到对象时,这很有用。 -
s3:RequestObjectTag/
- 使用此条件键可限制要在对象上允许的标签键和值。当使用 PutObjectTagging 和 PutObject 以及 POST 桶请求将标签添加到对象时,这很有用。<tag-key>
有关特定于 Amazon S3 服务的条件键的完整列表,请参阅 使用条件键的存储桶策略示例。以下权限策略说明了对象标签如何支持精细访问权限管理。
例 1:允许用户仅读取具有特定标签和键值的对象
以下权限策略限制用户只能读取具有 environment: production
标签键和值的对象。请注意,该策略使用 s3:ExistingObjectTag
条件键来指定标签键和值。
{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": [ "arn:aws:iam::
111122223333
:role/JohnDoe
" ] }, "Effect": "Allow", "Action": ["s3:GetObject", "s3:GetObjectVersion"], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket
/*", "Condition": { "StringEquals": {"s3:ExistingObjectTag/environment": "production"} } } ] }
例 2:限制用户可以添加哪些对象标签键
以下权限策略将向用户授予执行 s3:PutObjectTagging
操作的权限,这使用户可以将标签添加到现有对象。条件使用 s3:RequestObjectTagKeys
条件键指定允许的标签键,例如 Owner
或 CreationDate
。有关更多信息,请参阅《IAM 用户指南》中的创建测试多个键值的条件。
该策略确保在请求中指定的每个标签键都是授权的标签键。条件中的 ForAnyValue
限定符确保请求中必须至少存在指定的值之一。
{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::
111122223333
:role/JohnDoe
" ] }, "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
/*" ], "Condition": {"ForAnyValue:StringEquals": {"s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] } } } ] }
例 3:在允许用户添加对象标签时需要特定的标签键和值
以下示例策略将向用户授予执行 s3:PutObjectTagging
操作的权限,这使用户可以将标签添加到现有对象。条件要求用户包含值设置为
的特定标签键(如 X
)。Project
{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::
111122223333
:user/JohnDoe
" ] }, "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
/*" ], "Condition": {"StringEquals": {"s3:RequestObjectTag/Project
": "X
" } } } ] }