View a markdown version of this page

を使用して Amazon S3 バケットから別のアカウントとリージョンにデータをコピーする AWS CLI - AWS 規範ガイダンス

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

を使用して Amazon S3 バケットから別のアカウントとリージョンにデータをコピーする AWS CLI

Appasaheb Bagali、Purushotham G K (Amazon Web Services)

概要

このパターンでは、 AWS アカウントのソース Amazon Simple Storage Service (Amazon S3) バケットから、同じ AWS リージョン または別のリージョンの別の AWS アカウントの宛先 Amazon S3 バケットにデータを移行する方法について説明します。

ソース Amazon S3 バケットは、アタッチされたリソースポリシーを使用して AWS Identity and Access Management (IAM) アクセスを許可します。ターゲットアカウントのユーザーは、ソースバケットに対する PutObjectGetObject 権限を持つロールを引き受ける必要があります。最後に、 copyおよび sync コマンドを実行して、送信元 Amazon S3 バケットから送信先 Amazon S3 バケットにデータを転送します。

アカウントは、Amazon S3 バケットにアップロードするオブジェクトを所有します。複数のアカウントやリージョンにわたってオブジェクトをコピーする場合は、ターゲットアカウントにコピーされたオブジェクトの所有権を付与します。オブジェクトの所有権は、「アクセス制御リスト (ACL)」をbucket-owner-full-controlに変更することで変更できます。ただし、ACL は複数のオブジェクトでは管理が難しい場合があるため、プログラムによるクロスアカウント権限を移行先のアカウントに付与することをお勧めします。

警告

このシナリオでは、プログラムによるアクセスと長期的な認証情報を持つ IAM ユーザーが必要ですが、これにはセキュリティ上のリスクがあります。このリスクを軽減するために、これらのユーザーにはタスクの実行に必要な権限のみを付与し、不要になったユーザーは削除することをお勧めします。アクセスキーは、必要に応じて更新できます。詳細については、IAM ドキュメントの「アクセスキーの更新」を参照してください。

前提条件と制限

前提条件

  • 同じ または異なる AWS アカウント で 2 つのアクティブな AWS リージョン。

  • ソースアカウントの既存の Amazon S3 バケット。 

  • 送信元または送信先の Amazon S3 バケットでデフォルトの暗号化が有効になっている場合は、 AWS Key Management Service (AWS KMS) キーのアクセス許可を変更する必要があります。詳細については、このトピックの AWS re:Post 記事を参照してください。

  • クロスアカウントアクセス許可に精通している。

制限事項

  • このパターンは 1 回限りの移行を対象としています。レプリケート元バケットからレプリケート先バケットへの新しいオブジェクトの継続的かつ自動的な移行が必要なシナリオでは、Amazon S3 バッチレプリケーションを使用できます。

  • このパターンではAccessKeyId、一時的で非永続的なセッション認証情報 (、SecretAccessKeySessionToken) を使用します。出力の有効期限タイムスタンプは、これらの認証情報の有効期限を示します。ロールは、最大セッション期間で設定されます。セッションの有効期限が切れると、コピージョブはキャンセルされます。

アーキテクチャ

Amazon S3 データを別のアカウントまたはリージョンにコピーする

ツール

  • AWS Command Line Interface (AWS CLI) は、コマンドラインシェルのコマンド AWS のサービス を通じて を操作するのに役立つオープンソースツールです。

  • AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。

  • Amazon Simple Storage Service (Amazon S3) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

ベストプラクティス

エピック

タスク説明必要なスキル

IAM ユーザーを作成してアクセスキーを取得します。

  1. にサインイン AWS マネジメントコンソール し、プログラムによるアクセス権を持つ IAM ユーザーを作成します。詳細な手順については、IAM ドキュメントの「IAM ユーザーの作成」を参照してください。このユーザーにはポリシーをアタッチする必要はありません。

  2. このユーザーのアクセスキーとシークレットキーを生成します。手順については、 AWS ドキュメントのAWS アカウント 「」および「 アクセスキー」を参照してください。

AWS DevOps

アイデンティティベースの IAM ポリシーを作成します。

