將伺服器端加密與 AWS KMS 金鑰搭配使用 (SSE-KMS) - Amazon Simple Storage Service

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

將伺服器端加密與 AWS KMS 金鑰搭配使用 (SSE-KMS)

重要

Amazon S3 現在會使用 Amazon S3 受管金鑰 (SSE-S3) 套用伺服器端加密,作為 Amazon S3 中每個儲存貯體的基本加密層級。從 2023 年 1 月 5 日起,所有上傳到 Amazon S3 的新物件都會自動加密,無需額外費用,也不會影響效能。S3 儲存貯體預設加密組態和新物件上傳的自動加密狀態可在 AWS CloudTrail 日誌、S3 庫存、S3 Storage Lens、Amazon S3 主控台,以及 AWS Command Line Interface 和 AWS SDKs 中的其他 Amazon S3 API 回應標頭中使用。如需詳細資訊,請參閱預設加密FAQ

伺服器端加密是指接收資料的應用程式或服務在目的地將資料加密。

Amazon S3 會自動使用 Amazon S3 受管金鑰 (SSE-S3) 啟用伺服器端加密,以進行新的物件上傳。

除非您另有指定,否則儲存貯體預設會使用 SSE-S3 加密物件。不過,您可以選擇設定儲存貯體,改為使用伺服器端加密搭配 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS)。如需詳細資訊,請參閱使用 AWS KMS (SSE-KMS) 指定伺服器端加密

AWS KMS 是一項服務,結合了安全、高可用性的硬體和軟體,以提供針對雲端擴展的金鑰管理系統。Amazon S3 使用伺服器端加密搭配 AWS KMS (SSE-KMS) 來加密 S3 物件資料。此外,當物件請求 SSE-KMS 時,S3 檢查總和 (作為物件中繼資料的一部分) 會以加密形式儲存。如需總和檢查的詳細資訊,請參閱 檢查物件完整性

如果您使用 KMS 金鑰,您可以透過 AWS KMS AWS Management ConsoleAWS KMS API 使用 來執行下列動作:

  • 集中建立、檢視、編輯、監控、啟用或停用、輪換和排程刪除 KMS 金鑰。

  • 定義控制 KMS 金鑰的使用方式和使用對象的政策。

  • 稽核其使用情況,以證明其使用方式正確無誤。AWS KMS API 支援稽核,但 不支援AWS KMSAWS Management Console

中的安全控制項 AWS KMS 可協助您符合加密相關的合規要求。您可以使用這些 KMS 金鑰來保護 Amazon S3 儲存貯體中的資料。當您將 SSE-KMS 加密與 S3 儲存貯體搭配使用時, AWS KMS keys 必須與儲存貯體位於相同的區域。

使用 需支付額外費用 AWS KMS keys。如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的 AWS KMS key 概念AWS KMS 定價

許可

若要使用 加密的物件上傳至 AWS KMS key Amazon S3,您需要 金鑰的kms:GenerateDataKey許可。若要下載使用 加密的物件 AWS KMS key,您需要 kms:Decrypt 許可。如需分段上傳所需的 AWS KMS 許可資訊,請參閱 分段上傳 API 和許可

重要

仔細檢閱 KMS 金鑰政策中授予的許可。一律將客戶管理的 KMS 金鑰政策許可限制為必須存取相關 AWS KMS 金鑰動作的 IAM 主體 AWS 和服務。如需詳細資訊,請參閱 中的金鑰政策 AWS KMS

AWS KMS keys

當您搭配 AWS KMS (SSE-KMS) 使用伺服器端加密時,您可以使用預設AWS 受管金鑰,也可以指定您已建立的客戶受管金鑰。 AWS KMS 支援信封加密。S3 使用信封加密 AWS KMS 功能來進一步保護您的資料。信封加密是使用資料金鑰加密純文字資料,然後使用 KMS 金鑰加密該資料金鑰的做法。如需封套加密的詳細資訊,請參閱 AWS Key Management Service 開發人員指南中的封套加密

如果您未指定客戶受管金鑰,Amazon S3 會在您 AWS 帳戶 第一次將以 SSE-KMS 加密的物件新增至儲存貯體 AWS 受管金鑰 時,自動建立 。根據預設,Amazon S3 會將此 KMS 金鑰用於 SSE-KMS。

注意

使用 SSE-KMS 與 加密的物件AWS 受管金鑰無法跨帳戶共用。如果您需要共用 SSE-KMS 資料跨帳戶,則必須使用來自 的客戶受管金鑰 AWS KMS。

如果您想要使用 SSE-KMS 的客戶受管金鑰,請在設定 SSE-KMS 之前建立對稱加密客戶受管金鑰。然後,當您為儲存貯體設定 SSE-KMS 時,請指定現有的客戶受管金鑰。如需對稱加密金鑰的詳細資訊,請參閱 AWS Key Management Service 開發人員指南中的對稱加密 KMS 金鑰

