View a markdown version of this page

Amazon S3 的資料完整性保護 - AWS SDKs和工具

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

Amazon S3 的資料完整性保護

注意

如需了解設定頁面配置或解譯以下 Support AWS SDKs和工具資料表的說明,請參閱 了解本指南的設定頁面

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

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

若要進一步了解檢查總和操作、分段上傳或支援的檢查總和演算法清單,請參閱《Amazon Simple Storage Service 使用者指南》中的在 Amazon S3 中檢查物件完整性

分段上傳:

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

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

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

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

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

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

request_checksum_calculation - 共用 AWS config檔案設定
AWS_REQUEST_CHECKSUM_CALCULATION - 環境變數
aws.requestChecksumCalculation - JVM 系統屬性:僅限 Java/Kotlin

根據預設,使用者在傳送請求時可以選擇加入計算請求檢查總和。使用者可以選擇任何可用的檢查總和演算法,做為建置請求的一部分。否則,會使用 SDK 特定的預設演算法。如需每個 SDK 或工具的預設演算法,請參閱 支援 AWS SDKs和工具資料表。

預設值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和工具

下列 SDKs 支援本主題中所述的功能和設定。會記下任何部分例外狀況。 適用於 Java 的 AWS SDK 和 適用於 Kotlin 的 AWS SDK 僅支援任何 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 的 SDK (1.x) CRC32 CRC64NVME、CRC32、CRC32C、SHA1、SHA256
適用於 Go 的 SDK 1.x (V1)
適用於 Java 的 SDK 2.x CRC32

CRC32、CRC32C、SHA1、SHA256

僅限透過 CRT:CRC64NVME、xxHash3、xxHash64、xxHash128、SHA512

適用於 Java 的 SDK 1.x
適用於 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、SHA512
適用於 .NET 3.x 的 SDK CRC32 CRC32、CRC32C、SHA1、SHA256、SHA512
適用於 PHP 的 SDK 3.x CRC32

CRC32、SHA1、SHA256

僅限透過 CRT:CRC32C

awscrt 需要擴充功能才能使用 CRC32C。
適用於 Python 的 SDK (Boto3) CRC32

CRC32、SHA1、SHA256

僅限透過 CRT:CRC32C、CRC64NVME、xxHash3、xxHash64、xxHash128、SHA512

適用於 Ruby 的 SDK 3.x 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