使用 Amazon S3 儲存貯體金鑰降低 SSE-KMS 的成本
Amazon S3 儲存貯體金鑰使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 降低 Amazon S3 伺服器端加密的成本。使用 SSE-KMS 的儲存貯體層級金鑰可透過減少從 Amazon S3 到 AWS KMS 的請求流量,降低高達 99% 的 AWS KMS 請求成本。只要在 AWS 管理主控台 中點擊幾下,而無需對用戶端應用程式進行任何變更,您就可以設定儲存貯體,在新物件上使用 S3 儲存貯體金鑰進行 SSE-KMS 加密。
注意
使用 AWS Key Management Service (AWS KMS) 金鑰 (DSSE-KMS) 的雙層伺服器端加密不支援 S3 儲存貯體金鑰。
適用於 SSE-KMS 的 S3 儲存貯體金鑰
存取使用 SSE-KMS 加密的數百萬或數十億個物件的工作負載,可以向 AWS KMS 產生大量請求。當您使用 SSE-KMS 在沒有 S3 儲存貯體金鑰的情況下保護資料時,Amazon S3 會針對每個物件使用個別的 AWS KMS 資料金鑰。在此情況下,每次對 KMS 加密物件提出請求時,Amazon S3 都會呼叫 AWS KMS。如需 SSE-KMS 如何運作的相關資訊,請參閱 搭配 AWS KMS 金鑰 (SSE-KMS) 使用伺服器端加密。
當您將儲存貯體設定為使用 SSE-KMS 的 S3 儲存貯體金鑰時,AWS 會從 AWS KMS 產生一個短期的儲存貯體層級金鑰,然後將其暫時保留在 S3 中。此儲存貯體層級金鑰會其生命週期中建立資料金鑰。在 Amazon S3 中有時間限制的期間使用 S3 儲存貯體金鑰,可減少 S3 向 AWS KMS 提出請求以完成加密操作的需求。這可以減少從 S3 到 AWS KMS 的流量,讓您可以存取 Amazon S3 中的 AWS KMS 加密物件,且只需要先前成本的一小部分。
每個請求者至少會提取一次唯一儲存貯體層級金鑰,以確保在 AWS KMS CloudTrail 事件中擷取請求者對金鑰的存取權。當呼叫者使用不同的角色或帳戶時,Amazon S3 會將其視為不同的請求者。AWS KMS 請求反映了請求者的數量、請求模式,以及所請求物件的相對存留期。例如,較少的請求者數量、在有限的時間範圍內請求多個物件,以及使用相同的儲存貯體層級金鑰加密,會節省更多成本。
注意
使用 S3 儲存貯體金鑰可讓您透過使用儲存貯體層級金鑰來減少針對 Encrypt、GenerateDataKey 和 Decrypt 操作對 AWS KMS 發出的請求,進而節省 AWS KMS 請求成本。利用此儲存貯體層級金鑰的後續請求特意設計為不會產生 AWS KMS API 請求,或根據 AWS KMS 金鑰政策驗證存取權。
當您設定 S3 儲存貯體金鑰時,儲存貯體中已存在的物件不會使用 S3 儲存貯體金鑰。若要為現有物件設定 S3 儲存貯體金鑰,您可以使用 CopyObject 操作。如需更多詳細資訊,請參閱 在物件層級設定 S3 儲存貯體金鑰。
Amazon S3 只會針對相同 AWS KMS key 加密的物件共用 S3 儲存貯體金鑰。S3 儲存貯體金鑰與 AWS KMS 建立的 KMS 金鑰、匯入的金鑰材料以及自訂金鑰存放區支援的金鑰材料相容。
設定 S3 儲存貯體金鑰
您可以透過 Amazon S3 主控台、AWS SDK、AWS CLI 或 REST API,將儲存貯體設定為在新物件上使用 SSE-KMS 的 S3 儲存貯體金鑰。在儲存貯體上啟用 S3 儲存貯體金鑰後,使用不同所指定 SSE-KMS 金鑰上傳的物件將使用自己的 S3 儲存貯體金鑰。無論您的 S3 儲存貯體金鑰設定為何,您都可以在請求中包含具有 true 或 false 值的 x-amz-server-side-encryption-bucket-key-enabled 標頭,以覆寫儲存貯體設定。
在您將儲存貯體設定為使用 S3 儲存貯體金鑰之前,請先檢閱 啟用 S3 儲存貯體金鑰之前,要注意的變更。
使用 Amazon S3 主控台設定 S3 儲存貯體金鑰
當您建立新儲存貯體時,您可以將儲存貯體設定為在新物件上使用 SSE-KMS 的 S3 儲存貯體金鑰。您也可以透過更新儲存貯體屬性,將現有儲存貯體設定為在新物件上使用 SSE-KMS 的 S3 儲存貯體金鑰。
如需詳細資訊,請參閱「設定您的儲存貯體以使用具有 SSE-KMS 的 S3 儲存貯體來獲取新物件」。
REST API、AWS CLI 和 AWS SDK 支援 S3 儲存貯體金鑰
您可以使用 REST API、AWS CLI 或 AWS SDK 來設定儲存貯體,以在新物件上使用 SSE-KMS 的 S3 儲存貯體金鑰。您也可以在物件層級啟用 S3 儲存貯體金鑰。
如需詳細資訊,請參閱下列內容:
下列 API 操作支援 SSE-KMS 的 S3 儲存貯體金鑰:
-
-
ServerSideEncryptionRule接受啟用和停用 S3 儲存貯體金鑰的BucketKeyEnabled參數。
-
-
-
ServerSideEncryptionRule會傳回 的設定。BucketKeyEnabled
-
-
PutObject、CopyObject、CreateMultipartUpload 和 POST Object
-
x-amz-server-side-encryption-bucket-key-enabled請求標頭啟用或停用在物件層級的 S3 儲存貯體金鑰。
-
-
HeadObject、GetObject、UploadPartCopy、UploadPart 和 CompleteMultipartUpload
-
x-amz-server-side-encryption-bucket-key-enabled回應標頭表示是否為物件啟用或停用 S3 儲存貯體金鑰。
-
使用 CloudFormation
在 CloudFormation 中,AWS::S3::Bucket 資源包含一個名為 BucketKeyEnabled 的加密屬性,您可以使用該屬性來啟用或停用 S3 儲存貯體金鑰。
如需詳細資訊,請參閱「使用 CloudFormation」。
啟用 S3 儲存貯體金鑰之前,要注意的變更
啟用 S3 儲存貯體金鑰之前,請注意下列相關變更:
IAM 或 AWS KMS 金鑰政策
如果您現有的 AWS Identity and Access Management (IAM) 政策或 AWS KMS 金鑰政策使用您的物件 Amazon Resource Name (ARN) 做為加密內容來精簡或限制對 KMS 金鑰的存取權,則這些政策將無法與 S3 儲存貯體金鑰搭配使用。S3 儲存貯體金鑰使用儲存貯體 ARN 作為加密內容。在啟用 S3 儲存貯體金鑰之前,請更新您的 IAM 政策或 AWS KMS 金鑰政策,以使用儲存貯體 ARN 做為加密內容。
如需加密內容與 S3 儲存貯體金鑰的詳細資訊,請參閱 加密內容。
AWS KMS 的 CloudTrail 事件
啟用 S3 儲存貯體金鑰後,AWS KMS CloudTrail 事件會記錄您的儲存貯體 ARN,而不是物件 ARN。此外,您會在日誌中看到較少 SSE-KMS 物件的 KMS CloudTrail 事件。因為金鑰材料在 Amazon S3 中有時間限制,所以較少對 AWS KMS 提出請求。
使用 S3 儲存貯體金鑰與複寫
您可以將 S3 儲存貯體金鑰與相同區域複寫 (SRR) 和跨區域複寫 (CRR) 搭配使用。
Amazon S3 複寫加密物件時,通常會在目的地儲存貯體中保留複本物件的加密設定。不過,如果來源物件未加密,且目的地儲存貯體使用預設加密或 S3 儲存貯體金鑰,Amazon S3 會使用目的地儲存貯體的組態加密物件。
下列範例說明 S3 儲存貯體金鑰如何與複寫搭配使用。如需更多詳細資訊,請參閱 複寫加密的物件 (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)。
範例 1 — 來源物件使用 S3 儲存貯體金鑰,目的地儲存貯體使用預設加密
如果您的來源物件使用 S3 儲存貯體金鑰,但目的地儲存貯體使用預設加密搭配 SSE-KMS,則複本物件會在目的地儲存貯體中維護其 S3 儲存貯體金鑰加密設定。目的地儲存貯體仍使用預設加密搭配 SSE-KMS。
範例 2 — 來源物件未加密,目的地儲存貯體使用 S3 儲存貯體金鑰搭配 SSE-KMS
如果您的來源物件未加密,且目的地儲存貯體使用 SSE-KMS 的 S3 儲存貯體金鑰,則複本物件會使用目的地儲存貯體中的 SSE-KMS,使用 S3 儲存貯體金鑰加密。這會導致來源物件的 ETag 與複本物件的 ETag 不同。您必須更新可使用 ETag 的應用程式來容納這項差異。
使用 S3 儲存貯體金鑰
如需啟用及使用 S3 儲存貯體金鑰的詳細資訊,請參閱下列章節: