Posted at

SSE-KMS を指定したCloudTrailの証跡作成時エラーの原因と対処

あるアカウントのCloudTrail設定時に遭遇したエラー。

メッセージからすぐに原因が分からなかったので残しておきます。


事象

CloudTrailでSSE-KMSによってカスタマーマスターキー(CMK)

を使用したログの暗号化設定を有効化しようとすると、

キーポリシーの CloudTrail の権限が十分でありません。

というエラーメッセージが表示され、証跡の作成/保存ができない。

設定を行うIAMユーザーの権限には問題がないことを確認済み。

image.png

また新規のKMSキーの作成を選択した場合は、キーの自動作成自体は成功している。


発生条件と原因

新規作成ではなく、既存のS3バケットを指定しており、

バケットポリシーでSSE-S3による暗号化を要求している場合に発生する。

具体的には以下のようなポリシーを含む場合。


policy.json

        {

"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 とする。


policy2.json

        {

"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