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

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

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

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

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

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

您可以使用 Amazon S3 主控台、AWS 開發套件、Amazon S3 REST API 和 AWS Command Line Interface (AWS CLI),為 S3 儲存貯體設定 Amazon S3 預設加密。

設定 Amazon S3 儲存貯體的預設加密
  1. 登入 AWS 管理主控台,並開啟位於 https://console.aws.amazon.com/s3/ 的 Amazon S3 主控台。

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

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

  4. 選擇屬性索引標籤。

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

  6. 選擇儲存變更

這些範例說明如何使用 SSE-S3 或具有 S3 儲存貯體金鑰的 SSE-KMS 來設定預設加密。

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

範例 – 使用 SSE-S3 預設加密

此範例會使用 Amazon S3 受管金鑰設定預設儲存貯體加密。若要使用此命令,請以您自己的資訊取代使用者輸入預留位置

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 設定預設儲存貯體加密。若要使用此命令,請以您自己的資訊取代使用者輸入預留位置

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)。

如需詳細資訊,請參閱 Amazon Simple Storage Service API 參考中的 PutBucketEncryption

使用 AWS 開發套件時,您可以請求 Amazon S3 將 AWS KMS keys 用於伺服器端加密。下列適用於 Java 和 .NET 的 AWS SDK 範例使用 SSE-KMS 和 S3 儲存貯體金鑰設定目錄儲存貯體的預設加密組態。如需其他 SDK 的資訊,請參閱 AWS 開發人員中心的範例程式碼和程式庫

重要

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

Java

在AWS SDK for Java 2.x 中,您可以透過使用 applyServerSideEncryptionByDefault 方法指定目錄儲存貯體的預設加密組態來請求 Amazon S3 使用 AWS KMS key,以便使用 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

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

// 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 監控目錄儲存貯體的預設加密

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

  • PutBucketEncryption

  • GetBucketEncryption

  • DeleteBucketEncryption

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

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

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