複寫使用伺服器端加密建立的物件 (SSE-C、SSE-S3、SSE-KMS、DSSE-KMS) - Amazon Simple Storage Service

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

複寫使用伺服器端加密建立的物件 (SSE-C、SSE-S3、SSE-KMS、DSSE-KMS)

重要

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

複製已使用伺服器端加密進行加密的物件時,有一些特殊的考量。Amazon S3 支援下列三種類型的伺服器端加密:

  • 使用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密

  • 使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 進行伺服器端加密

  • 使用 AWS KMS 金鑰 (DSSE-KMS) 進行雙層伺服器端加密

  • 使用客戶提供金鑰 (SSE-C) 的伺服器端加密

如需伺服器端加密的詳細資訊,請參閱「使用伺服器端加密保護資料」。

本主題說明指示 Amazon S3 複寫已使用伺服器端加密進行加密的物件所需的許可。本主題也提供您可以新增的其他組態元素,以及授與複寫加密物件所需權限的範例 AWS Identity and Access Management (IAM) 政策。

如需包含 step-by-step 指示的範例,請參閱複寫加密的物件。如需建立複寫組態的資訊,請參閱 複寫物件

注意

您可以 AWS KMS keys 在 Amazon S3 中使用多區域。但是,Amazon S3 目前將多區域金鑰視為單區域金鑰,並且不使用金鑰的多區域功能。如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的使用多區域金鑰

預設儲存貯體加密如何影響複寫

在您啟用域複寫目的地儲存貯體的預設加密之後,適用下列加密行為:

  • 如果未加密來源儲存貯體中的物件,則會使用目的地儲存貯體的預設加密設定來加密目的地儲存貯體中的複本物件。因此,來源物件的實體標籤 (ETag) 與複本物件的 ETag 不同。如果您有使用 ETag 的應用程式,則必須更新這些應用程式以解決此差異。

  • 如果來源儲存貯體中的物件使用伺服器端加密與 Amazon S3 受管金鑰 (SSE-S3)、使用 () 金鑰 (SSE-KMS AWS KMS) 進行伺服器端加密,或使用金鑰的雙層伺服器端加密 (DSSE-KMS) 加密,目的地儲存貯體中的複本物件會使用與 AWS KMS 來源物件相同的加密類型。 AWS Key Management Service 不會使用目的地儲存貯體的預設加密設定。

複寫使用 SSE-C 加密的物件

藉由搭配客戶提供的加密金鑰 (SSE-C) 使用伺服器端加密,您可以管理專屬加密金鑰。使用 SSE-C,您負責管理金鑰,而 Amazon S3 則管理加密和解密程序。您必須提供加密金鑰作為請求的一部分,但不需要撰寫任何程式碼來執行物件加密或解密。當您上傳物件時,Amazon S3 會使用您提供的金鑰加密物件。然後 Amazon S3 會從記憶體中清除該金鑰。當您擷取物件時,您必須在要求中提供相同的加密金鑰。如需詳細資訊,請參閱 搭配客戶提供的金鑰 (SSE-C) 使用伺服器端加密

S3 複寫支援使用 SSE-C 加密的物件。 您可以在 Amazon S3 主控台或使用 AWS 開發套件設定 SSE-C 物件複寫,方式與設定未加密物件的複寫相同。除了目前複寫所需的許可外,沒有其他 SSE-C 許可。

如果新上傳的 SSE-C 加密物件符合資格,S3 複寫會根據 S3 複寫組態自動複寫這些物件。如需複寫儲存貯體中的現有物件,請使用 S3 批次複寫。如需複寫物件的詳細資訊,請參閱 設定複寫使用 S3 批次複寫來複寫現有物件

複寫 SSE-C 物件沒有額外費用。如需複寫定價的詳細資訊,請參閱 Amazon S3 定價頁面

複寫使用 SSE-S3、SSE-KMS 或 DSSE-KMS 加密的物件

根據預設,Amazon S3 不會複寫使用 SSE-KMS 或 DSSE-KMS 加密的物件。本節說明您可以新增,以指示 Amazon S3 複寫這些物件的額外組態元素。

如需包含 step-by-step 指示的範例,請參閱複寫加密的物件。如需建立複寫組態的資訊,請參閱 複寫物件

在複寫組態中指定其他資訊

在複寫組態中,請執行下列作業:

  • 在複寫組態中的Destination元素中,新增您希望 Amazon S3 用來加密物件複本之對稱 AWS KMS 客戶受管金鑰的 ID,如以下範例複寫組態所示。

  • 透過啟用使用 KMS 金鑰 (SSE-KMS 或 DSSE-KMS) 加密物件的複寫,來明確加入。若要選擇加入,請新增 SourceSelectionCriteria 元素,如以下範例複寫組態所示。