建立客戶受管金鑰可為您提供更多的靈活性與控制。例如,您可以建立、輪換和停用客戶受管金鑰。您也可以定義存取控制,並稽核用來保護資料的客戶受管金鑰。如需客戶受管金鑰和 AWS 受管金鑰的詳細資訊,請參閱 AWS Key Management Service 開發人員指南中的客戶金鑰和 AWS 金鑰

注意

當您使用伺服器端加密搭配存放在外部金鑰存放區中的客戶受管金鑰時,與標準 KMS 金鑰不同,您有責任確保金鑰資料的可用性和耐久性。如需外部金鑰存放區及其如何轉移共用責任模型的詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的外部金鑰存放區

使用 SSE-KMS 加密進行跨帳戶操作

對跨帳戶操作使用加密時,請注意下列事項:

  • 如果未在請求時間或透過儲存貯體的預設加密組態提供 AWS KMS key Amazon Resource Name (ARN) 或別名,則會使用 AWS 受管金鑰 (aws/s3)。

  • 如果您使用與 IAM AWS 帳戶 KMS金鑰相同的 AWS Identity and Access Management (Word) 主體來上傳或存取 S3 物件,您可以使用 AWS 受管金鑰 (aws/s3)。

  • 如果您想要授予 S3 物件跨帳戶存取權,請使用客戶受管金鑰。您可以設定客戶受管金鑰的政策,以允許從另一個帳戶存取的權限。

  • 如果您要指定客戶受管 KMS 金鑰,建議您使用完全合格的 KMS 金鑰 ARN。如果您改為使用 KMS 金鑰別名, 會 AWS KMS 解析請求者帳戶中的金鑰。此行為可能會導致資料使用屬於請求者而非儲存貯體擁有者的 KMS 金鑰加密。

  • 您必須指定已授予您 (要求者) 已獲授予 Encrypt 許可的金鑰。如需詳細資訊,請參閱 AWS Key Management Service 開發人員指南中的允許金鑰使用者使用 KMS 金鑰進行密碼編譯操作

如需何時使用客戶受管金鑰和 AWS 受管 KMS 金鑰的詳細資訊,請參閱我應該使用 AWS 受管金鑰 或客戶受管金鑰來加密 Amazon S3 中的物件?

SSE-KMS 加密工作流程

如果您選擇使用 AWS 受管金鑰 或客戶受管金鑰加密資料, AWS KMS Amazon S3 會執行下列信封加密動作:

  1. Amazon S3 會請求純文字資料金鑰,以及在指定的 KMS 金鑰下加密的金鑰複本。

  2. AWS KMS 會產生資料金鑰、在 KMS 金鑰下加密,並將純文字資料金鑰和加密的資料金鑰同時傳送至 Amazon S3。

  3. Amazon S3 使用資料金鑰來加密資料,並在使用後盡快從記憶體中移除純文字金鑰。

  4. Amazon S3 將加密的資料金鑰以中繼資料形式跟加密資料一起存放。

當您請求解密您的資料時,Amazon S3 會 AWS KMS 執行下列動作:

  1. Amazon S3 會在Decrypt請求 AWS KMS 中將加密的資料金鑰傳送至 。

  2. AWS KMS 使用相同的 KMS 金鑰解密加密的資料金鑰,並將純文字資料金鑰傳回 Amazon S3。

  3. Amazon S3 使用純文字資料金鑰來解密加密的資料,然後盡快從記憶體移除純文字資料金鑰。

重要

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

稽核 SSE-KMS 加密

若要識別指定 SSE-KMS 的請求,您可以使用 Amazon S3 Storage Lens 指標中的所有 SSE-KMS 請求% 的所有 SSE-KMS 請求指標。S3 Storage Lens 是一種雲端儲存體分析功能,您可以用來了解整個組織使用物件儲存體的情況及其活動情形。您也可以使用啟用 SSE-KMS 的儲存貯體計數和啟用 SSE-KMS 的儲存貯體百分比,了解預設儲存貯體加密的儲存貯體計數 (SSE-KMS)。如需詳細資訊,請參閱使用 S3 Storage Lens 評估儲存活動和用量。如需完整的指標清單,請參閱 S3 Storage Lens 指標詞彙表

若要稽核 SSE-KMS 加密資料的 AWS KMS 金鑰使用情況,您可以使用 AWS CloudTrail 日誌。您可以深入了解密碼編譯操作,例如 GenerateDataKeyDecrypt。 CloudTrail 支援許多屬性值來篩選您的搜尋,包括事件名稱、使用者名稱和事件來源。

Amazon S3 儲存貯體金鑰

當您使用 AWS KMS (SSE-KMS) 設定伺服器端加密時,您可以將儲存貯體設定為使用 SSE-KMS 的 S3 儲存貯體金鑰。使用 SSE-KMS 的儲存貯體層級金鑰,可將 AWS KMS 請求流量從 Amazon S3 減少至 ,從而降低高達 99% 的請求成本 AWS KMS。

