設定和監控目錄儲存貯體的預設加密 - Amazon Simple Storage Service

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

設定和監控目錄儲存貯體的預設加密

根據預設,Amazon S3 儲存貯體已啟用儲存貯體加密,且新的物件會使用伺服器端加密搭配 Amazon S3 受管金鑰 (SSE-S3) 自動加密。此加密免費適用於 Amazon S3 儲存貯體中的所有新物件。

如果您需要對加密金鑰進行更多控制,例如管理金鑰輪換和存取政策授予,您可以選擇使用伺服器端加密搭配 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS)。

注意
  • 我們建議儲存貯體的預設加密使用所需的加密組態,而且您不會覆寫CreateSession請求或PUT物件請求中的儲存貯體預設加密。然後,使用所需的加密設定自動加密新物件。如需在目錄儲存貯體中覆寫加密覆寫行為的詳細資訊,請參閱使用 指定伺服器端加密 AWS KMS 以進行新物件上傳

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

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

  • 當您在目錄儲存貯體中指定用於加密AWS KMS 的客戶受管金鑰時,請僅使用金鑰 ID 或金鑰 ARN。不支援 KMS 金鑰的金鑰別名格式。

  • 目錄儲存貯體中的預設加密不支援使用 AWS KMS 金鑰 (DSSE-KMS) 的雙層伺服器端加密和使用客戶提供金鑰 (SSE-C) 的伺服器端加密。

如需設定預設加密的詳細資訊,請參閱 設定預設加密

如需預設加密所需許可的詳細資訊,請參閱 PutBucketEncryptionAmazon Simple Storage Service API 參考中。

您可以使用 Amazon S3 主控台、 AWS SDKs、Amazon S3 REST API和 AWS Command Line Interface () 來S3Amazon S3 儲存貯體的 Amazon S3 預設加密AWS CLI。

設定 Amazon S3 儲存貯體的預設加密
  1. 登入 AWS Management Console 並在 Word 開啟 Amazon S3 主控台。 https://console.aws.amazon.com/s3/

  2. 在左側導覽窗格中,選擇 Buckets (儲存貯體)。

  3. Buckets (儲存貯體) 清單中,選擇您所需的儲存貯體名稱。

  4. 選擇屬性索引標籤。

  5. 伺服器端加密設定下,目錄儲存貯體會使用伺服器端加密搭配 Amazon S3 受管金鑰 (SSE-S3)

  6. 選擇 Save changes (儲存變更)。

這些範例示範如何使用 SSE-S3 設定預設加密,或使用 SSE-KMS 搭配 S3 儲存貯體金鑰。

如需預設加密的詳細資訊,請參閱對 Amazon S3 儲存貯體設定預設伺服器端加密行為。如需使用 AWS CLI 設定預設加密的詳細資訊,請參閱 put-bucket-encryption

範例 – 預設加密搭配 SSE-S3

此範例會使用 Amazon S3 受管金鑰設定預設儲存貯體加密。若要使用 命令,請取代 user input placeholders 使用您自己的資訊。

aws s3api put-bucket-encryption --bucket bucket-base-name--zone-id--x-s3 --server-side-encryption-configuration '{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256" } } ] }'
範例 – 使用 S3 儲存貯體金鑰使用 SSE-KMS 進行預設加密

此範例會使用 S3 儲存貯體金鑰,使用 SSE-KMS 設定預設儲存貯體加密。若要使用 命令,請取代 user input placeholders 使用您自己的資訊。

aws s3api put-bucket-encryption --bucket bucket-base-name--zone-id--x-s3 --server-side-encryption-configuration '{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "KMS-Key-ARN" }, "BucketKeyEnabled": true } ] }'

使用 REST API PutBucketEncryption操作設定預設加密,其中包含要使用的伺服器端加密類型:SSE-S3 或 SSE-KMS。

如需詳細資訊,請參閱 PutBucketEncryptionAmazon Simple Storage Service API 參考中。

使用 AWS SDKs 時,您可以請求 Amazon S3 AWS KMS keys 用於伺服器端加密。下列適用於 Java 的 AWS SDKs 和 .NET 範例會使用 SSE-KMS 和 S3 儲存貯體金鑰設定目錄儲存貯體的預設加密組態。如需其他 SDKs 的相關資訊,請參閱 AWS Developer Center 上的範例程式碼和程式庫

重要

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

Java

使用 AWS SDK for Java 2.x,您可以使用 AWS KMS key applyServerSideEncryptionByDefault方法請求 Amazon S3 使用 ,以指定 SSE-KMS 進行資料加密的目錄儲存貯體預設加密組態。您可以建立對稱加密 KMS 金鑰,並在請求中指定 。

