Cloudflare のログを収集する
このドキュメントでは、Webhook(HTTP 宛先)または Google Cloud Storage を使用して Cloudflare ログを Google Security Operations に取り込む方法について説明します。Cloudflare は、DNS、HTTP、監査、ゼロトラスト、CASB のログ形式で運用データを生成します。この統合により、これらのログを Google SecOps に送信して分析とモニタリングを行うことができます。パーサーは、まず空のフィールドのセットを初期化し、JSON 形式の Cloudflare ログを解析して、有効な JSON ではないメッセージを削除します。次に、コードは特定のフィールドの有無と値に基づいて条件付きロジックを使用して Cloudflare プロダクトとイベントタイプを特定し、それに応じて統合データモデル(UDM)フィールドに入力します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス。
- LogPush が有効になっている Cloudflare Enterprise アカウント。
- Webhook メソッドの場合: Google Cloud コンソールへの特権アクセス。
- Google Cloud Storage メソッドの場合: Google Cloud Storage への特権アクセス権。
方法 1: Webhook(HTTP 宛先)を使用して Cloudflare ログのエクスポートを構成する
この方法では、中間ストレージを使用せずに Cloudflare ログを Google SecOps に直接ストリーミングできます。
Google SecOps で Webhook フィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [新しく追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Cloudflare Webhook
)。 - [Source type] として [Webhook] を選択します。
- [ログタイプ] として [Cloudflare] を選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- 分割区切り文字:
\n
。 - アセットの名前空間: アセットの名前空間。
- Ingestion labels: このフィードのイベントに適用されるラベル。
- 分割区切り文字:
- [次へ] をクリックします。
- [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
- [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
- このシークレットは再び表示できないため、秘密鍵をコピーして保存します。
- [詳細] タブに移動します。
- [エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。
- [完了] をクリックします。
Webhook フィード用の API キーを作成する
- Google Cloud コンソール > [API とサービス] > [認証情報] に移動します。
- [認証情報を作成] をクリックして [API キー] を選択します。
- [API キーを編集] をクリックします。
- [API の制限] で [キーを制限] を選択します。
- リストから [Google SecOps API] を選択します。
- [保存] をクリックします。
- API キーの値をコピーします。
Cloudflare LogPush HTTP 転送先を構成する
- Cloudflare ダッシュボードにログインします。
- LogPush で使用するエンタープライズ アカウントまたはドメインを選択します。
- [Analytics & Logs > Logpush] に移動します。
- [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 など)を選択します。
ログプッシュ ジョブを構成します。
- [ジョブ名] を入力します。
- 省略可: [ログが一致する場合] で、フィルタを構成します。
- [次のフィールドを送信] で、含めるフィールドを選択します。
- タイムスタンプ形式を選択します(RFC3 339 を推奨)。
- 必要に応じてサンプリング レートを構成します。
[送信] をクリックして、ログプッシュ ジョブを作成します。
Webhook 統合を確認する
構成後、ログは数分以内に Google SecOps に表示されます。確認する方法を次に示します。
- [Investigation] > [SIEM Search] に移動します。
- 構成した取り込みラベルでログを検索します。
- Cloudflare ログが正しく解析されていることを確認します。
方法 2: Google Cloud Storage を使用して Cloudflare ログのエクスポートを構成する
Cloudflare にログを push するように構成します。これには、Cloudflare に必要な権限を付与する必要があります。
Google Cloud バケットを作成する
- Google Cloud コンソールにログインします。
- [Cloud Storage バケット] のページに移動します。
- [作成] をクリックします。
- [バケットの作成] ページで、バケット情報を入力します。
- 名前: バケット名の要件を満たす一意の名前を入力します(例:
cloudflare-data
)。 - ロケーション タイプ: ロケーション タイプとリージョンを選択します。
- 階層名前空間を有効にするには、展開矢印をクリックして [Optimize for file oriented and data-intensive workloads] を開き、[このバケットで階層的な名前空間を有効にする] を選択します。
- 名前: バケット名の要件を満たす一意の名前を入力します(例:
- [作成] をクリックします。
バケットに権限を付与する
- Cloud Storage コンソールで、前に作成したバケットを選択します。
- [権限] タブをクリックします。
- [アクセス権を付与] をクリックします。
- Storage オブジェクト管理者権限を持つアカウント
logpush@cloudflare-data.iam.gserviceaccount.com
を追加します。 - [保存] をクリックします。
Cloudflare LogPush を Google Cloud Storage に構成する
- Cloudflare ダッシュボードにログインします。
- LogPush で使用するエンタープライズ アカウントまたはドメインを選択します。
- [Analytics & Logs > Logpush] に移動します。
- [Create a Logpush job] をクリックします。
- [宛先を選択してください] で [Google Cloud Storage] を選択します。
- Google Cloud Storage バケットのパス(
gs://cloudflare-data/logs/
など)を入力します。 [続行] をクリックします。
[所有権トークン] を入力し、[続行] をクリックします。
ストレージに push するデータセットを選択します。
ログプッシュ ジョブを構成します。
- [ジョブ名] を入力します。
- [If logs match] で、ログに含めるイベントやログから削除するイベントを選択できます。
- [Send the following fields] で、push するログを選択します。
- タイムスタンプ形式を選択します(RFC 339 を推奨)。
- 必要に応じてサンプリング レートを構成します。
[送信] をクリックします。
Google Cloud Storage から Cloudflare のログを取り込むように Google SecOps でフィードを構成する
- [SIEM Settings] > [Feeds] に移動します。
- [新しく追加] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Cloudflare GCS Logs
)。 - [ソースタイプ] として [Google Cloud Storage V2] を選択します。
- [ログタイプ] として [Cloudflare] を選択します。
- [サービス アカウントを取得する] をクリックします。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
- Storage Bucket URI:
gs://my-bucket/<value>/
形式の Google Cloud バケット URL。この URL は、末尾にスラッシュ(/)が付いている必要があります。 - Source deletion options: 必要に応じて削除オプションを選択します。
- ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。
- アセットの名前空間: アセットの名前空間。
- Ingestion labels: このフィードのイベントに適用されるラベル。
- Storage Bucket URI:
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
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 フィールドから取得されます。 |
国 | read_only_udm.target.location.country_or_region | 値は [国] フィールドから取得されます。 |
CreatedAt | read_only_udm.metadata.event_timestamp | 値は CreatedAt フィールドから取得されます。 |
日時 | 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 フィールドから取得されます。 |
メール | 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 フィールドから取得され、文字列に変換されます。 |
場所 | 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 フィールドから取得されます。 |
ポリシー | 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 フィールドから取得されます。 |
プロトコル | 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 フィールドから取得されます。type フィールドは符号なし整数に変換されます。 |
RayID | read_only_udm.metadata.product_log_id | 値は RayID フィールドから取得されます。 |
リファラー | 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 フィールドから取得されます。 |
タイムスタンプ | read_only_udm.metadata.event_timestamp | 値は Timestamp フィールドから取得されます。 |
トランスポート | 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」、それ以外の場合は「Web Application Firewall」に設定されます。 | |
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 のプロフェッショナルから回答を得ることができます。