AWS KMS CMK を使用して、サーバー側の暗号化 (SSE) で作成されたオブジェクトをレプリケートする - Amazon Simple Storage Service

AWS KMS CMK を使用して、サーバー側の暗号化 (SSE) で作成されたオブジェクトをレプリケートする

デフォルトで、Amazon S3 では AWS KMS に保存されたカスタマーマスターキー (CMK) でサーバー側の暗号化を使用して保管時に保存されるオブジェクトをレプリケートしません。このセクションでは、Amazon S3 にこれらのオブジェクトをレプリケートするよう指示するために追加する追加の設定について説明します。

重要

暗号化されたデータのレプリケーションは、すべて Amazon S3 内で発生するサーバー側のプロセスです。お客様が用意した (SSE-C) 暗号化キーを使用してサーバー側の暗号化で作成されたオブジェクトは、レプリケートされません。

ステップバイステップの手順と例については、「暗号化オブジェクトのレプリケート」を参照してください。レプリケーション設定の作成については、「オブジェクトのレプリケーション」を参照してください。

レプリケーション設定の追加情報の指定

レプリケーション設定で、以下を実行してください。

  • Destination 設定で、オブジェクトレプリカを暗号化するために Amazon S3 で使用するカスタマーマネージドの AWS KMS CMK を追加します。

  • SourceSelectionCriteria 要素を追加し、AWS KMS CMK を使用して暗号化されたオブジェクトのレプリケーションを有効にすることで、明示的にオプトインします。

<ReplicationConfiguration> <Rule> ... <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> ... <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key ID for the AWS region of the destination bucket.</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> ... </Rule> </ReplicationConfiguration>
重要

AWS KMS CMK は、レプリケート先バケットと同じ AWS リージョン内で作成されている必要があります。

AWS KMS CMK は有効である必要がありますPUT バケットレプリケーション API は、AWS KMS CMK の有効性を確認することはしません。無効な CMK を使用した場合、応答として 200 OK ステータスコードを受け取りますが、レプリケーションは失敗します。

次の例は、オプションの設定要素が含まれているレプリケーション設定を示します。

<?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:::destination-bucket</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>The AWS KMS key ID for the AWS region of the destination buckets (S3 uses it to encrypt object replicas).</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> </Rule> </ReplicationConfiguration>

このレプリケーション設定にはルールが 1 つあります。このルールは、Tax キープレフィックスが付いているオブジェクトに適用されます。Amazon S3 は、AWS KMS キー ID を使用してこれらのオブジェクトレプリカを暗号化します。

IAM ロールに対する追加のアクセス許可の付与

AWS Key Management Service (AWS KMS) で保管時に暗号化されたオブジェクトをレプリケートするには、レプリケーション設定で指定した IAM ロールに以下の追加許可を付与します。IAM ロールに関連付けられているアクセス許可ポリシーを更新してこれらの権限を付与します。お客様が用意した (SSE-C) 暗号化キーを使用してサーバー側の暗号化で作成されたオブジェクトは、レプリケートされません。

  • レプリケート元オブジェクトのための s3:GetObjectVersionForReplication アクション – Amazon S3 は、暗号化されていないオブジェクト、および Amazon S3 マネージドの暗号化 (SSE-S3) キーまたは AWS KMS (SSE-KMS) に保存された CMK を使用して、サーバー側の暗号化で作成されたオブジェクトの両方をレプリケートできるようになります。

    注記

    s3:GetObjectVersion アクションの代わりに s3:GetObjectVersionForReplication アクションの使用をお勧めします。この場合、Amazon S3 にはレプリケーションに必要な最小限のアクセス許可のみが提供されます。さらに、s3:GetObjectVersion アクションに対する許可により、暗号化されていないオブジェクト、および SSE-S3 暗号化オブジェクトのレプリケーションが可能になります。AWS KMS に保存されている CMK を使用して作成されたオブジェクトのレプリケーションはできません。

  • kms:Decrypt および kms:Encrypt AWS KMS アクション:

    • レプリケート元オブジェクトの復号に使用された AWS KMS CMK に対する kms:Decrypt 許可

    • オブジェクトレプリカの暗号化に使用された AWS KMS CMK に対する kms:Encrypt 許可

AWS KMS 条件キーを使用して、これらの許可を、レプリケート先バケットとオブジェクトのみに制限することをお勧めします。IAM ロールを所有する AWS アカウントは、ポリシーに含まれる AWS KMS CMK の AWS KMS アクション (kms:Encrypt および kms:Decrypt) に対する権限を持っている必要があります。AWS KMS の CMK が別の AWS アカウントによって所有されている場合、CMK 所有者は、IAM ロールを所有する AWS アカウントにこれらの許可を付与する必要があります。これらの CMK へのアクセス管理の詳細については、AWS Key Management Service デベロッパーガイドAWS KMS での IAM ポリシーの使用を参照してください。

Amazon S3 バケットキーとレプリケーション

S3 Bucket Key でレプリケーションを使用するには、オブジェクトレプリカの暗号化に使用される CMK の AWS KMS キーポリシーに、呼び出しているプリンシパルのための kms:Decrypt 許可が含まれている必要があります。kms:Decrypt の呼び出しでは、S3 バケットキーを使用する前にその整合性を検証します。

