本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 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:
如果您的應用程式使用 2024 年 12 月之前的版本開發套件或工具,Amazon S3 仍會在新物件上計算 CRC64NVME 檢查總和,並將其存放在物件中繼資料中以供日後參考。您稍後可以將存放的 CRC 與側邊計算的 CRC 進行比較,並確認網路傳輸正確。此外,您仍然可以手動擴展完整性保護,方法是使用 PutObject
或 UploadPart
請求提供您自己的預先計算檢查總和,這是在較舊版本中解決此問題的標準技術。
使用下列設定此功能:
request_checksum_calculation
- 共用 AWSconfig
檔案設定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
- 共用 AWSconfig
檔案設定AWS_RESPONSE_CHECKSUM_VALIDATION
- 環境變數aws.responseChecksumValidation
- JVM 系統屬性:僅限 Java/Kotlin-
在預設情況下,使用者在傳送請求時可以選擇加入回應檢查總和驗證。系統會計算回應承載的檢查總和,並與檢查總和回應標頭進行比較。如果檢查總和驗證失敗,讀取承載時,使用者會遇到錯誤。
檢查總和回應標頭也會指出檢查總和的演算法。Amazon S3 用戶端會嘗試驗證支援檢查總和之所有 Amazon S3 API 操作的回應檢查總和。不過,如果 SDK 未實作指定的檢查總和演算法,則會略過此驗證。
預設值:
WHEN_SUPPORTED
有效值:
-
WHEN_SUPPORTED
– 當 API 操作支援時,檢查總和驗證會在所有回應承載上執行,例如資料傳輸到 Amazon S3。 -
WHEN_REQUIRED
– 檢查總和驗證僅在 API 操作支援且發起人已明確啟用操作的檢查總和時執行。例如,當呼叫 Amazon S3GetObject
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 | 對於 AWS CLI v1,預設演算法和支援的演算法將與 Python (Boto3) 相同。 |
適用於 C++ 的 SDK | 是 | CRC64NVME | CRC64NVME, CRC32, CRC32C, SHA1, SHA256 | |
SDK for Go V2 (1.x) |
是 | CRC32 | CRC64NVME, CRC32, CRC32C, SHA1, SHA256 | |
適用於 Go 的 SDK 1.x (V1) | 否 | |||
適用於 Java 的 SDK 2.x | 是 | CRC32 | CRC64NVME (僅透過 CRT)、CRC32, CRC32C, SHA1, SHA256 | |
適用於 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 3.x 的 SDK | 是 | CRC32 | CRC32, CRC32C, SHA1, SHA256 | |
適用於 PHP 3.x 的開發套件 | 是 | CRC32 | CRC32, CRC32C (僅限透過 CRT)、SHA1, SHA256 | awscrt 需要 擴充功能才能使用 CRC32C。 |
適用於 Python 的 SDK (Boto3) |
是 | CRC32 | CRC64NVME (僅透過 CRT)、CRC32, CRC32C (僅透過 CRT)、SHA1, SHA256 | |
適用於 Ruby 的 SDK 3.x | 是 | 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 相依性。 |
PowerShell 的工具 | 是 | CRC32 | CRC32, CRC32C, SHA1, SHA256 |