為目錄儲存貯體中的新物件上傳指定使用 AWS KMS 的伺服器端加密 (SSE-KMS) - Amazon Simple Storage Service

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

為目錄儲存貯體中的新物件上傳指定使用 AWS KMS 的伺服器端加密 (SSE-KMS)

對於目錄儲存貯體,若要使用伺服器端加密來加密資料,您可以使用伺服器端加密搭配 Amazon S3 受管金鑰 (SSE-S3) (預設) 或伺服器端加密搭配 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS)。建議儲存貯體的預設加密使用所需的加密組態,而且您不會覆寫 CreateSession 請求或 PUT 物件請求中的儲存貯體預設加密。然後,新的物件會以所需的加密設定自動加密。如需在目錄儲存貯體中覆寫加密行為的詳細資訊,請參閱使用 指定伺服器端加密 AWS KMS 以進行新物件上傳

根據預設,所有 Amazon S3 儲存貯體都設定了加密,所有上傳到 S3 儲存貯體的新物件都會在靜態時自動加密。伺服器端加密與 Amazon S3 受管金鑰 (SSE-S3) 是 Amazon S3 中每個儲存貯體的預設加密組態。如果您想要為目錄儲存貯體指定不同的加密類型,您可以使用 AWS Key Management Service (AWS KMS) 金鑰的伺服器端加密 (SSE-KMS)。若要使用 SSE-KMS 加密目錄儲存貯體中的新物件,您必須使用 KMS 金鑰 (特別是客戶自管金鑰) 將 SSE-KMS 指定為目錄儲存貯體的預設加密組態。不支援 AWS 受管金鑰 (aws/s3)。您的 SSE-KMS 組態在儲存貯體的生命週期內,每個目錄儲存貯體只能支援 1 個客戶自管金鑰。為 SSE-KMS 指定客戶自管金鑰之後,即無法覆寫儲存貯體 SSE-KMS 組態的客戶自管金鑰。然後,當您使用 SSE-KMS 為新物件指定伺服器端加密設定時,您必須確保加密金鑰與您為目錄儲存貯體的預設加密組態指定的客戶自管金鑰相同。若要為資料使用新的客戶自管金鑰,建議您使用新的客戶自管金鑰,將現有的物件複製到新的目錄儲存貯體。

上傳新物件或複製現有物件時,您都可以套用加密。如果您變更物件的加密,則會建立新物件來取代舊物件。

您可以使用 REST API 操作、 AWS SDKs AWS CLI。 AWS Command Line Interface

注意
  • 對於目錄儲存貯體,加密覆寫行為如下所示:

    • 當您搭配 REST API 使用 CreateSession 來驗證和授權 CopyObjectUploadPartCopy 以外的區域端點 API 請求時,只有在您先前使用 SSE-KMS 指定儲存貯體的預設加密時,才能覆寫 SSE-S3 或 SSE-KMS 的加密設定。

    • 當您搭配 AWS CLI 或 AWS SDKs 使用 CreateSession 來驗證和授權 CopyObjectUploadPartCopy 以外的區域端點 API 請求時,您完全無法覆寫加密設定。

    • 當您提出 CopyObject 請求時,只有在先前使用 SSE-KMS 指定儲存貯體的預設加密時,才能覆寫 SSE-S3 或 SSE-KMS 的加密設定。當您提出 UploadPartCopy 請求時,您無法覆寫加密設定。

  • 您可以在 Amazon S3 AWS KMS keys 中使用多區域。但是,Amazon S3 目前將多區域金鑰視為單區域金鑰,並且不使用金鑰的多區域功能。如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的使用多區域金鑰

  • 如果您想要使用其他帳戶擁有的 KMS 金鑰,您必須具有該金鑰的許可。如需詳細了解 KMS 金鑰跨帳戶權限,請參閱《AWS Key Management Service 開發人員指南》中的建立其他帳戶可使用的 KMS 金鑰

注意

