S3バケットを別アカウントへ移設
ダウンタイムなしにS3のアカウントを移設したかったのですが、巷の情報では1回のみのsyncで済ませており、ちょっと困ったので備忘録。
他との違いとしてはs3:GetObjectTagging
の追加がかなめ。
手順
移設用IAMユーザー
移設先のアカウントで以下のポリシーを持ったユーザーを作成してください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectTagging", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::from-bucket", "arn:aws:s3:::from-bucket/*" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::to-bucket", "arn:aws:s3:::to-bucket/*" ] } ] }
configureの登録
後程aws cliで同期を行うので、作成したIAMユーザーのconfigureを登録しておいてください。
$ aws configure --profile s3-sync-profile
移設元バケットポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::xxxxxxxxxxxx:user/sync-user" }, "Action": [ "s3:ListBucket", "s3:GetObject", "s3:GetObjectTagging" ], "Resource": [ "arn:aws:s3:::from-bucket/*", "arn:aws:s3:::from-bucket" ] } ] }
移設実行
$ aws s3 sync s3://from-bucket/ s3://to-bucket/ --profile s3-sync-plofile
s3:GetObjectTagging
これがない場合、2回目のsyncでAn error occurred (AccessDenied) when calling the GetObjectTagging operation: Access Denied
が発生して差分をsync出来ませんでした。
要注意!
備考
aws s3 sync
は差分のみコピーしてくれます。
なのでまず最初に実行し、その後サービス側のS3の向き差を変更、再度aws s3 sync
を実行すれば影響範囲を最小に移設が可能です。
ただしすごく活発なサービスや、少しの問題が発生することは許されない、ということであれば、しっかりメンテ時間をとりませう。