Amazon S3 数据完整性保护 - Amazon SDK 和工具
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon S3 数据完整性保护

注意

如需获得相关帮助,以了解设置页面的布局或解释后面的 Amazon SDK 和工具支持表,请参阅了解本指南的设置页面

Amazon SDK 在向 Amazon Simple Storage Service 上传数据或从中下载数据时提供的数据完整性检查支持已有一段时间。以前,这些支持采用选择加入方式。现在,我们默认启用这些检查,并使用基于 CRC 的算法(例如 CRC32 或 CRC64NVME)。尽管各个 SDK 或工具都有其默认的算法,不过您也可以选择其他的算法。您还可以选择继续手动为上传提供预先计算的校验和。上传、分段上传、下载和加密模式均使用一致的行为,简化了客户端完整性检查的过程。

最新版本的 Amazon SDK 和 Amazon CLI 会为每次上传自动计算基于循环冗余校验(CRC)的校验和,并将其发送到 Amazon S3。Amazon S3 会在服务器端独立计算校验和,并使用提供的值对其进行验证,然后才会将对象及其校验和持久地存储在对象的元数据中。通过将校验和与对象一起存储在元数据中,下载对象时将可以自动返回相同的校验和并用于验证下载。您也可以随时验证存储在对象元数据中的校验和。

要详细了解校验和操作、分段上传或支持的校验和算法列表,请参阅《Amazon Simple Storage Service 用户指南》中的在 Amazon S3 中检查对象完整性

分段上传:

Amazon S3 还为开发人员提供了涵盖单段上传和分段上传的一致完整对象校验和,。

分段上传文件时,SDK 会计算每个分段的校验和。Amazon S3 使用这些校验和来通过 UploadPart API 验证每个分段的完整性。此外,Amazon S3 会在您调用 CompleteMultipartUpload API 时验证整个文件的大小以及校验和。

如果您的 SDK 使用 Amazon S3 Transfer Manager 来协助分段上传,则将使用 Amazon SDK 和工具支持 表中特定于 SDK 的默认算法来验证分段的校验和。您可以通过将 checksum_type 设置为 FULL_OBJECT 或选择使用 CRC64NVME 算法,从而选择启用完整的对象校验和。

如果您使用的是较早版本的 SDK 或 Amazon CLI:

如果应用程序使用 2024 年 12 月之前版本的 SDK 或工具,Amazon S3 仍会计算新对象的 CRC64NVME 校验和,并将其存储在对象元数据中以备将来参考。您可以稍后将存储的 CRC 与您计算的 CRC 进行比较,验证网络传输是否正确。此外,您仍然可以通过 PutObjectUploadPart 请求提供自己预先计算的校验和来手动扩展完整性保护,这是早期版本中解决此问题的标准方法。

使用以下方法配置此功能:

request_checksum_calculation - 共享 Amazon config 文件设置
AWS_REQUEST_CHECKSUM_CALCULATION - 环境变量
aws.requestChecksumCalculation:JVM 系统属性,仅适用于 Java/Kotlin

默认情况下,用户会在发送请求时选择启用请求校验和计算。用户可以在构建请求过程中选择任何一种可用的校验和算法。如果用户未进行选择,则将使用 SDK 特定的默认算法。有关各个 SDK 或工具的默认算法,请参阅 Amazon SDK 和工具支持表。

默认值:WHEN_SUPPORTED

有效值:

  • WHEN_SUPPORTED:在 API 操作支持时(例如向 Amazon S3 传输数据时)对所有请求有效载荷执行校验和验证。

  • WHEN_REQUIRED:仅在 API 操作要求时才执行校验和验证。

response_checksum_validation - 共享 Amazon config 文件设置
AWS_RESPONSE_CHECKSUM_VALIDATION - 环境变量
aws.responseChecksumValidation:JVM 系统属性,仅适用于 Java/Kotlin

默认情况下,用户在发送请求时会选择启用执行响应校验和验证。计算响应有效载荷的校验和,并与校验和响应标头进行比较。如果校验和验证失败,则在读取有效载荷时会向用户发出错误。

校验和响应标头还会指示校验和的算法。对于所有支持校验和的 Amazon S3 API 操作,Amazon S3 客户端都会尝试验证响应校验和。但如果 SDK 尚未实现指定的校验和算法,则会跳过此验证。

默认值:WHEN_SUPPORTED

有效值:

  • WHEN_SUPPORTED:在 API 操作支持时(例如向 Amazon S3 传输数据时)对所有响应有效载荷执行校验和验证。

  • WHEN_REQUIRED:仅在 API 操作支持且调用方已为该操作显式启用校验和时,才会执行校验和验证。例如,调用 Amazon S3 GetObject API 并且 ChecksumMode 参数设置为“启用”时。

Amazon SDK 和工具支持

以下 SDK 支持本主题中所述的功能和设置。所有部分例外情况均已注明。任何 JVM 系统属性设置都仅支持 适用于 Java 的 Amazon SDK 和 适用于 Kotlin 的 Amazon SDK。

注意

在下表中,“CRT”是指 Amazon 通用运行时系统 (CRT) 库,并且可能需要向您的项目添加其他依赖项。

SDK 支持 默认校验和算法 支持的校验和算法 备注或更多信息
Amazon CLI v2 CRC64NVME CRC64NVME、CRC32、CRC32C、SHA1、SHA256 对于 Amazon CLI v1,默认算法和支持的算法将与 Python(Boto3)相同。
适用于 C++ 的 SDK CRC64NVME CRC64NVME、CRC32、CRC32C、SHA1、SHA256
适用于 Go V2 (1.x) 的 SDK CRC32 CRC64NVME、CRC32、CRC32C、SHA1、SHA256
适用于 Go 1.x(V1)的 SDK
适用于 Java 2.x 的 SDK CRC32 CRC64NVME(仅通过 CRT)、CRC32、CRC32C、SHA1、SHA256
适用于 Java 1.x 的 SDK
适用于 JavaScript 3.x 的 SDK CRC32 CRC32、CRC32C、SHA1、SHA256
适用于 JavaScript 2.x 的 SDK
适用于 Kotlin 的 SDK CRC32 CRC32、CRC32C、SHA1、SHA256
适用于 .NET 4.x 的 SDK CRC32 CRC32、CRC32C、SHA1、SHA256
适用于 .NET 3.x 的 SDK CRC32 CRC32、CRC32C、SHA1、SHA256
适用于 PHP 3.x 的 SDK CRC32 CRC32、CRC32C(仅通过 CRT)、SHA1、SHA256 需要 awscrt 扩展才能使用 CRC32C。
适用于 Python (Boto3) 的 SDK CRC32 CRC64NVME(仅通过 CRT)、CRC32、CRC32C(仅通过 CRT)、SHA1、SHA256
适用于 Ruby 3.x 的 SDK CRC32 CRC64NVME(仅通过 CRT)、CRC32、CRC32C(仅通过 CRT)、SHA1、SHA256
适用于 Rust 的 SDK CRC32 CRC64NVME、CRC32、CRC32C、SHA1、SHA256
适用于 Swift 的 SDK CRC32 CRC64NVME、CRC32、CRC32C、SHA1、SHA256 所有算法都需要 CRT 依赖项。
Tools for PowerShell V5 CRC32 CRC32、CRC32C、SHA1、SHA256
Tools for PowerShell V4 CRC32 CRC32、CRC32C、SHA1、SHA256