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

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

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

注記

S3 レプリケーションを使用し、レプリケート元バケットとレプリケート先バケットが異なった AWS アカウント によって所有される場合、バケットを使用する場合、レプリケート先バケットのバケット所有者は ACL を無効にして ([オブジェクト所有権] に対するバケット所有者の強制設定)、レプリカの所有権を送信先バケットを所有する AWS アカウント に変更することができます。この設定は、s3:ObjectOwnerOverrideToBucketOwner の許可の必要なく、既存の所有者のオーバーライドの動作を模倣します。つまり、バケット所有者の強制設定を使用してレプリケート先バケットにレプリケートされるすべてのオブジェクトは、レプリケート先バケット所有者によって所有されることを意味しています。オブジェクト所有権については、オブジェクトの所有権の制御とバケットの ACL の無効化。 を参照してください。

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

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

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

レプリケート元とレプリケート先のバケットが、異なる AWS アカウントによって所有されている場合にレプリカの所有権を変更するには (AWS CLI)
  1. この例では、source および destination バケットを 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. オブジェクトをレプリケート元バケットに追加します。destination にオブジェクトレプリカが含まれていること、およびレプリカの所有権がdestination バケットを所有する AWS アカウント に変更されていることを確認します。

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