S3 バッチオペレーションを使用して AWS アカウント間でオブジェクトをコピーする - Amazon Simple Storage Service

S3 バッチオペレーションを使用して AWS アカウント間でオブジェクトをコピーする

S3 バッチオペレーションを使用して PUT コピージョブを作成し、オブジェクトを別の AWS アカウント (送信先アカウント) にコピーすることができます。次のセクションでは、異なる AWS アカウントにあるマニフェストを保存して使用する方法について説明します。最初のセクションで示しているように、Amazon S3 インベントリからインベントリレポートをコピー先アカウントに配信して、ジョブの作成時に使用できます。または、2 番目のセクションで示しているように、コピー元またはコピー先アカウントに保存したカンマ区切り値 (CSV) マニフェストを使用できます。

コピー先アカウントに配信されたインベントリレポートを使用して AWS アカウント間でオブジェクトをコピーする

Amazon S3 インベントリからインベントリレポートをコピー先アカウントに配信して、ジョブの作成時に使用できます。ソースまたはコピー先アカウントでの CSV マニフェストの使用については、「送信元アカウントに保存された CSV マニフェストを使用して AWS アカウント間でオブジェクトをコピーする」を参照してください。

Amazon S3 インベントリは、バケット内のオブジェクトのインベントリを生成します。結果のリストは出力ファイルに公開されます。インベントリ対象となるバケットはソースバケットと呼ばれ、インベントリレポートファイルが保存されているバケットは送信先バケットと呼ばれます。

Amazon S3 インベントリレポートは、別の AWS アカウントに配信されるように設定できます。これにより、送信先 AWS アカウントでジョブが作成されたときに S3 バッチオペレーションがインベントリレポートを読み取ることができます。

Amazon S3 インベントリのコピー元およびコピー先バケットの詳細については、「ソースバケットと保存先バケット」を参照してください。

インベントリを設定する最も簡単な方法は、AWS マネジメントコンソールを使用することです。ただし、REST API、AWS コマンドラインインターフェイス (AWS CLI)、または AWS SDK を使用することもできます。

以下のコンソールの手順には、S3 バッチオペレーションジョブに対するアクセス許可を設定するための大まかなステップが含まれています。この手順では、オブジェクトを送信元アカウントから送信先アカウントにコピーし、インベントリレポートを送信先 AWS アカウントに保存します。

さまざまなアカウントが所有する送信元および送信先バケットの Amazon S3 インベントリを設定するには

  1. AWS マネジメントコンソールにサインインして Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. インベントリレポートを保存する送信先バケットを選択します。

    インベントリレポートを格納するための送信先マニフェストバケットを決定します。この手順では、送信先アカウントは、送信先マニフェストバケットとオブジェクトのコピー先バケットの両方を所有するアカウントです。

  3. ソースバケットのオブジェクトを一覧表示するようにインベントリを設定し、そのリストを送信先マニフェストバケットに発行します。

    ソースバケットのインベントリリストを設定します。これを行うときは、リストを保存する送信先バケットを指定します。ソースバケットのインベントリレポートが送信先バケットに発行されます。この手順では、ソースアカウントは、ソースバケットを所有するアカウントです。

    コンソールを使用してインベントリを設定する方法については、「Amazon S3 インベントリの設定」を参照してください 。

    出力形式として [CSV] を選択してください。

    送信先バケットの情報を入力したら、[Buckets in another account (別のアカウントのバケット)] を選択します。次に、送信先マニフェストバケットの名前を入力します。必要に応じて、送信先アカウントのアカウント ID を入力できます。

    インベントリ設定が保存されると、コンソールに次のようなメッセージが表示されます。

    Amazon S3 は送信先バケットにバケットポリシーを作成できませんでした。Amazon S3 が送信先バケットに対してデータの保存ができるよう、送信先バケット所有者に次のバケットポリシーの追加を依頼してください。

    コンソールには、送信先バケットに使用できるバケットポリシーが表示されます。

  4. コンソールに表示される送信先バケットポリシーをコピーします。

  5. 送信先アカウントで、インベントリレポートが格納されている送信先マニフェストバケットにコピーしたバケットポリシーを追加します。

  6. S3 バッチオペレーション信頼ポリシーに基づいて、送信先アカウントにロールを作成します。信頼ポリシーの詳細については、「信頼ポリシー」を参照してください。

    IAM ロールの作成の詳細については、IAM ユーザーガイドの「AWS のサービスにアクセス許可を委任するロールの作成」を参照してください。

    ロールの名前を入力します (ロールの例では BatchOperationsDestinationRoleCOPY という名前を使用しています)。[S3] サービスを選択してから、信頼ポリシーをロールに適用する [S3 バケットバッチオペレーション] ユースケースを選択します。

    次に [ポリシーの作成]を選択して、ロールに次のポリシーをアタッチします。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBatchOperationsDestinationObjectCOPY", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectVersionAcl", "s3:PutObjectAcl", "s3:PutObjectVersionTagging", "s3:PutObjectTagging", "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::ObjectDestinationBucket/*", "arn:aws:s3:::ObjectSourceBucket/*", "arn:aws:s3:::ObjectDestinationManifestBucket/*" ] } ] }

    ロールはポリシーを使用して、送信先バケットのマニフェストを読み取るための batchoperations.s3.amazonaws.com アクセス許可を付与します。また、GET オブジェクト、アクセスコントロールリスト (ACL)、タグ、およびソースオブジェクトバケット内のバージョンに対するアクセス許可も付与されます。そしてそれは、PUT オブジェクト、ACL、タグ、およびバージョンに対するアクセス許可を送信先オブジェクトバケットに付与します。

  7. ソースアカウントで、前の手順で作成したロールにソースバケット内のオブジェクト、ACL、タグ、およびバージョンの GET を付与する、ソースバケットのバケットポリシーを作成します。このステップにより、S3 バッチオペレーションは信頼できるロールを介して送信元バケットからオブジェクトを取得できます。

    以下は、ソースアカウントのバケットポリシーの例です。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBatchOperationsSourceObjectCOPY", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::DestinationAccountNumber:role/BatchOperationsDestinationRoleCOPY" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": "arn:aws:s3:::ObjectSourceBucket/*" } ] }
  8. インベントリレポートが使用可能になったら、送信先アカウントで S3 バッチオペレーション PUT オブジェクトコピージョブを作成し、送信先マニフェストバケットから在庫レポートを選択します。送信先アカウントで作成したロールの ARN が必要です。

    ジョブの作成に関する全般情報については、「S3 バッチオペレーションジョブの作成」を参照してください。

    コンソールを使用してジョブを作成する方法については、「S3 バッチオペレーションジョブの作成」を参照してください。

送信元アカウントに保存された CSV マニフェストを使用して AWS アカウント間でオブジェクトをコピーする

S3 バッチオペレーションジョブのマニフェストとして、別の AWS アカウントに保存されている CSV ファイルを使用できます。S3 インベントリレポートの使用については、「コピー先アカウントに配信されたインベントリレポートを使用して AWS アカウント間でオブジェクトをコピーする」を参照してください。

次の手順では、S3 バッチオペレーションジョブを使用して、送信元アカウントに保存されている CSV マニフェストファイルを使用して、送信元アカウントから送信先アカウントにオブジェクトをコピーするときにアクセス許可を設定する方法を示します。

別の AWS アカウントに保存されている CSV マニフェストを設定するには

  1. S3 バッチオペレーション信頼ポリシーに基づいて、送信先アカウントにロールを作成します。この手順では、送信先アカウントは、オブジェクトのコピー先のアカウントです。

    信頼ポリシーの詳細については、「信頼ポリシー」を参照してください。

    IAM ロールの作成の詳細については、IAM ユーザーガイドの「AWS のサービスにアクセス許可を委任するロールの作成」を参照してください。

    コンソールを使用してロールを作成する場合は、ロールの名前を入力します (サンプルロールでは BatchOperationsDestinationRoleCOPY という名前が使用されています)。[S3] サービスを選択してから、信頼ポリシーをロールに適用する [S3 バケットバッチオペレーション] ユースケースを選択します。

    次に [ポリシーの作成]を選択して、ロールに次のポリシーをアタッチします。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBatchOperationsDestinationObjectCOPY", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectVersionAcl", "s3:PutObjectAcl", "s3:PutObjectVersionTagging", "s3:PutObjectTagging", "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::ObjectDestinationBucket/*", "arn:aws:s3:::ObjectSourceBucket/*", "arn:aws:s3:::ObjectSourceManifestBucket/*" ] } ] }

    このポリシーを使用して、ロールはソースマニフェストバケットのマニフェストを読み取るための batchoperations.s3.amazonaws.com アクセス許可を付与します。ソースオブジェクトバケット内の GET オブジェクト、ACL、タグ、およびバージョンに対するアクセス許可を付与します。また、PUT オブジェクト、ACL、タグ、およびバージョンへのアクセス許可を送信先オブジェクトバケットに付与します。

  2. ソースアカウントで、前のステップで作成したロールをソースマニフェストバケットの GET オブジェクトとバージョンに付与するマニフェストを含むバケットのバケットポリシーを作成します。

    このステップでは、S3 バッチオペレーションが信頼できるロールを使用してマニフェストを読み取ることができます。マニフェストを含むバケットにバケットポリシーを適用します。

    以下は、ソースマニフェストバケットに適用するバケットポリシーの例です。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBatchOperationsSourceManfiestRead", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::DestinationAccountNumber:user/ConsoleUserCreatingJob", "arn:aws:iam::DestinationAccountNumber:role/BatchOperationsDestinationRoleCOPY" ] }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::ObjectSourceManifestBucket/*" } ] }

    このポリシーでは、送信先アカウントでジョブを作成しているコンソールユーザーに、同じバケットポリシーを介してソースマニフェストバケットでも同じアクセス許可を許可する権限も付与されます。

  3. 送信元アカウントで、前の手順で作成したロールに送信元バケット内のオブジェクト、ACL、タグ、およびバージョンの GET を付与する、送信元バケットのバケットポリシーを作成します。S3 バッチオペレーションは、信頼できるロールを使用して送信元バケットからオブジェクトを取得できます。

    以下は、ソースオブジェクトを含むバケットのバケットポリシーの例です。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBatchOperationsSourceObjectCOPY", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::DestinationAccountNumber:role/BatchOperationsDestinationRoleCOPY" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": "arn:aws:s3:::ObjectSourceBucket/*" } ] }
  4. 送信先アカウントで S3 バッチオペレーションジョブを作成します。送信先アカウントで作成したロールの Amazon リソースネーム (ARN) が必要です。

    ジョブの作成に関する全般情報については、「S3 バッチオペレーションジョブの作成」を参照してください。

    コンソールを使用してジョブを作成する方法については、「S3 バッチオペレーションジョブの作成」を参照してください。