

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon S3 的資料完整性保護
<a name="feature-dataintegrity"></a>

**注意**  
如需了解設定頁面配置或解譯以下 **Support AWS SDKs和工具**資料表的說明，請參閱 [了解本指南的設定頁面](settings-reference.md#settingsPages)。

一段時間內， AWS SDKs將資料上傳至 Amazon Simple Storage Service 或從 Amazon Simple Storage Service 下載資料時支援資料完整性檢查。先前，這些檢查是選擇加入。現在，我們預設已使用 CRC 型演算法啟用這些檢查，例如 CRC32 或 CRC64NVME。雖然每個 SDK 或工具都有預設演算法，但您可以選擇不同的演算法。您也可以視需要繼續手動提供上傳的預先計算檢查總和。跨上傳、分段上傳、下載和加密模式的一致行為可簡化用戶端完整性檢查。

 最新版本的 AWS SDKs，並 AWS CLI 自動計算每次上傳的[循環備援檢查 (CRC) 型檢查總](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)和，並將其傳送至 Amazon S3。Amazon S3 會獨立計算伺服器端的檢查總和，並根據提供的值進行驗證，然後再將物件及其檢查總和永久存放在物件的中繼資料中。透過將檢查總和與物件一起存放在中繼資料中，當物件下載時，也可以自動傳回相同的檢查總和，並用於驗證下載。您也可以隨時驗證存放在物件中繼資料中的檢查總和。

 若要進一步了解檢查總和操作、分段上傳或支援的檢查總和演算法清單，請參閱《[Amazon Simple Storage Service 使用者指南》中的在 Amazon S3 中檢查物件完整性](https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html)。 **

 **分段上傳：**

Amazon S3 也為開發人員提供跨單一部分和分段上傳的一致完整物件檢查總和。

以多個部分上傳檔案時，SDKs會計算每個部分的檢查總和。Amazon S3 使用這些檢查總和透過 `UploadPart` API 驗證每個部分的完整性。此外，當您呼叫 `CompleteMultipartUpload` API 時，Amazon S3 會驗證整個檔案的大小和檢查總和。

如果您的 SDK 有 Amazon S3 Transfer Manager 來協助分段上傳，則檢查總和會使用[支援 AWS SDKs和工具](#dataintegrity-sdk-compat)資料表中找到的開發套件特定預設演算法來驗證組件。您可以選擇加入完整的物件檢查總和，方法是`checksum_type`將 設定為 ，`FULL_OBJECT`或選擇使用 CRC64NVME 演算法。

** 如果您使用的是較舊版本的 SDK 或 AWS CLI：**

如果您的應用程式使用 SDK 或工具 2024 年 12 月之前的版本，Amazon S3 仍會在新物件上計算 CRC64NVME 檢查總和，並將其存放在物件中繼資料中以供日後參考。您稍後可以將存放的 CRC 與在您那邊運算的 CRC 進行比較，並確認網路傳輸正確。此外，您仍然可以透過使用 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)或 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)請求提供自己的預先計算檢查總和來手動擴展完整性保護，這是在較舊版本中解決此問題的標準技術。



使用下列項目設定此功能：

