メニュー
Amazon Simple Storage Service
開発者ガイド (API バージョン 2006-03-01)

チュートリアル 2: レプリケート元とレプリケート先のバケットが異なる AWS アカウントによって所有されているクロスリージョンレプリケーションの設定

このチュートリアルでは、異なる AWS アカウントがレプリケート元とレプリケート先のバケットを所有している場合の、クロスリージョンレプリケーションのセットアップを行います。

バケットが異なる AWS アカウントに所有されているため、クロスリージョンレプリケーションの設定にはさらにもう 1 つのステップが必要です。レプリケート先バケットの所有者は、レプリケート元バケットの所有者にレプリケーションアクションの権限を付与するバケットポリシーを作成する必要があります。

この演習では、以下の理由により、IAM ロールの作成およびレプリケート元バケットのレプリケーション追加を除くすべての手順をコンソールで実行します。

  • Amazon S3 コンソールは、両方のバケットが同じ AWS アカウントによって所有されている場合、レプリケーション設定の設定をサポートします。ただし、クロスアカウントのシナリオでは、別の AWS アカウントによって所有されているレプリケート先バケットを指定する必要があり、Amazon S3 コンソール UI にはお客様のアカウント内のバケットのみが表示されます。

  • IAM コンソールでは、Amazon S3 は [AWS Service Roles] リストにはありません。オプションで IAM ロールを作成することもできますが、別のサービスロールの種類 (AWS Lambda など) を選択します。ロールを作成した後、信頼ポリシーを変更して、ロールを引き受けることのできる Amazon S3 サービスプリンシパルを指定できます (Lambda サービスプリンシパルの代わりとして)。この演習では、AWS CLI を使用してロールを作成します。

  1. 2 つの異なる AWS アカウントを使用してバケットを 2 つ作成します。クロスリージョンレプリケーションの要件に従い、別の AWS リージョンにこれらのバケットを作成して、両方のバケットでバージョニングを有効にします。

    1. AWS リージョンでレプリケート元バケットを作成します。たとえば、アカウント A の 米国西部 (オレゴン) (us-west-2)。手順については、「S3 バケットを作成する方法」(Amazon Simple Storage Service コンソールユーザーガイド) を参照してください。

    2. 別の AWS リージョンで、レプリケート先バケットを作成します。たとえば、アカウント B の 米国東部(バージニア北部) (us-east-1) です。

    3. 両方のバケットでバージョニングを有効にします。手順については、「S3 バケットのバージョニングを有効または停止する方法」(Amazon Simple Storage Service コンソールユーザーガイド) を参照してください。

      重要

      バージョンを指定しないバケットにオブジェクトの有効期限ライフサイクルポリシーがあり、バージョニングを有効にしたときに同じ完全な削除動作を維持する場合は、以前の有効期限ポリシーを追加する必要があります。以前の有効期限ライフサイクルポリシーでは、バージョニングに対応したバケットで、以前のオブジェクトバージョンの削除が管理されます (バケットのバージョニングが有効になっている場合は、最新のオブジェクトバージョン 1 個と、0 個以上の以前のバージョンが維持されます)。詳細については、「S3 バケットのライフサイクルポリシーを作成する方法」(Amazon Simple Storage Service コンソールユーザーガイド) を参照してください。

  2. レプリケート先バケットでバケットポリシーを追加して、レプリケート元バケットの所有者にオブジェクトのレプリケートを許可することができます。

    { "Version":"2008-10-17", "Id":"", "Statement":[ { "Sid":"Stmt123", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::AWS-ID-Account-A:root" }, "Action":["s3:ReplicateObject", "s3:ReplicateDelete"], "Resource":"arn:aws:s3:::destination-bucket/*" } ] }

    手順については、「S3 バケットポリシーを追加する方法」(Amazon Simple Storage Service コンソールユーザーガイド) を参照してください。

  3. レプリケート元バケットの所有者に代わってオブジェクトをレプリケートするよう、Amazon S3 にアクセス許可を付与します。

    レプリケート元バケットのクロスリージョンレプリケーションを設定すると、Amazon S3 はお客様に代わってオブジェクトをレプリケートするようになります。レプリケート元所有者は、IAM ロールを使用して必要なアクセス許可を Amazon S3 に付与できます。このステップでは、アカウント A で IAM ロールを作成します。

    AWS CLI を使用してこの IAM ロールを作成します。AWS CLI をセットアップする方法については、「チュートリアル例のツールのセットアップ」を参照してください。この演習は、accountA および accountB の 2 つのプロファイルを使用して AWS CLI を設定済みであることが前提です。

    1. 次のポリシーをコピーし、S3-role-trust-policy.json という名前のファイルに保存します。このポリシーは、Amazon S3 がロールを引き受けるためのアクセス許可を付与します。

      { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
    2. 次のポリシーをコピーし、S3-role-permissions-policy.json という名前のファイルに保存します。このアクセスポリシーは、さまざまな Amazon S3 バケットとオブジェクトアクションのアクセス許可を付与します。次のステップでは、作成中の IAM ロールにポリシーを追加します。

      { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::destination-bucket/*" } ] }
    3. 次の AWS CLI コマンドを実行して、ロールを作成します。

      $ aws iam create-role \ --role-name crrRole \ --assume-role-policy-document file://S3-role-trust-policy.json \ --profile accountA
    4. 次の AWS CLI コマンドを実行して、ポリシーを作成します。

      $ aws iam create-policy \ --policy-name crrRolePolicy \ --policy-document file://S3-role-permissions-policy.json \ --profile accountA
    5. create-policy のコマンドで返されるポリシー Amazon リソースネーム (ARN) を書き留めます。

    6. ロールにポリシーをアタッチするには、次の AWS CLI コマンドを実行します。

      $ aws iam attach-role-policy \ --role-name crrRole \ --policy-arn policy-arn \ --profile accountA

      これで、Amazon S3 が引き受けることのできる、アカウント A の IAM ロールができました。ロールは、Amazon S3 が特定のレプリケート元バケットからレプリケート先バケットにオブジェクトをレプリケートできるよう、Amazon S3 のアクションに必要なアクセス許可を持っています。アカウント A でクロスリージョンレプリケーションをレプリケート元バケットに追加するときに、このロールを指定します。

  4. アカウント A でレプリケート元バケットのレプリケーション設定を追加して、次の設定例に示すように、プレフィックスが Tax/ であるオブジェクトを Amazon S3 がレプリケートするよう指示します。

    重要

    バケットにレプリケーション設定を追加するときは、Amazon S3 にレプリケーション権限を付与する IAM ロールを渡すために iam:PassRole アクセス権限が必要です。IAM ロールは、レプリケーション設定 XML の <Role> 要素で使用される Amazon リソースネーム (ARN) によって指定されます。詳細については、IAM ユーザーガイドの「AWS サービスにロールを渡すアクセス権限をユーザーに許可する」を参照してください。

    <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws:iam::AWS-ID-Account-A:role/role-name</Role> <Rule> <Status>Enabled</Status> <Prefix>Tax</Prefix> <Destination><Bucket>arn:aws:s3:::destination-bucket</Bucket></Destination> </Rule> </ReplicationConfiguration>

    この例では、AWS CLI、Amazon S3 コンソール、または AWS SDK を使用してレプリケーション設定を追加できます。

    • AWS CLI の使用

      AWS CLI ではレプリケーション設定を JSON 形式で指定する必要があります。次の JSON をファイル (replication.json) に保存します。

      { "Role": "arn:aws:iam::AWS-ID-Account-A:role/role-name", "Rules": [ { "Prefix": "Tax", "Status": "Enabled", "Destination": { "Bucket": "arn:aws:s3:::destination-bucket" } } ] }

      バケット名とロール ARN を指定して JSON を更新します。次に、レプリケート元バケットにレプリケーション設定を追加する AWS CLI コマンドを実行します。

      $ aws s3api put-bucket-replication \ --bucket source-bucket \ --replication-configuration file://replication.json \ --profile accountA

      AWS CLI のセットアップ方法については「チュートリアル例のツールのセットアップ」を参照してください。

      アカウント A は get-bucket-replication コマンドを使用してレプリケーション設定を取得できます。

      $ aws s3api get-bucket-replication \ --bucket source-bucket \ --profile accountA
    • Amazon S3 コンソールを使用します。

      コンソールを使用する手順については、「S3 バケットのクロスリージョンレプリケーションを有効にする方法」(Amazon Simple Storage Service コンソールユーザーガイド) を参照してください。

    • AWS SDK for Java の使用

      コード例については、「AWS SDK for Java を使用してクロスリージョンレプリケーションをセットアップする」を参照してください。

  5. セットアップをテストします。 コンソールで次の操作を行います。

    • レプリケート元バケットに Tax という名前のフォルダーを作成します。

    • レプリケート元バケット内のフォルダにオブジェクトを追加します。

      • Amazon S3 がアカウント B に所有されるレプリケート先バケットでオブジェクトをレプリケートしたことを確認します。

      • オブジェクトのプロパティで、[レプリケーションステータス] が "レプリカ" (これをレプリカオブジェクトとして識別する) に設定されることに注目してください。

      • オブジェクトのプロパティで、アクセス許可セクションには何もアクセス許可が表示されません (レプリカは引き続きレプリケート元バケットの所有者によって所有されており、レプリケート先バケットの所有者は、オブジェクトレプリカへのアクセス許可がありません)。オプションの設定を追加して、レプリカの所有権を変更するよう Amazon S3 に指示することができます。例については、「チュートリアル 3: レプリカ所有者をレプリケート先バケット所有者に変更する」を参照してください。

         レプリケーションのステータス (レプリカ) とテキストファイルへのアクセス許可を示す、オブジェクトのプロパティのスクリーンショット。

      Amazon S3 がオブジェクトをレプリケートするのにかかる時間は、オブジェクトのサイズによって異なります。 レプリケーションのステータスを確認する方法については、「クロスリージョンレプリケーションのステータスの検索 」を参照してください。

    • source バケットのオブジェクトの ACL を更新し、destination バケットに変更が反映されることを確認します。

      手順については、「オブジェクトへのアクセス許可の設定方法」(Amazon Simple Storage Service コンソールユーザーガイド) を参照してください。

    • オブジェクトのメタデータを更新します。たとえば、ストレージクラスに変更を加えます。変更がレプリケート先バケットに表示されていることを確認します。

      手順については、「S3 オブジェクトにメタデータを追加する方法」(Amazon Simple Storage Service コンソールユーザーガイド) を参照してください。

    レプリカはソースバケットのオブジェクトの正確なコピーであることを注記します。

クロスリージョンレプリケーション (CRR)

レプリケートするものと、しないもの

クロスリージョンレプリケーションのステータスの検索

チュートリアル 1: レプリケート元とレプリケート先のバケットが同一の AWS アカウントによって所有されているクロスリージョンレプリケーションの設定

このページの内容: