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

クロスリージョンレプリケーションのセットアップ方法

クロスリージョンレプリケーションのセットアップには、2 つのバケット(レプリケート元とレプリケート先)が必要です。このバケットは、バージョニングが有効で、異なる AWS リージョンに存在している必要があります。バケットを作成できる AWS リージョンのリストについては、『AWS 全般のリファレンス』の「リージョンとエンドポイント」を参照してください。

レプリケート元バケットのオブジェクトをレプリケートできるのは、1 つのレプリケート先バケットに対してのみです。バケットが両方とも同じ AWS アカウントに所有されている場合は、以下の操作を実行して、レプリケート元バケットからレプリケート先バケットへのクロスリージョンレプリケーションをセットアップします。

  • ユーザーに代わってオブジェクトをレプリケートする Amazon S3 アクセス権限を付与する IAM ロールを作成します。

  • レプリケート元バケットにレプリケーション設定を追加します。

さらに、レプリケート元バケットとレプリケート先バケットが 2 つの異なる AWS アカウントによって所有されている場合、レプリケート先バケットの所有者は、レプリケーションアクションを実行する権限をレプリケート元バケットの所有者に付与するバケットポリシーも追加する必要があります。

IAM ロールを作成します。

デフォルトでは、すべての Amazon S3 リソース(バケット、オブジェクト、関連するサブリソース)はプライベートであり、リソース所有者だけがリソースにアクセスできます。したがって、Amazon S3 はレプリケート元バケットからオブジェクトを読み込んで、それをレプリケート先バケットにレプリケートするアクセス権限を必要とします。このアクセス権限は、IAM ロールを作成することによって付与します。IAM ロールを作成するときに、以下のロールポリシーをアタッチします。

  • 次のようなロールを引き受ける Amazon S3 を信頼する信頼ポリシー。

    Copy
    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }

    ご覧のようにポリシーの Principal で Amazon S3 を識別しています。IAM ロールの詳細については、『IAM の使用』の「ロール(委任とフェデレーション)」を参照してください。

  • ユーザーの代わりにレプリケーションタスクを実行する権限をロールに付与するアクセスポリシー。以下のアクセスポリシーは次の権限を付与します。

    • レプリケート元バケットに対する s3:GetReplicationConfiguration および s3:ListBucket アクセス権限。これで Amazon S3 がレプリケーション設定とバケットのリストを取得できます(現在のアクセス権限モデルで削除マーカーにアクセスするには s3:ListBucket アクセス権限が必要です)。

    • バージョニングが有効なレプリケート元バケットのすべてのオブジェクトに対する s3:GetObjectVersion および s3:GetObjectVersionAcl アクセス権限。これにより Amazon S3 は特定のオブジェクトバージョンとその ACL を取得できます。

    • レプリケート先バケットのオブジェクトに対する s3:ReplicateObject および s3:ReplicateDelete アクセス権限。これで Amazon S3 はレプリケート先バケットのオブジェクトまたは削除マーカーをレプリケートできます。削除マーカーの詳細については、「削除オペレーションとクロスリージョンレプリケーション」を参照してください。

    Amazon S3 のアクション一覧については、「ポリシーでのアクセス許可の指定」を参照してください。

    Copy
    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersion", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Resource":"arn:aws:s3:::destination-bucket/*" } ] }

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

バケットにレプリケーション設定を追加すると、Amazon S3 は設定を XML 形式で保存します。以下に設定の例を示します。XML 構造の詳細については、『Amazon Simple Storage Service API Reference』の「PUT Bucket replication」を参照してください。

例 1: リクエストするルールが 1 つのレプリケーション設定

以下のレプリケーション設定にはルールが 1 つあります。これは指定のレプリケート先バケットにすべてのオブジェクトをレプリケートするよう Amazon S3 にリクエストします。このルールでは空のプレフィックスを指定することで、すべてのオブジェクトを示しています。この設定では、Amazon S3 がユーザーの代わりにオブジェクトをレプリケートするときに引き受けることのできる IAM ロールも指定しています。

Copy
<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <Status>Enabled</Status> <Prefix></Prefix> <Destination><Bucket>arn:aws:s3:::destinationbucket</Bucket></Destination> </Rule> </ReplicationConfiguration>

例 2: ルールが 2 つあり、それぞれキー名のプレフィックスを指定するレプリケーション設定

