タダです.
CloudFront でアクセスログを設定しているのに S3 にログがない...? って思ったことありませんか?自分はあります.ログがないと調査や分析ができなくなってしまって手詰まりになるってことにもなるため,そんな時に対処したことをまとめていきます.
S3 バケットの暗号化がカスタマーキーで行われている場合はキーポリシーを更新する
アクセスログを出力するバケットで,暗号化をカスタマーキーで行っている場合は KMS のキーポリシーを更新します.具体的には以下のポリシーを追加します.これで暗号化されたバケットに対し CloudFront はログファイルをバケットに書き込むことができます.
{ "Sid": "Allow CloudFront to use the key to deliver logs", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*" }
バケットの ACL に awslogsdelivery のアクセス許可を追加する
現状,S3 バケットの ACL は無効化が推奨されています.しかし,CloudFront のアクセスログを格納するバケットにおいては有効化する必要があります.加えて awslogsdelivery
のアクセス許可を与える必要があります.
具体的には, c4c1ede66af53448b93c283ce9448c4ba468c9432aa01d700d3878632f77d2d0
というアカウントの正規 ID を入力し,各種権限を有効化します.
まとめ
小ネタですが,自分が CloudFront のアクセスログが出ていない時に対処した2つの内容をまとめました.