**`request_checksum_calculation` - 共用 AWS `config`檔案設定`AWS_REQUEST_CHECKSUM_CALCULATION` - 環境變數`aws.requestChecksumCalculation` - JVM 系統屬性：僅限 Java/Kotlin**  
根據預設，使用者在傳送請求時可以選擇加入計算請求檢查總和。使用者可以選擇任何[可用的檢查總和演算法](https://docs.aws.amazon.com/AmazonS3/latest/API/API_Checksum.html)，做為建置請求的一部分。否則，會使用 SDK 特定的預設演算法。如需每個 SDK 或工具的預設演算法，請參閱 [支援 AWS SDKs和工具](#dataintegrity-sdk-compat)資料表。  
**預設值**：`WHEN_SUPPORTED`  
**有效值**：  
+ **`WHEN_SUPPORTED`** – 當 API 操作支援時，對所有請求承載執行檢查總和驗證，例如資料傳輸到 Amazon S3。
+ **`WHEN_REQUIRED`** – 只有在 API 操作需要時，才會執行檢查總和驗證。

**`response_checksum_validation` - 共用 AWS `config`檔案設定`AWS_RESPONSE_CHECKSUM_VALIDATION` - 環境變數`aws.responseChecksumValidation` - JVM 系統屬性：僅限 Java/Kotlin**  
根據預設，使用者在傳送請求時可以選擇加入回應檢查總和驗證。系統會計算回應承載的檢查總和，並與檢查總和回應標頭進行比較。如果檢查總和驗證失敗，會在讀取承載時向使用者發出錯誤。  
 檢查總和回應標頭也會指出檢查總和的演算法。Amazon S3 用戶端會嘗試驗證支援檢查總和之所有 Amazon S3 API 操作的回應檢查總和。不過，如果軟體開發套件未實作指定的檢查總和演算法，則會略過此驗證。  
**預設值**：`WHEN_SUPPORTED`  
**有效值**：  
+ **`WHEN_SUPPORTED`** – 當 API 操作支援時，對所有回應承載執行檢查總和驗證，例如資料傳輸到 Amazon S3。
+ **`WHEN_REQUIRED`** – 只有在 API 操作支援且發起人已明確啟用操作的檢查總和時，才會執行檢查總和驗證。例如，當呼叫 Amazon S3 `GetObject` API 且 `ChecksumMode` 參數設定為啟用時。

## 支援 AWS SDKs和工具
<a name="dataintegrity-sdk-compat"></a>

下列 SDKs 支援本主題中所述的功能和設定。會記下任何部分例外狀況。 適用於 Java 的 AWS SDK 和 適用於 Kotlin 的 AWS SDK 僅支援任何 JVM 系統屬性設定。

**注意**  
在下表中，「CRT」是指 [AWS 通用執行期 (CRT) 程式庫](common-runtime.md)，可能需要為您的專案新增額外的相依性。


| SDK | 支援 | 預設檢查總和演算法 | 支援的檢查總和演算法 | 備註或更多資訊 | 
| --- | --- | --- | --- | --- | 
| [AWS CLI  ](https://docs.aws.amazon.com/cli/latest/userguide/) v2 | 是 | CRC64NVME | CRC64NVME、CRC32、CRC32C、SHA1、SHA256、xxHash3、xxHash64、xxHash128、SHA512 | 對於 AWS CLI v1，預設演算法和支援的演算法將與 Python (Boto3) 相同。 | 
| [適用於 C\+\+ 的 SDK](https://docs.aws.amazon.com/sdk-for-cpp/latest/developer-guide/) | 是 | CRC64NVME | CRC64NVME、CRC32、CRC32C、SHA1、SHA256、xxHash3、xxHash64、xxHash128、SHA512  |  | 
| [適用於 Go V2 的 SDK (1.x)](https://docs.aws.amazon.com/sdk-for-go/v2/developer-guide/) | 是 | CRC32 | CRC64NVME、CRC32、CRC32C、SHA1、SHA256 |  | 
| [適用於 Go 的 SDK 1.x (V1)](https://docs.aws.amazon.com/sdk-for-go/latest/developer-guide/) | 否 |  |  |  | 
| [適用於 Java 的 SDK 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/) | 是 | CRC32 | CRC32、CRC32C、SHA1、SHA256<br />**僅限透過 CRT：**CRC64NVME、xxHash3、xxHash64、xxHash128、SHA512 |  | 
| [適用於 Java 的 SDK 1.x](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/) | 否 |  |  |  | 
| [適用於 JavaScript 3.x 的 SDK](https://docs.aws.amazon.com/sdk-for-javascript/latest/developer-guide/) | 是 | CRC32 | CRC32、CRC32C、SHA1、SHA256 |  | 
| [適用於 JavaScript 2.x 的 SDK](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/) | 否 |  |  |  | 
| [適用於 Kotlin 的 SDK](https://docs.aws.amazon.com/sdk-for-kotlin/latest/developer-guide/) | 是 | CRC32 | CRC32、CRC32C、SHA1、SHA256 |  | 
| [適用於 .NET 4.x 的 SDK](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/) | 是 | CRC32 | CRC32、CRC32C、SHA1、SHA256、SHA512 |  | 
| [適用於 .NET 3.x 的 SDK](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/) | 是 | CRC32 | CRC32、CRC32C、SHA1、SHA256、SHA512 |  | 
| [適用於 PHP 的 SDK 3.x](https://docs.aws.amazon.com/sdk-for-php/latest/developer-guide/) | 是 | CRC32 | CRC32、SHA1、SHA256<br />**僅限透過 CRT：**CRC32C | awscrt 需要擴充功能才能使用 CRC32C。 | 
| [適用於 Python 的 SDK (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html) | 是 | CRC32 | CRC32、SHA1、SHA256<br />**僅限透過 CRT：**CRC32C、CRC64NVME、xxHash3、xxHash64、xxHash128、SHA512 |  | 
| [適用於 Ruby 的 SDK 3.x](https://docs.aws.amazon.com/sdk-for-ruby/latest/developer-guide/) | 是 | CRC32 | CRC32、SHA1、SHA256<br />**僅限透過 CRT：**CRC64NVME、CRC32C |  | 
| [適用於 Rust 的 SDK](https://docs.aws.amazon.com/sdk-for-rust/latest/dg/) | 是 | CRC32 | CRC64NVME、CRC32、CRC32C、SHA1、SHA256 |  | 
| [適用於 Swift 的 SDK](https://docs.aws.amazon.com/sdk-for-swift/latest/developer-guide/) | 是 | CRC32 | CRC64NVME、CRC32、CRC32C、SHA1、SHA256 | 所有演算法都需要 CRT 相依性。 | 
| [PowerShell V5 的工具](https://docs.aws.amazon.com/powershell/latest/userguide/) | 是 | CRC32 | CRC32、CRC32C、SHA1、SHA256、xxHash3、SHA512 |  | 
| [PowerShell V4 的工具](https://docs.aws.amazon.com/powershell/v4/userguide/) | 是 | CRC32 | CRC32、CRC32C、SHA1、SHA256、SHA512 |  | 