チュートリアル:Amazon S3 から Amazon S3 へのデータ転送 AWS アカウント - AWS DataSync

2023 年 12 月 7 日より、バージョン 1 DataSync のエージェントは廃止されます。 DataSync コンソールの [エージェント] ページをチェックして、影響を受けるエージェントがいないか確認してください。その場合は、データ転送やストレージ検出の中断を避けるため、その前にそれらのエージェントを交換してください。さらにサポートが必要な場合は、お問い合わせくださいAWS Support

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

チュートリアル:Amazon S3 から Amazon S3 へのデータ転送 AWS アカウント

を使用するとAWS DataSync、AWS アカウント別のバケットに属する Amazon S3 バケット間でデータを移動できます。

重要

AWS アカウントこのチュートリアルの方法を使用してデータをコピーすることは、Amazon S3 でのみ機能します。さらに、このチュートリアルは、同じく異なる S3 バケット間でデータを転送する場合にも役立ちます AWS リージョン (1 つ以上のオプトインリージョンで作業している場合を除く)。

概要

異なるチーム間でデータを転送する必要があることは珍しくありません。特にAWS アカウント、組織のリソースを管理するチームが分かれている場合はそうです。 DataSync を使用したクロスアカウント転送は次のようになります。

  • ソースアカウント:データ転送元の S3 バケットを管理するアカウント。AWS アカウント

  • 転送先アカウント:データ転送先の S3 AWS アカウント バケットを管理するためのアカウント。

Transfers across accounts

次の図は、S3 バケットから別のバケットにある別の S3 バケットにデータを転送するシナリオを示していますAWS アカウント。

あるアカウント (ソースアカウント) の S3 バケットからデータを移動し、AWS アカウント別のアカウント AWS アカウント (移行先アカウント) の S3 DataSync バケットにデータを移動するシナリオの例です。
Transfers across accounts and Regions

次の図は、S3 バケットから別のリージョンにある別の S3 バケットにデータを転送するシナリオを示しています。AWS アカウント

あるリージョン AWS アカウント (ソースアカウント) とリージョンの S3 バケットからデータを移動し、別のリージョン AWS アカウント (移行先アカウント) の S3 DataSync バケットにデータを移動するシナリオの例です。

必要なアクセス許可

始める前に、移行元と移行先に S3 AWS アカウント バケット間のクロスアカウント転送を完了するための適切な権限があることを確認してください。

ソースアカウントに必要な権限

AWS アカウントソース側では、この種のクロスアカウント転送で考慮すべき権限セットが 2 つあります。1 つの権限セットは、 DataSync 転送タスクの作成と開始を担当するユーザ (ストレージ管理者など) に対するものです。もう 1 つの権限セットは、 DataSync サービスがユーザーに代わって転送先アカウントの S3 バケットにオブジェクトを転送することを許可します。

User permissions

このチュートリアルを進める際には、最低でもソースアカウントで以下の権限が必要です。 DataSync

  • datasync:CancelTaskExecution

  • datasync:CreateLocationS3

  • datasync:CreateTask

  • datasync:DescribeLocation*

  • datasync:DescribeTask

  • datasync:DescribeTaskExecution

  • datasync:ListLocations

  • datasync:ListTasks

  • datasync:ListTaskExecutions

  • datasync:StartTaskExecution

  • iam:AttachRolePolicy

  • iam:CreateRole

  • iam:CreatePolicy

  • iam:ListRoles

  • iam:PassRole

  • s3:GetBucketLocation

  • s3:ListAllMyBuckets

  • s3:ListBucket

ヒント

ユーザー権限については、AWSDataSyncFullAccessAWS DataSync 依存関係へのフルアクセスと最小限アクセスを提供する管理ポリシーの使用を検討してください。この管理ポリシーには、デフォルトで転送タスクロギング機能も備わっています。

DataSync permissions

DataSync ユーザーに代わって宛先アカウントの S3 バケットにデータを書き込む権限が必要です。ソースアカウントに、これを実行できる AWS Identity and Access Management(IAM) ロールを作成します。次に、 DataSync 宛先ロケーションを作成するときに、このロールを指定します。

移行先アカウントに必要な権限

宛先にはAWS アカウント、S3 バケットのアクセスコントロールリスト (ACL) を無効にし、バケットのポリシーを更新する権限が必要です。これらの特定の権限の詳細については、Amazon S3 ユーザーガイドを参照してください

ステップ 1: ソースアカウントで、 DataSync ソースロケーションを作成します。

ソースアカウントで、データ転送元の S3 DataSyncバケットのロケーションを作成します

DataSync コンソールを使用してロケーションを作成する場合は、ソース S3 バケットへのアクセスに必要な IAM DataSync ロールを自動的に作成して引き受けることができます。

ステップ 2: ソースアカウントで、次の IAM ロールを作成します。 DataSync

ソースアカウントには、ユーザーに代わって移行先アカウントの S3 DataSync バケットに書き込む権限を付与する IAM ロールが必要です。

