CloudFront のアクセスログが S3 バケットに保存されない場合の対処方法
困っていた内容
以下の設定は実施しましたが、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 バケットにアクセスログが保存されました。