Cloudflare

ログに関するtips
ーコラムー
2020年10月27日号



Cloudflare導入前のご質問で、ログに関して説明して欲しいと言われることが多いため、ざっくり説明したいと思います。

HTTPリクエストのログを残すことはEnterpriseプランのみ対応しています。 ログの取得方法としてはLog Pull(別のサーバなどからCloudflareへログを取りに行く)と、Log Push(予め設定したい宛先と方式でログを送信する)があります。


Log Pull

RESTfull APIで取得する方式になりますが、go言語で書かれたログ取得コマンドラインツールがGitHubに公開されており、こちらも便利です


どんな項目が出力されますか?と聞かれることも多いのですが、ログをPullする際にどの項目が欲しいのかをユーザ自身が指定する必要があります。存在する全項目としては以下の通りです。


【HTTPリクエストログ】
項目名 説明
BotScore BotManagementを使っている場合のボットスコア
BotScoreSrc 何を元にボットスコア計算したか
CacheCacheStatus キャッシュマッチ結果
CacheResponseBytes キャッシュから返されたバイト数
CacheResponseStatus キャッシュによって返されたHTTPステータスコード
CacheTieredFill 階層型キャッシュの使用有無
ClientASN AS番号
ClientCountry
ClientDeviceType デバイスタイプ
ClientIP クライアントのIPアドレス
ClientIPClass IPクラス
ClientRequestBytes リクエストのバイト数
ClientRequestHost リクエストされたホスト
ClientRequestMethod リクエストのHTTPメソッド
ClientRequestPath リクエストされたパス
ClientRequestProtocol リクエストのHTTPプロトコル
ClientRequestReferer HTTPリクエストリファラ
ClientRequestURI リクエストされたURI
ClientRequestUserAgent ユーザーエージェント
ClientSSLCipher SSL暗号化形式
ClientSSLProtocol Client SSL(TLS)protocol,
ClientSrcPort ソースポート番号
ClientXRequestedWith X-Requested-With HTTPヘッダの値
EdgeColoCode IATA空港コードに準じたエッジデータンセンターコード
EdgeColoID エッジID
EdgeEndTimestamp 応答を終了したときのタイムスタンプ(ナノ秒)
EdgePathingOp リクエストに対してどのタイプの応答が発行されたか
EdgePathingSrc セキュリティチェックに基づいてリクエストがどのように分類されたか
EdgePathingStatus リクエストの処理を決定するためにどのデータが使用されたか
EdgeRateLimitAction ブロッキング規則によってとられる行動
EdgeRateLimitID ブロック(禁止)またはシミュレートアクションをトリガしたレート制限ルールの内部ルールID
EdgeRequestHost エッジからオリジンへのリクエストのホストヘッダ
EdgeResponseBytes クライアントに返されたバイト数
EdgeResponseCompressionRatio レスポンス圧縮率
EdgeResponseContentType レスポンスのContent-Typeヘッダー値
EdgeResponseStatus クライアントに返されたHTTPステータスコード
EdgeServerIP オリジンにリクエストを出しているエッジサーバーのIP
EdgeStartTimestamp リクエストを受信したタイムスタンプ
FirewallMatchesActions Firewallがとったアクション
FirewallMatchesRuleIDs マッチしたRuleID
FirewallMatchesSources マッチした機能またはリクエストのフィールド
OriginIP オリジンサーバーのIP
OriginResponseBytes オリジンサーバーから返されたバイト数
OriginResponseHTTPExpires コンテンツの有効期限日時
OriginResponseHTTPLastModified コンテンツの最終更新日時
OriginResponseStatus オリジンサーバから返されたステータス
OriginResponseTime エッジへ応答を返すために要した時間(ナノ秒)
OriginSSLProtocol オリジンへの接続に使用されるSSL(TLS)プロトコル
ParentRayID 親リクエストのレイID(このリクエストがワーカースクリプトを通じて行われた場合)
RayID リクエストのRay ID
SecurityLevel リクエスト時に設定されたセキュリティレベル (IPレピュテーションシステムの機密性を判断するために使用)
WAFAction WAFによって実行されるアクション
WAFFlags 追加の設定フラグ
WAFMatchedVar 一致した変数のフルネーム
WAFProfile WAFプロファイル
WAFRuleID 適用されたWAFルールのID
WAFRuleMessage トリガされたルールに関連付けられているメッセージ
WorkerCPUTime ワーカーの実行に費やした時間(マイクロ秒)
WorkerStatus デーモンから返されたステータス
WorkerSubrequest ワーカーのサブリクエストかどうか
WorkerSubrequestCount ワーカーによって発行されたサブリクエストの数
ZoneID 内部ゾーンID



