チュートリアル: 間の Amazon S3 バケット間のデータ転送 AWS アカウント - AWS DataSync

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

チュートリアル: 間の Amazon S3 バケット間のデータ転送 AWS アカウント

を使用すると AWS DataSync、異なる に属する Amazon S3 バケット間でデータを転送できます AWS アカウント。

重要

このチュートリアルのメソッド AWS アカウント を使用した 間のデータ転送は、Amazon S3 でのみ機能します。また、このチュートリアルは異なる AWS リージョンにある S3 バケット間でデータを転送させる場合にも役立ちます。

概要:

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

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

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

Transfers across accounts

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

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

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

1 つの AWS アカウント (ソースアカウント) とリージョンの S3 バケットから別の (送信先アカウント) とリージョンの S3 バケットに移動するデータに関する DataSync AWS アカウント シナリオの例。

前提条件: ソースアカウントに必要なアクセス許可

ソースには AWS アカウント、この種のクロスアカウント転送で考慮すべきアクセス許可のセットが 2 つあります。

  • ユーザーに DataSync の使用を許可するユーザーのアクセス許可 (ユーザーまたはストレージの管理者である場合があります)。このアクセス許可があると、DataSync のロケーションとタスクを作成できます。

  • DataSync に送信先アカウントのバケットにデータを転送することを許可する DataSync のサービスのアクセス許可

DataSync のロケーションとタスクを作成するには、ソースアカウントで少なくとも次のアクセス許可を IAM ロールに追加します。ロールにアクセス許可を追加する方法については、「creating or modifying an IAM role」を参照してください。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "SourceUserRolePermissions", "Effect": "Allow", "Action": [ "datasync:CreateLocationS3", "datasync:CreateTask", "datasync:DescribeLocation*", "datasync:DescribeTaskExecution", "datasync:ListLocations", "datasync:ListTaskExecutions", "datasync:DescribeTask", "datasync:CancelTaskExecution", "datasync:ListTasks", "datasync:StartTaskExecution", "s3:GetBucketLocation", "s3:ListAllMyBuckets" ], "Resource": "*" }, { "Sid": "IAMPermissions", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:ListRoles", "iam:CreatePolicy" ], "Resource": "arn:aws:iam::111122223333:role/DataSync-*" }, { "Sid": "IAMAttachRolePermissions", "Effect": "Allow", "Action": [ "iam:AttachRolePolicy" ], "Resource": "arn:aws:iam::111122223333:role/DataSync-*", "Condition": { "ArnLike": { "iam:PolicyARN": [ "arn:aws:iam::111122223333:policy/DataSync-*", "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess", "arn:aws:iam::aws:policy/service-role/AWSDataSyncFullAccess" ] } } }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": [ "datasync.amazonaws.com" ] } } } ] }
ヒント

ユーザーのアクセス許可 を設定するときは、AWSDataSyncFullAccess の使用を検討します。これは、DataSync へのフルアクセスと依存関係への最小限のアクセスをユーザーに付与する AWS マネージドポリシーです。

DataSync サービスでは、送信先アカウントのバケットにデータを転送するには、ソースアカウントに次のアクセス許可が必要です。

IAM ロールを作成する場合に、DataSync にこれらのアクセス許可を追加する手順については、このチュートリアルの後半で説明します。また、このロール (source-datasync-role) は、送信先バケットのポリシー内や DataSync の送信先ロケーションの作成時にも指定します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "s3:GetBucketLocation", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket" }, { "Action": [ "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:GetObjectTagging", "s3:PutObjectTagging" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" } ] }

前提条件: 必要な送信先アカウントのアクセス許可

送信先アカウントでは、ユーザーのアクセス許可により、ユーザーが送信先バケットのポリシーを更新でき、そのアクセスコントロールリスト (ACL) を無効にできる必要があります。これらの特定のアクセス許可の詳細については、「Amazon S3 ユーザーガイド」を参照してください。

ステップ 1: ソースアカウントで送信先バケットへのアクセス用に DataSync IAM ロールを作成する

ソースには AWS アカウント、送信先アカウントバケットにデータを転送するアクセス許可を DataSync に付与する IAM ロールが必要です。

データはアカウント間で転送されるため、このロールは手動で作成する必要があります。(DataSync は同じアカウント内で転送する場合はコンソールでこのロールを作成できます)。

DataSync を使用して、IAM ロールを信頼できるエンティティとして作成します。

  1. ソースアカウント AWS マネジメントコンソール で にログインします。

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

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

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

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

  6. [アクセス許可を追加] ページで [次へ] を選択してください。

  7. ロール名を入力し、[ロールの作成] を選択します。

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

作成した IAM ロールには、送信先アカウントにある S3 バケットへのデータ転送を DataSync に許可するアクセス許可が必要です。

  1. IAM コンソールの [ロール] ページで、作成したロールを検索して、その名前を選択します。

  2. [データセットの詳細] ページが開くので、[アクセス許可] タブを選択します。[アクセス許可の追加] を選択し、次いで [インラインポリシーの作成] を選択します。

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

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

      注記

      aws:ResourceAccount の値は、ポリシーで指定された Amazon S3 バケットを所有するアカウント ID である必要があります。

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

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

ステップ 2: 転送先アカウントで S3 バケットポリシーを更新する

送信先アカウントで、ソースアカウントに作成した DataSync IAM ロールを含めるように送信先 S3 バケットポリシーを変更します。

