翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
を使用して 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) アクセスを許可します。ターゲットアカウントのユーザーは、ソースバケットに対する PutObject と GetObject 権限を持つロールを引き受ける必要があります。最後に、 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、一時的で非永続的なセッション認証情報 (、SecretAccessKey、SessionToken) を使用します。出力の有効期限タイムスタンプは、これらの認証情報の有効期限を示します。ロールは、最大セッション期間で設定されます。セッションの有効期限が切れると、コピージョブはキャンセルされます。
アーキテクチャ
ベストプラクティス
エピック
| タスク | 説明 | 必要なスキル |
|---|
IAM ユーザーを作成してアクセスキーを取得します。 | | 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 バケットポリシーを作成してアタッチします。 | AWS マネジメントコンソール ソースアカウントの にサインインし、Amazon S3 コンソールを開きます。 ソース Amazon S3 バケットを選択し、アクセス許可を選択します。 [バケットポリシー] で [編集] を選択します。 次のバケットポリシーを貼り付けます。送信先アカウントの 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"
]
}
]
}
[保存] を選択します。
| クラウド管理者 |
| タスク | 説明 | 必要なスキル |
|---|
送信先 Amazon S3 バケットを作成します。 | AWS マネジメントコンソール 送信先アカウントの にサインインし、Amazon S3 コンソールを開きます。 [バケットを作成] を選択します。 要件に従って Amazon S3 バケットを作成します。詳細については、Amazon S3 ドキュメントの「バケットの作成」を参照してください。
| クラウド管理者 |
| タスク | 説明 | 必要なスキル |
|---|
新しく作成したユーザー認証情報 AWS CLI を使用して を設定します。 | | AWS DevOps |
Amazon S3 移行ロールを引き受けます。 | を使用して AWS CLI を引き受けますS3MigrationRole。 aws sts assume-role \
--role-arn "arn:aws:iam::<destination_account>:role/S3MigrationRole" \
--role-session-name AWSCLI-Session
このコマンドは複数の情報を出力します。認証情報ブロック内にはAccessKeyId、SecretAccessKey、SessionTokenが必要です。この例では、環境変数RoleAccessKeyID、RoleSecretKeyとRoleSessionTokenを使用しています。: セッション認証情報 (AccessKeyId、SecretAccessKey、および SessionToken) は一時的なものであり、永続的ではありません。出力の有効期限タイムスタンプは、これらの認証情報の有効期限を示します。ロールは、最大セッション期間で設定されます。認証情報の有効期限が切れた場合は、sts:AssumeRole再度 を呼び出して新しい一時的な認証情報を取得する必要があります。 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>
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)
| S3MigrationRole ロールを継承済みであることを確認してください。
aws sts get-caller-identity を実行して、使用されたロールを確認します。出力に の ARN が表示されない場合はS3MigrationRole、IAM ロールを再度引き受けて再試行してください。
|
関連リソース