DNSFilter のログを収集する
このドキュメントでは、HTTP Event Collector(HEC)プロトコルを介して Webhook を使用してログを Google Security Operations に push するように DNSFilter を構成する方法について説明します。
DNSFilter は、脅威保護、コンテンツ フィルタリング、ネットワークの可視性を提供する AI 搭載の DNS セキュリティ ソリューションです。データ エクスポート機能を使用すると、HTTP イベント コレクタ(HEC)API を介して DNS クエリログデータを SIEM プラットフォームに自動的にエクスポートできるため、リアルタイムのセキュリティ モニタリングとコンプライアンス レポート作成が可能です。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- 管理者権限以上の権限で DNSFilter ダッシュボードにアクセスできる
- DNSFilter Data Export アドオン機能が有効になっている(Basic、Pro、Enterprise プランで有料アドオンとして利用可能)
- Google Cloud コンソールへのアクセス(API キーの作成用)
Google SecOps で Webhook フィードを作成する
フィードを作成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
DNSFilter HEC Feed)。 - [Source type] として [Webhook] を選択します。
- [ログタイプ] として [DNSFILTER] を選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- 分割区切り文字(省略可): 各 HEC リクエストには適切な形式のイベントが含まれているため、空白のままにします。
- アセットの名前空間: アセットの名前空間
- Ingestion labels: このフィードのイベントに適用されるラベル
- [次へ] をクリックします。
- [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
秘密鍵を生成して保存する
フィードを作成したら、認証用のシークレット キーを生成する必要があります。
- フィードの詳細ページで、[シークレット キーを生成] をクリックします。
- ダイアログに秘密鍵が表示されます。
秘密鍵をコピーして安全に保存します。
フィード エンドポイントの URL を取得する
- フィードの [詳細] タブに移動します。
- [エンドポイント情報] セクションで、[フィード エンドポイント URL] をコピーします。
URL の形式は次のとおりです。
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateまたは
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate次の手順で使用するため、この URL を保存します。
[完了] をクリックします。
Google Cloud API キーを作成する
Google SecOps では、認証に API キーが必要です。Google Cloud コンソールで制限付き API キーを作成します。
API キーを作成する
- Google Cloud コンソールの [認証情報] ページに移動します。
- プロジェクト(Google SecOps インスタンスに関連付けられているプロジェクト)を選択します。
- [認証情報を作成> API キー] をクリックします。
- API キーが作成され、ダイアログに表示されます。
- [API キーを編集] をクリックして、キーを制限します。
API キーを制限する
- [API キー] 設定ページ:
名前: わかりやすい名前を入力します(例:
Google SecOps DNSFilter Webhook API Key)。 - [API の制限] で次の操作を行います。
- [キーを制限] を選択します。
- [API を選択] プルダウンで、[Google SecOps API](または [Chronicle API])を検索して選択します。
- [保存] をクリックします。
- ページ上部の [API キー] フィールドから API キーの値をコピーします。
API キーを安全に保存します。
DNSFilter データ エクスポートを構成する
HEC エンドポイントの URL を作成する
Google SecOps エンドポイント URL と API キーを組み合わせて、HEC URL を作成します。
<ENDPOINT_URL>?key=<API_KEY>例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
DNSFilter でデータ エクスポートを構成する
- DNSFilter ダッシュボードにログインします。
- [ツール> データのエクスポート] に移動します。
- [エクスポート先] セクションで、[HTTP Event Collector(HEC)] を選択します。
- [HEC Configuration] セクションで、次の情報を入力します。
- HTTP Event Collector URL: 前の手順で取得した API キーを含むエンドポイント URL 全体を貼り付けます。
- アクティブなイベント コレクタ トークン: Google SecOps フィードの作成時に生成されたシークレット キーを貼り付けます。
- [Save Configuration] をクリックします。
DNSFilter は接続をテストし、構成が正しければ成功メッセージを表示します。
データ取り込みを確認する
- DNSFilter ダッシュボードで、[Tools> Data Export] に移動します。
- [ステータス] が [有効] または [接続済み] と表示されていることを確認します。
- Google SecOps コンソールで、[SIEM 設定] > [フィード] に移動します。
- DNSFilter フィードを見つけて、[ステータス] が [有効] と表示されていることを確認します。
- フィード名をクリックして詳細を表示します。
- 取り込まれたログ指標を確認して、データが流れていることを確認します。
DNSFilter イベントを検索するには、[検索] に移動して、次のクエリを実行します。
metadata.log_type = "DNSFILTER"
認証方法のリファレンス
Google SecOps webhook フィードは、複数の認証方法をサポートしています。DNSFilter HEC 統合では、ハイブリッド方式が使用されます。
使用した方法: ハイブリッド(URL + ヘッダー)
DNSFilter は、URL で API キーを送信し、リクエスト ヘッダーでシークレット キー(HEC トークン)を送信します。
リクエストの形式:
POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1 Content-Type: application/json Authorization: Splunk <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
別の方法: カスタム ヘッダー
ログを Google SecOps に送信するようにカスタム アプリケーションを構成する場合は、この方法を使用するとセキュリティが強化されます。
リクエストの形式:
POST <ENDPOINT_URL> HTTP/1.1 Content-Type: application/json x-goog-chronicle-auth: <API_KEY> x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }メリット:
- API キーとシークレットが URL に表示されない
- より安全(ヘッダーがウェブサーバーのアクセスログに記録されない)
- ベンダーがサポートしている場合の推奨方法
認証ヘッダー名
Google SecOps は、認証に次のヘッダー名を使用します。
API キーの場合:
x-goog-chronicle-auth(推奨)X-Goog-Chronicle-Auth(大文字と小文字を区別しない)
秘密鍵の場合:
x-chronicle-auth(推奨)X-Chronicle-Auth(大文字と小文字を区別しない)Authorization: Splunk <TOKEN>(HEC 互換性)
Webhook の上限とベスト プラクティス
リクエストに関する上限
| 上限 | 値 |
|---|---|
| 最大リクエスト サイズ | 4 MB |
| 最大 QPS(秒間クエリ数) | 15,000 |
| リクエストのタイムアウト | 30 秒 |
| 再試行の動作 | 指数バックオフによる自動 |
ベスト プラクティス
- エクスポートのステータスをモニタリングする: DNSFilter ダッシュボードでデータ エクスポートのステータスを定期的に確認し、データフローが継続していることを確認します。
- API キーのローテーション: セキュリティのために、Google Cloud API キーを定期的にローテーションします。
- 秘密鍵の管理: Google SecOps の秘密鍵を安全に保存し、侵害された場合は再生成します。
- データ保持: DNSFilter と Google SecOps の両方で適切なデータ保持ポリシーを構成します。
- アラートの構成: 重大な DNS セキュリティ イベントについて Google SecOps でアラートを設定します。
トラブルシューティング
接続テストが失敗する
DNSFilter データ エクスポート構成のテストが失敗した場合:
- HEC URL が正しく、API キー パラメータが含まれていることを確認します。
- 秘密鍵(HEC トークン)が余分なスペースなしで正しくコピーされていることを確認します。
- Google Cloud API キーで Chronicle API へのアクセスが有効になっていることを確認します。
- Google SecOps フィードが [有効] ステータスであることを確認します。
- DNSFilter から Google Cloud エンドポイントへのネットワーク接続を確認します。
Google SecOps にデータが表示されない
接続は成功したがデータが表示されない場合:
- DNSFilter のデプロイで DNS クエリが生成されていることを確認します。
- DNSFilter クエリログを調べて、トラフィックが処理されていることを確認します。
- Google SecOps で
metadata.log_type = "DNSFILTER"を検索して、取り込みを確認します。 - Google SecOps でフィードの Logs Ingested 指標を確認します。
- フィードのエラーログで取り込みエラーを確認します。
データ エクスポートでエラー メッセージが返される
一般的なエラーの原因:
- Invalid credentials: API キーまたはシークレット キーが間違っているか、有効期限が切れています。
- リージョンの不一致: Google SecOps エンドポイント URL のリージョンがインスタンスと一致していません。
- 権限: API キーで Chronicle API へのアクセスが有効になっていません。
- ネットワークの問題: ファイアウォールまたはプロキシがアウトバウンド HTTPS 接続をブロックしている。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| 時間 | metadata.collected_timestamp | 日付形式 yyyy-MM-dd HH:mm:ss Z UTC を使用して変換されました |
| metadata.event_type | principal_ip_present、principal_hostname_present、または principal_mac_present が true の場合は「STATUS_UPDATE」に設定し、それ以外の場合は「GENERIC_EVENT」に設定します。 | |
| question_type | network.dns.questions | DNS レコードタイプのマッピングを使用して question_type を question.type に変換し、配列に統合 |
| コード | network.dns.response_code | DNS レスポンス コード マッピングを使用して変換 |
| プロトコル | network.ip_protocol | IP プロトコル マッピングを使用して変換 |
| クライアント | principal.hostname | 値を直接コピー |
| request_address、ip4、ip6、source_addresses | principal.ip | request_address(抽出された IP)、ip4(抽出された IP)、ip6(抽出された IP)、source_addresses 配列から抽出された IP から統合されました |
| region | principal.location.country_or_region | 値を直接コピー |
| clientMac | principal.mac | MAC 正規表現と一致する場合は値を直接コピー |
| clientID | principal.resource.product_object_id | 値を直接コピー |
| ユーザー名 | principal.user.user_display_name | 値を直接コピー |
| user_id | principal.user.userid | 値を直接コピー |
| code、original_code、clientType、collection、network_name、networkID、collectionID、policy、policyID、scheduled_policy、scheduled_policyID、sec_cats、sec_allow_cats、block_cats、block_allow_cats、threat、allowed、method、organization、organizationID、applicationID、application_name、application_categoryID、application_category_name | security_result.detection_fields | さまざまなソースフィールドから Key-Value ペアとして統合されたラベル |
| ドメイン | target.administrative_domain | 値を直接コピー |
| fqdn | target.domain.name | 値を直接コピー |
| metadata.product_name | 「DNSFILTER」に設定 | |
| metadata.vendor_name | 「DNSFILTER」に設定 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。