通常、 DataSync コンソールで S3 バケットの転送場所を作成すると、 DataSync そのバケットに書き込むための適切な権限を持つロールを自動的に作成して引き受けることができます。ただし、転送はアカウント間で行うため、ロールは手動で作成する必要があります。

IAM ロールを作成します。

DataSync 信頼されたエンティティとして IAM ロールを作成します。

IAM ロールを作成するには
  1. AWS Management Consoleソースアカウントでにログインします。

  2. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  3. 左側のナビゲーションペインの [アクセス管理] で [ロール] を選択し、[ロールの作成] を選択します。

  4. 「信頼されるエンティティの選択」 ページの「信頼されたエンティティタイプ」で、を選択しますAWS のサービス

  5. [ユースケース] DataSyncでは、ドロップダウンリストから選択してを選択しますDataSync[次へ] をクリックします。

  6. [Add permissions] (アクセス許可を追加する) ページで Next (次へ) を選択します。

  7. ロールに名前を付け、[ロールを作成] を選択します。

詳細については、IAM ユーザーガイドのAWS のサービス(コンソール) 用のロールの作成」を参照してください。

IAM ロールにカスタムポリシーをアタッチします。

作成した IAM ロールには、宛先アカウントの S3 DataSync バケットへの書き込みを許可するポリシーが必要です。

IAM ロールにカスタムポリシーをアタッチするには
  1. IAM コンソールの Roles ページで、作成したロールを検索して名前を選択します。

  2. ロールの詳細ページで、「権限」タブを選択します。[権限の追加] を選択し、[インラインポリシーの作成] を選択します。

  3. JSON タブを選択し、次の操作を行います。

    1. 次の JSON をポリシーエディタに貼り付けます。

      { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetBucketLocation", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Effect": "Allow", "Resource": "arn:aws:s3:::destination-bucket" }, { "Action": [ "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:GetObjectTagging", "s3:PutObjectTagging" ], "Effect": "Allow", "Resource": "arn:aws:s3:::destination-bucket/*" } ] }
    2. destination-bucketの各インスタンスを、移行先アカウントの S3 バケットの名前に置き換えます。

  4. [次へ] をクリックします。ポリシーに名前を付け、[ポリシーの作成] を選択します。

ステップ 3: 移行先アカウントで S3 バケットの ACL を無効にします。

S3 バケットに転送するデータはすべて転送先アカウントに属することが重要です。このアカウントがデータを所有していることを確認するには、バケットのアクセスコントロールリスト (ACL) を無効にします。

S3 バケットの ACL を無効にするには
  1. でAWS Management Console、宛先アカウントに切り替えます。

  2. https://console.aws.amazon.com/s3/ で Amazon S3 コンソールを開きます。

  3. 左側のナビゲーションペインで、[Buckets] (バケット) を選択します。

  4. バケットリストで、データ転送先の S3 バケットを選択します。

  5. バケットの詳細ページで、[権限] タブを選択します。

  6. オブジェクトの所有者で [編集] を選択します。

  7. まだ選択されていない場合は、[ACL 無効 (推奨)] オプションを選択します。

  8. [変更を保存] を選択します。

詳細については、Simple Storage Service (Amazon S3) ユーザーガイドオブジェクトの所有権のコントロールとバケットに対する ACL の無効化を参照してください。

ステップ 4: 移行先アカウントで S3 バケットポリシーを更新します。

移行先アカウントで、移行元アカウントで作成した DataSync IAM ロールが含まれるように、移行先の S3 バケットポリシーを変更します。

更新したバケットポリシー (以下の手順で提供) には 2 つのプリンシパルが含まれています。

