暗号化されたオブジェクトのレプリケート (SSE-C、SSE-S3、SSE-KMS、DSSE-KMS) - Amazon Simple Storage Service

暗号化されたオブジェクトのレプリケート (SSE-C、SSE-S3、SSE-KMS、DSSE-KMS)

重要

Amazon S3 では、Amazon S3 内のすべてのバケットの基本レベルの暗号化として、Amazon S3 が管理するキー (SSE-S3) によるサーバー側の暗号化が適用されるようになりました。2023 年 1 月 5 日以降、Amazon S3 にアップロードされるすべての新しいオブジェクトは、追加費用なしで、パフォーマンスに影響を与えずに自動的に暗号化されます。S3 バケットのデフォルト暗号化設定と新しいオブジェクトのアップロードのための自動暗号化ステータスは、AWS CloudTrail ログ、S3 インベントリ、S3 ストレージレンズ、Amazon S3 コンソール、および AWS Command Line Interface と AWS SDK の追加の Amazon S3 API レスポンスヘッダーとして利用できるようになりました。詳細については、「デフォルト暗号化に関するよくある質問」を参照してください。

サーバー側の暗号化を使用して暗号化されているオブジェクトをレプリケートする場合は、いくつかの特別な考慮事項があります。Amazon S3 は、以下の 3 種類のサーバー側の暗号化をサポートしています。

  • 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) ポリシーの例も提供します。

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

注記

Amazon S3 では、マルチリージョン AWS KMS keys を使用できます。ただし、Amazon S3 では現在、マルチリージョンキーは、単一リージョンキーであるかのように処理され、キーのマルチリージョン特徴は使用しません。詳細については、「AWS Key Management Service デベロッパーガイド」の「マルチリージョンキーを使用する」を参照してください。

バケットのデフォルトの暗号化がレプリケーションに与える影響

レプリケーション先バケットのデフォルトの暗号化を有効にすると、以下の暗号化動作が適用されます。

  • レプリケート元バケットのオブジェクトが暗号化されていない場合、レプリケート先バケットのレプリカオブジェクトはレプリケート先バケットのデフォルトの暗号化設定を使用して暗号化されます。そのため、レプリケート元のオブジェクトのエンティティタグ (ETag) はレプリカオブジェクトの ETag とは異なります。アプリケーションで ETag を使用している場合は、アプリケーションを更新して、この違いを反映する必要があります。

  • レプリケート元バケット内のオブジェクトが Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3)、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS)、または AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS) を使用して暗号化されている場合、レプリケート先バケットのレプリカオブジェクトは、レプリケート元オブジェクトと同じタイプの暗号化を使用します。レプリケート先バケットのデフォルトの暗号化設定は使用されません。

SSE-C で暗号化されたオブジェクトのレプリケーション

お客様が指定したキーによるサーバー側の暗号化 (SSE-C) を使用することで、独自の暗号化キーを管理できます。SSE-C ではユーザーがキーを管理し、Amazon S3 は暗号化と復号のプロセスを管理します。ユーザーはリクエストの一部として暗号化キーを指定する必要がありますが、オブジェクトの暗号化または復号を実行するコードを記述する必要はありません。オブジェクトをアップロードすると、Amazon S3 は指定されたキーを使用してオブジェクトを暗号化します。その後、Amazon S3 はそのキーをメモリから削除します。オブジェクトを取得するときは、リクエストの中で同じ暗号化キーを指定する必要があります。詳細については、「お客様が指定したキーによるサーバー側の暗号化 (SSE−C) の使用」を参照してください。

S3 レプリケーションは SSE-C で暗号化されたオブジェクトをサポートしています。SSE-C オブジェクトのレプリケーションは、暗号化されていないオブジェクトのレプリケーションを設定するのと同じ方法で、Amazon S3 コンソールまたは AWS SDK で設定できます。レプリケーションに現在必要な権限以外に SSE-C 権限を追加することはできません。