在儲存貯體的生命週期內,每個目錄儲存貯體只能支援 1 個客戶自管金鑰。不支援 AWS 受管金鑰 (aws/s3)。使用客戶自管金鑰將 SSE-KMS 指定為儲存貯體的預設加密組態之後,即無法變更儲存貯體 SSE-KMS 組態的客戶自管金鑰。

對於 CopyObjectUploadPartCopy 以外的區域端點 (物件層級) API 操作,您會透過 CreateSession 驗證和授權請求以取得低延遲。建議儲存貯體的預設加密使用所需的加密組態,而且您不會覆寫 CreateSession 請求或 PUT 物件請求中的儲存貯體預設加密。然後,新的物件會以所需的加密設定自動加密。若要使用 SSE-KMS 加密目錄儲存貯體中的新物件,您必須使用 KMS 金鑰 (特別是客戶自管金鑰) 將 SSE-KMS 指定為目錄儲存貯體的預設加密組態。然後,在為區域端點 API 操作建立工作階段時,系統會在工作階段期間使用 SSE-KMS 和 S3 儲存貯體金鑰自動加密和解密新物件。如需在目錄儲存貯體中覆寫加密行為的詳細資訊,請參閱使用 指定伺服器端加密 AWS KMS 以進行新物件上傳

使用 REST API 進行區域端點 API 呼叫時 (CopyObjectUploadPartCopy 除外),您無法覆寫 CreateSession 請求中的加密設定值 (x-amz-server-side-encryptionx-amz-server-side-encryption-aws-kms-key-idx-amz-server-side-encryption-contextx-amz-server-side-encryption-bucket-key-enabled)。您不需要在區域端點 API 呼叫中明確指定這些加密設定值,Amazon S3 將使用 CreateSession 請求中的加密設定值來保護目錄儲存貯體中的新物件。

注意

當您使用 AWS CLI 或 AWS SDKs 時,對於 CreateSession,工作階段字符會自動重新整理,以避免工作階段過期時服務中斷。 AWS CLI 或 AWS SDKs 會使用儲存貯體的預設加密組態來處理CreateSession請求。不支援覆寫 CreateSession 請求中的加密設定值。此外,在區域端點 API 呼叫中 (CopyObjectUploadPartCopy 除外),不支援覆寫 CreateSession 請求中的加密設定值。

對於 CopyObject,若要使用 SSE-KMS 加密目錄儲存貯體中的新物件複本,您必須使用 KMS 金鑰 (特別是客戶自管金鑰) 將 SSE-KMS 指定為目錄儲存貯體的預設加密組態。然後,當您使用 SSE-KMS 為新物件複本指定伺服器端加密設定時,您必須確保加密金鑰與您為目錄儲存貯體的預設加密組態指定的客戶自管金鑰相同。對於 UploadPartCopy,若要使用 SSE-KMS 加密目錄儲存貯體中的新物件組件複本,您必須使用 KMS 金鑰 (特別是客戶自管金鑰) 將 SSE-KMS 指定為目錄儲存貯體的預設加密組態。您無法在 UploadPartCopy 請求標頭中,使用 SSE-KMS 為新的物件組件複本指定伺服器端加密設定。此外,您在 CreateMultipartUpload 請求中提供的加密設定必須符合目的地儲存貯體的預設加密組態。

支援 SSE-KMS 的 Amazon S3 REST API 操作

目錄儲存貯體中的下列物件層級 REST API 操作接受 x-amz-server-side-encryptionx-amz-server-side-encryption-aws-kms-key-idx-amz-server-side-encryption-context 請求標頭。

  • CreateSession – 當您使用區域端點 (物件層級) API 操作 (CopyObject 和 UploadPartCopy 除外) 時,您可以指定這些請求標頭。

  • PutObject – 使用 PUT API 操作上傳資料時,您可以指定這些請求標頭。

  • CopyObject – 複製物件時,您會同時有來源物件與目標物件。當您使用 CopyObject 操作傳遞 SSE-KMS 標頭時,這些標頭只會套用至目標物件。

  • CreateMultipartUpload – 使用分段上傳 API 操作上傳大型物件時,您可以指定這些標頭。您可以在 CreateMultipartUpload 請求中指定這些標頭。