<ReplicationConfiguration> <Rule> ... <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> ... <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key ARN or Key Alias ARN that's in the same AWS 區域 as the destination bucket.</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> ... </Rule> </ReplicationConfiguration>
重要

KMS 金鑰必須建立在與目標儲存貯體 AWS 區域 相同的位置。

KMS 金鑰必須有效。PutBucketReplication API 操作不會檢查 KMS 金鑰是否有效。如果使用無效的 KMS 金鑰,您會收到 HTTP 200 OK 狀態碼回應,但複寫會失敗。

下列範例顯示複寫組態,其中包含選用組態元素。此複寫組態具有一項規則。該規則會套用至金鑰前綴為 Tax 的物件。Amazon S3 會使用特定 AWS KMS key ID 來加密這些物件複本。

<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <ID>Rule-1</ID> <Priority>1</Priority> <Status>Enabled</Status> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Destination> <Bucket>arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key ARN or Key Alias ARN that's in the same AWS 區域 as the destination bucket. (S3 uses this key to encrypt object replicas.)</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> </Rule> </ReplicationConfiguration>

授予 IAM 角色的額外許可

若要使用 SSE-S3、SSE-KMS 或 DSSE-KMS 複寫靜態加密的物件,請將下列額外權限授與您在複寫組態中指定的 AWS Identity and Access Management (IAM) 角色。您可以透過更新與 IAM 角色相關聯的許可政策,來授予這些許可。

  • 來源物件的 s3:GetObjectVersionForReplication 動作 – 此動作允許 Amazon S3 複寫未加密的物件,以及使用 SSE-S3、SSE-KMS 或 DSSE-KMS 搭配伺服器端加密建立的物件。

    注意

    建議您使用 s3:GetObjectVersionForReplication 動作,不要使用 s3:GetObjectVersion 動作,因為 s3:GetObjectVersionForReplication 只會提供 Amazon S3 複寫所需的最低許可。此外,s3:GetObjectVersion 動作還允許複寫未加密物件和 SSE-S3 加密物件,但不允許複寫使用 KMS 金鑰 (SSE-KMS 或 DSSE-KMS) 加密的物件。

  • kms:Decrypt和 KMS 金鑰的kms:Encrypt AWS KMS 動作

    • 您必須針對用來解密來源物件的 AWS KMS key 授予 kms:Decrypt 許可。

    • 您必須針對用來加密物件複本的 AWS KMS key 授予 kms:Encrypt 許可。

  • kms:GenerateDataKey複寫純文字物件的動作 – 如果您要將純文字物件複寫到預設已啟用 SSE-KMS 或 DSSE-KMS 加密的儲存貯體,則必須在 IAM 政策中包含目的地加密內容和 KMS 金鑰的 kms:GenerateDataKey 許可。

建議您使用條件索引鍵,僅限於目的地值區和物 AWS KMS 件的這些權限。擁 AWS 帳戶 有 IAM 角色的擁有權限必須具有政策中所列 KMS 金鑰的kms:Encryptkms:Decrypt動作的許可。如果 KMS 金鑰由另一個金鑰所擁有 AWS 帳戶,KMS 金鑰的擁有者必須將這些權限授與擁 AWS 帳戶 有 IAM 角色的擁有者。如需管理這些 KMS 金鑰存取權的詳細資訊,請參閱 AWS Key Management Service 開發人員指南 AWS KMS中的搭配使用 IAM 政策

S3 儲存貯體金鑰和複寫

若要使用 S3 儲存貯體金鑰的複寫,用於加密物件複本的 KMS 金鑰 AWS KMS key 政策必須包含呼叫主體的kms:Decrypt權限。在使用 S3 儲存貯體金鑰之前,對 kms:Decrypt 的呼叫會驗證 S3 儲存貯體金鑰的完整性。如需詳細資訊,請參閱 使用 S3 儲存貯體金鑰與複寫

針對來源或目的地儲存貯體啟用 S3 儲存貯體金鑰時,加密內容將是儲存貯體 Amazon Resource Name (ARN),而不是物件的 ARN (例如,arn:aws:s3:::bucket_ARN)。您必須更新 IAM 政策,才能將儲存貯體 ARN 用於加密內容:

"kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::bucket_ARN" ]

如需詳細資訊,請參閱〈使用 REST API〉一節中的 加密上下文(x-amz-server-side-加密上下文)啟用 S3 儲存貯體金鑰之前,要注意的變更

範例政策 – 搭配複寫使用 SSE-S3 和 SSE-KMS

下列範例 IAM 政策顯示了搭配複寫使用 SSE-S3 和 SSE-KMS 的陳述式。

