レプリケート元とレプリケート先のバケットが異なるアカウントによって所有されている場合での、レプリカの所有者の変更 - Amazon Simple Storage Service

レプリケート元とレプリケート先のバケットが異なるアカウントによって所有されている場合での、レプリカの所有者の変更

レプリケーション設定のレプリケート元レプリケート先のバケットが、異なる AWS アカウント によって所有されている場合、レプリカの所有権をレプリケート先バケットを所有する AWS アカウント に変更するように Amazon S3 に対して指示できます。この例では、Amazon S3 コンソールおよび AWS CLI を使用してレプリカ所有権を変更する方法について説明します。詳細については、「レプリカ所有者の変更」を参照してください。

クロスアカウントシナリオで AWS Key Management Service でのサーバー側の暗号化を使用したレプリケーションの設定の詳細については、クロスアカウントシナリオに対する追加のアクセス許可の付与 を参照してください。

手順については、「同じアカウントが所有するレプリケート元バケットとレプリケート先バケットのレプリケーションの設定」を参照してください。このトピックでは、バケットが同一の、または異なる AWS アカウント で所有されている場合にレプリケーション設定を行う手順について説明します。

AWS CLI を使用してレプリカの所有権を変更するには、バケットを作成し、バケットのバージョニングを有効にします。さらに、IAM ロールを作成して Amazon S3 にオブジェクトをレプリケートする許可を与え、レプリケート元バケットにレプリケーション設定を追加します。レプリケーション設定で、Amazon S3 にレプリカ所有者の変更を指示します。また、セットアップをテストします。