以下のレプリケーション設定ではルールを 2 つ指定しています。最初のルールは、キー名のプレフィックスが "TaxDocs/" であるオブジェクトをレプリケートするよう Amazon S3 にリクエストします。2 つ目のルールは、キー名のプレフィックスが "ProjectDocs/" であるオブジェクトをレプリケートするよう Amazon S3 にリクエストします。Amazon S3 は、たとえばキー名が "TaxDocs/doc1.pdf" や "ProjectDocs/project1.txt" のようなオブジェクトをレプリケートします。しかし、キー名が "PersonalDoc/documentA" のオブジェクトはレプリケートしません。どちらのルールも同じレプリケート先バケットを指定していることに注意してください。

Copy
<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <Prefix>TaxDocs</Prefix> ... </Rule> <Rule> <Prefix>ProjectDocs</Prefix> ... </Rule> </ReplicationConfiguration>

重なり合うプレフィックスを指定することはできません。以下の例では、2 つのルールで重なり合うプレフィックス "TaxDocs/" と "TaxDocs/2015" を指定していますが、これは許されていません。

Copy
<ReplicationConfiguration> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <Prefix>TaxDocs</Prefix> <Status>Enabled</Status> <Destination> <Bucket>arn:aws:s3:::destinationbucket</Bucket> </Destination> </Rule> <Rule> <Prefix>TaxDocs/2015</Prefix> <Status>Enabled</Status> <Destination> <Bucket>arn:aws:s3:::destinationbucket</Bucket> </Destination> </Rule> </ReplicationConfiguration>

レプリケーション設定をバケットに追加するときには、レプリケート元とレプリケート先のバケットを誰が所有するかに応じて、検討すべきシナリオが 2 つ存在します。

シナリオ 1: バケットを同じ AWS アカウントが所有

レプリケート元とレプリケート先の両方のバケットを同じ AWS アカウントが所有している場合、Amazon S3 コンソールを使用してクロスリージョンレプリケーションをセットアップできます。どちらもバージョニングが有効なレプリケート先バケットとレプリケート元バケットの所有者は、コンソールを使用して、レプリケート元バケットにレプリケーション設定を追加できます。詳細については、次のトピックを参照してください。

シナリオ 2: バケットを異なる AWS アカウントが所有

レプリケート元とレプリケート先のバケットが 2 つの異なる AWS アカウントによって所有されていると、コンソールを使用してレプリケーション設定を追加することはできません。コンソールでは、レプリケート先バケットが別の AWS アカウントによって所有されていることを指定する方法がないためです。そのため、AWS SDK または AWS Command Line Interface を使用してプログラム的にレプリケーション設定を追加します。レプリケーション設定は XML 形式で指定します。以下はレプリケーション設定の例です。

Copy
<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws:iam::46173example:role/CrrRoleName</Role> <Rule> <Status>Enabled</Status> <Prefix>TaxDocs</Prefix> <Destination><Bucket>arn:aws:s3:::destinationbucket</Bucket></Destination> </Rule> </ReplicationConfiguration>

この設定では、キープレフィックスが "TaxDocs/" のオブジェクトを destinationbucket にレプリケートするよう Amazon S3 にリクエストしています。この設定では、Amazon S3 がユーザーの代わりにオブジェクトをレプリケートするときに引き受けることのできる IAM ロールも指定しています。XML 構造の詳細については、『Amazon Simple Storage Service API Reference』の「PUT Bucket replication」を参照してください。

レプリケート先バケットが別の AWS アカウントに所有されているため、レプリケート先バケットの所有者は、次のようにして、オブジェクトをレプリケート(レプリケートおよび削除)する権限をレプリケート元バケットの所有者に付与する必要があります。

Copy
{ "Version":"2008-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::AWS account ID that owns the source bucket:root" }, "Action":["s3:ReplicateObject", "s3:ReplicateDelete"], "Resource":"arn:aws:s3:::destination bucket/*" } ] }

このレプリケート先バケットのバケットポリシーは、Amazon S3 オブジェクトのオペレーション(s3:ReplicateObject および s3:ReplicateDelete)の権限をレプリケート元バケットの所有者に付与します。

チュートリアル例については、「チュートリアル 2: クロスリージョンレプリケーションの設定(レプリケート元とレプリケート先のバケットを異なる AWS アカウントが所有)」を参照してください。

詳細については、次のトピックを参照してください。

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

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

チュートリアル 1: クロスリージョンレプリケーションの設定(レプリケート元とレプリケート先のバケットを同一の AWS アカウントが所有)

チュートリアル 2: クロスリージョンレプリケーションの設定(レプリケート元とレプリケート先のバケットを異なる AWS アカウントが所有)

オブジェクトのレプリケーションのステータスを確認する方法

クロスリージョンレプリケーションのトラブルシューティング