【Firewallイベント】
項目名 説明
Action Firewallがとったアクション
ClientASN 送信元のAS番号
ClientASNDescription AS番号に対するDescription
ClientCountry クライアントの国
ClientIP クライアントのIPアドレス
ClientIPClass クライアントIPの分類(サーチエンジン、BadHost等)
ClientRefererHost Refererのホスト名
ClientRefererPath Refererのパス
ClientRefererQuery Refererのクエリー部
ClientRefererScheme RefererのURLスキーム
ClientRequestHost クライアントがリクエストしたホスト
ClientRequestMethod リクエストのメソッド
ClientRequestPath リクエストのパス
ClientRequestProtocol リクエストのプロトコル
ClientRequestQuery リクエストのクエリー部
ClientRequestScheme リクエストのURLスキーム
ClientRequestUserAgent リクエストのUser-Agent値
Datetime イベントの日時
EdgeColoCode IATA空港コードに準じたエッジデータンセンターコード
EdgeResponseStatus クライアントに返されたレスポンスステータス
Kind イベントの種類(現在は「Firewall」のみ)
MatchIndex マッチしたRuleの何番目か
Metadata 各機能固有の追加情報
OriginResponseStatus オリジンサーバが返したレスポンスステータス
OriginatorRayID Challenge/JSChallengeへの応答の場合の元のリクエストのRayID
RayID リクエストを一意に識別するID
RuleID このイベントを発行させた機能のRuleID
Source このイベントを発行させた機能


Log Push

各種クラウドサービスへプッシュすることが可能です。Google Cloud Storage、Amazon S3、Microsoft Azure(Blob Storage)、Sumo Logicなどに対応しています。Log Pushの設定時に予め取得したい項目名を指定しておき、100,000レコードまたは30秒(何れか早い方)毎にクラウドサービスプロバイダーへログが送られます。



ログの分析について

ログの分析については、Google Data Studio、Elastic、Looker、Splunk、Sumo Logic、Datadogなどへ取り込んで可視化するためのAppやテンプレートなどが提供されています。Google Cloudでの連携としては、以下の図のような例が示されています。Log PushでGoogle Cloud Storageへログを送信し、Google Cloud FunctionでBig Queryへインポート、Google Data Studioでインタラクティブなレポートを実行します。



Splunkの場合のは、例としてAmazon S3へPushし、SplunkのAppでS3から取得する方法が考えられます。


その他

ログの形式はJSON形式で、フィールドの順序は保証されていません。また、多数のサーバで並列処理されているためだと思われますが各ログのタイムスタンプも数秒ほど前後することがありますので注意が必要です。ログ項目の中にRayIDというHTTPリクエストを一意に識別するIDがあり、これはHTTPヘッダーにも付与されていますのでオリジンサーバのログでも合わせて出力しておけばトラブルシューティングの際にCloudflareのログと突き合わせできて便利です。






角田貴寛

 執筆者:角田 貴寛

三井情報株式会社
ソリューション技術本部 次世代基盤第二技術部 第一技術室
CISSP、CCSP、CEH、CND
現在、セキュリティ関連調査研究・教育業務に従事