暗号化されたEBSを含むAMIを別リージョンへコピーしたところ、コピー先のAMIが"失敗"となり、次のエラーが発生しました。
AMI snapshot copy failed with error: Given key ID is not accessible
今回は、このエラーの原因と対応方法を簡単に紹介します。
AMIのコピーに失敗
■原因はKMSの権限不足
CloudTrailでAMIコピー実行時のイベントを確認したところ、次のKMS APIがAccessDeniedとなっていました。
"eventTime": "2026-08-01T09:22:12Z",
"eventSource": "kms.amazonaws.com",
"eventName": "GenerateDataKeyWithoutPlaintext",
"awsRegion": "us-east-1",
"sourceIPAddress": "ec2-frontend-api.amazonaws.com",
"userAgent": "ec2-frontend-api.amazonaws.com",
IAMポリシーにはkms:GenerateDataKeyを設定していましたが、kms:GenerateDataKeyWithoutPlaintextは設定していませんでした。
この2つは別のKMSアクションなので、kms:GenerateDataKeyだけではGenerateDataKeyWithoutPlaintextを実行できません。
AWS公式ドキュメントの「Amazon EBS スナップショットのコピー」では、暗号化されたスナップショットをコピーするために、次のKMS権限が必要と記載されています。
kms:DescribeKey
kms:CreateGrant
kms:GenerateDataKey
kms:GenerateDataKeyWithoutPlaintext
kms:ReEncrypt
kms:Decrypt
今回はIAMポリシーに次の権限を追加しました。
"kms:GenerateDataKeyWithoutPlaintext"
追加後に再度AMIコピーを実行したところ、正常にコピーできることを確認しました。
まとめ
暗号化AMIをリージョン間コピーすると、AMIに紐づくEBSスナップショットもコピー先リージョンで暗号化されます。
その際に必要なKMS権限が不足していると、
AMI snapshot copy failed with error: Given key ID is not accessible
となる場合があります。
このエラーだけでは不足している権限までは分からないため、CloudTrailでKMSのAccessDeniedイベントを確認すると原因を特定しやすいです。
今回のケースでは、kms:GenerateDataKeyWithoutPlaintextの不足が原因でした。
参考サイトリンク:about-aws
↓ほかの協栄情報メンバーもAmazon EC2に関する記事を公開しています。ぜひ参考にしてみてください。
■想像と違った”AMI Usage” ~運用で使えるようにスクリプト化してみた~(齊藤弘樹)
■Amazon EC2 Capacity Managerを使ってみた(齊藤弘樹)