レプリケート元バケットおよびレプリケート先バケットで S3 バケットキーを有効にすると、暗号化コンテキストはバケットの Amazon リソースネーム (ARN) になり、オブジェクト ARN にはなりません。例えば、arn:aws:s3:::bucket_ARN です。IAM ポリシーを更新して、暗号化コンテキストにバケット ARN を使用する必要があります。ただし、S3 バケットキーが送信先バケットでのみ有効であり、送信元バケットでは有効になっていない場合は、暗号化コンテキストにバケット ARN を使用するように IAM ポリシーを更新する必要はありません。

以下の例は、バケット ARN を使用した暗号化コンテキストを示しています。

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

詳細については、「暗号化コンテキスト」および「S3 バケットキーを有効にする前に注意するべき変更点」を参照してください。

ポリシーの例 - AWS KMS サーバー側の暗号化 (SSE-KMS) のレプリケーションでの使用

次の IAM ポリシーの例は、AWS KMS サーバー側の暗号化をレプリケーションで使用するためのステートメントを示しています。

この例では、暗号化コンテキストはオブジェクト ARN です。S3 バケットキーを有効にして SSE-KMS を使用する場合は、暗号化コンテキストとしてバケット ARN を使用する必要があります。詳細については、「暗号化コンテキスト」を参照してください。

そのファイルに

例 AWS KMS サーバー側暗号化 (SSE-KMS) の使用 – 個別のレプリケート先バケット

次のポリシーの例は、個別のレプリケート先バケットで AWS KMS を使用するためのステートメントを示しています。

{ "Version": "2012-10-17", "Statement": [{ "Action": ["kms:Decrypt"], "Effect": "Allow", "Resource": "List of AWS KMS key ARNs used to encrypt source objects.", "Condition": { "StringLike": { "kms:ViaService": "s3.source-bucket-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::source-bucket-name/key-prefix1/*" } } }, { "Action": ["kms:Encrypt"], "Effect": "Allow", "Resource": "AWS KMS key ARNs (for the AWS Region of the destination bucket 1). Used to encrypt object replicas created in destination bucket 1.", "Condition": { "StringLike": { "kms:ViaService": "s3.destination-bucket-1-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::destination-bucket-name-1/key-prefix1/*" } } }, { "Action": ["kms:Encrypt"], "Effect": "Allow", "Resource": "AWS KMS key ARNs (for the AWS Region of destination bucket 2). Used to encrypt object replicas created in destination bucket 2.", "Condition": { "StringLike": { "kms:ViaService": "s3.destination-bucket-2-region.amazonaws.com", "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::destination-bucket-2-name/key-prefix1*" } } } ] }

例 Amazon S3 マネージド暗号化キーと AWS KMS に保存された CMK を使用して、サーバー側の暗号化で作成したオブジェクトをレプリケートする

次に示すものは、暗号化されていないオブジェクトや、Amazon S3 マネージド暗号化キーおよび AWS KMS に保存されている CMK を使用してサーバー側の暗号化で作成したオブジェクトをレプリケートするのに必要な許可を付与する完全な IAM ポリシーです。

注記

お客様が用意した (SSE-C) 暗号化キーを使用してサーバー側の暗号化で作成されたオブジェクトは、レプリケートされません。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::source-bucket/key-prefix1*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::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:::source-bucket-name/key-prefix1*" ] } }, "Resource":[ "List of AWS KMS key ARNs 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:::destination-bucket-name/prefix1*" ] } }, "Resource":[ "AWS KMS key ARNs (for the AWS Region of the destination buckets) to use for encrypting object replicas" ] } ] }

クロスアカウントシナリオに対する追加のアクセス許可の付与

レプリケート元バケットとレプリケート先バケットが、異なる AWS アカウントによって所有されているクロスアカウントシナリオでは、カスタマー管理 CMK を使用してオブジェクトレプリカを暗号化できます。ただし、CMK 所有者は、レプリケート元バケットの所有者に CMK を使用するアクセス許可を与える必要があります。

レプリケーション元バケットの所有者に AWS KMS CMK を使用するための許可を付与するには (IAM コンソール)

  1. AWS Management Console にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

  2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。

  3. ユーザーが作成および管理するアカウント内のキーを表示するには、ナビゲーションペインで [Customer managed keys (カスタマー管理型のキー)] を選択します。

  4. CMK を選択します。

  5. [General configuration (一般設定)] で [Key policy (キーポリシー)] タブを選択します。

  6. [Other AWS Accounts] (その他の AWS アカウント) を選択します。

  7. [Add another AWS Account] (別の AWS アカウントの追加) を選択します。

  8. [arn:aws:iam::] に、レプリケート元バケットのアカウント ID を入力します。

  9. [Save Changes] を選択します。

レプリケーション元バケットの所有者に AWS KMS CMK を使用するための許可を付与するには (AWS CLI)

AWS KMS トランザクション制限に関する考慮事項

クロスリージョンレプリケーション (CRR) を有効にした後、AWS KMS の暗号化を使用して多数の新しいオブジェクトを追加すると、スロットリング (HTTP 503 Slow Down エラー) が発生する可能性があります。1 秒あたりの AWS KMS トランザクション数が現在の制限を超えると、スロットリングが発生します。詳細については、AWS Key Management Service デベロッパーガイド制限を参照してください。

制限の引き上げを要求するには、サービスクォータを使用します。詳細については、「アマゾン ウェブ サービスの制限」を参照してください。リージョンの Service Quotas がサポートされていない場合は、AWS Support ケースを開きます