S3 レプリケーションは、新しくアップロードされた SSE-C 暗号化オブジェクトを、S3 レプリケーション設定に従って自動的にレプリケートします (該当する場合)。バケット内の既存のオブジェクトをレプリケートするには、S3 バッチレプリケーションを使用します。オブジェクトのレプリケーションの詳細については、「ライブレプリケーションの設定」および「S3 バッチレプリケーションを使用した既存のオブジェクトのレプリケーション」を参照してください。

SSE-C オブジェクトのレプリケートに追加料金はかかりません。レプリケーション料金の詳細については、「Amazon S3 の料金ページ」を参照してください。

SSE-S3、SSE-KMS、または DSSE-KMS で暗号化されたオブジェクトのレプリケーション

デフォルトでは、Amazon S3 は SSE-KMS または DSSE-KMS で暗号化されたオブジェクトをレプリケートしません。このセクションでは、これらのオブジェクトをレプリケートするよう Amazon S3 に指示するために追加できるその他の設定要素について説明します。

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

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

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

  • 次のレプリケーション設定例に示すように、レプリケーション設定の 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 ステータスコードを受け取りますが、レプリケーションは失敗します。

次の例は、オプションの設定要素が含まれているレプリケーション設定を示します。このレプリケーション設定にはルールが 1 つあります。このルールは、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:::amzn-s3-demo-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:GetObjectVersion アクションの代わりに s3:GetObjectVersionForReplication アクションの使用をお勧めします。s3:GetObjectVersionForReplication ではレプリケーションに必要な最小限のアクセス許可のみを Amazon S3 に提供するためです。さらに、s3:GetObjectVersion アクションにより、暗号化されていないオブジェクトや SSE-S3 で暗号化されたオブジェクトはレプリケートできますが、KMS キー (SSE-KMS または DSSE-KMS) を使用して暗号化されたオブジェクトをレプリケートすることはできません。

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

    • レプリケート元オブジェクトの復号に使用された AWS KMS keyに対して kms:Decrypt 権限を付与する必要があります。

    • オブジェクトレプリカの暗号化に使用された AWS KMS keyに対して kms:Encrypt 許可を付与する必要があります。

  • プレーンテキストオブジェクトをレプリケートするための kms:GenerateDataKey アクション — SSE-KMS または DSSE-KMS 暗号化がデフォルトで有効になっているバケットにプレーンテキストオブジェクトをレプリケートする場合は、レプリケート先の暗号化コンテキストと KMS キーの kms:GenerateDataKey アクセス許可を IAM ポリシーに含める必要があります。

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

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

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

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

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

詳細については、「暗号化コンテキスト (x-amz-server-side-encryption-context)」 (「REST API の使用」セクション) と「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:::amzn-s3-demo-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:::amzn-s3-demo-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:::amzn-s3-demo-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 で作成したオブジェクトのレプリケーション

以下は、暗号化されていないオブジェクト、SSE-S3 で作成したオブジェクト、および SSE-KMS で作成したオブジェクトをレプリケートするのに必要な許可を付与する完全な IAM ポリシーを示しています。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket/key-prefix1*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::amzn-s3-demo-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:::amzn-s3-demo-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:::amzn-s3-demo-destination-bucket/prefix1*" ] } }, "Resource":[ "AWS KMS key ARNs (in the same AWS リージョン as the destination bucket) to use for encrypting object replicas" ] } ] }
例 – S3 バケットキーを使用したオブジェクトのレプリケーション

次に示すのは、S3 バケットキーを使用してオブジェクトをレプリケートするのに必要なアクセス許可を付与する完全な IAM ポリシーです。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket/key-prefix1*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::amzn-s3-demo-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:::amzn-s3-demo-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:::amzn-s3-demo-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 キーを使用する許可を付与する必要があります。

注記

SSE-KMS データをクロスアカウントでレプリケートする必要がある場合、レプリケーションルールでは、レプリケート先アカウントの AWS KMS からのカスタマーマネージドキーを指定する必要があります。AWS マネージドキー はクロスアカウントの使用を許可しないため、クロスアカウントレプリケーションの実行には使用できません。

