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

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

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

作成者: Appasaheb bagali (AWS) と Purushotham G K (AWS)

環境:本稼働

テクノロジー: ストレージとバックアップ

AWS サービス: AWS CLI、AWSIdentity and Access Management、Amazon S3

[概要]

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

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

S3 バケットにアップロードするオブジェクトは、アカウントが所有します。複数のアカウントやリージョンにわたってオブジェクトをコピーする場合は、コピー先のアカウントにコピーされたオブジェクトの所有権を付与します。オブジェクトの所有権を変更するには、アクセスコントロールリスト (ACL) を に変更しますbucket-owner-full-control。ただし、複数のオブジェクトに対して を管理することが困難なACLs場合があるため、宛先アカウントにプログラムによるクロスアカウントアクセス許可を付与することをお勧めします。

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

このパターンは 1 回限りの移行を対象としています。レプリケート元バケットからレプリケート先バケットへの新しいオブジェクトの継続的かつ自動的な移行が必要なシナリオでは、代わりに S3 バッチレプリケーションを使用できます。これは、パターン「S3 バッチレプリケーション を使用して S3 バケットから別のアカウントとリージョンにデータをコピーするS3」で説明されています

前提条件と制限

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

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

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

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

アーキテクチャ

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

ツール

ベストプラクティス

エピック

タスク説明必要なスキル

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

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

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

AWS DevOps

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

次のアクセス許可を使用してS3MigrationPolicy、 という名前のIAMアイデンティティベースのポリシーを作成します。詳細な手順については、 IAMドキュメントのIAM「ポリシーの作成」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::awsexamplesourcebucket", "arn:aws:s3:::awsexamplesourcebucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectTagging", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::awsexampledestinationbucket", "arn:aws:s3:::awsexampledestinationbucket/*" ] } ] }

:ユースケースに応じて、ソースとターゲットのバケット名を変更してください。

この ID ベースのポリシーにより、このロールを引き受けるユーザーは、ソースバケットとターゲットバケットにアクセスできます。

AWS DevOps

IAM ロールを作成します。

次の信頼ポリシーS3MigrationRoleを使用して という名前のIAMロールを作成し、以前に作成した をアタッチしますS3MigrationPolicy。詳細な手順については、 IAMドキュメントのIAM「 ユーザーに許可を委任するロールの作成」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<destination_account>:user/<user_name>" }, "Action": "sts:AssumeRole", "Condition": {} } ] }

: ユースケースに応じて、信頼ポリシーの送信先IAMロールまたはユーザー名の Amazon リソースネーム (ARN) を変更します。

この信頼ポリシーにより、新しく作成されたIAMユーザーは を引き受けることができますS3MigrationRole

AWS DevOps
タスク説明必要なスキル

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

ソースアカウントの AWSマネジメントコンソールにサインインし、Amazon S3 コンソールを開きます。ソースの S3 バケットを選択して [アクセス権限]を選択します。[バケットポリシー] の下で、[編集]を選択し、以下のバケットポリシーを貼り付けます。[Save] を選択します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DelegateS3Access", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::<destination_account>:role/<RoleName>"}, "Action": ["s3:ListBucket", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::awsexamplesourcebucket/*", "arn:aws:s3:::awsexamplesourcebucket" ] } ] }

: 送信先AWSアカウントのアカウント ID を必ず含め、要件に従ってバケットポリシーテンプレートを設定してください。

このリソースベースのポリシーでは、デスティネーションロールS3MigrationRoleがソースアカウントの S3 オブジェクトにアクセスすることを許可します。

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

宛先 S3 バケットを作成します。

送信先アカウントの AWSマネジメントコンソールにサインインし、Amazon S3 コンソールを開き、バケットの作成 を選択します。要件に従って S3 バケットを作成します。詳細については、Amazon S3 ドキュメントの「バケットの作成」を参照してください。 

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

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

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

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

AWS DevOps

S3 の移行ロールを引き受けてください。

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

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

    このコマンドは複数の情報を出力します。認証情報ブロック内にはAccessKeyIdSecretAccessKeySessionTokenが必要です。この例では、環境変数RoleAccessKeyIDRoleSecretKeyRoleSessionTokenを使用しています。有効期限フィールドのタイムスタンプはUTCタイムゾーンにあることに注意してください。タイムスタンプは、IAMロールの一時的な認証情報の有効期限を示します。一時的な認証情報の有効期限が切れた場合は、 sts:AssumeRole API を再度呼び出す必要があります。

  2. IAM ロールを引き受ける 3 つの環境変数を作成します。これらの環境変数には以下の出力が入力されます。

    # Linux export AWS_ACCESS_KEY_ID=RoleAccessKeyID export AWS_SECRET_ACCESS_KEY=RoleSecretKey export AWS_SESSION_TOKEN=RoleSessionToken # Windows set AWS_ACCESS_KEY_ID=RoleAccessKeyID set AWS_SECRET_ACCESS_KEY=RoleSecretKey set AWS_SESSION_TOKEN=RoleSessionToken
  3. 次のコマンドを実行して、IAMロールを引き受けたことを確認します。

    aws sts get-caller-identity

詳細については、「 AWSナレッジセンター」を参照してください。

AWS 管理者

送信元 S3 バケットから送信先 S3 バケットにデータをコピーして同期します。

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

コピー (詳細については、 AWS CLI コマンドリファレンスを参照してください)。

aws s3 cp s3:// DOC-EXAMPLE-BUCKET-SOURCE / \ s3:// DOC-EXAMPLE-BUCKET-TARGET / \ --recursive --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME

同期する (詳細については、 AWS CLI コマンドリファレンスを参照してください)。

aws s3 sync s3:// DOC-EXAMPLE-BUCKET-SOURCE / \ s3:// DOC-EXAMPLE-BUCKET-TARGET / \ --source-region SOURCE-REGION-NAME --region DESTINATION-REGION-NAME
クラウド管理者

トラブルシューティング

問題ソリューション

PutObject オペレーションを呼び出すときにエラー (AccessDenied) が発生しました: アクセスが拒否されましたListObjects

  • ロール を引き受けたことを確認しますS3MigrationRole

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

関連リソース