KMS キーで暗号化しているバケットから移行して、移行先でも KMS キーで暗号化しようとして少しつまずいたのでメモ。
移行元のバケットが暗号化されている場合、aws-cli で使うユーザに KMS キーの権限が必要です。
- How do I transfer ownership of Amazon S3 objects to a different AWS account? の通りに、移行元のバケットと移行先のユーザのポリシーを設定します。
- ここで
aws s3 sync
を実行するとA client error (AccessDenied) occurred when calling the CopyObject operation: Access Denied
のようなエラーが出て失敗するはず。 - 移行元コンソールの「IAM > Encryption Keys > 該当のキー > Key Users > External Accounts」で移行先のアカウント番号を設定します。
-
移行先コンソールの「IAM > Users > 該当のユーザ > Permissions > Inline Policies」で KMS キーの利用権限を設定します。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": [ "arn:aws:kms:(移行元リージョン):(移行元アカウント):key/(移行元 KMS キー ID)" ] } }
移行先コンソールの「IAM > Encryption Keys」で移行先バケットを暗号化する KMS キーを作り、Key Users に aws-cli で使うユーザを設定します。
-
移行先の KMS キー ID を指定しつつ、コピーを実行します。
aws s3 sync --sse=aws:kms --sse-kms-key-id=(移行元 KMS キー ID) s3://(移行元バケット) s3://(移行先バケット)