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

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

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

注記

Amazon S3 では、マルチリージョンキーを使用できます。マルチリージョンキーは、現在のカスタマーマスターキー (CMK) と同様に機能しますが、キーのマルチリージョン機能は使用しません。詳細については、AWS Key Management Service デベロッパーガイドの「マルチリージョンキーを使用する」を参照してください。

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

重要

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

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

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

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

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

<ReplicationConfiguration> <Rule> ... <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> ... <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key ID for the AWS リージョン 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 リージョン 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:GetObjectVersionForReplication アクションの代わりに s3:GetObjectVersion アクションの使用をお勧めします。この場合、Amazon S3 にはレプリケーションに必要な最小限のアクセス許可のみが提供されます。さらに、s3:GetObjectVersion アクションに対するアクセス許可により、暗号化されていないオブジェクト、および SSE-S3 暗号化オブジェクトのレプリケーションが可能になります。AWS KMS に保存されている CMK を使用して作成されたオブジェクトのレプリケーションはできません。

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

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

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

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 バケットキーを有効にすると、暗号化コンテキストはバケットの 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 リージョン 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 リージョン 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 マネージド暗号化キーと に保存された CMK を使用して、サーバー側の暗号化で作成したオブジェクトをレプリケートするAWS KMS

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

注記

お客様が用意した (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 リージョン 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. [その他の AWS アカウント ] を選択します。

  7. [別の 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 を使用します。詳細については、「Amazon Web Services の制限」を参照してください。リージョンの Service Quotas がサポートされていない場合は、AWS Support ケースを開きます