この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていた内容
以下の設定は実施しましたが、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 バケットにアクセスログが保存されました。