View a markdown version of this page

为对象添加注释 - Amazon Simple Storage Service

为对象添加注释

使用注释可将命名的数据有效载荷附加到您的 Amazon S3 对象。每个注释都是一个大小介于 1 字节到 1 MiB 之间的自定义元数据有效载荷,您无需修改对象本身即可创建、检索、列出和删除它。

您最多可以将 1000 个注释与一个对象版本关联。每个注释都有唯一的名称,可以存储结构化数据,例如人工智能生成的标签、文档上下文、处理结果或合规性记录。

常见使用案例包括将机器学习推理结果、人工智能生成的嵌入内容、内容审核标签、文档分类输出、数据血统和审计跟踪记录、诸如 PII 标志或保留策略等合规性标签、医学影像元数据、数字资产版权信息以及 ETL 管道状态与源对象一起存储。

您可以使用专用的 API 操作管理注释,因此无需重新上传对象,即可添加或更新元数据。

您可以在 S3 元数据配置中启用注释表,以便使用 Athena 和其它分析服务,对注释数据进行大规模查询。S3 元数据将注释数据存储在完全托管式 Apache Iceberg 表中,Amazon S3 自动使这些数据保持最新。有关更多信息,请参阅 使用 S3 元数据表发现您的数据

可以在所有商业 AWS 区域和中国区域(北京和宁夏)中使用注释。注释在中东(阿联酋)和中东(巴林)区域中不可用。S3 元数据注释表在所有提供 S3 元数据的区域中均可用。

何时使用注释与对象标签

使用以下比较来确定注释或对象标签是否最适合您的使用案例。

特征 对象标签 注释
每个对象的最大值 每个对象版本 10 个 每个对象版本 1000 个
最大大小 128 个字符(键)+ 256 个字符(值) 512 字节(名称)+ 1 MiB(有效载荷)
数据格式 键值字符串对 任何 UTF-8 文本(JSON、XML、YAML 等)
可变性 是(PutObjectTagging) 是(PutObjectAnnotation)
在上传期间设置 是(PutObject、POST) 否(仅限 PutObjectAnnotation,上传后)

当您需要存储结构化数据(例如 JSON 或 XML)、大于 256 个字符的有效载荷,或对于每个对象需要存储超过 10 个元数据条目时,请选择注释。当您需要 IAM 策略集成、Amazon S3 生命周期规则筛选或成本分配报告时,请选择对象标签。

针对注释的 API 操作

Amazon S3 支持使用以下 API 操作来处理注释:

  • PutObjectAnnotation:创建或覆盖对象上的注释。您可以在请求中指定注释名称和有效载荷。

  • GetObjectAnnotation:按名称返回特定注释的有效载荷。

  • ListObjectAnnotations:返回对象上注释的列表。响应包括每个注释的名称、大小、ETag 和上次修改日期。

  • DeleteObjectAnnotation:按名称移除特定的注释。

Amazon S3 还支持使用以下 API 操作来处理注释:

  • CopyObject:默认情况下从源对象复制注释。您可以指定 x-amz-annotation-directive 标头来控制是复制注释 (COPY) 还是排除注释 (EXCLUDE)。

  • UpdateBucketMetadataAnnotationTableConfiguration:在 S3 元数据配置中启用或禁用注释表。

  • CreateBucketMetadataConfiguration:在创建 S3 元数据配置时,接受一个新的 AnnotationTableConfiguration 参数以启用注释表。

  • GetBucketMetadataConfiguration:在响应中返回 AnnotationTableConfigurationResult,这表示注释表的当前状态。

注释限制

每个对象版本最多支持 1000 个注释。与对象版本关联的注释必须具有唯一的注释名称。以下限制适用:

  • 注释名称的长度可达 512 字节(UTF-8),具体取决于下面的命名规则。

  • 注释有效载荷的大小必须介于 1 字节到 1 MiB 之间。

  • 每个对象的总注释存储空间可能多达 1 GiB(1000 个注释,每个 1 MiB)。

  • 支持的校验和算法:CRC32、CRC32C、CRC64NVME、SHA1、SHA256、SHA512、XXHASH64、XXHASH3、XXHASH128。

注释命名规则

注释名称必须满足以下要求:

  • 长度必须在 1 到 512 字节之间。

  • 只能包含以下字符:字母(任何语言)、数字(0-9)、下划线 (_)、句点 (.) 和连字符 (-)。

  • 不能以 awss3 开头(不区分大小写)。例如,awsAWSs3S3 都是保留前缀。

  • 不能为空或仅包含空格。

加密

注释使用与父对象相同的加密配置自动进行静态加密。加密类型继承自父对象,而不是存储桶默认值。

  • SSE-S3:如果父对象使用具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3),则注释使用 SSE-S3 进行加密。如果父对象未配置服务器端加密,则注释默认使用 SSE-S3 进行加密。

  • SSE-KMS:如果父对象使用具有 AWS KMS 密钥的服务器端加密(SSE-KMS),则注释使用相同的 KMS 密钥进行加密。这同时适用于客户自主管理型密钥和 AWS 托管式密钥。支持 S3 存储桶密钥。

  • DSSE-KMS:如果父对象使用具有 AWS KMS 密钥的双层服务器端加密(DSSE-KMS),则注释通过使用相同密钥的 DSSE-KMS 进行加密。

  • SSE-C:注释不支持具有客户提供的密钥的服务器端加密(SSE-C)。如果您尝试向使用 SSE-C 加密的对象添加注释,Amazon S3 将返回错误。

