
CloudFront のアクセスログが S3 バケットに保存されない場合の対処方法
CloudFront のアクセスログが S3 バケットに保存されない場合、ログ保存用 S3 バケットのデフォルト暗号化として KMS キー (SSE-KMS) を用いたサーバー側の暗号化を使用していないか確認します。使用している場合、追加設定が必要です。
困っていた内容
以下の設定は実施しましたが、CloudFront のアクセスログが S3 バケットに保存されません。
・CloudFront でログ記録をオンにし S3 バケットを指定した
・S3 バケットの設定で「ACL 有効」を指定した
CloudFront アクセスログ保存用の S3 バケットには、現在のところ ACL 有効化が必要です。 詳しくは下記ブログをご参考ください。
どうすればいいの?
確認する箇所
ログ保存用 S3 バケットで、カスタマーマネージド型キーを使用する KMS キー (SSE-KMS) を用いたサーバー側の暗号化を使用していませんか?
その場合、さらに以下の設定が必要です。
SSE-KMS バケット必須のキーポリシー 標準ログ用の S3 バケットで、カスタマーマネージド型キーを使用する AWS KMS keys (SSE-KMS) を用いたサーバー側の暗号化が使用されている場合は、カスタマーマネージド型キーのキーポリシーに次のステートメントを追加する必要があります。これにより、CloudFront はログファイルをバケットに書き込むことができます。(CloudFront はログファイルをバケットに書き込むことができないため、AWS マネージドキー で SSE-KMS を使用することはできません)
{ "Sid": "Allow CloudFront to use the key to deliver logs", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "kms:GenerateDataKey*", "Resource": "*" }
標準ログ (アクセスログ) の設定および使用 - SSE-KMS バケット必須のキーポリシー
設定してみた
KMS コンソールを開き、対象のカスタマー管理型キーを選択します。
キーポリシーの「編集」を開き、ステートメントを追加します。
少し待つと、S3 バケットにアクセスログが保存されました。