レプリケート元バケット所有者に 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) を使用する許可を付与するには
  • put-key-policy AWS Command Line Interface (AWS CLI) コマンドの詳細については、「AWS CLI コマンドリファレンス」の「put-key-policy」を参照してください。基盤となる PutKeyPolicy API オペレーションの詳細については、「AWS Key Management Service API リファレンス」の「PutKeyPolicy」を参照してください。

AWS KMS トランザクションクォータに関する考慮事項

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

クォータの引き上げをリクエストするには、Service Quotas を使用してください。詳細については、「Requesting a quota increase」(クォータ引き上げのリクエスト) を参照してください。リージョンの Service Quotas がサポートされていない場合は、AWS Support ケースを開きます

暗号化されたオブジェクトのレプリケーションの有効化

デフォルトでは、Amazon S3 は AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) または AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS) を使用して暗号化されたオブジェクトをレプリケートしません。SSE-KMS または DSSE-KMS で暗号化されたオブジェクトをレプリケートするには、バケットレプリケーション設定を変更して、Amazon S3 がこれらのオブジェクトをレプリケートするように指示します。この例では、Amazon S3 コンソールと AWS Command Line Interface (AWS CLI) を使用してバケットのレプリケーション設定を変更し、暗号化オブジェクトのレプリケーションを有効にする方法について説明します。

詳細については、「暗号化されたオブジェクトのレプリケート (SSE-C、SSE-S3、SSE-KMS、DSSE-KMS)」を参照してください。

注記

レプリケート元バケットまたはレプリケート先バケットで S3 バケットキーを有効にすると、暗号化コンテキストはバケットの Amazon リソースネーム (ARN) になり、オブジェクトの ARN にはなりません。暗号化コンテキストとしてバケット ARN を使用するには、IAM ポリシーを更新する必要があります。詳細については、「S3 バケットキーとレプリケーション」を参照してください。

注記

Amazon S3 では、マルチリージョン AWS KMS keys を使用できます。ただし、Amazon S3 では現在、マルチリージョンキーは、単一リージョンキーであるかのように処理され、キーのマルチリージョン特徴は使用しません。詳細については、「AWS Key Management Service デベロッパーガイド」の「マルチリージョンキーを使用する」を参照してください。

手順については、「同じアカウントが所有するレプリケート元バケットとレプリケート先バケットのレプリケーションの設定」を参照してください。このトピックでは、バケットが同一の、または異なる AWS アカウント によって所有されている場合にレプリケーション設定を行う手順について説明します。

AWS CLI で暗号化されたオブジェクトをレプリケートするには、以下の操作を実行します。

  • レプリケート元バケットとレプリケート先バケットを作成して、これらのバケットのバージョニングを有効にします。

  • Amazon S3 にオブジェクトをレプリケートするアクセス許可を付与する AWS Identity and Access Management (IAM) サービスロールを作成します。IAM ロールのアクセス許可には、暗号化されたオブジェクトをレプリケートするために必要なアクセス許可が含まれています。

  • レプリケート元バケットにレプリケーション設定を追加します。レプリケーション設定は、KMS キーを使用して暗号化されたオブジェクトのレプリケーションに関する情報を提供します。

  • レプリケート元バケットに暗号化されたオブジェクトを追加します。

  • セットアップをテストして、暗号化されたオブジェクトがレプリケート先バケットにレプリケートされていることを確認します。

このプロセスを以下の手順で説明します。

