

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

# チュートリアル: 間の Amazon S3 バケット間のデータ転送 AWS アカウント
<a name="tutorial_s3-s3-cross-account-transfer"></a>

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

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

## 概要:
<a name="s3-s3-cross-account-overview"></a>

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

------
#### [ Transfers across accounts ]

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

![ある (ソースアカウント) の S3 バケットから別の AWS アカウント (送信先アカウント) の S3 バケットに移動するデータに関する DataSync AWS アカウント シナリオの例。](http://docs.aws.amazon.com/ja_jp/datasync/latest/userguide/images/s3-s3-cross-account-same-region-diagram.png)


------
#### [ Transfers across accounts and Regions ]

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

![ある (ソースアカウント) とリージョンの S3 バケットから別の AWS アカウント (送信先アカウント) とリージョンの S3 バケットに移動するデータに関する DataSync AWS アカウント シナリオの例。](http://docs.aws.amazon.com/ja_jp/datasync/latest/userguide/images/s3-s3-cross-account-diff-region-diagram.png)


------

## 前提条件: ソースアカウントに必要なアクセス許可
<a name="s3-s3-cross-account-required-permissions-source-account"></a>

ソースには AWS アカウント、この種のクロスアカウント転送で考慮すべきアクセス許可のセットが 2 つあります。
+ ユーザーに DataSync の使用を許可する*ユーザーのアクセス許可* (ユーザーまたはストレージの管理者である場合があります)。このアクセス許可があると、DataSync のロケーションとタスクを作成できます。
+ DataSync に送信先アカウントのバケットにデータを転送することを許可する *DataSync のサービスのアクセス許可*。

### ソースアカウントのユーザーのアクセス許可
<a name="s3-s3-cross-account-required-permissions-source-account-user"></a>

DataSync のロケーションとタスクを作成するには、ソースアカウントで少なくとも次のアクセス許可を IAM ロールに追加します。ロールにアクセス許可を追加する方法については、「[creating](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) or [modifying](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html) 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](security-iam-awsmanpol.md#security-iam-awsmanpol-awsdatasyncfullaccess) の使用を検討します。これは、ユーザーに DataSync へのフルアクセスと依存関係への最小限のアクセスを提供する AWS マネージドポリシーです。

### ソースアカウントの DataSync サービスのアクセス許可
<a name="s3-s3-cross-account-required-permissions-source-account-service"></a>

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

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

------
#### [ 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}}/*"
    }
  ]
}
```

------

## 前提条件: 必要な送信先アカウントのアクセス許可
<a name="s3-s3-cross-account-required-permissions-dest-account"></a>

送信先アカウントでは、*ユーザーのアクセス許可*により、ユーザーが送信先バケットのポリシーを更新でき、そのアクセスコントロールリスト (ACL) を無効にできる必要があります。これらの特定のアクセス許可の詳細については、「[https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)[https://docs.aws.amazon.com/AmazonS3/latest/userguide/](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)」を参照してください。

## ステップ 1: ソースアカウントで送信先バケットへのアクセス用に DataSync IAM ロールを作成する
<a name="s3-s3-cross-account-create-iam-role-source-account"></a>

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

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

### DataSync の IAM ロールを作成する
<a name="s3-s3-cross-account-create-iam-role"></a>

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

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

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

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

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

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

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

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

詳細については、*IAM* [ユーザーガイドの AWS のサービス 「 (コンソール) のロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)の作成」を参照してください。

### DataSync IAM ロールにアクセス許可を追加する
<a name="s3-s3-cross-account-attach-custom-policy"></a>

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

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

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

1. **[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"
                   }
               }
           }
       ]
      }
      ```

------

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

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

## ステップ 2: 転送先アカウントで S3 バケットポリシーを更新する
<a name="s3-s3-cross-account-update-s3-policy-destination-account"></a>

