このチュートリアルでは、Cloudflare App for Splunk ↗ を使って Cloudflare Logs ↗ を分析する手順を説明します。
Cloudflare のログデータを Splunk へ送る前に、次を確認してください。
- Splunk Enterprise または Cloud のアカウントがあること
- Cloudflare Enterprise アカウントがあること
- Cloudflare App の Splunk ドキュメント ↗ を確認していること
Cloudflare App for Splunk ↗ をインストールするには、次の手順を行います。
- Splunk インスタンスにログインします。
- Apps > Find More Apps で Cloudflare App for Splunk を検索します。
- Install をクリックします。
-
Splunk インスタンスを再起動し、再度開きます。
-
Cloudflare App for Splunk の
cloudflare:jsonソースタイプを編集します。ソースタイプを編集するには、次の手順を行います。- Settings ドロップダウンをクリックし、Source types を選びます。
- Show only popular のチェックを外し、cloudflare を検索します。
- Edit をクリックし、正規表現を
([\r\n]+)に変更します。 - 編集内容を保存します。
-
HTTP Event ログを保存する Splunk のインデックスを作成します。インデックスを作成するには、次の手順を行います。
- Settings ドロップダウンをクリックし、Indexes をクリックしてセットアップ画面を開きます。
- New Index を選びます。Indexes ページでは既存インデックスの状態も分かるため、ライセンス容量を使い切る直前かどうかも確認できます。
- インデックス名は cloudflare にします。Cloudflare App が使うデフォルトのインデックスです。
- Index Data Type を Events にし、Save を選びます。
-
Splunk で HTTP Event Collector(HEC)を設定します。HEC を作成するには、次の手順を行います。
- Settings ドロップダウンをクリックし、Data inputs を選びます。
- HTTP Event Collector の横の +Add new を選び、ウィザードに従います。求められたら次のように入力します。
- Name: Cloudflare
- Source Type: Select >
cloudflare:json - App Context: Cloudflare App for Splunk (cloudflare)
- Index: cloudflare
- ウィザードの最後に Token Value が表示されます。このトークンで、Cloudflare Logpush ジョブが Splunk インスタンスへデータを送れます。今コピーし忘れても、あとから Splunk で値を取得できます。
-
Splunk が自己署名証明書を使っているかを確認します。Logpush ジョブ作成時にこの情報が必要です。
-
データの送信先エンドポイントを決めます。エンドポイントは次の形式です。
"<protocol>://input-<host>:<port>/<endpoint>" or "<protocol>://http-inputs-<host>:<port>/<endpoint>"各項目の意味は次のとおりです。
protocol: HTTP または HTTPSinput: セルフサービスまたはマネージドクラウドプランかに応じてinputまたはhttp-inputshost: Splunk インスタンスのホスト名です。ホスト名を確認するいちばん簡単な方法は、Splunk ログイン後に開いた URL を見ることです。port: 443 または 8088endpoint: services/collector/raw
例: https://prd-p-0qk3h.splunkcloud.com:8088/services/collector/raw。詳細と例は Splunk のドキュメント ↗ を参照してください。
インストール後の注意
初回設定のあとで Index Name を変更するには、Settings ドロップダウンをクリックし、Advanced search へ移動します。そこで Search macros を選び、Cloudflare App for Splunk を探します。
Cloudflare App for Splunk にはカスタムの Cloudflare Data Model が付属します。アクセラレーションの期間は 1 日ですが、デフォルトではアクセラレーションしません。Data Model acceleration ↗ を有効にする場合は、Splunk 環境への悪影響を避けるため、Data Model のアクセラレーション期間は 1 日または 7 日だけにすることをおすすめします。
初回設定のあとでアクセラレーションを有効または無効にするには、Apps ドロップダウンをクリックし、Manage Apps > Cloudflare Set Up からアプリのセットアップページを開きます。
Settings > Data models から Data Model を手作業で設定することもできます。Data Model acceleration の詳細は Splunk のドキュメント ↗ を参照してください。
Enable Logpush to Splunk の手順で Logpush ジョブを作成します。Splunk の送信先を入力するときは、次のようにします。
- Splunk HEC URL には、タスク 1 で設定したエンドポイントを使い、
/services/collector/rawパスを含めます。 - Auth Token には、タスク 1 で作成した HEC トークンを使い、先頭に
Splunkを付けます(例:Splunk 12345678-1234-1234-1234-1234567890ab)。 - Source Type は、送りたいデータセットに合う値にします。Cloudflare App for Splunk がイベントを正しく解析します。
- HTTP リクエスト、Firewall イベント、Spectrum イベント、およびほとんどのゾーンスコープのデータセット:
cloudflare:json - DNS ログ(Zero Trust Gateway DNS を含む):
cloudflare:dns - Audit ログ:
cloudflare:audit - Access リクエスト:
cloudflare:access - CASB findings:
cloudflare:casb - Zero Trust Gateway HTTP:
cloudflare:http - Zero Trust Gateway Network:
cloudflare:network
- HTTP リクエスト、Firewall イベント、Spectrum イベント、およびほとんどのゾーンスコープのデータセット:
- Use insecure skip verify option をオンにするのは、タスク 1 で確認したとおり、Splunk インスタンスが自己署名証明書を使う場合だけにしてください。
Send the following fields では、デフォルトのままにするか、ダッシュボードの節 を参照して、Cloudflare App for Splunk のダッシュボードを埋めるために必要なフィールドを選びます。
ジョブを作成したら有効にして、ログの送信を開始します。エンドツーエンドの配信を確認するには、Splunk で次の検索を実行します。
index="cloudflare"ジョブを有効にすると、接続と配信設定を確認するためのシステム確認イベントが 2 件送られます。通常の Cloudflare ログは、その直後からストリーミングされます。データが表示されるまで数分かかることがあります。
次に挙げる 13 のダッシュボードで、Cloudflare ログを分析できます。
これらのダッシュボード内のフィルターで、日付と時刻、デバイスの種類、国、ユーザーエージェント、クライアント IP、ホスト名などで分析を絞り込めます。デバッグやトレースに役立ちます。
次のダッシュボードは、Cloudflare App for Splunk の一部として利用できます。
Web Traffic Overview と Web Traffic Types: Cloudflare ネットワーク上のウェブサイトとアプリケーションで、いちばん重要な指標の概要を確認します。