import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.PutBucketEncryptionRequest; import software.amazon.awssdk.services.s3.model.ServerSideEncryption; import software.amazon.awssdk.services.s3.model.ServerSideEncryptionByDefault; import software.amazon.awssdk.services.s3.model.ServerSideEncryptionConfiguration; import software.amazon.awssdk.services.s3.model.ServerSideEncryptionRule; public class Main { public static void main(String[] args) { S3Client s3 = S3Client.create(); String bucketName = "bucket-base-name--zoneid--x-s3"; String kmsKeyId = "your-kms-customer-managed-key-id"; // AWS managed KMS keys aren't supported. Only customer-managed keys are supported. ServerSideEncryptionByDefault serverSideEncryptionByDefault = ServerSideEncryptionByDefault.builder() .sseAlgorithm(ServerSideEncryption.AWS_KMS) .kmsMasterKeyID(kmsKeyId) .build(); // The bucketKeyEnabled field is enforced to be true. ServerSideEncryptionRule rule = ServerSideEncryptionRule.builder() .bucketKeyEnabled(true) .applyServerSideEncryptionByDefault(serverSideEncryptionByDefault) .build(); ServerSideEncryptionConfiguration serverSideEncryptionConfiguration = ServerSideEncryptionConfiguration.builder() .rules(rule) .build(); PutBucketEncryptionRequest putRequest = PutBucketEncryptionRequest.builder() .bucket(bucketName) .serverSideEncryptionConfiguration(serverSideEncryptionConfiguration) .build(); s3.putBucketEncryption(putRequest); } }

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

如需上傳物件的可行程式碼範例,請參閱下列主題。若要使用這些範例,您必須更新這些程式碼範例並提供加密資訊,如上述程式碼片段所示。

.NET

使用 AWS SDK for .NET,您可以使用 AWS KMS key ServerSideEncryptionByDefault 屬性來指定目錄儲存貯體的預設加密組態,以使用 SSE-KMS 進行資料加密,以請求 Amazon S3 使用 。您可以建立對稱加密客戶受管金鑰,並在請求中指定 。

// Set the bucket server side encryption to use AWSKMS with a customer-managed key id. // bucketName: Name of the directory bucket. "bucket-base-name--zonsid--x-s3" // kmsKeyId: The Id of the customer managed KMS Key. "your-kms-customer-managed-key-id" // Returns True if successful. public static async Task<bool> SetBucketServerSideEncryption(string bucketName, string kmsKeyId) { var serverSideEncryptionByDefault = new ServerSideEncryptionConfiguration { ServerSideEncryptionRules = new List<ServerSideEncryptionRule> { new ServerSideEncryptionRule { ServerSideEncryptionByDefault = new ServerSideEncryptionByDefault { ServerSideEncryptionAlgorithm = ServerSideEncryptionMethod.AWSKMS, ServerSideEncryptionKeyManagementServiceKeyId = kmsKeyId } } } }; try { var encryptionResponse =await _s3Client.PutBucketEncryptionAsync(new PutBucketEncryptionRequest { BucketName = bucketName, ServerSideEncryptionConfiguration = serverSideEncryptionByDefault, }); return encryptionResponse.HttpStatusCode == HttpStatusCode.OK; } catch (AmazonS3Exception ex) { Console.WriteLine(ex.ErrorCode == "AccessDenied" ? $"This account does not have permission to set encryption on {bucketName}, please try again." : $"Unable to set bucket encryption for bucket {bucketName}, {ex.Message}"); } return false; }

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

如需上傳物件的可行程式碼範例,請參閱下列主題。若要使用這些範例,您必須更新這些程式碼範例並提供加密資訊,如上述程式碼片段所示。

使用 監控目錄儲存貯體的預設加密 AWS CloudTrail

您可以使用 事件來追蹤 Amazon S3 目錄儲存貯 AWS CloudTrail 體的預設加密組態請求。下列 API 事件名稱用於 CloudTrail 日誌:

  • PutBucketEncryption

  • GetBucketEncryption

  • DeleteBucketEncryption

注意
  • 目錄儲存貯體不支援 EventBridge 。

  • 目錄儲存貯體不支援使用 AWS Key Management Service (AWS KMS) 金鑰 (DSSE-KMS) 的雙層伺服器端加密,或使用客戶提供加密金鑰 (SSE-C) 的伺服器端加密。

如需使用 監控預設加密的詳細資訊 AWS CloudTrail,請參閱 使用 AWS CloudTrail 和 Amazon EventBridge 監控預設加密