あるアカウントのCloudTrail設定時に遭遇したエラー。
メッセージからすぐに原因が分からなかったので残しておきます。
事象
CloudTrailでSSE-KMSによってカスタマーマスターキー(CMK)
を使用したログの暗号化設定を有効化しようとすると、
キーポリシーの CloudTrail の権限が十分でありません。
というエラーメッセージが表示され、証跡の作成/保存ができない。
設定を行うIAMユーザーの権限には問題がないことを確認済み。
また新規のKMSキーの作成を選択した場合は、キーの自動作成自体は成功している。
発生条件と原因
新規作成ではなく、既存のS3バケットを指定しており、
バケットポリシーでSSE-S3による暗号化を要求している場合に発生する。
具体的には以下のようなポリシーを含む場合。
{
"Sid": "DenyUnEncryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::<your_bucket_name>/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
}
補足
上記は PutOubject リクエストに SSE-S3 によるサーバー側の暗号化を要求する
x-amz-server-side-encryption ヘッダーが含まれていない場合は、
アップロードを拒否するという内容です。
SSE-KMS を有効化した証跡はこの条件に合致しませんので設定時にエラーとなります。
対処
同等のポリシーを維持したい場合は、s3:x-amz-server-side-encryption キーを
AES256 ではなく、aws:kms とする。
{
"Sid": "DenyUnEncryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::<your_bucket_name>/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms"
}
}
}
補足
通常は CloudTrail 専用のバケットを作成すると思いますので、
ポリシーによる暗号化の要求は不要でないかと個人的には感じます。
その場合該当のポリシーを丸ごと削除でも対応できます。
分かってしまえば当然のエラーなのですが、エラーメッセージからは
想像しづらい原因でした。
他の原因でも表示されるメッセージかもしれませんが、参考になれば幸いです。
関連ドキュメント
Amazon S3 で管理された暗号化キーによるサーバー側の暗号化 (SSE-S3) を使用したデータの保護
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingServerSideEncryption.html
AWS KMS で管理されたキー (SSE-KMS) によるサーバー側の暗号化を使用してデータを保護する
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingKMSEncryption.html