CloudFront のアクセスログが S3 バケットに保存されない場合の対処方法

CloudFront のアクセスログが S3 バケットに保存されない場合、ログ保存用 S3 バケットのデフォルト暗号化として KMS キー (SSE-KMS) を用いたサーバー側の暗号化を使用していないか確認します。使用している場合、追加設定が必要です。
2022.08.13

困っていた内容

以下の設定は実施しましたが、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 バケットにアクセスログが保存されました。

参照情報

標準ログ (アクセスログ) の設定および使用