
はじめに
たまたま、別アカウントのAWSのS3の中身を本アカウントに移行する必要があったので、やってみた。
やり方
基本的には、下記に記載のやり方を順番にやっていく。
aws.amazon.com
コピー元、コピー先のAWSアカウントの権限が無いとできない。
- コピー先アカウントの AWS アカウント ID 番号を取得します。
docs.aws.amazon.com
- 次のようにして、コピー元アカウントから、コピー先アカウントがオブジェクトを取得できるようにするポリシーをコピー元バケットにアタッチします。
重要: [プリンシパル] の値には、コピー先アカウントの AWS アカウント ID 番号を入力します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {"AWS": "222222222222"},
"Action": ["s3:ListBucket","s3:GetObject"],
"Resource": [
"arn:aws:s3:::sourcebucket/*",
"arn:aws:s3:::sourcebucket"
]
}
]
}
バケットポリシーの追加は下記。
docs.aws.amazon.com
- コピー先アカウントのユーザーまたはグループにポリシーをアタッチする。
ユーザーがコピー元バケットからコピー先バケットにオブジェクトをコピーできるようにするポリシーを、コピー先アカウントの IAM ユーザーまたはグループにアタッチします。このポリシーは次の例のようになります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::sourcebucket",
"arn:aws:s3:::sourcebucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::destinationbucket",
"arn:aws:s3:::destinationbucket/*"
]
}
]
}
ポリシーをユーザーにアタッチするやり方は下記
docs.aws.amazon.com
- コピー元バケットからコピー先バケットにオブジェクトをコピーする。
コマンド実行にはAWS CLIが必要です。
docs.aws.amazon.com
同期するコマンドを実行します。
aws s3 sync s3://sourcebucket s3://destinationbucket
こんな感じで同期が進んでいきます。

〆