DataSync を使用してクロスアカウントの Amazon S3 ロケーションとの間でデータを転送する方法を教えてください。
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 を無効にする
宛先アカウントで次の手順を実行します。
- Amazon S3 コンソールを開きます。
- 宛先バケットを選択します。
- [アクセス許可] タブの [オブジェクト所有権] で [編集] を選択します。
- [ACL 無効 (推奨)] を選択します。
- [変更を保存] を選択します。
DataSync のロケーションを作成する
ソースアカウントで次の手順を実行します。
- DataSync コンソールを開きます。
- ナビゲーションペインで [データ転送] を展開します。
- [ロケーション] を選択し、[ロケーションの作成] を選択します。
- [ロケーションタイプ] で [Amazon S3] を選択し、次に [汎用バケット] を選択します。
- [S3 URI] には、ロケーションに使用するバケットとプレフィックスを入力するか、選択します。
- [宛先に使用する S3 ストレージクラス] では、Amazon S3 が転送先である場合にオブジェクトが使用するストレージクラスを選択します。
- 作成したカスタム IAM ロールを選択します。
- (オプション) [新しいタグを追加] を選択し、Amazon S3 ロケーションにタグを付けます。
注: 使用するロケーション用のネームタグを作成することをおすすめします。 - [ロケーションを作成] を選択します。
- 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 リージョンのソースアカウントにタスクを作成します。
次の手順を実行します。
- ソースアカウントで DataSync コンソールを開きます。
- ナビゲーションペインで [データ転送] を展開します。
- [タスク] を選択し、[タスクの作成] を選択します。
- 宛先アカウントのバケットがソースアカウントのバケットとは異なるリージョンにある場合は、宛先バケットのリージョンを選択します。
- [ソースロケーションの設定] ページで次の操作を行います。
[既存の場所を選択] を選択します。
(複数リージョン間で転送する場合) [リージョン] ドロップダウンでソースバケットが置かれたリージョンを選択します。
[既存のロケーション] でデータの転送元となる S3 バケットのソースロケーションを選択し、[次へ] を選択します。 - [宛先ロケーションの設定] ページで次の操作を行います。
[既存の場所を選択] を選択します。
[既存のロケーション] で、データ転送先の S3 バケットでの宛先ロケーションを選択し、[次へ] を選択します。 - [設定の構成] ページで [タスクモード] を選択します。
注: Enhanced モードの使用をおすすめします。詳細については、「データ転送のタスクモードを選択する」を参照してください。 - タスクの名前を入力し、Amazon CloudWatch ロググループなどの追加設定を行います。
- [次へ] を選択します。
- [レビュー] ページで設定をレビューした後、[タスクを作成] を選択します。
- タスクの詳細ページで [開始] を選択し、次のいずれかを選択します。
変更せずにタスクを実行するには、[デフォルト設定で開始] を選択します。
タスクを実行する前に変更するには、[オプションを上書きして開始] を選択します。
関連情報
チュートリアル: 複数 AWS アカウントで Amazon S3 バケット間のデータを転送する
AWS DataSync を使用してカスタマーマネージド SSE-KMS 暗号化オブジェクトを複数 AWS アカウントとリージョン間で転送する
- 言語
- 日本語