レプリケート元とレプリケート先のバケットが異なる AWS アカウント によって所有されている場合にレプリカの所有権を変更するには (AWS CLI CLI)

  1. この例では、レプリケート元バケットおよびレプリケート先バケットを 2 つの異なる AWS アカウント で作成します。2 つの名前付きプロファイルで AWS CLI を設定します。この例では、それぞれ acctAacctB という名前のプロファイルを使用します。認証情報プロファイルの設定については、AWS Command Line Interface ユーザーガイド名前付きプロファイルを参照してください。

    重要

    この演習に使用するプロファイルは、必要なアクセス権限を持っている必要があります。たとえば、レプリケーション設定で、Amazon S3 が引き受けることができる IAM ロールを指定します。使用するプロファイルに iam:PassRole アクセス権限がある場合のみ実行できます。管理者ユーザーの認証情報を使用して名前付きプロファイルを作成すると、すべてのタスクを実行できるようになります。詳細については、IAM ユーザーガイドの「AWS サービスにロールを渡すアクセス権限をユーザーに付与する」を参照してください。

    これらのプロファイルが必要なアクセス権限を持っていることを確認する必要があります。たとえば、レプリケーション設定には Amazon S3 が引き受けることのできる IAM ロールが含まれています。そのような設定をバケットにアタッチするために使用する名前付きプロファイルは、iam:PassRole アクセス権限がある場合のみ実行できます。これらの名前付きプロファイル作成時に管理者ユーザーの認証情報を指定すると、すべての権限が付与されます。詳細については、IAM ユーザーガイドの「AWS サービスにロールを渡すアクセス権限をユーザーに付与する」を参照してください。

  2. レプリケート元バケットを作成してバージョニングを有効にします。この例では、米国東部 (バージニア北部) (us-east-1) リージョンにレプリケート元バケットを作成します。

    aws s3api create-bucket \ --bucket source \ --region us-east-1 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket source \ --versioning-configuration Status=Enabled \ --profile acctA
  3. レプリケート先バケットを作成してバージョニングを有効にします。この例では、米国西部 (オレゴン) (us-west-2) リージョンにレプリケート先バケットを作成します。レプリケート元バケットに使用したものとは異なる AWS アカウント プロファイルを使用してください。

    aws s3api create-bucket \ --bucket destination \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctB
    aws s3api put-bucket-versioning \ --bucket destination \ --versioning-configuration Status=Enabled \ --profile acctB
  4. レプリケート先バケットポリシーにアクセス許可を追加して、レプリカの所有権を変更できるようにします。

    1. 以下のポリシーを destination-bucket-policy.json に保存します。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "destination_bucket_policy_sid", "Principal": { "AWS": "source-bucket-owner-account-id" }, "Action": [ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::destination/*" ] } ] }
    2. このポリシーをレプリケーション先バケットに位置します。

      aws s3api put-bucket-policy --region $ {destination_region} --bucket $ {destination} --policy file://destination_bucket_policy.json
  5. IAM ロールを作成します。レプリケート元バケットに後で追加するレプリケーション設定でこのロールを指定します。Amazon S3 は、ユーザーに代わってオブジェクトをレプリケートするこの ロールを引き受けます。IAM ロールは 2 つのステップで作成します。

    • ロールを作成します。

    • アクセス権限ポリシーをロールにアタッチします。

    1. IAM ロールを作成します。

      1. 次の信頼ポリシーをコピーして、ローカルコンピュータの現在のディレクトリにある s3-role-trust-policy.json という名前のファイルに保存します。このポリシーは、Amazon S3 がロールを引き受けるためのアクセス許可を付与します。

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
      2. 次の AWS CLI コマンドを実行して、ロールを作成します。

        $ aws iam create-role \ --role-name replicationRole \ --assume-role-policy-document file://s3-role-trust-policy.json \ --profile acctA
    2. アクセス権限ポリシーをロールにアタッチします。

      1. 次のアクセス権限ポリシーをコピーして、ローカルコンピュータの現在のディレクトリにある s3-role-perm-pol-changeowner.json という名前のファイルに保存します。このポリシーは、さまざまな Amazon S3 バケットとオブジェクトアクションに対するアクセス許可を付与します。次の手順では、IAM ロールを作成し、このポリシーをロールにアタッチします。

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::source/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::source" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Resource":"arn:aws:s3:::destination/*" } ] }
      2. ポリシーを作成してロールにアタッチするには、次のコマンドを実行します。

        $ aws iam put-role-policy \ --role-name replicationRole \ --policy-document file://s3-role-perm-pol-changeowner.json \ --policy-name replicationRolechangeownerPolicy \ --profile acctA
  6. レプリケーション設定をレプリケート元バケットに追加します。

    1. AWS CLI では、レプリケーション設定を JSON で指定する必要があります。以下の JSON を、ローカルコンピュータの現在のディレクトリにある、replication.json というファイルに保存します。設定で、レプリカ所有権の変更を示す AccessControlTranslation の追加。

      { "Role":"IAM-role-ARN", "Rules":[ { "Status":"Enabled", "Priority":1, "DeleteMarkerReplication":{ "Status":"Disabled" }, "Filter":{ }, "Status":"Enabled", "Destination":{ "Bucket":"arn:aws:s3:::destination", "Account":"destination-bucket-owner-account-id", "AccessControlTranslation":{ "Owner":"Destination" } } } ] }
    2. レプリケート元バケット所有者のアカウント ID および IAM-role-ARN の値を指定して JSON を編集します。変更を保存します。

    3. 次のコマンドを実行して、レプリケート元バケットにレプリケーション設定を追加します。レプリケート元バケット名を指定してください。

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket source \ --profile acctA
  7. Amazon S3 コンソールでレプリカの所有権を確認します。

    1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

    2. オブジェクトをレプリケート元バケットに追加します。レプリケート先バケットにオブジェクトレプリカが含まれていること、およびレプリカの所有権がレプリケート先バケットを所有する AWS アカウント に変更されていることを確認します。

レプリケーション設定を追加するコード例については、「AWS SDK の使用」を参照してください。レプリケーション設定を適切に変更する必要があります。概念については、「レプリカ所有者の変更」を参照してください。