使用伺服器端加密存放物件時,下列 REST API 操作的回應標頭會傳回 x-amz-server-side-encryption 標頭。

重要
  • 如果您未使用 Transport Layer Security (TLS) 或第 4 版簽署請求提出這些請求,則受 AWS KMS 保護物件的所有 GETPUT 請求都會失敗。

  • 如果您的物件使用 SSE-KMS,請勿傳送 GET 請求與 HEAD 請求的加密請求標頭,否則您會收到 HTTP 400 BadRequest 錯誤。

加密內容 (x-amz-server-side-encryption-context)

如果您指定 x-amz-server-side-encryption:aws:kms,則 Amazon S3 API 支援您選擇使用 x-amz-server-side-encryption-context 標頭提供明確的加密內容。對於目錄儲存貯體,加密內容是一組金鑰/值對,其中包含資料的相關內容資訊。值必須符合預設加密內容,也就是儲存貯體的 Amazon Resource Name (ARN)。不支援額外的加密內容值。

如需目錄儲存貯體中加密內容的資訊,請參閱加密內容。如需有關加密內容的更多資訊,請參閱《AWS Key Management Service 開發人員指南》中的 AWS Key Management Service 概念:加密內容

AWS KMS 金鑰 ID (x-amz-server-side-encryption-aws-kms-key-id)

您可以使用 x-amz-server-side-encryption-aws-kms-key-id 標頭來指定用來保護資料之客戶受管金鑰的 ID。

您的 SSE-KMS 組態在儲存貯體的生命週期內,每個目錄儲存貯體只能支援 1 個客戶自管金鑰。不支援 AWS 受管金鑰 (aws/s3)。此外,為 SSE-KMS 指定客戶自管金鑰之後,即無法覆寫儲存貯體 SSE-KMS 組態的客戶自管金鑰。

您可以透過下列方式識別為儲存貯體的 SSE-KMS 組態指定的客戶自管金鑰:

  • 您可以提出 HeadObject API 操作請求,在回應中尋找 x-amz-server-side-encryption-aws-kms-key-id 的值。

若要為資料使用新的客戶自管金鑰,建議您使用新的客戶自管金鑰,將現有的物件複製到新的目錄儲存貯體。

如需目錄儲存貯體中加密內容的資訊,請參閱AWS KMS keys

S3 儲存貯體金鑰 (x-amz-server-side-encryption-aws-bucket-key-enabled)

目錄儲存貯體中的 GETPUT 操作一律會啟用 S3 儲存貯體金鑰,且無法停用。當您透過 CopyObjectUploadPartCopyBatch Operations 中的 Copy 操作import 作業,將 SSE-KMS 加密物件從一般用途儲存貯體複製到目錄儲存貯體、從目錄儲存貯體複製到一般用途儲存貯體或在目錄儲存貯體之間複製時,不支援 S3 儲存貯體金鑰。在此情況下,Amazon S3 AWS KMS 每次針對 KMS 加密的物件提出複製請求時,都會呼叫 。如需目錄儲存貯體中 S3 儲存貯體金鑰的資訊,請參閱加密內容

注意

當您使用 時 AWS CLI,對於 CreateSession,工作階段字符會自動重新整理,以避免工作階段過期時服務中斷。不支援覆寫 CreateSession 請求的加密設定值。此外,在區域端點 API 呼叫中 (CopyObjectUploadPartCopy 除外),不支援覆寫 CreateSession 請求中的加密設定值。

若要使用 SSE-KMS 加密目錄儲存貯體中的新物件,您必須使用 KMS 金鑰 (特別是客戶自管金鑰) 將 SSE-KMS 指定為目錄儲存貯體的預設加密組態。然後,在為區域端點 API 操作建立工作階段時,系統會在工作階段期間使用 SSE-KMS 和 S3 儲存貯體金鑰自動加密和解密新物件。

若要使用下列範例 AWS CLI 命令,請將 取代user input placeholders為您自己的資訊。

