Splunkの有効化
Cloudflare Logpushは、CloudflareダッシュボードまたはAPIを介してログを直接Splunkにプッシュすることをサポートしています。
-
Log in to the Cloudflare dashboard ↗.
-
Select the Enterprise account or domain (also known as zone) you want to use with Logpush. Depending on your choice, you have access to account-scoped datasets and zone-scoped datasets, respectively.
-
Go to Analytics & Logs > Logpush.
-
Select Create a Logpush job.
-
宛先を選択で、Splunkを選択します。
-
次の宛先情報を入力または選択します:
- Splunk生のHTTPイベントコレクタURL
- チャネルID - これは、guidgenerator.com ↗を使用して生成できるランダムなGUIDです。
- 認証トークン
- ソースタイプ - 例えば、
cloudflare:json。 - 不正なスキップ検証オプションを使用(推奨されません)。
宛先の詳細を入力し終えたら、続行を選択します。
-
ストレージサービスにプッシュするデータセットを選択します。
-
次のステップでは、logpushジョブを構成する必要があります:
- ジョブ名を入力します。
- ログが一致する場合の下で、ログに含めるイベントや除外するイベントを選択できます。詳細についてはフィルターを参照してください。すべてのデータセットにこのオプションが利用できるわけではありません。
- 次のフィールドを送信で、すべてのログをストレージ宛先にプッシュするか、プッシュしたいログを選択的に選ぶことができます。
-
詳細オプションでは、次のことができます:
- ログのタイムスタンプフィールドの形式を選択します(
RFC3339(デフォルト)、Unix、またはUnixNano)。 - ログのサンプリングレートを選択するか、ランダムにサンプリングされたログのパーセンテージをプッシュします。
CVE-2021-44228のための赤actionを有効にします。このオプションは、${のすべての出現をx{に置き換えます。
- ログのタイムスタンプフィールドの形式を選択します(
-
logpushジョブの構成が完了したら、送信を選択します。
Splunk Logpushジョブを設定するには:
- 適切なエンドポイントURLと認証パラメータを使用してジョブを作成します。
- ジョブを有効にして、ログのプッシュを開始します。
Ensure Log Share permissions are enabled, before attempting to read or configure a Logpush job. For more information refer to the Roles section.
ジョブを作成するには、次のフィールドを持つLogpushジョブエンドポイントにPOSTリクエストを送信します:
-
name(オプション) - ドメイン名をジョブ名として使用します。
-
destination_conf - エンドポイントURL、チャネルID、不正スキップ検証フラグ、ソースタイプ、以下の文字列形式の認証ヘッダーを含むログ宛先。
- <SPLUNK_ENDPOINT_URL>: ポートを持つSplunk生のHTTPイベントコレクタURL。例えば:
splunk.cf-analytics.com:8088/services/collector/raw。- CloudflareはHECネットワークポートが
:443または:8088に設定されていることを期待しています。 - CloudflareはLogpushジョブを構成および設定する際に、Splunkエンドポイントが
/services/collector/rawであることを期待しています。 - SplunkでHECを有効にしていることを確認してください。SplunkでHECを設定する方法についてはSplunk Analytics Integrationsを参照してください。
- 不正なURLを追加すると、APIリクエストが504エラーで失敗することがあります。Splunk CloudエンドポイントURLには通常、ホスト名の前に
http-inputs-や類似のテキストが含まれています。詳細についてはSplunk Cloud PlatformのHTTPイベントコレクタにデータを送信 ↗を参照してください。
- CloudflareはHECネットワークポートが
- <SPLUNK_CHANNEL_ID>: 一意のチャネルID。これは、次の方法で生成できるランダムなGUIDです:
- GUIDジェネレーター ↗のようなオンラインツールを使用する。
- コマンドラインを使用する。例えば:
python -c 'import uuid; print(uuid.uuid4())'。
- <INSECURE_SKIP_VERIFY>: ブール値。Cloudflareはこの値を
falseに設定することを推奨しています。この値をtrueに設定することは、Splunkの例で示されているようにcurlで-kオプションを使用することと同等であり、推奨されません。HECが自己署名証明書を使用している場合にのみ、この値をtrueに設定してください。
- <SPLUNK_ENDPOINT_URL>: ポートを持つSplunk生のHTTPイベントコレクタURL。例えば:
<SOURCE_TYPE>: Splunkのソースタイプ。例えば:cloudflare:json。<SPLUNK_AUTH_TOKEN>: URLエンコードされたSplunkの認証トークン。例えば:Splunk%20e6d94e8c-5792-4ad1-be3c-29bcaee0197d。
"splunk://<SPLUNK_ENDPOINT_URL>?channel=<SPLUNK_CHANNEL_ID>&insecure-skip-verify=<INSECURE_SKIP_VERIFY>&sourcetype=<SOURCE_TYPE>&header_Authorization=<SPLUNK_AUTH_TOKEN>"-
dataset - 受信したいログのカテゴリ。サポートされているデータセットの完全なリストについてはログフィールドを参照してください。
-
output_options(オプション) - フィールド、サンプルレート、タイムスタンプ形式を構成するには、ログ出力オプションを参照してください。タイムスタンプについては、Cloudflareは
timestamps=rfc3339の使用を推奨しています。
cURLを使用したリクエストの例:
curl -s -X POST \https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/logpush/jobs \--header "X-Auth-Email: <EMAIL>" \--header "X-Auth-Key: <API_KEY>" \--header "Content-Type: application/json" \--data '{"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"}' | jq .レスポンス:
{ "errors": [], "messages": [], "result": { "id": 100, "dataset": "http_requests", "enabled": false, "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}ジョブを有効にするには、LogpushジョブエンドポイントにPUTリクエストを送信します。前のステップから返されたジョブIDをURLに使用し、リクエストボディに{"enabled":true}を送信します。
cURLを使用したリクエストの例:
curl -s -X PUT \https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/logpush/jobs/100 -d'{"enabled":true}' | jq .レスポンス:
{ "errors": [], "messages": [], "result": { "id": 100, "dataset": "http_requests", "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}トラブルシューティング情報についてはLogpush FAQを参照してください。
ログプッシュ宛先のホスト名がCloudflareを介してプロキシされている場合、Cloudflare Web Application Firewall(WAF)がオンになっていると、CloudflareがSplunk HTTPイベントコレクタ(HEC)にリクエストを送信する際にチャレンジまたはブロックされることがあります。これを防ぐためには、CloudflareがHECエンドポイントをバイパスできるようにするWAFカスタムルールを作成する必要があります。
- Cloudflareダッシュボード ↗にログインし、アカウントを選択します。セキュリティ > WAF > カスタムルールに移動します。
- ルールを作成を選択し、説明的な名前を入力します(例えば、
Splunk)。 - 受信リクエストが一致する場合の下で、フィールド、オペレーター、および値のドロップダウンを使用してルールを作成します。各行を終了したら、次の行のルールを作成するためにAndを選択します。以下の表に入力すべき値を参照してください:
| フィールド | オペレーター | 値 |
|---|---|---|
| リクエストメソッド | equals | POST |
| ホスト名 | equals | あなたのSplunkエンドポイントのホスト名。例えば:splunk.cf-analytics.com |
| URIパス | equals | /services/collector/raw |
| URIクエリ文字列 | contains | channel |
| AS番号 | equals | 132892 |
| ユーザーエージェント | equals | Go-http-client/2.0 |
- 表に示された値を入力した後、特定のルールに対して追加した値を持つ式プレビューが表示されるはずです。以下の例は、ホスト名
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 eq 132892 and http.user_agent eq "Go-http-client/2.0")- 次に > アクションを選択のドロップダウンで、スキップを選択します。
- スキップするWAFコンポーネントの下で、すべての管理ルールを選択します。
- デプロイを選択します。
これで、WAFはCloudflareによって行われるSplunk HECへのリクエストを無視するはずです。
The following video shows how to integrate Network Analytics logs in Splunk.