次のアクセス許可S3MigrationPolicyを使用して、 という名前の IAM アイデンティティベースのポリシーを作成します。ユースケースに応じて、ソースとターゲットのバケット名を変更してください。この ID ベースのポリシーにより、このロールを引き受けるユーザーは、ソースバケットとターゲットバケットにアクセスできます。詳細な手順については、IAM ドキュメントの「IAM ポリシーの作成」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:ListObjectsV2", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::amazon-s3-demo-source-bucket", "arn:aws:s3:::amazon-s3-demo-source-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectTagging", "s3:GetObjectTagging", "s3:ListObjectsV2", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::amazon-s3-demo-destination-bucket", "arn:aws:s3:::amazon-s3-demo-destination-bucket/*" ] } ] }
AWS DevOps

IAM ロールを作成します。

次の信頼ポリシーを使用してS3MigrationRole、 という名前の IAM ロールを作成します。ユースケースに合わせて、信頼ポリシー内のターゲット IAM ロールの Amazon リソースネーム (ARN) を変更します。この信頼ポリシーにより、新しく作成された IAM ユーザは S3MigrationRole を継承できるようになります。以前に作成した をアタッチしますS3MigrationPolicy。詳細な手順については、IAM ドキュメントの「IAM ユーザーにアクセス許可を委任するロールの作成」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<destination_account>:user/<user_name>" }, "Action": "sts:AssumeRole", "Condition": {} } ] }
AWS DevOps
タスク説明必要なスキル

Amazon S3 バケットポリシーを作成してアタッチします。

  1. AWS マネジメントコンソール ソースアカウントの にサインインし、Amazon S3 コンソールを開きます。

  2. ソース Amazon S3 バケットを選択し、アクセス許可を選択します。

  3. [バケットポリシー][編集] を選択します。

  4. 次のバケットポリシーを貼り付けます。送信先アカウントの AWS アカウント ID を必ず含め、要件に従ってバケットポリシーテンプレートを設定します。このリソースベースのポリシーは、送信先ロールが送信元アカウントの Amazon S3 オブジェクトにアクセスS3MigrationRoleすることを許可します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "DelegateS3Access", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::<destination_account>:role/<RoleName>"}, "Action": ["s3:ListBucket", "s3:GetObject", "s3:ListObjectsV2", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::amazon-s3-demo-source-bucket/*", "arn:aws:s3:::amazon-s3-demo-source-bucket" ] } ] }
  5. [保存] を選択します。

クラウド管理者
タスク説明必要なスキル

送信先 Amazon S3 バケットを作成します。

  1. AWS マネジメントコンソール 送信先アカウントの にサインインし、Amazon S3 コンソールを開きます。

  2. [バケットを作成] を選択します。

  3. 要件に従って Amazon S3 バケットを作成します。詳細については、Amazon S3 ドキュメントの「バケットの作成」を参照してください。 

クラウド管理者
タスク説明必要なスキル

新しく作成したユーザー認証情報 AWS CLI を使用して を設定します。

  1. の最新リリースをインストールします AWS CLI。手順については、 AWS CLI ドキュメントの「 の最新バージョンのインストールまたは更新 AWS CLI」を参照してください。

  2. を実行して$ aws configure、作成した IAM ユーザーの AWS アクセスキー AWS CLI で更新します。詳細については、 AWS CLI ドキュメントの「設定と認証情報ファイルの設定」を参照してください。

AWS DevOps

Amazon S3 移行ロールを引き受けます。

  1. を使用して AWS CLI を引き受けますS3MigrationRole

    aws sts assume-role \ --role-arn "arn:aws:iam::<destination_account>:role/S3MigrationRole" \ --role-session-name AWSCLI-Session
    注記

    このコマンドは複数の情報を出力します。認証情報ブロック内にはAccessKeyIdSecretAccessKeySessionTokenが必要です。この例では、環境変数RoleAccessKeyIDRoleSecretKeyRoleSessionTokenを使用しています。: セッション認証情報 (AccessKeyIdSecretAccessKey、および SessionToken) は一時的なものであり、永続的ではありません。出力の有効期限タイムスタンプは、これらの認証情報の有効期限を示します。ロールは、最大セッション期間で設定されます。認証情報の有効期限が切れた場合は、sts:AssumeRole再度 を呼び出して新しい一時的な認証情報を取得する必要があります。

  2. IAM ロールを引き受ける環境変数を 3 つ作成します。これらの環境変数は、次の出力で完了します。

    # Linux export AWS_ACCESS_KEY_ID=<RoleAccessKeyID from command output> export AWS_SECRET_ACCESS_KEY=<RoleSecretKey from command output> export AWS_SESSION_TOKEN=<RoleSessionToken from command output> # Windows set AWS_ACCESS_KEY_ID=<RoleAccessKeyID from command output> set AWS_SECRET_ACCESS_KEY=<RoleSecretKey from command output> set AWS_SESSION_TOKEN=<RoleSessionToken from command output>
  3. IAM ロールを引き受けることを検証するには、以下のコマンドを実行します。

    aws sts get-caller-identity

詳細については、「 を使用して IAM ロールを引き受け AWS CLI るにはどうすればよいですか?」を参照してください。

AWS 管理者

レプリケート元バケットからレプリケート先バケットにデータをコピーして同期します。

ロールを引き受けるS3MigrationRoleと、コピー (cp) コマンドまたは同期 (sync) コマンドを使用してデータをコピーできます。

コピー:

aws s3 cp s3://amazon-s3-demo-source-bucket/ \ s3://amazon-s3-demo-destination-bucket/ \ --recursive --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME

同期:

aws s3 sync s3://amazon-s3-demo-source-bucket/ \ s3://amazon-s3-demo-destination-bucket/ \ --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME
クラウド管理者

トラブルシューティング

問題ソリューション

ListObjects オペレーションを呼び出すときにエラーが発生しました (AccessDenied)

  1. S3MigrationRole ロールを継承済みであることを確認してください。

  2. aws sts get-caller-identity を実行して、使用されたロールを確認します。出力に の ARN が表示されない場合はS3MigrationRole、IAM ロールを再度引き受けて再試行してください。

関連リソース