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

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

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

重要

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

レプリケート元バケットのオブジェクトをレプリケートできるのは、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 ユーザーガイド』の「IAM ロール」を参照してください。

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

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

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

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

    • s3:GetObjectVersionTagging アクセス許可により、S3 はレプリケーション用にオブジェクトタグを読み取ることができます (「オブジェクトのタグ付け」を参照)。S3 にこのアクセス許可がない場合、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", "s3:GetObjectVersionTagging" ], "Resource":[ "arn:aws:s3:::source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Resource":"arn:aws:s3:::destination-bucket/*" } ] }

    s3:ReplicateObject アクションのアクセス許可により、オブジェクトタグのレプリケーションも許可されます。したがって、レプリケート先バケットの s3:ReplicateObject に対するアクセス許可を付与した場合、S3 はオブジェクトタグもレプリケートします (s3:ReplicateTags アクションのアクセス許可を明示的に付与する必要はありません)。

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

バケットにレプリケーション設定を追加すると、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>

<Rule> がストレージクラスを指定しない場合、Amazon S3 は、オブジェクトレプリカを作成するためにソースオブジェクトのストレージクラスを使用します。 次に示すように、オプションとして Amazon S3 がレプリカ作成に使用するストレージクラスの指定ができます。 <StorageClass> 要素は空にできないことにご注意ください。

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> <StorageClass>storage-class</StorageClass> </Destination> </Rule> </ReplicationConfiguration>

指定するストレージクラスには、GLACIER ストレージクラス以外の Amazon S3 がサポートするすべてのストレージクラスが適用できます。 GLACIER ストレージクラスへのオブジェクトの移行は、ライフサイクルを使用した場合のみ可能です。 詳細については、「PUT Bucket replication」を参照してください。 ライフサイクル管理の詳細については、「オブジェクトのライフサイクル管理」を参照してください。 ストレージクラスの詳細については、「ストレージクラス」を参照してください。

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

以下のレプリケーション設定ではルールを 2 つ指定しています。最初のルールでは、キー名のプレフィックスが TaxDocs/ であるオブジェクトをレプリケートするよう Amazon S3 にリクエストします。 2 つ目のルールは、キー名のプレフィックスが ProjectDocs/ であるオブジェクトをレプリケートするよう Amazon S3 にリクエストします。 たとえば、Amazon S3 はキー名が TaxDocs/doc1.pdfProjectDocs/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::SourceBucketOwnerAcctID:root" }, "Action":["s3:ReplicateObject", "s3:ReplicateDelete"], "Resource":"arn:aws:s3:::destination bucket/*" } ] }

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

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

レプリケート元バケットのオブジェクトがタグ付きの場合は、以下の点に注意してください。

  • レプリケート元のバケット所有者が (IAM ロールによって) オブジェクトタグをレプリケートするための s3:GetObjectVersionTagging および s3:ReplicateTags アクションのアクセス許可を S3 に付与した場合、S3 はオブジェクトと共にタグをレプリケートします。IAM ロールに関する詳細は、「IAM ロールを作成します。」を参照してください。

  • レプリケート先のバケット所有者は、タグがレプリケートされるのを望まない場合、次のステートメントをレプリケート先のバケットポリシーに追加することで、s3:ReplicateTags アクションのアクセス許可を明示的に拒否できます。

    Copy
    ... "Statement":[ { "Effect":"Deny", "Principal":{ "AWS":"arn:aws:iam::SourceBucketOwnerAcctID:root" }, "Action":["s3:ReplicateTags"], "Resource":"arn:aws:s3:::destination bucket/*" } ] ...

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

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

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

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

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

Amazon S3 におけるクロスリージョンレプリケーションのトラブルシューティング