送信先アカウントで、ソースアカウントに作成した [DataSync IAM ロール](#s3-s3-cross-account-create-iam-role-source-account)を含めるように送信先 S3 バケットポリシーを変更します。

**開始する前に**: 自分が[送信先アカウントに必要なアクセス許可](#s3-s3-cross-account-required-permissions-dest-account)を持っていることを確認します。

### 送信先の S3 バケットポリシーを更新する
<a name="s3-s3-cross-account-update-s3-policy-destination-account-how-to"></a>

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

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

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

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

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

1. **[バケットポリシー]** で **[編集]** を選択し、次の操作を行って 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}}/*"
            ]
          }
        ]
      }
      ```

------

   1. の各インスタンスをソースアカウントの AWS アカウント ID `{{source-account}}`に置き換えます。

   1. `{{source-datasync-role}}` を、[ソースアカウントで DataSync 用に作成した IAM ロール](#s3-s3-cross-account-create-iam-role-source-account)に置き換えます。

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

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

## ステップ 3：転送先アカウントで、S3 バケットの ACL を無効化する
<a name="s3-s3-cross-account-disable-acls-destination-account"></a>

S3 バケットに転送するデータはすべて転送先アカウントに属していることが重要です。このアカウントがデータを所有していることを確認するには、バケットのアクセスコントロールリスト (ACL) を無効化します。詳細については、「*Amazon S3 ユーザーガイド*」の「[オブジェクトの所有権のコントロールとバケットに対する ACL の無効化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)」を参照してください。

**開始する前に**: 自分が[送信先アカウントに必要なアクセス許可](#s3-s3-cross-account-required-permissions-dest-account)を持っていることを確認します。

### 送信先の S3 バケット ACL を無効にする
<a name="s3-s3-cross-account-disable-acls-destination-account-how-to"></a>

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

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

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

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

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

## ステップ 4: ソースアカウントで DataSync ロケーションを作成する
<a name="s3-s3-cross-account-create-locations"></a>

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

**開始する前に**: 自分が[ソースアカウントに必要なアクセス許可](#s3-s3-cross-account-required-permissions-source-account)を持っていることを確認します。

### DataSync の送信元のロケーションを作成する
<a name="s3-s3-cross-account-create-source-location"></a>
+ ソースアカウントで、データ転送元の S3 バケットの[ロケーション](create-s3-location.md#create-s3-location-how-to)を作成します。

### DataSync の送信先のロケーションを作成する
<a name="s3-s3-cross-account-create-datasync-destination"></a>

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

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

**注記**  
CloudShell 以外のコマンドラインツールを使用して次の手順を実行するときは、[AWS CLI プロファイル](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html) が同じ IAM ロールを使用しており、それにはソースアカウントで DataSync を使用するときに[必要なユーザーのアクセス許可](#s3-s3-cross-account-required-permissions-source-account)が含まれていることを確認します。

**CloudShell を使用して DataSync 転送先の場所を作成するには**

1. ソースアカウントにいる間に、次のいずれかを実行してコンソールから CloudShell を起動します。
   + コンソールナビゲーションバーで、CloudShell アイコンを選択します。これは検索ボックスの右側にあります。
   + コンソールのナビゲーションバーにある検索ボックスを使用して **CloudShell** を検索し、**[CloudShell]** オプションを選択します。

1. 次の `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}}"
     }'
   ```

1. `{{amzn-s3-demo-destination-bucket}}` を、転送先アカウントの S3 バケットの名前に置き換えます。

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

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

1. `{{source-datasync-role}}` を、[ソースアカウントで作成した DataSync IAM ロール](#s3-s3-cross-account-create-iam-role-source-account)に置き換えます。

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

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

   ```
   {
     "LocationArn": "arn:aws:datasync:us-east-2:123456789012:location/loc-abcdef01234567890"
   }
   ```

1. 左側のナビゲーションペインで **[データ転送]** を展開し、**[ロケーション]** を選択します。

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

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

## ステップ 5: ソースアカウントで DataSync タスクを作成して開始する
<a name="s3-s3-cross-account-create-start-datasync-task"></a>

DataSync タスクを開始してデータを転送する前に、これまでに実行した手順をおさらいしましょう。
+ ソースアカウントで、DataSync が送信先アカウントの S3 バケットにデータを転送することを許可する IAM ロールを作成しました。
+ 送信先アカウントで、DataSync が S3 バケットにデータを転送できるようにバケットを設定しました。
+ 転送元アカウントで、転送用の DataSync 転送元と転送先の場所を作成しました。

### DataSync タスクを作成して開始する
<a name="s3-s3-cross-account-create-start-datasync-task-how-to"></a>

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

1. 転送先アカウントのバケットが転送元アカウントのバケットと異なるリージョンにある場合は、上部のナビゲーションペインで転送先バケットのリージョンを選択します。
**重要**  
ネットワーク接続のエラーを回避するには、DataSync タスクを送信先のロケーションと同じリージョンで作成する必要があります。

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

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

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

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

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

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

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

1. **[設定の構成]** ページで、**[次へ]** を選択します。
**ヒント**  
**[拡張]** モードを使用することをお勧めします。詳細については、「[データ転送のタスクモードの選択](choosing-task-mode.md)」を参照してください。

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

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

1. タスクの詳細ページで、**[開始]** を選択し、次のいずれかを選択します。
   + 変更せずにタスクを実行するには、**[デフォルトで開始]** を選択します
   + 実行前にタスクを変更するには、[**優先オプションで開始**] を選択します。

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

## トラブルシューティング
<a name="s3-s3-cross-account-troubleshooting"></a>

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

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

## 関連: サーバー側の暗号化を使用した S3 バケットでのクロスアカウント転送
<a name="s3-s3-cross-account-create-start-datasync-task"></a>

サーバー側暗号化を使用して S3 バケット間でこの転送を実行する場合は、「[AWS Storage Blog](https://aws.amazon.com/blogs/storage/transfer-customer-managed-sse-kms-encrypted-objects-across-aws-accounts-and-regions-using-aws-datasync/)」を参照してください。