校验和

使用 PutObjectAnnotation 上传注释时,可以提供校验和来验证数据完整性。注释的校验和算法独立于父对象的校验和算法。

使用 CopyObject 复制对象时,Amazon S3 将保留源中的注释校验和值。如果您在复制请求中指定了不同的校验和算法,则新算法将同时应用于对象及其注释。

支持的算法:CRC32、CRC32C、CRC64NVME、SHA1、SHA256、SHA512、XXHASH64、XXHASH3、XXHASH128。

如果注释没有指定的校验和算法或校验和值,Amazon S3 会使用 CRC-64/NVME 算法来计算注释的校验和值。

版本控制行为

注释附加到特定的对象版本。

一个对象版本的注释独立于同一对象的其它版本上的注释。创建新版本不会复制先前版本中的注释。在一个版本上删除或添加注释不会影响其它版本上的注释。覆盖对象会将其注释替换为新版本所具有的任何注释(如果没有,则实际上会删除注释)。

添加、更新或移除注释不会修改父对象的 ETag。

在不受版本控制的存储桶中,如果您删除或覆盖对象,则注释会随之删除。

在受版本控制的存储桶中,以下行为适用:

  • 简单的 DELETE 请求(不指定版本 ID)会创建删除标记,但会保留基础版本上的注释。

  • 删除特定版本 ID 会删除该版本和所有关联的注释。

  • 注释不是独立进行版本控制的。当您覆盖同名的注释时,Amazon S3 会替换之前的值,而不创建新的对象版本。

重要

注释删除是永久性且不可逆的,即使在受版本控制的存储桶中也是如此。与受版本控制的存储桶中的对象不同,注释没有删除标记或版本历史记录。一旦删除注释,就无法恢复。

复制行为和一致性

当您使用 CopyObject API 复制对象(对于小于 5 GiB 的对象)时,Amazon S3 会在单个操作中将注释与对象一起复制。

当您使用分段上传来复制对象时(例如,当 AWS CLI 或 AWS SDK 使用传输管理器来传输大于约 8 MB 的对象时),默认情况下不会复制注释。要包含注释,请在 AWS CLI 或等效的 SDK 配置中指定 --copy-props all。通过这一选择加入,SDK 读取源注释,完成分段上传,然后将每个注释写入目标。在上传完成与最后一次注释写入之间,目标对象存在,但此时没有其所有注释。

注意事项

  • 您不能在 PutObject 过程或分段上传请求中添加注释。要向对象添加注释,请在上传对象后调用 PutObjectAnnotation。要将现有对象及其注释复制到新位置,请将 CopyObject 与默认注释指令结合使用。

  • 要批量添加或更新多个对象的注释,请使用批量操作来调用对每个对象调用 PutObjectAnnotation 的 Lambda 函数。有关更多信息,请参阅 调用 AWS Lambda 函数

  • 以下功能不支持注释:S3 清单报告、API Gateway、S3 Storage Lens 存储统计管理工具、Amazon S3 文件网关、Amazon FSx、S3 on Outposts、S3 Express One Zone(目录存储桶)和 Amazon S3 Files。

  • 为确保您正在为对象的当前版本而不是已被覆盖的版本编写注释,请将 x-amz-object-if-match 条件标头与 PutObjectAnnotationDeleteObjectAnnotation 结合使用。此标头会验证父对象的 ETag,以确认自调用方上次读取该对象以来该对象尚未被覆盖。添加标签或注释不会更改 ETag。

  • 您不能根据是否存在其它注释来有条件地添加注释。x-amz-object-if-match 标头仅验证父对象的 ETag,而不验证注释状态。

  • 注释有效载荷必须是有效的 UTF-8 编码文本。要存储二进制数据,请在编写注释之前使用 Base64 对数据进行编码。

  • 您可以对任何存储类别的对象(包括 S3 Glacier 和 S3 Glacier Deep Archive)调用注释 API 操作(PutObjectAnnotationGetObjectAnnotationListObjectAnnotationsDeleteObjectAnnotation),而无需先还原对象。

其他配置

本节解释注释如何与其它配置相关。

复制

如果您在存储桶上配置了 S3 复制,Amazon S3 将自动复制注释。每个注释都独立复制。有关更多信息,请参阅 Amazon S3 复制什么内容?

要复制注释,请在您的复制 IAM 角色中向源存储桶权限添加 s3:GetObjectVersionAnnotationForReplication。有关更多信息,请参阅 为实时复制设置权限

要在支持对象复制的同时防止注释复制,请在复制角色策略中为 s3:ReplicateObjectAnnotation 添加拒绝语句。对象复制继续成功;只阻止注释复制。

事件通知

Amazon S3 可以在创建、更新或删除注释时发送事件通知。您可以配置以下事件类型:

  • s3:ObjectAnnotation:Put:创建或更新注释时发送。

  • s3:ObjectAnnotation:Delete:删除注释时发送。

有关更多信息,请参阅 事件通知类型和目标