カスタム DNS ログを収集する

パーサーのバージョン: 1.0

以下でサポートされています。

このドキュメントでは、Google Cloud Storage V2 を使用してカスタム DNS ログを Google Security Operations に取り込む方法について説明します。

カスタム DNS は、カスタムまたはサポートされていない DNS 実装からの DNS サーバーログの汎用ログタイプです。ドメイン、レコード タイプ、クライアント情報などの DNS クエリとレスポンスのデータをキャプチャします。これらのログは標準以外の DNS ソースから取得されるため、Google Cloud Storage(GCS)バケットにエクスポートしてから、Google SecOps フィードを構成して取り込む必要があります。

始める前に

次の前提条件を満たしていることを確認してください。

  • Google SecOps インスタンス
  • Cloud Storage API が有効になっている Google Cloud プロジェクト
  • GCS バケットを作成および管理する権限
  • GCS バケットの IAM ポリシーを管理する権限
  • サポートされている形式(JSON を推奨)でログを生成する DNS サーバーまたはサービス
  • ログのエクスポートを構成するための DNS サーバーへの管理者権限

Google Cloud Storage バケットを作成する

  1. Google Cloud コンソールに移動します。
  2. プロジェクトを選択するか、新しいプロジェクトを作成します。
  3. ナビゲーション メニューで、[Cloud Storage > バケット] に移動します。
  4. [バケットを作成] をクリックします。
  5. 次の構成情報を提供してください。

    設定 値
    バケットに名前を付ける グローバルに一意の名前(custom-dns-logs など)を入力します。
    ロケーション タイプ ニーズに応じて選択します(リージョン、デュアルリージョン、マルチリージョン)。
    ロケーション Google SecOps インスタンスに最も近いロケーションを選択します(例: us-central1)。
    ストレージ クラス Standard(アクセス頻度の高いログにおすすめ)
    アクセス制御 均一(推奨)
    保護ツール 省略可: オブジェクトのバージョニングまたは保持ポリシーを有効にする
  6. [作成] をクリックします。

DNS ログの GCS への自動エクスポートを構成する

DNS ログをエクスポートする方法は、DNS サーバーの実装によって異なります。環境に最適なアプローチを選択します。

オプション 1: Cloud Logging シンク(GCE の DNS サーバーの場合)

DNS サーバーが Google Compute Engine インスタンスで実行され、Cloud Logging にログを記録する場合は、ログシンクを作成して DNS ログを GCS に直接エクスポートします。

  1. GCP Console で、[ロギング] > [Log Router] に移動します。
  2. [シンクを作成] をクリックします。
  3. 次の構成情報を提供してください。

    設定 値
    シンク名 custom-dns-to-gcs
    シンクの宛先 Cloud Storage バケット
    バケット custom-dns-logs
    包含フィルタ DNS ログエントリに一致するフィルタ(resource.type="gce_instance" AND logName="projects/YOUR_PROJECT_ID/logs/dns" など)
  4. [シンクを作成] をクリックします。

オプション 2: Cloud Build を使用した Cloud Scheduler(オンプレミス DNS サーバーの場合)

Cloud Scheduler によってトリガーされる Cloud Build を使用して、リモート サーバーから DNS ログを収集して GCS に書き込むコンテナ化されたエクスポート ジョブを実行します。

  1. エクスポート ジョブのサービス アカウントを作成します。

    1. GCP コンソールで、[IAM と管理>サービス アカウント] に移動します。
    2. [サービス アカウントを作成] をクリックします。
    3. 次の構成情報を指定します。
      • サービス アカウント名: 「dns-log-export-sa」と入力します。
      • サービス アカウントの説明: Service account for automated DNS log export to GCS と入力します。
    4. [作成して続行] をクリックします。
    5. 次のロールを追加します。
      • Storage オブジェクト管理者(GCS にファイルを書き込むため)
      • Cloud Build 編集者(Cloud Build ジョブを実行するため)
    6. [完了] をクリックします。
  2. Cloud Build 構成ファイル(cloudbuild.yaml)を作成します。

    steps:
      - name: 'gcr.io/cloud-builders/gcloud'
        entrypoint: 'bash'
        args:
          - '-c'
          - |
            # Collect DNS logs from your server
            # Replace with the actual command for your environment
            # Example: pull logs via syslog-ng, rsync from remote server, or query DNS log API
            curl -s -H "Authorization: Bearer $${API_TOKEN}" \
              "https://your-dns-server.example.com/api/logs?format=json" \
              -o /workspace/dns_logs.json
            # Upload to GCS
            gcloud storage cp /workspace/dns_logs.json \
              gs://${_BUCKET_NAME}/dns/dns_logs_$(date -u +%Y%m%d_%H%M%S).json
    substitutions:
      _BUCKET_NAME: 'custom-dns-logs'
    
  3. ビルドをトリガーする Cloud Scheduler ジョブを作成します。

    1. GCP Console で、[Cloud Scheduler] に移動します。
    2. [ジョブを作成] をクリックします。
    3. 次の構成情報を提供してください。

      設定 値
      名前 dns-log-export-hourly
      リージョン GCS バケットと同じリージョンを選択する
      周波数 0 * * * *(1 時間ごと)
      タイムゾーン UTC(推奨)
      ターゲット タイプ HTTP
      URL https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/builds
      HTTP メソッド POST
      Auth ヘッダー OAuth トークンを追加
      サービス アカウント dns-log-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com
    4. [作成] をクリックします。

オプション 3: Storage Transfer Service(オンプレミス ファイル システムの場合)

