Amazon S3 数据完整性保护
注意
如需获得相关帮助,以了解设置页面的布局或解释后面的 AWS SDK 和工具支持表,请参阅了解本指南的设置页面。
AWS SDK 在向 Amazon Simple Storage Service 上传数据或从中下载数据时提供的数据完整性检查支持已有一段时间。以前,这些支持采用选择加入方式。现在,我们默认启用这些检查,并使用基于 CRC 的算法(例如 CRC32 或 CRC64NVME)。尽管各个 SDK 或工具都有其默认的算法,不过您也可以选择其他的算法。您还可以选择继续手动为上传提供预先计算的校验和。上传、分段上传、下载和加密模式均使用一致的行为,简化了客户端完整性检查的过程。
最新版本的 AWS SDK 和 AWS CLI 会为每次上传自动计算基于循环冗余校验(CRC)的校验和
要详细了解校验和操作、分段上传或支持的校验和算法列表,请参阅《Amazon Simple Storage Service 用户指南》中的在 Amazon S3 中检查对象完整性。
分段上传:
Amazon S3 还为开发人员提供了涵盖单段上传和分段上传的一致完整对象校验和,。
分段上传文件时,SDK 会计算每个分段的校验和。Amazon S3 使用这些校验和来通过 UploadPart API 验证每个分段的完整性。此外,Amazon S3 会在您调用 CompleteMultipartUpload API 时验证整个文件的大小以及校验和。
如果您的 SDK 使用 Amazon S3 Transfer Manager 来协助分段上传,则将使用 AWS SDK 和工具支持 表中特定于 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 特定的默认算法。有关各个 SDK 或工具的默认算法,请参阅 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参数设置为“启用”时。
-
AWS SDK 和工具支持
以下 SDK 支持本主题中所述的功能和设置。所有部分例外情况均已注明。任何 JVM 系统属性设置都仅支持 适用于 Java 的 AWS SDK 和 适用于 Kotlin 的 AWS SDK。
注意
在下表中,“CRT”是指 AWS 通用运行时系统 (CRT) 库,并且可能需要向您的项目添加其他依赖项。
| SDK | 支持 | 默认校验和算法 | 支持的校验和算法 | 备注或更多信息 |
|---|---|---|---|---|
| AWS CLI v2 | 是 | CRC64NVME | CRC64NVME、CRC32、CRC32C、SHA1、SHA256 | 对于 AWS 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 |