本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon S3 数据完整性保护
注意
要帮助理解设置页面的布局或解释后面的 Su pport by AWS SDK 和工具表,请参阅了解本指南的设置页面。
一段时间以来,在向 Amazon AWS Simple Storage Service 上传数据或从中下载数据时,SDK 支持数据完整性检查。以前,这些支持采用选择加入方式。现在,我们已经使用诸如 CRC32 或 CRC64NVME 之类的 CRC-based 算法默认启用了这些检查。尽管各个 SDK 或工具都有其默认的算法,不过您也可以选择其他的算法。您还可以选择继续手动为上传提供预先计算的校验和。上传、分段上传、下载和加密模式均使用一致的行为,简化了客户端完整性检查的过程。
最新版本的 AWS SDK,并 AWS CLI 自动计算每次上传的基于循环冗余校验 (CRC) 的校验和
要详细了解校验和操作、分段上传或支持的校验和算法列表,请参阅《Amazon Simple Storage Service 用户指南》中的在 Amazon S3 中检查对象完整性。
分段上传:
Amazon S3 还为开发人员提供了涵盖单段上传和分段上传的一致完整对象校验和,。
分段上传文件时,SDK 会计算每个分段的校验和。Amazon S3 使用这些校验和来通过 UploadPart API 验证每个分段的完整性。此外,Amazon S3 会在您调用 CompleteMultipartUpload API 时验证整个文件的大小以及校验和。
如果您的软件开发工具包有 Amazon S3 传输管理器来协助分段上传,则将使用表中的 SDK-specific 默认算法验证各部分的校验和。Support by AWS SDK 和工具您可以通过将 checksum_type 设置为 FULL_OBJECT 或选择使用 CRC64NVME 算法,从而选择启用完整的对象校验和。
如果您使用的是较早版本的 SDK 或 AWS CLI:
如果应用程序使用 2024 年 12 月之前版本的 SDK 或工具,Amazon S3 仍会计算新对象的 CRC64NVME 校验和,并将其存储在对象元数据中以备将来参考。您可以稍后将存储的 CRC 与您计算的 CRC 进行比较,验证网络传输是否正确。此外,您仍然可以通过 PutObject 或 UploadPart 请求提供自己预先计算的校验和来手动扩展完整性保护,这是早期版本中解决此问题的标准方法。
使用以下方法配置此功能:
request_checksum_calculation-共享 AWSconfig文件设置AWS_REQUEST_CHECKSUM_CALCULATION- 环境变量aws.requestChecksumCalculation-JVM 系统属性:仅限 Java/Kotlin-
默认情况下,用户会在发送请求时选择启用请求校验和计算。用户可以在构建请求过程中选择任何一种可用的校验和算法。否则,将使用 SDK-specific 默认算法。有关各个 SDK 或工具的默认算法,请参阅 Support by AWS SDK 和工具表。
默认值:
WHEN_SUPPORTED有效值:
-
WHEN_SUPPORTED:在 API 操作支持时(例如向 Amazon S3 传输数据时)对所有请求有效载荷执行校验和验证。 -
WHEN_REQUIRED:仅在 API 操作要求时才执行校验和验证。
-
response_checksum_validation-共享 AWSconfig文件设置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 S3GetObjectAPI 并且ChecksumMode参数设置为“启用”时。
-
Support by AWS SDK 和工具
以下 SDK 支持本主题中所述的功能和设置。所有部分例外情况均已注明。 适用于 Java 的 AWS SDK 和 AWS SDK for Kotlin 唯一支持任何 JVM 系统属性设置。
注意
在下表中,“CRT”是指 AWS 通用运行时 (CRT) 库,并且可能需要向您的项目添加其他依赖项。
| SDK | 支持 | 默认校验和算法 | 支持的校验和算法 | 备注或更多信息 |
|---|---|---|---|---|
| AWS CLI v2 | 是 | CRC64NVME | CRC64NVME、CRC32、CRC32C、SHA1、SHA256、xxHash3、xxHash64、xxHash128、SHA512 | 对于 AWS CLI v1,默认算法和支持的算法将与 Python (Boto3) 相同。 |
| 适用于 C++ 的 SDK | 是 | CRC64NVME | CRC64NVME、CRC32、CRC32C、SHA1、SHA256、xxHash3、xxHash64、xxHash128、SHA512 | |
| 适用于 Go V2 (1.x) 的 SDK | 是 | CRC32 | CRC64NVME、CRC32、CRC32C、SHA1、SHA256 | |
| 适用于 Go 1.x(V1)的 SDK | 否 | |||
| 适用于 Java 2.x 的 SDK | 是 | CRC32 | CRC32、CRC32C、SHA1、SHA256 仅通过 CRT:CRC64NVME、xxHash3、xxHash64、xxHash128、SHA512 |
|
| 适用于 Java 1.x 的 SDK | 否 | |||
| 适用于 JavaScript 3.x 的软件开发工具包 | 是 | 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、SHA512 | |
| 适用于 .NET 3.x 的 SDK | 是 | CRC32 | CRC32、CRC32C、SHA1、SHA256、SHA512 | |
| 适用于 PHP 3.x 的 SDK | 是 | CRC32 | CRC32、SHA1、SHA256 仅通过 CRT:CRC32C |
需要 awscrt 扩展才能使用 CRC32C。 |
| 适用于 Python (Boto3) 的 SDK | 是 | CRC32 |
CRC32、SHA1、SHA256 仅通过 CRT:CRC32C、CRC64NVME、xxHash3、xxHash64、xxHash128、SHA512 |
|
| 适用于 Ruby 3.x 的 SDK | 是 | CRC32 | CRC32、SHA1、SHA256 仅通过 CRT:CRC64NVME、CRC32C |
|
| 适用于 Rust 的 SDK | 是 | CRC32 | CRC64NVME、CRC32、CRC32C、SHA1、SHA256 | |
| 适用于 Swift 的 SDK | 是 | CRC32 | CRC64NVME、CRC32、CRC32C、SHA1、SHA256 | 所有算法都需要 CRT 依赖项。 |
| 适用于 PowerShell V5 的工具 | 是 | CRC32 | CRC32、CRC32C、SHA1、SHA256、xxHash3、SHA512 | |
| 适用于 PowerShell V4 的工具 | 是 | CRC32 | CRC32、CRC32C、SHA1、SHA256、SHA512 |