Summary と Detailed: ウェブサイトとアプリケーションの可用性に関するインサイトを確認します。指標には、オリジン応答のエラー比率、時間経過に沿ったオリジン応答ステータス、時間経過に沿った 3xx/4xx/5xx エラーの割合などがあります。

Overview: ウェブサイトとアプリケーションへの脅威に関するインサイトを確認します。阻止した脅威数、時間経過に沿った脅威、脅威の多い国の上位などがあります。

WAF: Web Application Firewall による脅威の識別と緩和に関するインサイトを確認します。SQL インジェクション、XSS などのイベントが含まれます。このデータを使い、明らかな脅威を狙い、誤検知を減らすようファイアウォールを調整します。

Rate Limiting: サービス拒否攻撃、総当たりログイン試行、その他の悪用からウェブサイトやアプリケーションを守るレート制限のインサイトを確認します。

Bots Summary と Bots Detailed: サイト上のボット活動を調査し、コンテンツスクレイピング、チェックアウト詐欺、スパム登録などの悪意のある活動を防ぎます。

Requests and Cache と Bandwidth: パフォーマンスの問題とキャッシュの誤設定を特定し、対処します。指標には、合計帯域とキャッシュ済み帯域、節約した帯域、リクエスト総数、キャッシュ比率、キャッシュされていないリクエストの上位などがあります。

Hostname, Content Type, Request Methods, Connection Type: よく使われるホスト名、よくリクエストされるコンテンツタイプ、リクエストメソッドの内訳、接続タイプに関するインサイトを確認します。
Static vs. Dynamic Content: 静的コンテンツと動的コンテンツのパフォーマンスに関するインサイトを確認します。もっとも遅い URL も含まれます。

