為目錄儲存貯體中的新物件上傳指定使用 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 SDK 和 AWS Command Line Interface (AWS CLI) 來指定 SSE-KMS。
注意
-
對於目錄儲存貯體,加密覆寫行為如下所示:
-
當您搭配 REST API 使用 CreateSession 來驗證和授權 CopyObject 和 UploadPartCopy 以外的區域端點 API 請求時,只有在您先前使用 SSE-KMS 指定儲存貯體的預設加密時,才能覆寫 SSE-S3 或 SSE-KMS 的加密設定。
-
當您搭配 AWS CLI 或 AWS SDK 使用 CreateSession 來驗證和授權 CopyObject 和 UploadPartCopy 以外的區域端點 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 金鑰。
注意
對於 CopyObject 和 UploadPartCopy 以外的區域端點 (物件層級) API 操作,您會透過 CreateSession 驗證和授權請求,以取得低延遲。建議儲存貯體的預設加密使用所需的加密組態,而且您不會覆寫 CreateSession 請求或 PUT 物件請求中的儲存貯體預設加密。然後,新的物件會以所需的加密設定自動加密。若要使用 SSE-KMS 加密目錄儲存貯體中的新物件,您必須使用 KMS 金鑰 (特別是客戶自管金鑰) 將 SSE-KMS 指定為目錄儲存貯體的預設加密組態。然後,在為區域端點 API 操作建立工作階段時,系統會在工作階段期間使用 SSE-KMS 和 S3 儲存貯體金鑰自動加密和解密新物件。如需目錄儲存貯體中加密覆寫行為的詳細資訊,請參閱為新的物件上傳指定使用 AWS KMS 的伺服器端加密。
使用 REST API 進行區域端點 API 呼叫時 (CopyObject 和 UploadPartCopy 除外),您無法覆寫 CreateSession 請求中的加密設定值 (x-amz-server-side-encryption、x-amz-server-side-encryption-aws-kms-key-id、x-amz-server-side-encryption-context 和 x-amz-server-side-encryption-bucket-key-enabled)。您不需要在區域端點 API 呼叫中明確指定這些加密設定值,Amazon S3 將使用 CreateSession 請求中的加密設定值來保護目錄儲存貯體中的新物件。
注意
當您使用 AWS CLI 或 AWS SDK 時,對於 CreateSession,會自動更新工作階段權杖,以避免在工作階段過期時服務中斷。AWS CLI 或 AWS SDK 會針對 CreateSession 請求使用儲存貯體的預設加密組態。不支援覆寫 CreateSession 請求中的加密設定值。此外,在區域端點 API 呼叫中 (CopyObject 和 UploadPartCopy 除外),不支援覆寫 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-encryption、x-amz-server-side-encryption-aws-kms-key-id 和 x-amz-server-side-encryption-context 請求標頭。
-
CreateSession – 當您使用區域端點 (物件層級) API 操作 (CopyObject 和 UploadPartCopy 除外) 時,您可以指定這些請求標頭。
-
PutObject – 使用
PUTAPI 操作上傳資料時,您可以指定這些請求標頭。 -
CopyObject – 複製物件時,您會同時有來源物件與目標物件。當您使用
CopyObject操作傳遞 SSE-KMS 標頭時,這些標頭只會套用至目標物件。 -
CreateMultipartUpload – 使用分段上傳 API 操作上傳大型物件時,您可以指定這些標頭。您可以在
CreateMultipartUpload請求中指定這些標頭。
使用伺服器端加密存放物件時,下列 REST API 操作的回應標頭會傳回 x-amz-server-side-encryption 標頭。
重要
-
如果您未使用 Transport Layer Security (TLS) 或第 4 版簽署請求提出這些請求,則受 AWS KMS 保護物件的所有
GET和PUT請求都會失敗。 -
如果您的物件使用 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)
目錄儲存貯體中的 GET 和 PUT 操作一律會啟用 S3 儲存貯體金鑰,且無法停用。當您透過 CopyObject、UploadPartCopy、Batch Operations 中的 Copy 操作或 import 作業,將 SSE-KMS 加密物件從一般用途儲存貯體複製到目錄儲存貯體、從目錄儲存貯體複製到一般用途儲存貯體或在目錄儲存貯體之間複製時,不支援 S3 儲存貯體金鑰。在此情況下,每次對 KMS 加密物件提出複製請求時,Amazon S3 都會呼叫 AWS KMS。如需目錄儲存貯體中 S3 儲存貯體金鑰的資訊,請參閱加密內容。
注意
當您使用 AWS CLI 時,對於 CreateSession,會自動更新工作階段權杖,以避免在工作階段過期時服務中斷。不支援覆寫 CreateSession 請求的加密設定值。此外,在區域端點 API 呼叫中 (CopyObject 和 UploadPartCopy 除外),不支援覆寫 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 來新增您已建立的客戶受管 AWS KMS 金鑰。如果您指定 example-key-id--server-side-encryption
aws:kms,則必須提供客戶自管金鑰的 AWS KMS 金鑰 ID。目錄儲存貯體不會使用 AWS 受管金鑰。如需命令範例,請參閱使用 AWS CLI。
然後,當您使用下列命令上傳新物件時,Amazon S3 預設會使用儲存貯體的預設加密設定來加密物件。
aws s3api put-object --bucket--keybucket-base-name--zone-id--x-s3example-object-key--bodyfilepath
您不需要在區域端點 API 操作命令中明確新增 -\-bucket-key-enabled。目錄儲存貯體中的 GET 和 PUT 操作一律會啟用 S3 儲存貯體金鑰,且無法停用。當您透過 CopyObject、UploadPartCopy、Batch Operations 中的 Copy 操作或 import 作業,將 SSE-KMS 加密物件從一般用途儲存貯體複製到目錄儲存貯體、從目錄儲存貯體複製到一般用途儲存貯體或在目錄儲存貯體之間複製時,不支援 S3 儲存貯體金鑰。在此情況下,每次對 KMS 加密物件提出複製請求時,Amazon S3 都會呼叫 AWS KMS。
您可以將物件從來源儲存貯體 (例如一般用途儲存貯體) 複製到新的儲存貯體 (例如目錄儲存貯體),並對目的地物件使用 SSE-KMS 加密。若要執行這項操作,請使用 put-bucket-encryption 命令將目的地儲存貯體 (例如目錄儲存貯體) 的預設加密組態設定為 SSE-KMS (aws:kms)。如需命令範例,請參閱使用 AWS CLI。然後,當您使用下列命令複製物件時,Amazon S3 預設會使用儲存貯體的預設加密設定來加密物件。
aws s3api copy-object --copy-source/amzn-s3-demo-bucketexample-object-key--bucket--keybucket-base-name--zone-id--x-s3example-object-key
使用 AWS 開發套件時,您可以請求 Amazon S3 將 AWS KMS keys 用於伺服器端加密。下列範例示範如何搭配適用於 Java 和 .NET 的 AWS SDK 使用 SSE-KMS。如需其他 SDK 的資訊,請參閱 AWS 開發人員中心的範例程式碼和程式庫
注意
當您使用 AWS SDK 時,對於 CreateSession,會自動更新工作階段權杖,以避免在工作階段過期時服務中斷。不支援覆寫 CreateSession 請求的加密設定值。此外,在區域端點 API 呼叫中 (CopyObject 和 UploadPartCopy 除外),不支援覆寫 CreateSession 請求中的加密設定值。
若要使用 SSE-KMS 加密目錄儲存貯體中的新物件,您必須使用 KMS 金鑰 (特別是客戶自管金鑰) 將 SSE-KMS 指定為目錄儲存貯體的預設加密組態。然後,在為區域端點 API 操作建立工作階段時,系統會在工作階段期間使用 SSE-KMS 和 S3 儲存貯體金鑰自動加密和解密新物件。
如需使用 AWS SDK 將目錄儲存貯體的預設加密組態設定為 SSE-KMS 的詳細資訊,請參閱使用 AWS SDK。
重要
當您使用 AWS KMS key 在 Amazon S3 中進行伺服器端加密時,必須選擇對稱加密 KMS 金鑰。Amazon S3 只支援對稱加密 KMS 金鑰。如需詳細資訊,請參閱《AWS Key Management Service開發人員指南》中的對稱加密 KMS 金鑰。
如需建立客戶受管金鑰的詳細資訊,請參閱《AWS Key Management Service開發人員指南》中的對 AWS KMS API 進行程式設計。