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

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

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

重要

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

同じ AWS アカウントが所有するバケットのクロスリージョンレプリケーションをセットアップ

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

  • アカウントで IAM ロールを作成します。このロールは、ユーザーに代わってオブジェクトをレプリケートする Amazon S3 アクセス許可を付与します。

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

IAM ロールを作成します。

Amazon S3 は、レプリケート元バケットからレプリケート先バケットにオブジェクトをレプリケートします。IAM を通して、Amazon S3 に必要なアクセス許可を付与する必要があります。

注記

デフォルトでは、すべての Amazon S3 リソース (バケット、オブジェクト、関連するサブリソース) はプライベートであり、リソース所有者だけがリソースにアクセスできます。したがって、Amazon S3 には、レプリケート元バケットからオブジェクトを読み込んで、それをレプリケート先バケットにレプリケートするアクセス許可が必要となります。

IAM ロールを作成するときに、以下のポリシーをロールにアタッチします。

  • 次のようなロールを引き受けることができる、サービスプリンシパルとして Amazon S3 を指定した信頼ポリシー。

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

    IAM ロールの詳細については、IAM ユーザーガイドの「IAM ロール」を参照してください。

  • ユーザーの代わりにレプリケーションタスクを実行する権限をロールに付与するアクセスポリシー。Amazon S3 がこのロールを引き受ける場合、このポリシーで指定されたアクセス許可を持つことになります。

    { "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:GetReplicationConfiguration および s3:ListBucket - レプリケート元バケットでのこれらのアクションのアクセス許可により、Amazon S3 はレプリケーション設定とバケットのリストを取得できます (現在のアクセス許可モデルで削除マーカーにアクセスするには s3:ListBucket アクセス許可が必要です)。

    • s3:GetObjectVersion および s3:GetObjectVersionAcl - すべてのオブジェクトに付与されているこれらのアクションのアクセス許可により、Amazon S3 は特定のオブジェクトバージョンおよびアクセスコントロールリスト (ACL) を取得することができます。

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

      注記

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

    • s3:GetObjectVersionTagging - このレプリケート元バケットのオブジェクトに対するアクションのためのアクセス許可により、Amazon S3 はレプリケーションのためにオブジェクトタグを読み取ることができるようになります (オブジェクトのタグ付け を参照してください)。Amazon S3 にこのアクセス許可がない場合、オブジェクトのみがレプリケートされ、オブジェクトタグのレプリケートは行われません (存在する場合)。

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

    重要

    アクセス許可を持っているリソースに対してのみ、アクセス許可を付与できます。より具体的には、IAM ロールを所有する AWS アカウントは、IAM ロールに付与するアクションのアクセス許可を持っている必要があります。

    たとえば、レプリケート元バケットに別の AWS アカウントが所有するオブジェクトが含まれていたとします。オブジェクト所有者は、IAM ロールを所有する AWS アカウントに、オブジェクト ACL を使用して必要なアクセス許可を明示的に付与する必要があります。そうしない場合、これらのオブジェクトのクロスリージョンレプリケーションは失敗します (Amazon S3 は、ロールポリシーで付与されたアクセス許可に従ってこれらのオブジェクトにアクセスすることができません)。ACL のアクセス許可については、「アクセスコントロールリスト (ACL) の概要」を参照してください。

    追加の CRR 設定についてさらに詳しく学ぶなら、Amazon S3 にその他のリソースへのアクセス許可を付与することができます。ここでも、一般的なルールが適用されます。つまり、IAM ロールを所有する AWS アカウントは、IAM ロールに付与するアクションのアクセス許可を持っている必要があります。

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

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

重要

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

例 1: ルールが 1 つのレプリケーション設定

次のレプリケーション設定について考えます。

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

IAM ロールが Amazon S3 を使用するのに加えて、設定で次のように 1 つのルールを指定します。

  • ルールが有効であることを示す、ルールのステータス。

  • ルールがバケット内のすべてのオブジェクトに適用されることを示す、空のプレフィックス。

  • オブジェクトがレプリケートされる、レプリケート先バケット。

オブジェクトレプリカに対し、オプションで次のようにストレージクラスを指定できます。

<?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>

<Rule> がストレージクラスを指定しない場合、Amazon S3 は、オブジェクトレプリカを作成するためにソースオブジェクトのストレージクラスを使用します。

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

例 2: ルールが 2 つのレプリケーション設定

次のレプリケーション設定について考えます。

<?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>Tax</Prefix> <Status>Enabled</Status> <Destination> <Bucket>arn:aws:s3:::destinationbucket</Bucket> </Destination> ... </Rule> <Rule> <Prefix>Project</Prefix> <Status>Enabled</Status> <Destination> <Bucket>arn:aws:s3:::destinationbucket</Bucket> </Destination> ... </Rule> </ReplicationConfiguration>

レプリケーション設定:

  • 各ルールがそれぞれ異なるキー名プレフィックスを指定し、ルールが適用されるレプリケート元バケットの個別のオブジェクトを識別します。それから、Amazon S3 は固有のキープレフィックスを持つオブジェクトのみをレプリケートします。たとえば、Amazon S3 はキー名が Tax/doc1.pdfProject/project1.txt のオブジェクトをレプリケートしますが、キー名が PersonalDoc/documentA のすべてのオブジェクトをレプリケートしません。

  • どちらのルールも同じレプリケート先バケットを指定します。

  • どちらのルールも有効になっています。

次に示すような重なり合うプレフィックスを指定することはできません。

<ReplicationConfiguration> <Role>arn:aws:iam::AcctID: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 つのルールは、重なり合うプレフィックス Tax/ および Tax/2015 を指定していますが、これは許可されません。

例 3: チュートリアル例

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

異なる AWS アカウントが所有するバケットのクロスリージョンレプリケーションをセットアップ

クロスアカウントシナリオでレプリケーション設定をセットアップする場合、前のセクションで説明されている同じ設定を実行することに加えて、レプリケート先バケットの所有者は、レプリケーションアクションを実行する権限をレプリケート元バケットの所有者に付与するバケットポリシーも追加する必要があります。

{ "Version":"2008-10-17", "Id":"PolicyForDestinationBucket", "Statement":[ { "Sid":"1", "Effect":"Allow", "Principal":{ "AWS":"SourceBucket-AcctID" }, "Action":[ "s3:ReplicateDelete", "s3:ReplicateObject" ], "Resource":"arn:aws:s3:::destinationbucket/*" }, { "Sid":"2", "Effect":"Allow", "Principal":{ "AWS":"SourceBucket-AcctID" }, "Action":"s3:List*", "Resource":"arn:aws:s3:::destinationbucket" } ] }

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

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

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

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

    ... "Statement":[ { "Effect":"Deny", "Principal":{ "AWS":"arn:aws:iam::SourceBucket-AcctID:root" }, "Action":["s3:ReplicateTags"], "Resource":"arn:aws:s3:::destinationbucket/*" } ] ...

レプリカの所有権の変更

レプリケーション設定で、オブジェクトのレプリカの所有権を送信先バケットを所有する AWS アカウントに変更するよう、オプションで Amazon S3 に指示できます。これは、レプリケーション設定の所有者オーバーライドオプションとも呼ばれます。詳細については、「クロスリージョンレプリケーション追加設定: レプリカの所有者の変更」を参照してください。

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

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

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

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

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

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