針對目錄儲存貯體中的新物件上傳,使用 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,您必須指定 SSE-KMS 作為具有KMS金鑰 (特別是客戶受管金鑰 ) 的目錄儲存貯體的預設加密組態。不支援 AWS 受管金鑰aws/s3)。您的 SSE- KMS組態在儲存貯體的生命週期中,每個目錄儲存貯體只能支援 1 個客戶受管金鑰。為 SSE- 指定客戶受管金鑰後KMS,您無法覆寫儲存貯體 SSE-KMS 組態的客戶受管金鑰。然後,當您使用 SSE- 為新物件指定伺服器端加密設定時KMS,您必須確保加密金鑰與您為目錄儲存貯體的預設加密組態指定的客戶受管金鑰相同。若要為您的資料使用新的客戶受管金鑰,我們建議您使用新的客戶受管金鑰,將現有的物件複製到新的目錄儲存貯體。

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

您可以使用 RESTAPI操作 AWS SDKs和 AWS Command Line Interface (AWS CLI) 來指定 SSEKMS。

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

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

    • 當您CreateSession搭配 AWS CLI 或 AWS SDKs使用 來驗證和授權 Zonal 端點API請求時,除了 CopyObject和 之外UploadPartCopy,您完全無法覆寫加密設定。

    • 當您提出CopyObject請求時,SSE只有在先前使用 SSE- 指定儲存貯體的預設加密時,才能將加密設定覆寫為 -S3 或 SSE-KMS。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 組態的客戶受管金鑰。

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

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

注意

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

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

支援 SSE- 的 Amazon S3 RESTAPI操作KMS

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

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

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

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

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

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

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

  • 如果您的物件使用 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 組態指定的客戶受管金鑰:

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

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

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

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

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

注意

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

若要使用 SSE- 加密目錄儲存貯體中的新物件KMS,您必須指定 SSE-KMS 作為具有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--azid--x-s3 --key example-object-key --body filepath

您不需要在區域端點API操作命令中-\-bucket-key-enabled明確新增 。S3 儲存貯體金鑰一律會在目錄儲存貯體中為 GETPUT操作啟用,且無法停用。當您透過 將 SSE-KMS 從一般用途儲存貯體到目錄儲存貯體、從目錄儲存貯體到一般用途儲存貯體,或在目錄儲存貯體之間複製加密的物件時,不支援 S3 儲存貯體金鑰 CopyObject, UploadPartCopyCopy 批次操作 中的 操作,或 import 任務 。在此情況下,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--azid--x-s3 --key example-object-key

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

注意

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

若要使用 SSE- 加密目錄儲存貯體中的新物件KMS,您必須指定 SSE-KMS 作為具有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 KMS APIAWS Key Management Service