收集自訂 DNS 記錄

支援的國家/地區:

本文說明如何使用 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 bucket 的權限
  • 管理 Google Cloud Storage 值區 IAM 政策的權限
  • DNS 伺服器或服務,以支援的格式產生記錄 (建議使用 JSON)
  • 具備 DNS 伺服器的管理員存取權,可設定記錄匯出功能

建立 Google Cloud Storage bucket

  1. 前往 Google Cloud 控制台
  2. 選取專案或建立新專案。
  3. 在導覽選單中,依序前往「Cloud Storage」>「Bucket」
  4. 按一下「建立值區」
  5. 請提供下列設定詳細資料:

    設定
    為 bucket 命名 輸入全域不重複的名稱 (例如 custom-dns-logs)
    位置類型 根據需求選擇 (區域、雙區域、多區域)
    位置 選取最接近 Google SecOps 執行個體的位置 (例如 us-central1)
    儲存空間級別 標準 (建議用於經常存取的記錄)
    存取控管 統一 (建議)
    保護工具 選用:啟用物件版本管理或資料保留政策
  6. 點選「建立」

設定將 DNS 記錄自動匯出至 GCS

匯出 DNS 記錄的方法取決於 DNS 伺服器的實作方式。選擇最符合您環境的方法。

選項 1:Cloud Logging 接收器 (適用於 GCE 上的 DNS 伺服器)

如果 DNS 伺服器在 Google Compute Engine 執行個體上執行,並將記錄寫入 Cloud Logging,請建立記錄檔接收器,將 DNS 記錄直接匯出至 GCS。

  1. GCP 主控台中,前往「Logging」> Log Router
  2. 按一下「建立接收器」
  3. 請提供下列設定詳細資料:

    設定
    接收器名稱 custom-dns-to-gcs
    接收器目的地 Cloud Storage bucket
    Bucket 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 & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)
    2. 按一下「Create Service Account」(建立服務帳戶)
    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 主控台的「Cloud Scheduler」
    2. 點選「建立工作」
    3. 請提供下列設定詳細資料:

      設定
      名稱 dns-log-export-hourly
      區域 選取與 GCS bucket 相同的區域
      頻率 0 * * * * (每小時)
      時區 世界標準時間 (建議)
      目標類型 HTTP
      網址 https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/builds
      HTTP 方法 POST
      驗證標頭 新增 OAuth 權杖
      服務帳戶 dns-log-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com
    4. 點選「建立」

方法 3:Storage 移轉服務 (適用於地端部署檔案系統)

如果 DNS 記錄是寫入本機檔案系統,請使用 Storage 移轉服務和移轉代理程式,將記錄移至 GCS。

  1. GCP Console 中,前往 Storage 移轉服務
  2. 按一下 [Create transfer job] (建立移轉工作)
  3. 選取「POSIX 檔案系統」做為來源。
  4. 按照操作說明,在 DNS 伺服器或可存取 DNS 記錄檔的電腦上安裝 Storage Transfer Agent
  5. 設定轉移工作:

    設定
    來源目錄 DNS 記錄檔目錄的路徑
    目的地 bucket custom-dns-logs
    目的地路徑 dns/
    排定郵件傳送時間 設定週期性時間表 (例如每小時)
  6. 點選「建立」

擷取 Google SecOps 服務帳戶

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 Custom DNS Logs)。
  5. 選取「Google Cloud Storage V2」做為「來源類型」
  6. 選取「自訂 DNS」做為「記錄類型」
  7. 按一下「取得服務帳戶」
  8. 系統會顯示專屬服務帳戶電子郵件地址,例如:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. 複製這個電子郵件地址,以便在下一步中使用。

將 IAM 權限授予 Google SecOps 服務帳戶

Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。

  1. 依序前往「Cloud Storage」>「Buckets」
  2. 點按 bucket 名稱 (例如 custom-dns-logs)。
  3. 前往「權限」分頁標籤。
  4. 按一下「授予存取權」
  5. 請提供下列設定詳細資料:
    • 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址 (例如 chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com)。
    • 指派角色:選取「Storage 物件檢視者」
  6. 按一下 [儲存]

設定 Google SecOps 動態饋給

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 Custom DNS Logs)。
  5. 選取「Google Cloud Storage V2」做為「來源類型」
  6. 選取「自訂 DNS」做為「記錄類型」
  7. 點選「下一步」
  8. 指定下列輸入參數的值:

    • 儲存空間 bucket URI:輸入 GCS bucket URI:

      gs://custom-dns-logs/dns/
      
      • 請將 custom-dns-logs 替換為您的 GCS bucket 名稱。
      • dns 替換為您設定的前置字串路徑。
    • 來源刪除選項:根據偏好設定選取刪除選項:

      • 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
      • 刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。

    • 檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)。

    • 資產命名空間資產命名空間

    • 擷取標籤:要套用至這個動態饋給事件的標籤。

  9. 點選「下一步」

  10. 在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)

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 專業人員尋求答案。