标签和访问控制策略 - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

欢迎使用新的 Amazon S3 用户指南! Amazon S3 用户指南结合了以下三个已停用的指南中的信息和说明:Amazon S3 开发人员指南Amazon S3 控制台用户指南Amazon S3 入门指南

标签和访问控制策略

您还可以使用权限策略(存储桶和用户策略)管理对象标签相关权限。有关策略操作,请参阅以下主题:

对象标签支持用于管理权限的精细访问控制。您可以基于对象标签授予条件权限。Amazon S3 支持以下条件键,这些键可用于授予基于对象标签的条件权限:

  • s3:ExistingObjectTag/<tag-key> - 使用此条件键可验证现有对象标签是否有特定标签键和值。

    注意

    当授予 PUT ObjectDELETE Object 操作的权限时,此条件键不受支持。也就是说,您无法创建这样一个策略:允许或拒绝用户基于对象的现有标签删除或覆盖该对象。

  • s3:RequestObjectTagKeys - 使用此条件键可限制要在对象上允许的标签键。当使用 PutObjectTagging 和 PutObject 以及 POST 对象请求将标签添加到对象时,这很有用。

  • s3:RequestObjectTag/<tag-key> - 使用此条件键可限制要在对象上允许的标签键和值。当使用 PutObjectTagging 和 PutObject 以及 POST 存储桶请求将标签添加到对象时,这很有用。

有关特定于 Amazon S3 服务的条件键的完整列表,请参阅 Amazon S3 条件键示例。以下权限策略说明了对象标签如何支持精细访问权限管理。

例 1: 允许用户仅读取具有特定标签的对象

以下权限策略将向用户授予读取对象的权限,但条件将读取权限限制为只有具有以下特定标签键和值的对象。

security : public

请注意,该策略使用 Amazon S3 条件键 s3:ExistingObjectTag/<tag-key> 来指定键和值。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Principal": "*", "Condition": { "StringEquals": {"s3:ExistingObjectTag/security": "public" } } } ] }

例 2: 允许用户添加对允许的标签键有限制的对象标签

以下权限策略将向用户授予执行 s3:PutObjectTagging 操作的权限,这使用户可以将标签添加到现有对象。条件限制了用户可使用的标签键。条件使用 s3:RequestObjectTagKeys 条件键指定一组标签键。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::awsexamplebucket1/*" ], "Principal":{ "CanonicalUser":[ "64-digit-alphanumeric-value" ] }, "Condition": { "ForAllValues:StringLike": { "s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] } } } ] }

该策略确保了标签集 (如果已在请求中指定) 包含指定的键。用户可以在 PutObjectTagging 中发送空标签集,这是该策略允许的 (请求中的空标签集将删除对象上的任何现有标签)。如果您要阻止用户删除标签集,则可以添加另一个条件来确保用户至少提供一个值。条件中的 ForAnyValue 确保了请求中必须至少存在一个值。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::awsexamplebucket1/*" ], "Principal":{ "AWS":[ "arn:aws:iam::account-number-without-hyphens:user/username" ] }, "Condition": { "ForAllValues:StringLike": { "s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] }, "ForAnyValue:StringLike": { "s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] } } } ] }

有关更多信息,请参阅《IAM 用户指南》中的创建测试多个键值的条件(集合运算)

例 3: 允许用户添加包含特定标签键和值的对象标签

以下用户策略将向用户授予执行 s3:PutObjectTagging 操作的权限,这使用户可以在现有对象上添加标签。条件要求用户包含值设置为 Project 的特定标签 (X)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::awsexamplebucket1/*" ], "Principal":{ "AWS":[ "arn:aws:iam::account-number-without-hyphens:user/username" ] }, "Condition": { "StringEquals": { "s3:RequestObjectTag/Project": "X" } } } ] }