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

チュートリアル 3: レプリカ所有者をレプリケート先バケット所有者に変更する

この演習では、演習 2 (チュートリアル 2: レプリケート元とレプリケート先のバケットが異なる AWS アカウントによって所有されているクロスリージョンレプリケーションの設定) のレプリケーション設定を更新して、レプリケート先バケットを所有する AWS アカウントにレプリカの所有権を変更するよう Amazon S3 に指示します。レプリカの所有権の変更オプションの詳細については、「クロスリージョンレプリケーション追加設定: レプリカの所有者の変更」を参照してください。

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

  2. 以下に示すように、<AccessControlTranslation> 要素を追加してレプリケーション設定を更新してください。

    <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> <Account>destination-bucket-owner-account-id</Account> <StorageClass>storage-class</StorageClass> <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> </Destination> </Rule> </ReplicationConfiguration>

    この例では、AWS CLI または AWS SDK を使用してレプリケート元バケットにレプリケーション設定を追加できます。コンソールを使用することはできません。コンソールは、別の AWS アカウントにあるレプリケート先バケットの指定をサポートしていません。

    • 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", "AccessControlTranslation" : { "Owner" : "Destination" } } } ] }

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

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

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

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

      $ aws s3api get-bucket-replication \ --bucket source-bucket \ --profile accountA
    • AWS SDK for Java の使用

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

  3. IAM コンソールで、作成した IAM ロールを選択し、s3:ObjectOwnerOverrideToBucketOwner アクションのためのアクセス許可を追加することにより、関連付けられているアクセス許可ポリシーを更新します。

    更新されたポリシーが表示されます。

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetReplicationConfiguration", "s3:ListBucket" ], "Resource":[ "arn:aws:s3:::source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::destination-bucket/*" } ] }
  4. Amazon S3 コンソールで、レプリケート先バケットを選択し、次のようにバケットポリシーを更新します。

    • ソースオブジェクトの所有者に s3:ObjectOwnerOverrideToBucketOwner アクションのアクセス許可を付与します。

    • レプリケート元バケットの所有者に s3:ListBucket および s3:ListBucketVersions アクションのアクセス許可を付与します。

    次のバケットポリシーには、追加のアクセス許可が示されています。

    { "Version":"2008-10-17", "Id":"PolicyForDestinationBucket", "Statement":[ { "Sid":"1", "Effect":"Allow", "Principal":{ "AWS":"source-bucket-owner-aws-account-id" }, "Action":[ "s3:ReplicateDelete", "s3:ReplicateObject", "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::destinationbucket/*" }, { "Sid":"2", "Effect":"Allow", "Principal":{ "AWS":"source-bucket-owner-aws-account-id" }, "Action":[ "s3:ListBucket", "s3:ListBucketVersions" ], "Resource":"arn:aws:s3:::destinationbucket" } ] }
  5. Amazon S3 コンソールでレプリケーション設定をテストします。

    1. レプリケート元バケット (Tax フォルダ) にオブジェクトをアップロードします。

    2. レプリケート先バケットにレプリカが作成されていることを確認します。レプリカのアクセス許可を確認します。レプリケート先バケットの所有者が、オブジェクトレプリカに対する完全なアクセス許可を持つようになったことに注目してください。