Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

对象标签

利用对象标签,您可以对存储进行分类。每个标签都是一个键-值对。请考虑以下标签示例:

  • 假设某个对象包含受保护医疗信息 (PHI) 数据。您可以使用以下键-值对标记该对象,如下所示:

    Copy
    PHI=True

    或者

    Copy
    Classification=PHI
  • 假设您将项目文件存储在 S3 存储桶中。您可以使用一个名为 Project 的键和一个值标记这些对象,如下所示:

    Copy
    Project=Blue
  • 您可以将多个标签添加到一个对象,如下所示:

    Copy
    Project=x Classification=confidential

您可以将标签添加到新对象 (当您上传新对象时),也可以将标签添加到现有对象。请注意以下几点:

  • 您最多可以将 10 个标签与对象关联。与对象关联的标签必须具有唯一的标签键。

  • 标签键的长度最大可以为 128 个 Unicode 字符,标签值的长度最大可以为 256 个 Unicode 字符。

  • 键和值区分大小写。

对象键名称前缀还使您可以对存储进行分类,但基于前缀的分类是一维的。请考虑以下对象键名称:

Copy
photos/photo1.jpg project/projectx/document.pdf project/projecty/document2.pdf

这些键名称具有前缀 photos/project/projectx/project/projecty/。这些前缀支持一维分类。即,一个前缀下的一切都属于一个类别。例如,前缀 project/projectx 可确定与项目 x 相关的所有文档。

利用标签,您现在获得了另一个维度。如果您希望 photo1 属于项目 x 类别,则可以相应地标记该对象。除了数据分类之外,标签还提供其他好处。例如,

  • 对象标签支持权限的精细访问控制。例如,您可以向一个 IAM 用户授予仅读取带有特定标签的对象的权限。

  • 对象标签支持精细的对象生命周期管理,在其中,除了在生命周期规则中指定键名称前缀之外,还可以指定基于标签的筛选条件。

  • 您还可以自定义 Amazon CloudWatch 指标和 AWS CloudTrail 日志以按特定标签筛选条件显示信息。以下各节提供了详细信息。

重要

尽管使用标签来标记包含机密数据 (如个人身份信息 (PII) 或受保护医疗信息 (PHI)) 的对象是可以接受的,但标签本身不应包含任何机密信息。

与对象标签相关的 API 操作

Amazon S3 支持特定于对象标签的以下 API 操作:

对象 API 操作

  • PUT Object 标签 - 替换对象上的标签。您可以在请求正文中指定标签。 使用此 API 的对象标签管理有两个不同的情形。

    • 对象没有标签 - 利用此 API,您可以将一组标签添加到某个对象 (该对象没有以前的标签)。

    • 对象有一组现有标签 - 要修改现有标签,您必须先检索现有标签集,在客户端侧修改它,然后使用此 API 替换它。如果您发送带有空标签集的此请求,S3 将删除对象上的现有标签集。

     

  • GET Object 标签 - 返回与某个对象关联的标签集。Amazon S3 将在响应正文中返回对象标签。

     

  • DELETE 对象标签 - 删除与某个对象关联的标签集。

支持标签的其他 API 操作

  • PUT Object - 您在创建对象时可以指定标签。您将使用 x-amz-tagging 请求标头指定标签。

     

  • GET Object - Amazon S3 不会返回标签集,而会返回 x-amz-tag-count 标头中的对象标签计数 (仅当请求者有权读取标签时),因为标头响应大小限制为 8 K 个字节。如果要查看标签,您应该再提出一个 GET Object 标签 API 操作请求。

     

  • POST Object - 您可以在 POST 请求中指定标签。

    只要请求中的标签不超过 8 K 个字节的 HTTP 请求标头大小限制,您就可以使用 PUT Object API 创建带标签的对象。如果您指定的标签超过了标头大小限制,您可以使用将标签包含在正文中的此 POST 方法。

     

  • PUT Object - Copy - 您可以在请求中指定 x-amz-tagging-directive 以指示 Amazon S3 复制 (默认行为) 标签或将标签替换为请求中提供的一组新标签。

请注意以下几点:

  • 标签采用了最终一致性模型。也就是说,在将标签添加到某个对象后,如果您很快尝试检索标签,您可能获得该对象上的旧标签 (如果有)。但是,后续调用可能提供更新后的标签。

对象标签和其他信息

本节介绍对象标签如何与其他配置关联。

对象标签和生命周期管理

在存储桶生命周期配置中,您可以指定筛选条件以选择该规则适用的一部分对象。您可以基于键名称前缀、对象标签或两者指定筛选条件。

假设您将照片 (原始格式和已完成格式) 存储在 Amazon S3 存储桶中。您可以按下面所示标记这些对象:

Copy
phototype=raw or phototype=finished

您可能考虑有时候在创建原始照片后将其存档到 Amazon Glacier。您可以在生命周期规则中配置一个筛选条件,用于确定一部分包含特定标签 (phototype=raw) 且带有键名称前缀 (photos/) 的对象。

有关更多信息,请参阅 对象生命周期管理

对象标签和跨区域复制 (CRR)

如果您在存储桶上配置了跨区域复制 (CRR),Amazon S3 将复制标签,前提是您向 S3 授予了读取标签的权限。有关更多信息,请参阅 如何设置跨区域复制

对象标签和分段上传

当使用分段上传 API 操作创建对象时,您可以仅在完成分段上传后 (即,在对象创建后) 才将标签添加到对象。您可以使用 PUT Object 标签 API 操作将标签添加到现有对象。

对象标签和访问控制策略

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

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

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

     

    注意

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

     

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

     

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

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

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

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

Copy
security : public

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

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

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

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

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws-cn:s3:::examplebucket/*" ], "Condition": { "ForAllValues:StringLike": { "s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] } } } ] }

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

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws-cn:s3:::examplebucket/*" ], "Condition": { "ForAllValues:StringLike": { "s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] }, "ForAnyValue:StringLike": { "s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] } } } ] }

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

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

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

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws-cn:s3:::examplebucket/*" ], "Condition": { "StringEquals": { "s3:RequestObjectTag/Project": "X" } } } ] }

相关主题

管理对象标签