當您上傳新物件或複製現有物件時,您可以指定使用伺服器端加密搭配 AWS KMS 金鑰來加密資料。若要執行這項操作,請使用 put-bucket-encryption 命令將目錄儲存貯體的預設加密組態設定為 SSE-KMS (aws:kms)。特別是將 --server-side-encryption aws:kms 標頭新增至請求。使用 --ssekms-key-id example-key-id 新增您建立的客戶受管 AWS KMS 金鑰。如果您指定 --server-side-encryption aws:kms,則必須提供客戶受管 AWS KMS 金鑰的金鑰 ID。目錄儲存貯體不使用 AWS 受管金鑰。如需命令範例,請參閱使用 AWS CLI

然後,當您使用下列命令上傳新物件時,Amazon S3 預設會使用儲存貯體的預設加密設定來加密物件。

aws s3api put-object --bucket bucket-base-name--zone-id--x-s3 --key example-object-key --body filepath

您不需要在區域端點 API 操作命令中明確新增 -\-bucket-key-enabled。目錄儲存貯體中的 GETPUT 操作一律會啟用 S3 儲存貯體金鑰,且無法停用。當您透過 CopyObjectUploadPartCopyBatch Operations 中的 Copy 操作import 作業,將 SSE-KMS 加密物件從一般用途儲存貯體複製到目錄儲存貯體、從目錄儲存貯體複製到一般用途儲存貯體或在目錄儲存貯體之間複製時,不支援 S3 儲存貯體金鑰。在此情況下,Amazon S3 AWS KMS 每次針對 KMS 加密的物件提出複製請求時,都會呼叫 。

您可以將物件從來源儲存貯體 (例如一般用途儲存貯體) 複製到新的儲存貯體 (例如目錄儲存貯體),並對目的地物件使用 SSE-KMS 加密。若要執行這項操作,請使用 put-bucket-encryption 命令將目的地儲存貯體 (例如目錄儲存貯體) 的預設加密組態設定為 SSE-KMS (aws:kms)。如需命令範例,請參閱使用 AWS CLI。然後,當您使用下列命令複製物件時,Amazon S3 預設會使用儲存貯體的預設加密設定來加密物件。

aws s3api copy-object --copy-source amzn-s3-demo-bucket/example-object-key --bucket bucket-base-name--zone-id--x-s3 --key example-object-key

使用 AWS SDKs時,您可以請求 Amazon S3 使用 AWS KMS keys 進行伺服器端加密。下列範例示範如何使用 SSE-KMS 搭配適用於 Java 和 .NET AWS SDKs。如需其他 SDKs的資訊,請參閱 AWS 開發人員中心上的範例程式碼和程式庫

注意

當您使用 AWS SDKs 時,對於 CreateSession,工作階段字符會自動重新整理,以避免工作階段過期時服務中斷。不支援覆寫 CreateSession 請求的加密設定值。此外,在區域端點 API 呼叫中 (CopyObjectUploadPartCopy 除外),不支援覆寫 CreateSession 請求中的加密設定值。

若要使用 SSE-KMS 加密目錄儲存貯體中的新物件,您必須使用 KMS 金鑰 (特別是客戶自管金鑰) 將 SSE-KMS 指定為目錄儲存貯體的預設加密組態。然後,在為區域端點 API 操作建立工作階段時,系統會在工作階段期間使用 SSE-KMS 和 S3 儲存貯體金鑰自動加密和解密新物件。

如需使用 AWS SDKs將目錄儲存貯體的預設加密組態設定為 SSE-KMS 的詳細資訊,請參閱 使用 AWS SDKs

重要

當您在 Amazon S3 中使用 AWS KMS key 進行伺服器端加密時,您必須選擇對稱加密 KMS 金鑰。Amazon S3 只支援對稱加密 KMS 金鑰。如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的對稱加密 KMS 金鑰

如需建立客戶受管金鑰的詳細資訊,請參閱《 AWS Key Management Service 開發人員指南》中的程式設計 AWS KMS API