すべてのダッシュボードには、次の例のようにダッシュボード全体へ適用できるフィルターがあります。フィルターはダッシュボード全体に適用されます。
フィルターで掘り下げ、より細かい粒度でデータを確認できます。フィルターには、クライアントの国、クライアントのデバイス種類、クライアント IP、クライアントリクエストホスト、クライアントリクエスト URI、クライアントリクエストのユーザーエージェント、エッジ応答ステータス、オリジン IP、オリジン応答ステータスがあります。
デフォルトの時間間隔は 24 時間です。正しい計算のため、フィルターでは Worker サブリクエスト(WorkerSubrequest = false)とパージリクエスト(ClientRequestMethod が PURGE ではない)を除外してください。
利用できるフィルター:
-
Time Range (EdgeStartTimestamp)
-
Client Country
-
Client Device type
-
Client IP
-
Client Request Host
-
Client Request URI
-
Client Request User Agent
-
Edge response status
-
Origin IP
-
Origin Response Status
-
RayID
-
Worker Subrequest
-
Client Request Method
Cloudflare App for Splunk は、Cloudflare のログフィールドを Splunk Common Information Model (CIM) ↗ のフィールド名にマッピングします。Splunk 環境内の他の CIM 準拠ソースと並べて、Cloudflare データを検索、関連付け、アクセラレーションできます。次の表は、アプリが Cloudflare Logpush データセットごとに適用するマッピングです。
アプリは次のマッピングを適用します。
| Cloudflare フィールド | Splunk CIM フィールド |
|---|---|
ClientIP |
src_ip |
ClientRequestBytes |
bytes_in |
ClientRequestHost |
dest_host |
ClientRequestMethod |
http_method |
ClientRequestPath |
uri_path |
ClientRequestReferer |
http_referrer |
ClientRequestURI |
uri |
ClientRequestUserAgent |
http_user_agent |
ClientSrcPort |
src_port |
ClientSSLProtocol |
ssl_protocol |
EdgeRateLimitAction |
action |
EdgeResponseBytes |
bytes_out |
EdgeResponseContentType |
http_content_type |
EdgeResponseStatus |
status |
OriginIP |
dest_ip |
OriginResponseTime |
response_time |
アプリは次のマッピングを適用します。
| Cloudflare フィールド | Splunk CIM フィールド |
|---|---|
AssetDisplayName |
dest |
AssetLink |
url |
FindingTypeDisplayName |
category |
FindingTypeID |
category_id |
FindingTypeSeverity |
severity |
InstanceID |
signature_id |
アプリは次のマッピングを適用します。
| Cloudflare フィールド | Splunk CIM フィールド |
|---|---|
DstIP |
dest |
DstPort |
dest_port |
Protocol |
transport |
QueryName |
query |
QueryTypeName |
query_type |
RCode |
reply_code |
SrcIP |
src |
SrcPort |
src_port |
アプリは次のマッピングを適用します。
| Cloudflare フィールド | Splunk CIM フィールド |
|---|---|
ActionResult |
status |
ActionType |
action |
ActorID |
user |
ActorIP |
src |
ActorType |
user_category |
OwnerID |
src_user |
アプリは次のマッピングを適用します。
| Cloudflare フィールド | Splunk CIM フィールド |
|---|---|
Action |
action |
AppDomain |
app |
Connection |
authentication_service |
IPAddress |
src |
PurposeJustificationResponse |
reason |
RayID |
signature_id |
UserUID |
user_id |
アプリは次のマッピングを適用します。
| Cloudflare フィールド | Splunk CIM フィールド |
|---|---|
Action |
action |
DestinationIP |
dest |
DestinationPort |
dest_port |
HTTPMethod |
http_method |
Referer |
http_referrer |
SourceIP |
src |
URL |
url |
UserAgent |
http_user_agent |
UserID |
user |
アプリは次のマッピングを適用します。
| Cloudflare フィールド | Splunk CIM フィールド |
|---|---|
Action |
action |
DestinationIP |
dest_ip |
DestinationPort |
dest_port |
DeviceName |
dvc |
OverrideIP |
dest_translated_ip |
OverridePort |
dest_translated_port |
PolicyID |
rule |
SessionID |
session_id |
SourceIP |
src_ip |
SourcePort |
src_port |
Transport |
transport |
UserID |
user |
Splunk Cloudflare App は、次に挙げる Cloudflare Enterprise Logs のフィールドに依存します。有効にしているフィールドによっては、一部のダッシュボードが十分に埋まらないことがあります。
その場合は、各ダッシュボード下にある Cloudflare App のフィルターを確認し、テストしてください(これらのフィルターはすべてのダッシュボードで同じです)。不要なフィルターは削除できます。ログにすでに含まれているデータフィールドを使うフィルターでも同様です。
また、Cloudflare Logs で取得しているフィールドの一覧と、Splunk > Settings > Data Model > Cloudflare に掲載されているフィールドを比較することもできます。
利用できるフィールドは次のとおりです。
-
CacheCacheStatus
-
CacheResponseBytes
-
CacheResponseStatus (deprecated)
-
ClientASN
-
ClientCountry
-
ClientDeviceType
-
ClientIP
-
ClientIPClass
-
ClientRequestBytes
-
ClientRequestHost
-
ClientRequestMethod
-
ClientRequestPath
-
ClientRequestProtocol
-
ClientRequestReferer
-
ClientRequestURI
-
ClientRequestUserAgent
-
ClientSSLCipher
-
ClientSSLProtocol
-
ClientSrcPort
-
EdgeColoCode
-
EdgeColoID
-
EdgeEndTimestamp
-
EdgePathingOp
-
EdgePathingSrc
-
EdgePathingStatus
-
EdgeRequestHost
-
EdgeResponseBytes
-
EdgeResponseContentType
-
EdgeResponseStatus
-
EdgeServerIP
-
EdgeStartTimestamp
-
OriginIP
-
OriginResponseStatus
-
OriginResponseTime
-
OriginSSLProtocol
-
RayID
-
SecurityAction
-
SecurityActions
-
SecurityRuleDescription
-
SecurityRuleID
-
SecurityRuleIDs
-
SecuritySources
-
WAFFlags
-
WAFMatchedVar
-
WorkerSubrequest
-
ZoneID