Cloudflare のログを収集する
このドキュメントでは、Webhook(HTTP 宛先)または Google Cloud Storage を使用して Cloudflare ログを Google Security Operations に取り込む方法について説明します。Cloudflare は、DNS、HTTP リクエスト、ファイアウォール イベント、監査、ゼロトラスト、CASB のログ形式で運用データを生成します。この統合により、これらのログを Google SecOps に送信して分析とモニタリングを行うことができます。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス。
- Logpush が有効になっている Cloudflare Enterprise アカウント。
- Webhook メソッドの場合: Google Cloud コンソールへの特権アクセス。
- GCS メソッドの場合: Google Cloud Storage への特権アクセス。
方法 1: Webhook(HTTP 宛先)を使用して Cloudflare ログのエクスポートを構成する
この方法では、中間ストレージを使用せずに Cloudflare ログを Google Security Operations に直接ストリーミングできるため、費用を削減し、構成を簡素化できます。
Google SecOps で Webhook フィードを構成する
- [SIEM Settings] > [Feeds] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Cloudflare Webhook)。 - [Source type] として [Webhook] を選択します。
- [ログタイプ] として [Cloudflare] を選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- 分割区切り文字:
\n。 - Asset namespace: アセットの名前空間。
- Ingestion labels: このフィードのイベントに適用されるラベル。
- 分割区切り文字:
- [次へ] をクリックします。
- [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
- [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
- このシークレットは再び表示できないため、秘密鍵をコピーして保存します。
- [詳細] タブに移動します。
- [エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。
- [完了] をクリックします。
Webhook フィード用の API キーを作成する
- Google Cloud コンソールの [認証情報] ページに移動します。
- プロジェクト(Google SecOps インスタンスに関連付けられているプロジェクト)を選択します。
- [認証情報を作成] > [API キー] をクリックします。
- [API キーを編集] をクリックします。
- [API の制限] で [キーを制限] を選択します。
- [API を選択] プルダウンで、Chronicle API を検索して選択します。
- [保存] をクリックします。
- API キーの値をコピーします。
Cloudflare Logpush HTTP の宛先を構成する
- Cloudflare ダッシュボードにログインします。
- Logpush で使用する企業アカウントまたはドメインを選択します。
- [Analytics & Logs] > [Logs] に移動します。
- [Create a Logpush job] をクリックします。
- [宛先を選択してください] で [HTTP 宛先] を選択します。
認証パラメータを含む HTTP エンドポイント URL を入力します。
<ENDPOINT_URL>?header_X-goog-api-key=<API_KEY>&header_X-Webhook-Access-Key=<SECRET_KEY>次のように置き換えます。
<ENDPOINT_URL>: Google SecOps のフィード エンドポイント URL。<API_KEY>: Google Cloud コンソールの API キー(特殊文字が含まれている場合は URL エンコード)。<SECRET_KEY>: Webhook フィードのシークレット キー(特殊文字が含まれている場合は URL エンコード)。
[続行] をクリックします。
プッシュするデータセットを選択します(例: HTTP リクエスト、DNS ログ、ファイアウォール イベント、監査ログ、ゼロトラスト ログ、CASB の検出結果)。
Logpush ジョブを構成します。
- [ジョブ名] を入力します。
- [ログが一致した場合] で、必要に応じてフィルタを構成します。
- [次のフィールドを送信] で、含めるフィールドを選択します。
- タイムスタンプの形式を選択します。
- RFC 3339(Google SecOps で推奨)
- Unix(エポックからの秒数)
- UnixNano(エポックからのナノ秒数)
- 必要に応じてサンプリング レートを構成します。
[送信] をクリックして、Logpush ジョブを作成します。
Webhook 統合を確認する
構成後、数分以内にログが Google SecOps に表示されます。確認する方法を次に示します。
- [調査] > [SIEM 検索] に移動します。
- 構成した取り込みラベルでログを検索します。
- Cloudflare ログが正しく解析されていることを確認します。
方法 2: Google Cloud Storage を使用して Cloudflare ログのエクスポートを構成する
Google Cloud Storage バケットを作成する
- Google Cloud コンソールにログインします。
- Cloud Storage > [バケット] ページに移動します。
- [作成] をクリックします。
- [バケットの作成] ページで、バケット情報を入力します。
- 名前: バケット名の要件を満たす一意の名前を入力します(例:
cloudflare-data)。 - ロケーション タイプ: ロケーション タイプとリージョンを選択します。
- 階層名前空間を有効にするには、展開矢印をクリックして [Optimize for file oriented and data-intensive workloads] を開き、[このバケットで階層的な名前空間を有効にする] を選択します。
- 名前: バケット名の要件を満たす一意の名前を入力します(例:
- [作成] をクリックします。
バケットに対する Cloudflare の権限を付与する
- Cloud Storage コンソールで、GCS バケット(
cloudflare-dataなど)を選択します。 - [権限] タブをクリックします。
- [アクセス権を付与] をクリックします。
- [プリンシパルを追加] フィールドに「
logpush@cloudflare-data.iam.gserviceaccount.com」と入力します。 - [ロールを割り当て] プルダウンで、[ストレージ オブジェクト管理者] を選択します。
- [保存] をクリックします。
Cloudflare Logpush を Cloud Storage に構成する
- Cloudflare ダッシュボードにログインします。
- Logpush で使用する企業アカウントまたはドメインを選択します。
- [Analytics & Logs] > [Logs] に移動します。
- [Create a Logpush job] をクリックします。
- [宛先を選択してください] で [Google Cloud Storage] を選択します。
- GCS バケットのパス(例:
cloudflare-data/logs/)を入力します。 [続行] をクリックします。
[所有権トークン] を入力し、[続行] をクリックします。
ストレージに push するデータセットを選択します。
Logpush ジョブを構成します。
- [ジョブ名] を入力します。
- [If logs match] で、ログに含めるイベントやログから削除するイベントを選択できます。
- [Send the following fields] で、push するフィールドを選択します。
- タイムスタンプの形式を選択します。
- RFC 3339(Google SecOps で推奨)
- Unix(エポックからの秒数)
- UnixNano(エポックからのナノ秒数)
- 必要に応じてサンプリング レートを構成します。
[送信] をクリックします。
GCS から Cloudflare のログを取り込むように Google SecOps でフィードを構成する
- [SIEM Settings] > [Feeds] に移動します。
- [Add New Feed] をクリックします。
- [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Cloudflare GCS Logs)。 - [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [ログタイプ] として [Cloudflare] を選択します。
- [サービス アカウントを取得する] をクリックします。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
Storage Bucket URI:
gs://my-bucket/<value>/形式の Google Cloud Storage バケット URL。Source deletion option: 必要に応じて削除オプションを選択します。
- なし: 転送後にファイルを削除しません(テストにおすすめ)。
- 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
- 転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。
ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。
Asset namespace: アセットの名前空間。
Ingestion labels: このフィードのイベントに適用されるラベル。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
Google SecOps サービス アカウントに IAM 権限を付与する
- [Cloud Storage] > [バケット] に移動します。
- バケット名(
cloudflare-dataなど)をクリックします。 - [権限] タブに移動します。
- [アクセス権を付与] をクリックします。
- [プリンシパルを追加] フィールドに、Google SecOps サービス アカウントのメールアドレスを貼り付けます。
- [ロールを割り当てる] プルダウンで、[ストレージ オブジェクト閲覧者] を選択します。
- [保存] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
ClientIP |
read_only_udm.principal.asset.ip、read_only_udm.principal.ip |
値は ClientIP フィールドから取得されます。 |
ClientRequestHost |
read_only_udm.target.asset.hostname、read_only_udm.target.hostname |
値は ClientRequestHost フィールドから取得されます。 |
ClientRequestMethod |
read_only_udm.network.http.method |
値は ClientRequestMethod フィールドから取得されます。 |
ClientRequestURI |
read_only_udm.target.url |
値は ClientRequestURI フィールドから取得されます。ClientRequestHost フィールドが空でない場合、値は ClientRequestHost フィールドと連結されます。 |
ClientSrcPort |
read_only_udm.principal.port |
値は ClientSrcPort フィールドから取得されます。 |
ClientRequestUserAgent |
read_only_udm.network.http.user_agent |
値は ClientRequestUserAgent フィールドから取得されます。 |
ClientSSLCipher |
read_only_udm.network.tls.cipher |
値は ClientSSLCipher フィールドから取得されます。 |
ClientSSLProtocol |
read_only_udm.network.tls.version |
値は ClientSSLProtocol フィールドから取得されます。 |
Country |
read_only_udm.target.location.country_or_region |
値は [国] フィールドから取得されます。 |
CreatedAt |
read_only_udm.metadata.event_timestamp |
値は CreatedAt フィールドから取得されます。 |
Datetime |
read_only_udm.metadata.event_timestamp |
値は Datetime フィールドから取得されます。 |
DestinationIP |
read_only_udm.target.asset.ip、read_only_udm.target.ip |
値は DestinationIP フィールドから取得されます。 |
DestinationPort |
read_only_udm.target.port |
値は DestinationPort フィールドから取得されます。 |
DeviceID |
read_only_udm.principal.asset_id |
値は DeviceID フィールドから取得され、「Cloudflare:」という接頭辞が付いています。 |
DeviceName |
read_only_udm.principal.asset.hostname、read_only_udm.principal.hostname |
値は DeviceName フィールドから取得されます。 |
DstIP |
read_only_udm.target.asset.ip、read_only_udm.target.ip |
値は DstIP フィールドから取得されます。 |
DstPort |
read_only_udm.target.port |
値は DstPort フィールドから取得されます。 |
EdgeResponseBytes |
read_only_udm.network.received_bytes |
値は EdgeResponseBytes フィールドから取得されます。 |
EdgeResponseStatus |
read_only_udm.network.http.response_code |
値は EdgeResponseStatus フィールドから取得されます。 |
EdgeServerIP |
read_only_udm.target.asset.ip、read_only_udm.target.ip |
値は EdgeServerIP フィールドから取得されます。 |
Email |
read_only_udm.principal.user.email_addresses、read_only_udm.target.user.email_addresses |
値は [メールアドレス] フィールドから取得されます。 |
FirewallMatchesActions |
read_only_udm.security_result.action |
FirewallMatchesAction フィールドが「allow」、「Allow」、「ALLOW」、「skip」、「SKIP」、「Skip」の場合、値は「ALLOW」に設定されます。FirewallMatchesAction フィールドが「challengeSolved」または「jschallengeSolved」の場合、「ALLOW_WITH_MODIFICATION」に設定されます。FirewallMatchesAction フィールドが「drop」または「block」の場合、「BLOCK」に設定されます。FirewallMatchesAction フィールドが空でない場合、「UNKNOWN_ACTION」に設定されます。 |
FirewallMatchesRuleIDs |
read_only_udm.security_result.rule_id |
値は FirewallMatchesRuleIDs フィールドから取得されます。 |
FirewallMatchesSources |
read_only_udm.security_result.rule_name |
値は FirewallMatchesSources フィールドから取得されます。 |
HTTPMethod |
read_only_udm.network.http.method |
値は HTTPMethod フィールドから取得されます。 |
HTTPHost |
read_only_udm.target.hostname |
値は HTTPHost フィールドから取得されます。 |
HTTPVersion |
read_only_udm.network.application_protocol |
値は HTTPVersion フィールドから取得されます。値に「HTTP」が含まれている場合は、「HTTP」に置き換えられます。 |
IPAddress |
read_only_udm.target.asset.ip、read_only_udm.target.ip |
値は IPAddress フィールドから取得されます。 |
IsIsolated |
read_only_udm.about.labels、read_only_udm.security_result.about.resource.attribute.labels |
値は IsIsolated フィールドから取得され、文字列に変換されます。 |
Location |
read_only_udm.principal.location.name |
値は [Location] フィールドから取得されます。 |
OriginIP |
read_only_udm.intermediary.ip、read_only_udm.target.asset.ip、read_only_udm.target.ip |
値は OriginIP フィールドから取得されます。 |
OriginPort |
read_only_udm.target.port |
値は OriginPort フィールドから取得されます。 |
OwnerID |
read_only_udm.target.user.product_object_id |
値は OwnerID フィールドから取得されます。 |
Policy |
read_only_udm.security_result.rule_name |
値は Policy フィールドから取得されます。 |
PolicyID |
read_only_udm.security_result.rule_id |
値は PolicyID フィールドから取得されます。 |
PolicyName |
read_only_udm.security_result.rule_name |
値は PolicyName フィールドから取得されます。 |
Protocol |
read_only_udm.network.ip_protocol |
値は Protocol フィールドから取得され、大文字に変換されます。 |
QueryCategoryIDs |
read_only_udm.security_result.about.labels、read_only_udm.security_result.about.resource.attribute.labels |
値は QueryCategoryIDs フィールドから取得されます。 |
QueryName |
read_only_udm.network.dns.questions.name |
値は QueryName フィールドから取得されます。 |
QueryNameReversed |
read_only_udm.network.dns.questions.name |
値は QueryNameReversed フィールドから取得されます。 |
QuerySize |
read_only_udm.network.sent_bytes |
値は QuerySize フィールドから取得されます。 |
QueryType |
read_only_udm.network.dns.questions.type |
値は QueryType フィールドから取得されます。値が既知の DNS レコードタイプのいずれかである場合、対応する数値にマッピングされます。それ以外の場合、値は文字列に変換されます。 |
RData |
read_only_udm.network.dns.answers |
値は RData フィールドから取得されます。タイプ フィールドは符号なし整数に変換されます。 |
RayID |
read_only_udm.metadata.product_log_id |
値は RayID フィールドから取得されます。 |
Referer |
read_only_udm.network.http.referral_url |
値は Referer フィールドから取得されます。 |
RequestID |
read_only_udm.metadata.product_log_id |
値は RequestID フィールドから取得されます。 |
ResolverDecision |
read_only_udm.security_result.summary |
値は ResolverDecision フィールドから取得されます。 |
ResourceID |
read_only_udm.target.resource.id、read_only_udm.target.resource.product_object_id |
値は ResourceID フィールドから取得されます。 |
ResourceType |
read_only_udm.target.resource.resource_subtype |
値は ResourceType フィールドから取得されます。 |
SNI |
read_only_udm.network.tls.client.server_name |
値は SNI フィールドから取得されます。 |
SecurityAction |
read_only_udm.security_result.action |
SecurityAction フィールドが空または sec_action フィールドが空の場合、値は「ALLOW」に設定されます。SecurityAction フィールドが「challengeSolved」または「jschallengeSolved」の場合、「ALLOW_WITH_MODIFICATION」に設定されます。SecurityAction フィールドが「drop」または「block」の場合、「BLOCK」に設定されます。 |
SecurityLevel |
read_only_udm.security_result.severity |
値は SecurityLevel フィールドから取得され、対応する UDM 重大度値にマッピングされます。 |
SessionID |
read_only_udm.network.session_id |
値は SessionID フィールドから取得されます。 |
SessionStartTime |
read_only_udm.metadata.event_timestamp |
値は SessionStartTime フィールドから取得されます。 |
SourceIP |
read_only_udm.principal.asset.ip、read_only_udm.principal.ip、read_only_udm.src.asset.ip、read_only_udm.src.ip |
値は SourceIP フィールドから取得されます。 |
SourcePort |
read_only_udm.principal.port、read_only_udm.src.port |
値は SourcePort フィールドから取得されます。 |
SrcIP |
read_only_udm.principal.asset.ip、read_only_udm.principal.ip |
値は SrcIP フィールドから取得されます。 |
SrcPort |
read_only_udm.principal.port |
値は SrcPort フィールドから取得されます。 |
TemporaryAccessDuration |
read_only_udm.network.session_duration.seconds |
値は TemporaryAccessDuration フィールドから取得されます。 |
Timestamp |
read_only_udm.metadata.event_timestamp |
値は Timestamp フィールドから取得されます。 |
Transport |
read_only_udm.network.ip_protocol |
値は Transport フィールドから取得され、大文字に変換されます。 |
URL |
read_only_udm.target.url |
値は URL フィールドから取得されます。 |
UserAgent |
read_only_udm.network.http.user_agent |
値は UserAgent フィールドから取得されます。 |
UserID |
read_only_udm.principal.user.product_object_id |
値は UserID フィールドから取得されます。 |
UserUID |
read_only_udm.target.user.product_object_id |
値は UserUID フィールドから取得されます。 |
VirtualNetworkID |
read_only_udm.principal.resource.product_object_id |
値は VirtualNetworkID フィールドから取得されます。 |
WAFAction |
read_only_udm.security_result.about.labels、read_only_udm.security_result.about.resource.attribute.labels |
値は WAFAction フィールドから取得されます。 |
WAFAttackScore |
read_only_udm.security_result.about.resource.attribute.labels |
値は WAFAttackScore フィールドから取得されます。 |
WAFFlags |
read_only_udm.security_result.about.resource.attribute.labels |
値は WAFFlags フィールドから取得されます。 |
WAFProfile |
read_only_udm.security_result.about.labels、read_only_udm.security_result.about.resource.attribute.labels |
値は WAFProfile フィールドから取得されます。 |
WAFRCEAttackScore |
read_only_udm.security_result.about.resource.attribute.labels |
値は WAFRCEAttackScore フィールドから取得されます。 |
WAFRuleID |
read_only_udm.security_result.about.labels、read_only_udm.security_result.about.resource.attribute.labels、read_only_udm.security_result.threat_id |
値は WAFRuleID フィールドから取得されます。 |
WAFRuleMessage |
read_only_udm.security_result.rule_name、read_only_udm.security_result.threat_name |
値は WAFRuleMessage フィールドから取得されます。 |
WAFSQLiAttackScore |
read_only_udm.security_result.about.resource.attribute.labels |
値は WAFSQLiAttackScore フィールドから取得されます。 |
WAFXSSAttackScore |
read_only_udm.security_result.about.resource.attribute.labels |
値は WAFXSSAttackScore フィールドから取得されます。 |
ZoneID |
read_only_udm.additional.fields |
値は ZoneID フィールドから取得されます。 |
read_only_udm.metadata.log_type |
値は「CLOUDFLARE」に設定されます。 | |
read_only_udm.metadata.product_name |
ログが DNS ログの場合は「Cloudflare Gateway DNS」、ログが Gateway HTTP ログの場合は「Cloudflare Gateway HTTP」、ログが監査ログの場合は「Cloudflare Audit」、それ以外の場合は「ウェブ アプリケーション ファイアウォール」に設定されます。 | |
read_only_udm.metadata.vendor_name |
値は「Cloudflare」に設定されます。 | |
read_only_udm.network.application_protocol |
ログが DNS ログの場合は「DNS」、HTTPVersion フィールドに「HTTP」が含まれている場合は「HTTP」、Protocol フィールドが空でなく、「tls」または「TLS」でない場合は、Protocol フィールドの値を大文字に変換した値が設定されます。 | |
read_only_udm.network.direction |
EgressIP フィールドが空でない場合、値は「OUTBOUND」に設定されます。 | |
read_only_udm.network.http.parsed_user_agent |
値は UserAgent フィールドまたは ClientRequestUserAgent フィールドから取得され、parseduseragent フィルタを使用して解析されます。 | |
read_only_udm.extensions.auth.type |
Action フィールドが「login」または「logout」の場合、値は「MACHINE」に設定されます。 | |
read_only_udm.metadata.event_type |
ログが DNS ログの場合は「NETWORK_DNS」、ログが Gateway HTTP ログの場合は「NETWORK_CONNECTION」、ログが監査ログで ActorIP フィールドと ActorEmail フィールドが空の場合は「USER_RESOURCE_ACCESS」、ログが監査ログで ResourceType フィールドと newvalue フィールドが空でない場合は「USER_RESOURCE_UPDATE_CONTENT」、Action フィールドが「login」の場合は「USER_LOGIN」、Action フィールドが「logout」の場合は「USER_LOGOUT」、Email フィールドが空でなくメールアドレス形式と一致する場合は「USER_RESOURCE_ACCESS」、EgressIP フィールドと SourceIP フィールドが空でないか OriginIP フィールドと SourceIP フィールドが空でない場合は「NETWORK_CONNECTION」に設定されます。 | |
read_only_udm.target.file.mime_type |
値は EdgeResponseContentType フィールドから取得されます。 | |
read_only_udm.target.location.country_or_region |
値は [国] フィールドから取得されます。 | |
read_only_udm.target.resource.id |
値は、AccountID フィールドまたは ResourceID フィールドから取得されます。 | |
read_only_udm.target.resource.product_object_id |
値は、AccountID フィールド、AppUUID フィールド、または ResourceID フィールドから取得されます。 | |
read_only_udm.target.user.product_object_id |
値は OwnerID フィールドまたは UserUID フィールドから取得されます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。