DNS ログがローカル ファイル システムに書き込まれる場合は、Storage Transfer Service と転送エージェントを使用して、GCS に移動します。

  1. GCP Console で、[Storage Transfer Service] に移動します。
  2. [転送ジョブを作成] をクリックします。
  3. 転送元として [POSIX ファイル システム] を選択します。
  4. 手順に沿って、DNS サーバーまたは DNS ログファイルにアクセスできるマシンに Storage Transfer Agent をインストールします。
  5. 転送ジョブを構成します。

    設定 値
    ソース ディレクトリ DNS ログファイル ディレクトリのパス
    宛先バケット custom-dns-logs
    宛先のパス dns/
    スケジュール 定期的なスケジュールを設定する(1 時間ごとなど)
  6. [作成] をクリックします。

Google SecOps サービス アカウントを取得する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. [単一フィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: Custom DNS Logs)。
  5. [ソースタイプ] として [Google Cloud Storage V2] を選択します。
  6. [ログタイプ] として [カスタム DNS] を選択します。
  7. [サービス アカウントを取得する] をクリックします。
  8. 一意のサービス アカウントのメールアドレスが表示されます(例:)。

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. このメールアドレスをコピーして、次のステップで使用します。

Google SecOps サービス アカウントに IAM 権限を付与する

Google SecOps サービス アカウントには、GCS バケットに対する Storage オブジェクト閲覧者のロールが必要です。

  1. [Cloud Storage] > [バケット] に移動します。
  2. バケット名(custom-dns-logs など)をクリックします。
  3. [権限] タブに移動します。
  4. [アクセス権を付与] をクリックします。
  5. 次の構成情報を指定します。
    • プリンシパルを追加: Google SecOps サービス アカウントのメールアドレス(例: chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com)を貼り付けます。
    • ロールを割り当てる: [Storage オブジェクト閲覧者] を選択します。
  6. [保存] をクリックします。

Google SecOps フィードを構成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. [単一フィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: Custom DNS Logs)。
  5. [ソースタイプ] として [Google Cloud Storage V2] を選択します。
  6. [ログタイプ] として [カスタム DNS] を選択します。
  7. [次へ] をクリックします。
  8. 次の入力パラメータの値を指定します。

    • ストレージ バケット URI: GCS バケット URI を入力します。

      gs://custom-dns-logs/dns/
      
      • custom-dns-logs は、GCS バケット名に置き換えます。
      • dns は、構成したプレフィックス パスに置き換えます。
    • Source deletion option: 必要に応じて削除オプションを選択します。

      • なし: 転送後にファイルを削除しません(テストにおすすめ)。
      • 転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。

    • ファイルの最大経過日数: 過去の日数以内に変更されたファイルを含めます(デフォルトは 180 日)。

    • アセットの名前空間: アセットの名前空間。

    • Ingestion labels: このフィードのイベントに適用されるラベル。

  9. [次へ] をクリックします。

  10. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
receiveTimestamp metadata.event_timestamp RFC 3339 として解析済み
message metadata.event_type マッピング: "dns_query" → NETWORK_DNS
jsonPayload.msg metadata.product_event_type 直接マッピングされます。
insertId metadata.product_log_id 直接マッピングされます。
message metadata.product_name マッピング: "dns_query" → Custom DNS
message metadata.vendor_name マッピング: "dns_query" → CUSTOM
message network.application_protocol マッピング: "dns_query" → DNS
dns_answers network.dns.answers 統合済み
message network.dns.answers マッピング: "dns_query" → dns_answers
dns_question network.dns.questions 統合済み
message network.dns.questions マッピング: "dns_query" → dns_question
dns.response_code network.dns.response_code 名前変更済み/マッピング済み
message principal.hostname マッピング: "dns_query" → jsonPayload.dns_query.server
jsonPayload.dns_query.server principal.ip 統合済み
message principal.ip マッピング: "dns_query" → jsonPayload.dns_query.server
message security_result マッピング: "dns_query" → security_result
logName security_result.category_details 統合済み
message security_result.category_details マッピング: "dns_query" → logName
message security_result.severity マッピング: "dns_query" → INFORMATIONAL、"dns_query" → MEDIUM、"dns_query" → HIGH
labels.application target.application 直接マッピングされます。
message target.hostname マッピング: "dns_query" → jsonPayload.dns_query.server
jsonPayload.dns_query.server target.ip 統合済み
message target.ip マッピング: "dns_query" → jsonPayload.dns_query.server
component_label target.labels 統合済み
instance_group_label target.labels 統合済み
message target.labels マッピング: "dns_query" → component_label、"dns_query" → instance_group_label
labels.region target.location.country_or_region 直接マッピングされます。
resource.labels.zone target.resource.attribute.cloud.availability_zone 直接マッピングされます。
message target.resource.attribute.cloud.environment マッピング: "dns_query" → GOOGLE_CLOUD_PLATFORM
resource.labels.project_id target.resource.attribute.cloud.project.id 直接マッピングされます。
message target.resource.resource_type マッピング: "dns_query" → VIRTUAL_MACHINE
なし metadata.event_type 定数: NETWORK_DNS
なし metadata.product_name 定数: Custom DNS
なし metadata.vendor_name 定数: CUSTOM
なし network.application_protocol 定数: DNS
なし principal.hostname 定数: jsonPayload.dns_query.server
なし security_result.severity 定数: INFORMATIONAL
なし target.hostname 定数: jsonPayload.dns_query.server
なし target.resource.attribute.cloud.environment 定数: GOOGLE_CLOUD_PLATFORM
なし target.resource.resource_type 定数: VIRTUAL_MACHINE

変更ログ

このパーサーの変更ログを表示する

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。