私は、2つの個別のAWSアカウントを持っているクライアントの仕事をしています。 S3アカウントの1つのバケット内のすべてのファイルを、2番目のアカウントの新しいバケットに移動する必要があります。
S3cmdは、次の形式を使用してこれを許可すると考えました。
s3cmd cp s3://bucket1 s3://bucket2 --recursive
ただし、これにより、1つのアカウントのキーのみを使用でき、2番目のアカウントのアカウントを指定することはできません。
ファイルをダウンロードして2番目のアカウントに再度アップロードせずにこれを行う方法はありますか?
全員に許可を与える必要はありません。 IAMユーザーを使用して、あるアカウントのバケットから別のアカウントにコピーするために、ソースおよび宛先で以下のバケットポリシーを使用します
コピー元のバケット:SourceBucket
コピー先のバケット:DestinationBucket
ソースAWSアカウントID:XXXX–XXXX-XXXX
ソースIAMユーザー:src–iam-user
以下のポリシーは、IAMユーザー-XXXX–XXXX-XXXX:src–iam-user
がs3:ListBucket
およびs3:GetObject
特権を持っていることを意味しますon SourceBucket/*
およびs3:ListBucket
およびs3:PutObject
特権はDestinationBucket/*
を持っています
SourceBucketでは、ポリシーは次のようになります。
{
"Id": "Policy1357935677554",
"Statement": [{
"Sid": "Stmt1357935647218",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": "arn:aws:s3:::SourceBucket",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}, {
"Sid": "Stmt1357935676138",
"Action": ["s3:GetObject"],
"Effect": "Allow",
"Resource": "arn:aws:s3:::SourceBucket/*",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}]
}
DestinationBucketでは、ポリシーは次のようになります。
{
"Id": "Policy1357935677555",
"Statement": [{
"Sid": "Stmt1357935647218",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DestinationBucket",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}, {
"Sid": "Stmt1357935676138",
"Action": ["s3:PutObject"],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DestinationBucket/*",
"Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
}]
}
実行するコマンドはs3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1
です
AWS内の帯域幅はカウントされないため、バケットが同じリージョンにある限り、AWS内のボックスからすべてを実行することで、お金と時間を節約できます。
ファイルをどこかのコンピューターにタッチダウンせずにそれを行うことに関しては、そうは思わないでください。
例外:彼らはメールを送信するハードドライブから一括アップロードを行うので、バケットからバケットへの転送についても同じことができます。
物事を迅速に進めるためのシンプルなソリューションとして、cloudberry s3 Explorerを使用することをお勧めします。また、内部AWS帯域幅無料転送サービスを利用することもできます。
Cloudberry sdkツールを使用して、アプリに統合することもできます。
がんばろうジョン
役割とポリシーが非常にエレガントな方法であっても、別の解決策があります。
ローカルマシン(デスクトップまたはAWS外のサーバー)で、Source-Bucket-Accountsの認証情報を使用して新しいプロファイルを作成します。
aws --profile $ {YOUR_CUSTOM_PROFILE} configure
aws_access_key_idとaws_secret_access_keyを入力します(リージョンと出力はスキップできます)
Destination-Bucket-Credentialsを環境変数として保存します
aWS_ACCESS_KEY_ID = AKIをエクスポート...
aWS_SECRET_ACCESS_KEY = CNをエクスポート...
同期を行いますが、重要な「プロファイル」パラメータを追加します
aws --profile $ {YOUR_CUSTOM_PROFILE} s3 sync s3:// $ {SOURCE_BUCKET_NAME} s3:// $ {DESTINATION_BUCKET_NAME}