HTTP Event Collector (HEC) ↗ は、Splunk Enterprise または Splunk Cloud Platform からデータを受け取るための信頼性の高い方法です。Cloudflare Logpush は、Cloudflare ダッシュボードまたは API から、ログを Splunk HEC へ直接プッシュできます。
-
Cloudflare ダッシュボードで、アカウントまたはドメイン(ゾーンとも呼ばれます)の Logpush ページを開きます。
アカウントの場合: Logpush を開く ↗
ドメイン(ゾーン)の場合: Logpush を開く ↗
-
選んだ範囲に応じて、それぞれ アカウントスコープのデータセット と ゾーンスコープのデータセット を利用できます。
-
Create a Logpush job を選択します。
-
Select a destination で Splunk を選びます。
-
次の送信先情報を入力または選択します。
- Splunk HEC URL
- Channel ID - guidgenerator.com ↗ などで生成できるランダムな GUID です。
- Auth Token - Event Collector トークンの先頭に
Splunkを付けます。例:Splunk 1234EXAMPLEKEY。 - Source Type - 例:
cloudflare:json。Cloudflare App for Splunk ↗ を使う場合は、Details セクションで各データセットに対応する source type を確認してください。たとえば、Zero Trust Access のリクエストログでは source type はcloudflare:accessです。 - Use insecure skip verify option(推奨しません)。
送信先の詳細を入力したら、Continue を選択します。
-
ストレージサービスへプッシュするデータセットを選択します。
-
次の手順で Logpush ジョブを設定します。
- Job name を入力します。
- If logs match では、ログに含めるイベントと除外するイベントを選べます。詳細は Filters を参照してください。このオプションがないデータセットもあります。
- Send the following fields では、すべてのログをストレージ送信先へプッシュするか、プッシュするログを選択できます。
-
Advanced Options では次を設定できます。
- ログ内のタイムスタンプフィールドの形式(
RFC3339(デフォルト)、Unix、またはUnixNano)。 - ログの サンプリングレート を選ぶか、ランダムにサンプリングした割合のログをプッシュします。
CVE-2021-44228のリダクションを有効にします。このオプションは${の出現をすべてx{に置き換えます。
- ログ内のタイムスタンプフィールドの形式(
-
Logpush ジョブの設定が終わったら Submit を選択します。
Splunk 向けの Logpush ジョブを設定するには、次の手順を実行します。
- 適切なエンドポイント URL と認証パラメーターでジョブを作成します。
- ジョブを有効にして、ログのプッシュを開始します。
Logpush ジョブの読み取りや設定の前に、Log Share の権限が有効になっていることを確認してください。詳細は Roles のセクション を参照してください。
ジョブを作成するには、次のフィールドを指定して Logpush jobs エンドポイントへ POST リクエストを送ります。
-
name(任意)- ジョブ名にはドメイン名を使います。
-
destination_conf - エンドポイント URL、channel id、insecure-skip-verify フラグ、source type、authorization ヘッダーを次の文字列形式で組み合わせたログ送信先です。
- <SPLUNK_ENDPOINT_URL>: ポート付きの Splunk raw HTTP Event Collector URL です。例:
splunk.cf-analytics.com:8088/services/collector/raw。- Logpush ジョブの設定時、Cloudflare は Splunk エンドポイントが
/services/collector/rawであることを想定します。 - Splunk で HEC を有効にしてください。Splunk での HEC 設定は Splunk Analytics Integrations を参照してください。
- 誤った URL を追加すると、API リクエストが 504 エラーで失敗することがあります。Splunk Cloud のエンドポイント URL には、ホスト名の前に
http-inputs-またはそれに類する文字列が含まれることがよくあります。
- Logpush ジョブの設定時、Cloudflare は Splunk エンドポイントが
- <SPLUNK_CHANNEL_ID>: 一意の channel ID です。ランダムな GUID を次の方法で生成できます。
- GUID generator ↗ などのオンラインツールを使う。
- コマンドラインを使う。例:
python -c 'import uuid; print(uuid.uuid4())'。
- <INSECURE_SKIP_VERIFY>: ブール値です。Cloudflare ではこの値を
falseにすることを推奨します。trueにすると、Splunk の例で示すcurlの-kオプションと同等になり、推奨しません。HEC が自己署名証明書を使う場合にのみtrueにします。
- <SOURCE_TYPE>: Splunk の source type です。例:
cloudflare:json。 - <SPLUNK_AUTH_TOKEN>: URL エンコードした Splunk の認可トークンで、先頭に
Splunkを付ける必要があります。例:Splunk e6d94e8c-5792-4ad1-be3c-29bcaee0197d。
- <SPLUNK_ENDPOINT_URL>: ポート付きの Splunk raw HTTP Event Collector URL です。例:
"splunk://<SPLUNK_ENDPOINT_URL>?channel=<SPLUNK_CHANNEL_ID>&insecure-skip-verify=<INSECURE_SKIP_VERIFY>&sourcetype=<SOURCE_TYPE>&header_Authorization=<SPLUNK_AUTH_TOKEN>"-
dataset - 受け取りたいログのカテゴリです。対応データセットの一覧は Datasets を参照してください。
-
output_options(任意)- フィールド、サンプルレート、タイムスタンプ形式の設定は Log Output Options を参照してください。タイムスタンプには
timestamps=rfc3339の使用を推奨します。
cURL を使ったリクエスト例:
Required API token permissions
At least one of the following token permissions is required:Logs Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/logpush/jobs" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "<DOMAIN_NAME>",
"destination_conf": "splunk://<SPLUNK_ENDPOINT_URL>?channel=<SPLUNK_CHANNEL_ID>&insecure-skip-verify=<INSECURE_SKIP_VERIFY>&sourcetype=<SOURCE_TYPE>&header_Authorization=<SPLUNK_AUTH_TOKEN>",
"output_options": {
"field_names": [
"ClientIP",
"ClientRequestHost",
"ClientRequestMethod",
"ClientRequestURI",
"EdgeEndTimestamp",
"EdgeResponseBytes",
"EdgeResponseStatus",
"EdgeStartTimestamp",
"RayID"
],
"timestamp_format": "rfc3339"
},
"dataset": "http_requests",
"enabled": true
}'レスポンス:
{
"errors": [],
"messages": [],
"result": {
"id": <JOB_ID>,
"dataset": "http_requests",
"kind": "",
"enabled": true,
"name": "<DOMAIN_NAME>",
"output_options": {
"field_names": ["ClientIP", "ClientRequestHost", "ClientRequestMethod", "ClientRequestURI", "EdgeEndTimestamp","EdgeResponseBytes", "EdgeResponseStatus", "EdgeStartTimestamp", "RayID"],
"timestamp_format": "rfc3339"
},
"destination_conf": "splunk://<SPLUNK_ENDPOINT_URL>?channel=<SPLUNK_CHANNEL_ID>&insecure-skip-verify=<INSECURE_SKIP_VERIFY>&sourcetype=<SOURCE_TYPE>&header_Authorization=<SPLUNK_AUTH_TOKEN>",
"last_complete": null,
"last_error": null,
"error_message": null
},
"success": true
}ジョブの更新(有効化と無効化を含む)は cURL で Logpush を管理する を参照してください。
トラブルシューティングは Logpush FAQ を参照してください。
Logpush の送信先ホスト名が Cloudflare でプロキシされており、Cloudflare Web Application Firewall (WAF) が有効な場合、Cloudflare が Splunk HTTP Event Collector (HEC) へリクエストするとチャレンジされたりブロックされたりすることがあります。これを防ぐには、Cloudflare が HEC エンドポイントをバイパスできる カスタムルール を作成します。
-
Cloudflare ダッシュボードで Security rules ページに移動します。
Security rules を開く ↗ -
Create rule > Custom rules を選択します。
-
ルールの分かりやすい名前を入力します(例:
Splunk)。 -
When incoming requests match で、Field、Operator、Value のドロップダウンを使ってルールを作成します。各行を入力したら And を選択して次の行を追加します。入力する値は次の表を参照してください。
Field Operator Value Request Method equalsPOSTHostname equalsSplunk エンドポイントのホスト名。例: splunk.cf-analytics.comURI Path equals/services/collector/rawURI Query String containschannelAS Num is in13335,132892,202623User Agent equalsGo-http-client/2.0 -
表のとおりに値を入力すると、そのルール用の Expression Preview が表示されます。次の例はホスト名
splunk.cf-analytics.comを反映しています。(http.request.method eq "POST" and http.host eq "splunk.cf-analytics.com" and http.request.uri.path eq "/services/collector/raw" and http.request.uri.query contains "channel" and ip.geoip.asnum in {13335 132892 202623} and http.user_agent eq "Go-http-client/2.0") -
Then > Choose an action のドロップダウンで Skip を選択します。
-
WAF components to skip で All managed rules を選択します。
-
Deploy を選択します。
これで WAF は、Cloudflare が Splunk HEC へ送るリクエストを無視します。
Splunk ジョブの設定中に検証エラーが出た場合は、次を確認してください。
- Endpoint URL: Cloudflare がサポートするのは HTTPS 上の Splunk HEC raw エンドポイントのみです。エンドポイント URL が正しく、ポート(通常は
:8088)が含まれていることを確認してください。 - Authentication token: Splunk の認証トークンが URL エンコードされ、先頭に
Splunkが付いていることを確認してください。トークン内のスペースには%20を使います。 - Certificate configuration: Splunk またはサードパーティが生成した証明書では、Common Name フィールドが Splunk サーバーのドメイン名と一致している必要があります。一致しないと、次のようなエラーが出ることがあります:
x509: certificate is valid for SplunkServerDefaultCert, not <YOUR_INSTANCE>.splunkcloud.com。
insecure-skip-verify パラメーターを true にすると、Splunk への接続が安全ではありません。これは curl の -k オプションと同等で、推奨しません。
このパラメーターがある理由: Splunk またはサードパーティが生成した証明書では、Common Name フィールドが Splunk サーバーのドメイン名と一致している必要があります。一致しない場合(特に Splunk が起動時に生成するデフォルト証明書)、証明書を修正しないとプッシュは失敗します。サーバー設定を変更できない Splunk Cloud インスタンスなど、証明書にアクセスも変更もできないまれな状況向けに、このパラメーターがあります。
Logpush ジョブを作成する前に、-k フラグなし、かつ insecure-skip-verify=false で curl からテストイベントを送信し、Splunk HEC が正しく動いていることを確認してください。
curl "https://<SPLUNK_ENDPOINT_URL>?channel=<SPLUNK_CHANNEL_ID>&insecure-skip-verify=false&sourcetype=<SOURCE_TYPE>" \
--header "Authorization: Splunk <SPLUNK_AUTH_TOKEN>" \
--data '{"BotScore":99,"BotScoreSrc":"Machine Learning","CacheCacheStatus":"miss","CacheResponseBytes":2478}'期待されるレスポンス:
{"text":"Success","code":0}Cloudflare は、HEC のネットワークポートが :443 または :8088 に設定されていることを想定します。ほかのポートはサポートしません。
Logpush は Cloudflare App for Splunk ↗ と連携します。cloudflare:json source type でログを取り込み続ければ、Cloudflare Splunk App でログを分析・可視化できます。
詳細なセットアップ手順は Splunk Analytics 連携 を参照してください。