Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)

对象标签

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

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

    PHI=True

    或者

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

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

    Project=x Classification=confidential

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

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

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

  • 键和值区分大小写。

  • 有关标签限制的更多信息,请参阅用户定义的标签限制

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

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

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

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

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

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

  • 使用 Amazon S3 分析时,您可以配置筛选条件,以便按对象标签、键名前缀或前缀和标签的组合对对象进行分组以进行分析。

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

重要

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

要使用单个请求恢复向多个 Amazon S3 对象添加对象标签集,您可以使用 Amazon S3 批量操作。您为 Amazon S3 批处理操作提供了要操作的对象列表。Amazon S3 批处理操作调用相应的 API 来执行指定的操作。单个 Amazon S3 批处理作业可对包含 EB 级数据的数十亿个对象执行指定操作。

Amazon S3 批处理操作可跟踪进度、发送通知并存储所有操作的详细完成报告,从而提供完全托管的、可审核的无服务器体验。您可以通过 AWS 管理控制台、AWS CLI、AWS 开发工具包或 REST API 使用 Amazon S3 批处理操作。有关更多信息,请参阅基础知识:Amazon S3 批量操作作业

与对象标签相关的 API 操作

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

对象 API 操作

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

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

    • 对象有一组现有标签 – 要修改现有标签集,您必须先检索现有标签集,在客户端侧修改它,然后使用此 API 替换它。

      注意

      如果您发送带有空标签集的此请求,Amazon S3 将删除对象上的现有标签集。如果您使用此方法,则将需为套餐 1 请求 (PUT) 付费。有关更多信息,请参阅 Amazon S3 定价

      DELETE 对象标记请求优先进行,因为它可获得相同的结果而不会产生费用。

     

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

     

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

支持标签的其他 API 操作

  • PUT ObjectInitiate Multipart Upload– 您可以在创建对象时指定标签。您将使用 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 存储桶中。您可以按下面所示标记这些对象。

phototype=raw or phototype=finished

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

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

对象标记和复制

如果您在存储桶上配置了复制,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 服务的条件键的完整列表,请参阅可用条件键。以下权限策略说明了对象标签如何支持精细访问权限管理。

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

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

security : public

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/*" ], "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:::examplebucket/*" ], "Condition": { "ForAllValues:StringLike": { "s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] } } } ] }

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::examplebucket/*" ], "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:::examplebucket/*" ], "Condition": { "StringEquals": { "s3:RequestObjectTag/Project": "X" } } } ] }

相关主题

管理对象标签