サーバー側の暗号化されたオブジェクトをレプリケートするには (AWS CLI)
  1. この例では、amzn-s3-demo-source-bucket バケットと amzn-s3-demo-destination-bucket バケットの両方を同じ AWS アカウント に作成します。AWS CLI の認証情報プロファイルも設定します。この例では、プロファイル名 acctA を使用します。

    認証情報プロファイルの設定については、AWS Command Line Interfaceユーザーガイドの「名前付きプロファイル」を参照してください。この例のコマンドを使用するには、user input placeholders を自分の情報に置き換えてください。

  2. 次のコマンドを使用して DOC-EXAMPLE-SOURCE-BUCKET バケットを作成し、バージョニングを有効にします。次の例のコマンドは、DOC-EXAMPLE-SOURCE-BUCKET バケットを米国東部 (バージニア北部) (us-east-1) リージョンに作成します。

    aws s3api create-bucket \ --bucket DOC-EXAMPLE-SOURCE-BUCKET \ --region us-east-1 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket DOC-EXAMPLE-SOURCE-BUCKET \ --versioning-configuration Status=Enabled \ --profile acctA
  3. 次のコマンドを使用して DOC-EXAMPLE-DESTINATION-BUCKET バケットを作成し、バージョニングを有効にします。次のコマンドは、DOC-EXAMPLE-DESTINATION-BUCKET バケットを米国西部 (オレゴン) (us-west-2) リージョンに作成します。

    注記

    DOC-EXAMPLE-SOURCE-BUCKET と DOC-EXAMPLE-DESTINATION-BUCKET の両方のバケットが同じ AWS アカウント にあるときに、レプリケーション設定をセットアップするには、同じプロファイルを使用します。この例では、acctA を使用します。バケットが異なる AWS アカウント によって所有されているときに、レプリケーションを設定するには、それぞれに異なるプロファイルを指定します。

    aws s3api create-bucket \ --bucket DOC-EXAMPLE-DESTINATION-BUCKET \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket DOC-EXAMPLE-DESTINATION-BUCKET \ --versioning-configuration Status=Enabled \ --profile acctA
  4. 次に、IAM サービスロールを作成します。このロールは、後で DOC-EXAMPLE-SOURCE-BUCKET バケットに追加するレプリケーション設定で指定します。Amazon S3 は、ユーザーに代わってオブジェクトをレプリケートするこの ロールを引き受けます。IAM ロールは 2 つのステップで作成します。

    • サービスロールを作成します。

    • アクセス権限ポリシーをロールにアタッチします。

    1. IAM サービスロールを作成するには、以下を実行します。

      1. 次の信頼ポリシーをコピーして、ローカルコンピュータの現在のディレクトリにある s3-role-trust-policy-kmsobj.json という名前のファイルに保存します。このポリシーは、ロールを引き受けるサービスプリンシパルアクセス許可を Amazon S3 に付与し、Amazon S3 がユーザーに代わってタスクを実行できるようにします。

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
      2. 次のコマンドを使用して、ロールを作成します。

        $ aws iam create-role \ --role-name replicationRolekmsobj \ --assume-role-policy-document file://s3-role-trust-policy-kmsobj.json \ --profile acctA
    2. 次に、アクセス許可ポリシーをロールにアタッチします。このポリシーは、さまざまな Amazon S3 バケットとオブジェクトアクションに対するアクセス許可を付与します。

      1. 次のアクセス権限ポリシーをコピーして、ローカルコンピュータの現在のディレクトリにある s3-role-permissions-policykmsobj.json という名前のファイルに保存します。IAM ロールを作成して、後でポリシーをアタッチします。

        重要

        アクセス許可ポリシーで、amzn-s3-demo-source-bucket および amzn-s3-demo-destination-bucket バケットの暗号化に使用される AWS KMS キー ID を指定します。amzn-s3-demo-source-bucket バケットと amzn-s3-demo-destination-bucket バケット用に 2 つの別々の KMS キーを作成する必要があります。AWS KMS keysは、それらが作成された AWS リージョンの外部で共有されることはありません。

        { "Version":"2012-10-17", "Statement":[ { "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration", "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Effect":"Allow", "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket", "arn:aws:s3:::amzn-s3-demo-source-bucket/*" ] }, { "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Effect":"Allow", "Condition":{ "StringLikeIfExists":{ "s3:x-amz-server-side-encryption":[ "aws:kms", "AES256", "aws:kms:dsse" ], "s3:x-amz-server-side-encryption-aws-kms-key-id":[ "AWS KMS key IDs(in ARN format) to use for encrypting object replicas" ] } }, "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*" }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::amzn-s3-demo-source-bucket/*" ] } }, "Resource":[ "AWS KMS key IDs(in ARN format) used to encrypt source objects." ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-west-2.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ] } }, "Resource":[ "AWS KMS key IDs(in ARN format) to use for encrypting object replicas" ] } ] }
      2. ポリシーを作成し、ロールにアタッチします。

        $ aws iam put-role-policy \ --role-name replicationRolekmsobj \ --policy-document file://s3-role-permissions-policykmsobj.json \ --policy-name replicationRolechangeownerPolicy \ --profile acctA
  5. 次に、以下のレプリケーション設定を amzn-s3-demo-source-bucket バケットに追加します。これは、Tax/ プレフィックスを持つオブジェクトを amzn-s3-demo-destination-bucket バケットにレプリケートするように Amazon S3 に指示します。

    重要

    レプリケーション設定で、Amazon S3 が引き受けることができる IAM ロールを指定します。ユーザーに iam:PassRole アクセス権限がある場合のみ実行できます。CLI コマンドで指定するプロファイルには、このアクセス許可が必要です。詳細については、IAM ユーザーガイドの「AWS のサービス のサービスにロールを渡すアクセス権限をユーザーに付与する」を参照してください。

    <ReplicationConfiguration> <Role>IAM-Role-ARN</Role> <Rule> <Priority>1</Priority> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Status>Enabled</Status> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> </Rule> </ReplicationConfiguration>

    レプリケーション設定を amzn-s3-demo-source-bucket バケットに追加するには、以下を実行します。

    1. AWS CLI ではレプリケーション設定を JSON 形式で指定する必要があります。以下の JSON を、ローカルコンピュータの現在のディレクトリにあるファイル (replication.json) に保存します。

      { "Role":"IAM-Role-ARN", "Rules":[ { "Status":"Enabled", "Priority":1, "DeleteMarkerReplication":{ "Status":"Disabled" }, "Filter":{ "Prefix":"Tax" }, "Destination":{ "Bucket":"arn:aws:s3:::amzn-s3-demo-destination-bucket", "EncryptionConfiguration":{ "ReplicaKmsKeyID":"AWS KMS key IDs (in ARN format) to use for encrypting object replicas" } }, "SourceSelectionCriteria":{ "SseKmsEncryptedObjects":{ "Status":"Enabled" } } } ] }
    2. JSON を編集して、amzn-s3-demo-destination-bucket バケット、AWS KMS key IDs (in ARN format)、および IAM-role-ARN の値を指定します。変更を保存します。

    3. 次のコマンドを使用して、レプリケーション設定を amzn-s3-demo-source-bucket バケットに追加します。必ず amzn-s3-demo-source-bucket バケット名を指定してください。

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket amzn-s3-demo-source-bucket \ --profile acctA
  6. 設定をテストして、暗号化されたオブジェクトがレプリケートされることを確認します。Amazon S3 コンソールで、次の操作を行います。

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

    2. amzn-s3-demo-source-bucket バケットに Tax という名前のフォルダを作成します。

    3. サンプルオブジェクトをフォルダに追加します。必ず暗号化オプションを選択し、オブジェクトを暗号化するための KMS キーを指定してください。

    4. amzn-s3-demo-destination-bucket バケットにオブジェクトのレプリカが含まれていることと、設定で指定した KMS キーを使用して暗号化されていることを確認します。詳細については、「レプリケーションステータス情報の取得」を参照してください。

レプリケーション設定を追加するコード例については、「AWS SDK の使用」を参照してください。レプリケーション設定を適切に変更する必要があります。

概念については、「暗号化されたオブジェクトのレプリケート (SSE-C、SSE-S3、SSE-KMS、DSSE-KMS)」を参照してください。