スキップしてコンテンツを表示

DataSync を使用してクロスアカウントの Amazon S3 ロケーションとの間でデータを転送する方法を教えてください。

所要時間3分
0

AWS DataSync を使用してクロスアカウント Amazon Simple Storage Service (Amazon S3) バケットとの間でデータを転送しようとしています。

簡単な説明

AWS DataSync は、クロスアカウントでの S3 転送を完全にサポートしています。DataSync コンソールでタスクの実行を監視できます。

注: バケットが暗号化されており、AWS Key Management Service (AWS KMS) キー (SSE-KMS) とカスタマーマネージドキーによるサーバー側の暗号化を使用している場合は、追加の設定が必要です。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

ソースアカウントに IAM ロールを作成します。

クロスアカウント転送を実行するには、ソースアカウントには次の 2 セットのアクセス許可が必要です。

  • DataSync を操作し、DataSync のロケーション、ロール、タスクを作成することをユーザーに許可するユーザーアクセス許可。
  • DataSync が宛先アカウントバケットにデータを転送することを許可する DataSync アクセス許可。

IAM ロールを作成するソースアカウントにユーザーアクセス許可を付与するには、IAM ロールに次のポリシーをアタッチします。

{  
    "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",  
                "iam:CreateRole",  
                "iam:CreatePolicy",  
                "iam:AttachRolePolicy",  
                "iam:ListRoles",  
                "s3:GetBucketLocation",  
                "s3:ListAllMyBuckets"  
            ],  
            "Resource": "*"  
        },  
        {  
            "Effect": "Allow",  
            "Action": [  
                "iam:PassRole"  
            ],  
            "Resource": "*",  
            "Condition": {  
                "StringEquals": {  
                    "iam:PassedToService": [  
                        "datasync.amazonaws.com"  
                    ]  
                }  
            }  
        }  
    ]  
}

必要なアクセス許可を持つ DataSync IAM ロールをソースアカウントに作成するには、IAM ロールに次のポリシーをアタッチします。

{  
    "Version": "2012-10-17",  
     "Statement": [  
         {  
             "Action": [  
                 "s3:GetBucketLocation",  
                 "s3:ListBucket",  
                 "s3:ListBucketMultipartUploads"  
              ],  
             "Effect": "Allow",  
             "Resource": "arn:aws:s3:::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:::destination-bucket/*"  
             "Condition": {  
                 "StringEquals": {  
                     "aws:ResourceAccount": "123456789012"  
                 }  
             }  
         }  
     ]  
}

注: ResourceAccount は、ポリシーで指定した Amazon S3 バケットを所有するアカウントのアカウント ID に置き換えます。

DataSync IAM ロールに次の信頼関係を追加します。

{  
  "Version": "2012-10-17",  
  "Statement": [  
    {  
      "Effect": "Allow",  
      "Principal": {  
        "Service": "datasync.amazonaws.com"  
      },  
      "Action": "sts:AssumeRole"  
    }  
  ]  
}

宛先のバケットポリシーを更新する

ソースアカウントから IAM ロールへのアクセスを許可するには、宛先アカウントの S3 バケットポリシーを変更します。

{  
  "Version": "2012-10-17",  
  "Statement": [  
    {  
      "Sid": "DataSyncCreateS3LocationAndTaskAccess",  
      "Effect": "Allow",  
      "Principal": {  
        "AWS": "arn:aws:iam::source-account-id:role/datasync-role-name"  
      },  
      "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/*"  
      ]  
    }  
  ]  
}

宛先バケットで ACL を無効にする

宛先アカウントで次の手順を実行します。

  1. Amazon S3 コンソールを開きます。
  2. 宛先バケットを選択します。
  3. [アクセス許可] タブの [オブジェクト所有権][編集] を選択します。
  4. [ACL 無効 (推奨)] を選択します。
  5. [変更を保存] を選択します。

DataSync のロケーションを作成する

ソースアカウントで次の手順を実行します。

  1. DataSync コンソールを開きます。
  2. ナビゲーションペインで [データ転送] を展開します。
  3. [ロケーション] を選択し、[ロケーションの作成] を選択します。
  4. [ロケーションタイプ][Amazon S3] を選択し、次に [汎用バケット] を選択します。
  5. [S3 URI] には、ロケーションに使用するバケットとプレフィックスを入力するか、選択します。
  6. [宛先に使用する S3 ストレージクラス] では、Amazon S3 が転送先である場合にオブジェクトが使用するストレージクラスを選択します。
  7. 作成したカスタム IAM ロールを選択します。
  8. (オプション) [新しいタグを追加] を選択し、Amazon S3 ロケーションにタグを付けます。
    注: 使用するロケーション用のネームタグを作成することをおすすめします。
  9. [ロケーションを作成] を選択します。
  10. AWS CloudShell または AWS CLI で次のコマンドを実行し、宛先バケットの場所を作成します。
aws datasync create-location-s3 \  
  --s3-bucket-arn arn:aws:s3:::destination-bucket \  
  --s3-config BucketAccessRoleArn=arn:aws:iam::source-account-id:role/datasync-role-name \  
  --region destination-bucket-region

注: AWS DataSync コンソールでは、クロスアカウントロケーションを作成することはできません。

DataSync タスクを作成して実行する

注: クロスリージョン転送では、宛先バケットと同じ AWS リージョンのソースアカウントにタスクを作成します。

次の手順を実行します。

  1. ソースアカウントで DataSync コンソールを開きます。
  2. ナビゲーションペインで [データ転送] を展開します。
  3. [タスク] を選択し、[タスクの作成] を選択します。
  4. 宛先アカウントのバケットがソースアカウントのバケットとは異なるリージョンにある場合は、宛先バケットのリージョンを選択します。
  5. [ソースロケーションの設定] ページで次の操作を行います。
    [既存の場所を選択] を選択します。
    (複数リージョン間で転送する場合) [リージョン] ドロップダウンでソースバケットが置かれたリージョンを選択します。
    [既存のロケーション] でデータの転送元となる S3 バケットのソースロケーションを選択し、[次へ] を選択します。
  6. [宛先ロケーションの設定] ページで次の操作を行います。
    [既存の場所を選択] を選択します。
    [既存のロケーション] で、データ転送先の S3 バケットでの宛先ロケーションを選択し、[次へ] を選択します。
  7. [設定の構成] ページで [タスクモード] を選択します。
    注: Enhanced モードの使用をおすすめします。詳細については、「データ転送のタスクモードを選択する」を参照してください。
  8. タスクの名前を入力し、Amazon CloudWatch ロググループなどの追加設定を行います。
  9. [次へ] を選択します。
  10. [レビュー] ページで設定をレビューした後、[タスクを作成] を選択します。
  11. タスクの詳細ページで [開始] を選択し、次のいずれかを選択します。
    変更せずにタスクを実行するには、[デフォルト設定で開始] を選択します。
    タスクを実行する前に変更するには、[オプションを上書きして開始] を選択します。

関連情報

チュートリアル: 複数 AWS アカウントで Amazon S3 バケット間のデータを転送する

AWS DataSync を使用してカスタマーマネージド SSE-KMS 暗号化オブジェクトを複数 AWS アカウントとリージョン間で転送する

AWS DataSync を使用して Amazon S3 バケット間でデータを移行する方法

AWS公式更新しました 6ヶ月前
コメントはありません

関連するコンテンツ