範例 – 透過不同的目的地儲存貯體使用 SSE-KMS

下列範例政策顯示搭配不同目的地儲存貯體使用 SSE-KMS 的陳述式。

{ "Version":"2012-10-17", "Statement":[ { "Action": ["kms:Decrypt"], "Effect": "Allow", "Condition": { "StringLike": { "kms:ViaService": "s3.source-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET/key-prefix1*" ] } }, "Resource": [ "List of AWS KMS key ARNs that are used to encrypt source objects." ] }, { "Action": ["kms:Encrypt"], "Effect": "Allow", "Condition": { "StringLike": { "kms:ViaService": "s3.destination-bucket-1-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET1/key-prefix1*" ] } }, "Resource": [ "AWS KMS key ARNs (in the same AWS 區域 as destination bucket 1). Used to encrypt object replicas created in destination bucket 1." ] }, { "Action": ["kms:Encrypt"], "Effect": "Allow", "Condition": { "StringLike": { "kms:ViaService": "s3.destination-bucket-2-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": [ "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET2/key-prefix1*" ] } }, "Resource": [ "AWS KMS key ARNs (in the same AWS 區域 as destination bucket 2). Used to encrypt object replicas created in destination bucket 2." ] } ] }
範例 – 複寫使用 SSE-S3 和 SSE-KMS 建立的物件

下列是完整 IAM 政策,其會授予必要的許可來複寫未加密的物件、使用 SSE-S3 建立的物件,以及使用 SSE-KMS 建立的物件。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET/key-prefix1*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/key-prefix1*" }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.source-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET/key-prefix1*" ] } }, "Resource":[ "List of the AWS KMS key ARNs that are used to encrypt source objects." ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.destination-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/prefix1*" ] } }, "Resource":[ "AWS KMS key ARNs (in the same AWS 區域 as the destination bucket) to use for encrypting object replicas" ] } ] }
範例 – 使用 S3 儲存貯體金鑰來複寫物件

以下是完整的 IAM 政策,可以授予使用 S3 儲存貯體金鑰來複寫物件的必要許可。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET/key-prefix1*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/key-prefix1*" }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.source-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET" ] } }, "Resource":[ "List of the AWS KMS key ARNs that are used to encrypt source objects." ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.destination-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET" ] } }, "Resource":[ "AWS KMS key ARNs (in the same AWS 區域 as the destination bucket) to use for encrypting object replicas" ] } ] }

跨帳戶案例之授予其他許可

在跨帳戶案例中,來源和目的地儲存貯體擁有不同的情況下 AWS 帳戶,您可以使用 KMS 金鑰來加密物件複本。但是,KMS 金鑰擁有者必須授予來源儲存貯體擁有者使用 KMS 金鑰的許可。

注意

因為您無法修改金鑰政策,透過 AWS 受管金鑰 加密的物件無法跨帳戶分享。如果您需要跨帳戶複寫 SSE-KMS 資料,則必須從中使用客戶管理的金鑰。 AWS KMS

授予來源儲存貯體擁有者使用 KMS 金鑰的許可 (AWS KMS 主控台)
  1. 請登入 AWS Management Console 並開啟 AWS KMS 主控台,網址為 https://console.aws.amazon.com/kms

  2. 若要變更 AWS 區域,請使用頁面右上角的「地區」選取器。

  3. 若要檢視您所建立及管理帳戶中的金鑰,請在導覽窗格中選擇Customer managed keys (客戶受管金鑰)。

  4. 選擇 KMS 金鑰。

  5. 一般組態下,選擇金鑰政策標籤。

  6. 向下捲動至「其他 AWS 帳戶」。

  7. 選擇 [新增其他] AWS 帳戶。

    這時系統顯示 AWS 帳戶 「其他」對話框

  8. 在對話方塊中,選擇 [新增其他] AWS 帳戶。針對 arn:aws:iam::,輸入來源儲存貯體帳戶 ID。

  9. 選擇儲存變更

若要授予來源儲存貯體擁有者使用 KMS 金鑰的許可 (AWS CLI)

AWS KMS 交易配額考量

當您在啟用跨區域複寫 (CRR) 之後新增許多具有 AWS KMS 加密功能的新物件時,您可能會遇到節流 (HTTP 錯誤)。503 Service Unavailable當每秒 AWS KMS 交易數量超過目前配額時,即會發生限流。如需詳細資訊,請參閱《AWS Key Management Service 開發人員指南》中的配額

若要請求提升配額,請使用 Service Quotas。如需詳細資訊,請參閱請求增加配額。如果您的地區不支援 Service Quotas,請提出 AWS Support 案例