開始する前に: 自分が送信先アカウントに必要なアクセス許可を持っていることを確認します。

  1. で AWS マネジメントコンソール、送信先アカウントに切り替えます。

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

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

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

  5. バケットの詳細ページで、[アクセス許可] タブを選択します。

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

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

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Sid": "DataSyncCreateS3LocationAndTaskAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333: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:::amzn-s3-demo-destination-bucket", "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ] } ] }
    2. の各インスタンスをソースアカウントの AWS アカウント ID source-accountに置き換えます。

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

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

  7. [Save changes] (変更の保存) をクリックします。

ステップ 3:転送先アカウントで、S3 バケットの ACL を無効化する

S3 バケットに転送するデータはすべて転送先アカウントに属していることが重要です。このアカウントがデータを所有していることを確認するには、バケットのアクセスコントロールリスト (ACL) を無効化します。詳細については、「Amazon S3 ユーザーガイド」の「オブジェクトの所有権のコントロールとバケットに対する ACL の無効化」を参照してください。

開始する前に: 自分が送信先アカウントに必要なアクセス許可を持っていることを確認します。

  1. 転送先アカウントで S3 コンソールにログインしたまま、データの転送先の S3 バケットを選択します。

  2. バケットの詳細ページで、[アクセス許可] タブを選択します。

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

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

  5. [Save changes] (変更の保存) をクリックします。

ステップ 4: ソースアカウントで DataSync ロケーションを作成する

ソースアカウントで、送信元および送信先の S3 バケットの、DataSync ロケーションを作成します。

開始する前に: 自分がソースアカウントに必要なアクセス許可を持っていることを確認します。

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

ソースアカウントにいる間に、データの転送先となる S3 バケット用のロケーションを作成します。

DataSync のコンソールインターフェイスからはクロスアカウントのロケーションを作成できないため、これらの手順では、create-location-s3 コマンドを実行して送信先ロケーションを作成する必要があります。コンソールから直接起動するブラウザベースの事前認証済みシェルを使用して AWS CloudShell、 コマンドを実行することをお勧めします。CloudShell では、 AWS CLI コマンドラインツールをダウンロードまたはインストールcreate-location-s3することなく、 のようなコマンドを実行できます。

注記

CloudShell 以外のコマンドラインツールを使用して次の手順を実行するときは、AWS CLI プロファイル が同じ IAM ロールを使用しており、それにはソースアカウントで DataSync を使用するときに必要なユーザーのアクセス許可が含まれていることを確認します。

CloudShell を使用して DataSync 転送先の場所を作成するには
  1. ソースアカウントにいる間に、次のいずれかを実行してコンソールから CloudShell を起動します。

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

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

  2. 次の create-location-s3 コマンドをコピーします。

    aws datasync create-location-s3 \ --s3-bucket-arn arn:aws:s3:::amzn-s3-demo-destination-bucket \ --region amzn-s3-demo-destination-bucket-region \ --s3-config '{ "BucketAccessRoleArn":"arn:aws:iam::source-account-id:role/source-datasync-role" }'
  3. amzn-s3-demo-destination-bucket を、転送先アカウントの S3 バケットの名前に置き換えます。

  4. 送信先のバケットが送信元のバケットとは異なるリージョンにある場合は、送信先バケットがあるリージョンの amzn-s3-demo-destination-bucket-region に置き換えます (例えば us-east-2)。バケットが同じリージョンにある場合、この手順は削除します。

  5. をソース AWS アカウント ID source-account-idに置き換えます。

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

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

    コマンドが次のような DataSync 場所 ARN を返せば、場所は正常に作成されました。

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

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

ソースアカウントから、送信先アカウントのバケット用に作成した S3 ロケーションを確認できます。

ステップ 5: ソースアカウントで DataSync タスクを作成して開始する

DataSync タスクを開始してデータを転送する前に、これまでに実行した手順をおさらいしましょう。

  • ソースアカウントで、DataSync が送信先アカウントの S3 バケットにデータを転送することを許可する IAM ロールを作成しました。

  • 送信先アカウントで、DataSync が S3 バケットにデータを転送できるようにバケットを設定しました。

  • 転送元アカウントで、転送用の DataSync 転送元と転送先の場所を作成しました。

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

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

    重要

    ネットワーク接続のエラーを回避するには、DataSync タスクを送信先のロケーションと同じリージョンで作成する必要があります。

  3. [ソースの場所の構成] ページで、次の作業を行います。

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

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

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

  4. [転送先の場所の構成] ページで、次の作業を行います。

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

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

  5. [設定の構成] ページで、[次へ] を選択します。

    ヒント

    [拡張] モードを使用することをお勧めします。詳細については、「データ転送のタスクモードの選択」を参照してください。

  6. タスクに名前を付けて、Amazon CloudWatch ロググループを指定するなどの追加設定を行います。[次へ] を選択します。

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

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

    • 変更せずにタスクを実行するには、[デフォルトで開始] を選択します

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

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

トラブルシューティング

クロスアカウント転送を実行する際に問題が発生したときは、以下の情報を参照してください。

接続エラー

異なる の S3 バケット AWS アカウント とベーシックモードタスクを使用するリージョン間で転送する場合、DataSync タスクの開始時にネットワーク接続エラーが発生することがあります。これを解決するには、拡張モードタスクを使用します。または、送信先ロケーションと同じリージョンに基本モードタスクを作成し、実行します。

関連: サーバー側の暗号化を使用した S3 バケットでのクロスアカウント転送

サーバー側暗号化を使用して S3 バケット間でこの転送を実行する場合は、「AWS Storage Blog」を参照してください。