當您將儲存貯體設定為在新物件上使用 SSE-KMS 的 S3 儲存貯體金鑰時, AWS KMS 會產生儲存貯體層級金鑰,用於為儲存貯體中的物件建立唯一的資料金鑰。此 S3 儲存貯體金鑰在 Amazon S3 內使用一段時間,進一步減少 Amazon S3 向 提出請求 AWS KMS 以完成加密操作的需求。如需使用 S3 儲存貯體金鑰的詳細資訊,請參閱 使用 Amazon S3 儲存貯體金鑰降低 SSE-KMS 的成本

要求伺服器端加密

若要在特定 Amazon S3 儲存貯體中要求所有物件的伺服器端加密,您可以使用儲存貯體政策。例如,如果請求不包含使用 SSE-KMS 請求伺服器端加密的x-amz-server-side-encryption-aws-kms-key-id標頭,則下列儲存貯體政策會拒絕所有人的上傳物件 (s3:PutObject) 許可。

{ "Version":"2012-10-17", "Id":"PutObjectPolicy", "Statement":[{ "Sid":"DenyObjectsThatAreNotSSEKMS", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition":{ "Null":{ "s3:x-amz-server-side-encryption-aws-kms-key-id":"true" } } } ] }

若要要求 AWS KMS key 使用特定 來加密儲存貯體中的物件,您可以使用 s3:x-amz-server-side-encryption-aws-kms-key-id 條件金鑰。若要指定 KMS 金鑰,您必須使用 arn:aws:kms:region:acct-id:key/key-id 格式的金鑰 Amazon Resource Name (ARN)。 AWS Identity and Access Management 不會驗證 的字串s3:x-amz-server-side-encryption-aws-kms-key-id是否存在。

注意

上傳物件時,您可以使用 x-amz-server-side-encryption-aws-kms-key-id 標頭或依賴預設儲存貯體加密組態來指定 KMS 金鑰。如果您的 PutObject 請求在x-amz-server-side-encryption標頭aws:kms中指定,但未指定x-amz-server-side-encryption-aws-kms-key-id標頭,則 Amazon S3 會假設您想要使用 AWS 受管金鑰。無論如何,Amazon S3 用於物件加密的 AWS KMS 金鑰 ID 必須符合政策中的 AWS KMS 金鑰 ID,否則 Amazon S3 會拒絕請求。

如需 Amazon S3 特定條件金鑰的完整清單,請參閱服務授權參考中的 Amazon S3 條件金鑰

加密內容

加密內容是一組金鑰值對,其中包含資料的其他相關內容資訊。加密內容不被加密。為加密操作指定加密內容時,Amazon S3 必須指定與解密操作相同的加密內容。否則,解密失敗。 AWS KMS 會使用加密內容作為額外的已驗證資料 (AAD),以支援已驗證的加密。如需有關加密內容的詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的加密內容

根據預設,Amazon S3 會使用物件或儲存貯體 Amazon Resource Name (ARN) 作為加密內容對:

  • 如果您在未啟用 S3 儲存貯體金鑰的情況下使用 SSE-KMS,則會使用 物件 ARN 作為加密內容。

    arn:aws:s3:::object_ARN
  • 如果您使用 SSE-KMS 並啟用 S3 儲存貯體金鑰,儲存貯體 ARN 會用作加密內容。如需 S3 儲存貯體金鑰的詳細資訊,請參閱 使用 Amazon S3 儲存貯體金鑰降低 SSE-KMS 的成本

    arn:aws:s3:::bucket_ARN

您可以在 s3:PutObject 請求中使用 x-amz-server-side-encryption-context 標頭,選擇性地提供額外的加密內容對。不過,加密內容未加密,因此請確保其中不包含敏感資訊。Amazon S3 會一起存放此附加金鑰對與預設加密內容。當其處理 PUT 請求時,Amazon S3 會將 aws:s3:arn 的預設加密內容附加至您提供的加密內容。

您可以使用加密內容來識別和分類密碼編譯操作。您也可以使用預設加密內容 ARN 值, AWS CloudTrail 透過檢視與哪個加密金鑰搭配使用的 Amazon S3 ARN,在 中追蹤相關請求。

在 a CloudTrail 日誌檔案的 requestParameters欄位中,加密內容看起來類似於下列內容。

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-bucket1/file_name" }

當您將 SSE-KMS 與選用的 S3 儲存貯體金鑰功能搭配使用時,加密內容值是儲存貯體的 ARN。

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-bucket1" }

傳送 AWS KMS 加密物件的請求

重要

AWS KMS 加密物件的所有 GETPUT請求必須使用 Secure Sockets Layer (SSL) 或 Transport Layer Security (TLS) 提出。請求也必須使用有效的憑證簽署,例如 AWS Signature 第 4 版 (或 AWS Signature 第 2 版)。

AWS Signature 第 4 版是將 AWS 身分驗證資訊新增至 HTTP 傳送之請求的程序。為了安全起見,對 的大多數請求 AWS 都必須使用存取金鑰簽署,該金鑰由存取金鑰 ID 和秘密存取金鑰組成。這兩種金鑰通常稱為您的安全憑證。如需詳細資訊,請參閱身分身分驗證請求 (AWS Signature 第 4 版)Signature 第 4 版簽章程序

重要

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