Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Splunk を有効にする

最終更新 Markdown で表示Agent セットアップ

HTTP Event Collector (HEC) は、Splunk Enterprise または Splunk Cloud Platform からデータを受け取るための信頼性の高い方法です。Cloudflare Logpush は、Cloudflare ダッシュボードまたは API から、ログを Splunk HEC へ直接プッシュできます。

Cloudflare ダッシュボードで管理する

  1. Cloudflare ダッシュボードで、アカウントまたはドメイン(ゾーンとも呼ばれます)の Logpush ページを開きます。

    アカウントの場合: Logpush を開く ↗

    ドメイン(ゾーン)の場合: Logpush を開く ↗

  2. 選んだ範囲に応じて、それぞれ アカウントスコープのデータセットゾーンスコープのデータセット を利用できます。

  3. Create a Logpush job を選択します。

  1. Select a destinationSplunk を選びます。

  2. 次の送信先情報を入力または選択します。

    • Splunk HEC URL
    • Channel ID - guidgenerator.com などで生成できるランダムな GUID です。
    • Auth Token - Event Collector トークンの先頭に Splunk を付けます。例: Splunk 1234EXAMPLEKEY
    • Source Type - 例: cloudflare:jsonCloudflare App for Splunk を使う場合は、Details セクションで各データセットに対応する source type を確認してください。たとえば、Zero Trust Access のリクエストログでは source type は cloudflare:access です。
    • Use insecure skip verify option(推奨しません)。

送信先の詳細を入力したら、Continue を選択します。

  1. ストレージサービスへプッシュするデータセットを選択します。

  2. 次の手順で Logpush ジョブを設定します。

    • Job name を入力します。
    • If logs match では、ログに含めるイベントと除外するイベントを選べます。詳細は Filters を参照してください。このオプションがないデータセットもあります。
    • Send the following fields では、すべてのログをストレージ送信先へプッシュするか、プッシュするログを選択できます。
  3. Advanced Options では次を設定できます。

    • ログ内のタイムスタンプフィールドの形式(RFC3339(デフォルト)、Unix、または UnixNano)。
    • ログの サンプリングレート を選ぶか、ランダムにサンプリングした割合のログをプッシュします。
    • CVE-2021-44228 のリダクションを有効にします。このオプションは ${ の出現をすべて x{ に置き換えます。
  4. Logpush ジョブの設定が終わったら Submit を選択します。

API で管理する

Splunk 向けの Logpush ジョブを設定するには、次の手順を実行します。

  1. 適切なエンドポイント URL と認証パラメーターでジョブを作成します。
  2. ジョブを有効にして、ログのプッシュを開始します。

Logpush ジョブの読み取りや設定の前に、Log Share の権限が有効になっていることを確認してください。詳細は Roles のセクション を参照してください。

1. ジョブを作成する

ジョブを作成するには、次のフィールドを指定して 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- またはそれに類する文字列が含まれることがよくあります。
    • <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://<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
Create Logpush jobbash
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 を参照してください。

3. Splunk HEC エンドポイント向けの WAF カスタムルールを作成する(任意)

Logpush の送信先ホスト名が Cloudflare でプロキシされており、Cloudflare Web Application Firewall (WAF) が有効な場合、Cloudflare が Splunk HTTP Event Collector (HEC) へリクエストするとチャレンジされたりブロックされたりすることがあります。これを防ぐには、Cloudflare が HEC エンドポイントをバイパスできる カスタムルール を作成します。

  1. Cloudflare ダッシュボードで Security rules ページに移動します。

    Security rules を開く ↗
  2. Create rule > Custom rules を選択します。

  3. ルールの分かりやすい名前を入力します(例: Splunk)。

  4. When incoming requests match で、FieldOperatorValue のドロップダウンを使ってルールを作成します。各行を入力したら And を選択して次の行を追加します。入力する値は次の表を参照してください。

    Field Operator Value
    Request Method equals POST
    Hostname equals Splunk エンドポイントのホスト名。例: splunk.cf-analytics.com
    URI Path equals /services/collector/raw
    URI Query String contains channel
    AS Num is in 13335, 132892, 202623
    User Agent equals Go-http-client/2.0
  5. 表のとおりに値を入力すると、そのルール用の 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")
  6. Then > Choose an action のドロップダウンで Skip を選択します。

  7. WAF components to skipAll managed rules を選択します。

  8. Deploy を選択します。

これで WAF は、Cloudflare が Splunk HEC へ送るリクエストを無視します。

Splunk 送信先のトラブルシューティング

送信先の検証エラー

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 について

insecure-skip-verify パラメーターを true にすると、Splunk への接続が安全ではありません。これは curl-k オプションと同等で、推奨しません

このパラメーターがある理由: Splunk またはサードパーティが生成した証明書では、Common Name フィールドが Splunk サーバーのドメイン名と一致している必要があります。一致しない場合(特に Splunk が起動時に生成するデフォルト証明書)、証明書を修正しないとプッシュは失敗します。サーバー設定を変更できない Splunk Cloud インスタンスなど、証明書にアクセスも変更もできないまれな状況向けに、このパラメーターがあります。

設定前に HEC を確認する

Logpush ジョブを作成する前に、-k フラグなし、かつ insecure-skip-verify=falsecurl からテストイベントを送信し、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 に設定されていることを想定します。ほかのポートはサポートしません。

Cloudflare Splunk App との連携

Logpush は Cloudflare App for Splunk と連携します。cloudflare:json source type でログを取り込み続ければ、Cloudflare Splunk App でログを分析・可視化できます。

詳細なセットアップ手順は Splunk Analytics 連携 を参照してください。

役に立ちましたか?