デスティネーション S3 バケットポリシーを更新するには
  1. 転送先アカウントで S3 コンソールにログインしたまま、データを転送する S3 バケットを選択します。

  2. バケットの詳細ページで、[権限] タブを選択します。

  3. [バケットポリシー] で [編集] を選択し、次の操作を行って S3 バケットポリシーを変更します。

    1. エディターの内容を更新して、以下のポリシーステートメントを含めてください。

      { "Version": "2008-10-17", "Statement": [ { "Sid": "DataSyncCreateS3LocationAndTaskAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::source-account:role/source-datasync-role" }, "Action": [ "s3:GetBucketLocation", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:GetObjectTagging", "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::destination-bucket", "arn:aws:s3:::destination-bucket/*" ] }, { "Sid": "DataSyncCreateS3Location", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::source-account:role/source-user-role" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::destination-bucket" } ] }
    2. source-accountの各インスタンスをソースアカウントの AWS アカウント ID に置き換えます。

    3. source-datasync-role DataSync ソースアカウントで作成した IAM ロールに置き換えます

    4. destination-bucketの各インスタンスを、移行先アカウントの S3 バケットの名前に置き換えます。

    5. DataSync使用に必要なユーザー権限を含む IAM source-user-role ロールに置き換えてください。

  4. [変更を保存] を選択します。

ステップ 5: ソースアカウントで、 DataSync ターゲットロケーションを作成します。

ソースアカウントでは、移行先アカウントに S3 DataSync バケットのロケーションを作成する必要があります。

DataSync コンソールでは、別のストレージリソースのロケーションを作成することはできませんAWS アカウント。ただし、AWS CloudShellコンソールから直接起動するブラウザベースの事前認証済みシェルを使用してこれを行うことができます。 CloudShell コマンドラインツールをダウンロードまたはインストールしなくても、AWS CLIこのチュートリアルを完了するためのコマンドを実行できます。

注記

以外のコマンドラインツールを使用して次の手順を実行する場合は CloudShell、宛先の S3 AWS CLIsource-user-role バケットポリシーで指定したものと同じものがプロファイルで使用されていることを確認してください。詳細については、AWS Command Line Interface ユーザーガイドを参照してください。

DataSync を使用してデスティネーションロケーションを作成するには CloudShell
  1. でAWS Management Console、ソースアカウントに切り替えます。

  2. https://console.aws.amazon.com/datasync/ AWS DataSync でコンソールを開きます。

  3. 以下のいずれかを実行して起動します CloudShell。

    • CloudShell コンソールのナビゲーションバーのアイコンを選択します。これは検索ボックスの右側にあります。

    • CloudShellCloudShellコンソールのナビゲーションバーの検索ボックスを使用してオプションを検索し、選択します。

  4. 次の コマンドをコピーします。

    aws datasync create-location-s3 \ --s3-bucket-arn arn:aws:s3:::destination-bucket \ --s3-config '{ "BucketAccessRoleArn":"arn:aws:iam::source-user-account:role/source-datasync-role" }'
  5. 宛先アカウントの S3 destination-bucket バケットの名前に置き換えます。

  6. ソースアカウントの AWS アカウント ID source-user-account に置き換えます。

  7. source-datasync-roleソースアカウントで作成した DataSync IAM ロールに置き換えます

  8. ターゲットバケットがソースバケットと異なるリージョンにある場合は、--regionターゲットバケットが存在するリージョンを指定するオプションをコマンドに追加します。例えば、--region us-east-2

  9. でコマンドを実行します。 CloudShell

    DataSync コマンドが次のようなロケーション ARN を返した場合、ロケーションは正常に作成されました。

    { "LocationArn": "arn:aws:datasync:us-east-2:123456789012:location/loc-abcdef01234567890" }
  10. 左側のナビゲーションペインで [データ転送] を展開し、[Locations] を選択します。

  11. 別のリージョンにロケーションを作成した場合は、ナビゲーションペインでそのリージョンを選択します。

ソースアカウントから、作成した宛先アカウントの S3 バケットの場所を確認できます。

ステップ 6: ソースアカウントで、 DataSync 転送タスクを作成して開始します。

データを移動する前に、これまでに行ったことをまとめてみましょう。

  • ソースアカウントで、移行先アカウントの S3 DataSync バケットにデータを書き込むことができる IAM ロールを作成しました。

  • 移行先アカウントで、 DataSync バケットにアクセスしてデータを書き込めるように S3 バケットを設定しました。

  • 転送元アカウントで、 DataSync 転送元と転送先のロケーションを作成しました。

DataSync 移管タスクを作成して開始するには
  1. DataSync ソースアカウントでコンソールを使用している状態で、左側のナビゲーションペインで [データ転送] を展開し、[タスク] と [タスクの作成] を選択します。

  2. 転送先アカウントのバケットが転送元アカウントのバケットと異なるリージョンにある場合は、上部のナビゲーションペインで転送先バケットのリージョンを選択します。

    重要

    ネットワーク接続エラーを回避するには、 DataSync 宛先ロケーションのリージョンからタスクを開始する必要があります。

  3. ソースロケーションの設定」ページで、次の操作を行います。

    1. [既存の場所を選択] を選択します。

    2. (リージョン間の転送の場合) リージョンドロップダウンで、ソースバケットが存在するリージョンを選択します。

    3. [既存のロケーション] では、データ転送元の S3 バケットのソースロケーションを選択し、[次へ] を選択します。

  4. [転送先ロケーションの設定] ページで、次の操作を行います。

    1. [既存の場所を選択] を選択します。

    2. [既存の場所] では、データ転送先の S3 バケットの宛先ロケーションを選択し、[次へ] を選択します。

  5. [設定] ページで、タスクに名前を付けます。必要に応じて、Amazon CloudWatch ロググループの指定など、その他の設定を行います。[次へ] をクリックします。

  6. 確認ページで設定を確認し、[タスクを作成] を選択します。

  7. タスクの詳細ページで [開始] を選択し、次のいずれかを選択します。

    • 変更せずにタスクを実行するには、[既定で開始] を選択します。

    • 実行前にタスクを変更するには、[優先オプションで開始] を選択します。

タスクが終了したら、移行先アカウントの S3 バケットを確認します。ソースアカウントバケットから移動されたデータが表示されるはずです。

関連リソース

このチュートリアルで行った内容の詳細については、以下のトピックを参照してください。