收集自訂 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
- 前往 Google Cloud 控制台。
- 選取專案或建立新專案。
- 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
- 按一下「建立值區」。
請提供下列設定詳細資料:
設定 值 為 bucket 命名 輸入全域不重複的名稱 (例如 custom-dns-logs)位置類型 根據需求選擇 (區域、雙區域、多區域) 位置 選取最接近 Google SecOps 執行個體的位置 (例如 us-central1)儲存空間級別 標準 (建議用於經常存取的記錄) 存取控管 統一 (建議) 保護工具 選用:啟用物件版本管理或資料保留政策 點選「建立」。
設定將 DNS 記錄自動匯出至 GCS
匯出 DNS 記錄的方法取決於 DNS 伺服器的實作方式。選擇最符合您環境的方法。
選項 1:Cloud Logging 接收器 (適用於 GCE 上的 DNS 伺服器)
如果 DNS 伺服器在 Google Compute Engine 執行個體上執行,並將記錄寫入 Cloud Logging,請建立記錄檔接收器,將 DNS 記錄直接匯出至 GCS。
- 在 GCP 主控台中,前往「Logging」> Log Router。
- 按一下「建立接收器」。
請提供下列設定詳細資料:
設定 值 接收器名稱 custom-dns-to-gcs接收器目的地 Cloud Storage bucket Bucket custom-dns-logs納入篩選器 符合 DNS 記錄項目的篩選器 (例如 resource.type="gce_instance" AND logName="projects/YOUR_PROJECT_ID/logs/dns")按一下「建立接收器」。
選項 2:搭配 Cloud Build 使用 Cloud Scheduler (適用於地端部署 DNS 伺服器)
使用 Cloud Scheduler 觸發的 Cloud Build,執行容器化匯出作業,從遠端伺服器收集 DNS 記錄,並將其寫入 GCS。
為匯出工作建立服務帳戶:
- 在 GCP 控制台中,依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
- 按一下「Create Service Account」(建立服務帳戶)。
- 請提供下列設定詳細資料:
- 服務帳戶名稱:輸入
dns-log-export-sa - 服務帳戶說明:輸入
Service account for automated DNS log export to GCS
- 服務帳戶名稱:輸入
- 按一下「建立並繼續」。
- 新增下列角色:
- Storage 物件管理員 (將檔案寫入 GCS)
- Cloud Build 編輯者 (執行 Cloud Build 工作)
- 按一下 [完成]。
建立 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'建立 Cloud Scheduler 工作來觸發建構作業:
- 前往 GCP 主控台的「Cloud Scheduler」。
- 點選「建立工作」。
請提供下列設定詳細資料:
設定 值 名稱 dns-log-export-hourly區域 選取與 GCS bucket 相同的區域 頻率 0 * * * *(每小時)時區 世界標準時間 (建議) 目標類型 HTTP 網址 https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/buildsHTTP 方法 POST 驗證標頭 新增 OAuth 權杖 服務帳戶 dns-log-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com點選「建立」。
方法 3:Storage 移轉服務 (適用於地端部署檔案系統)
如果 DNS 記錄是寫入本機檔案系統,請使用 Storage 移轉服務和移轉代理程式,將記錄移至 GCS。
- 在 GCP Console 中,前往 Storage 移轉服務。
- 按一下 [Create transfer job] (建立移轉工作)。
- 選取「POSIX 檔案系統」做為來源。
- 按照操作說明,在 DNS 伺服器或可存取 DNS 記錄檔的電腦上安裝 Storage Transfer Agent。
設定轉移工作:
設定 值 來源目錄 DNS 記錄檔目錄的路徑 目的地 bucket custom-dns-logs目的地路徑 dns/排定郵件傳送時間 設定週期性時間表 (例如每小時) 點選「建立」。
擷取 Google SecOps 服務帳戶
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Custom DNS Logs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「自訂 DNS」做為「記錄類型」。
- 按一下「取得服務帳戶」。
系統會顯示專屬服務帳戶電子郵件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com複製這個電子郵件地址,以便在下一步中使用。
將 IAM 權限授予 Google SecOps 服務帳戶
Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。
- 依序前往「Cloud Storage」>「Buckets」。
- 點按 bucket 名稱 (例如
custom-dns-logs)。 - 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 請提供下列設定詳細資料:
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址 (例如
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com)。 - 指派角色:選取「Storage 物件檢視者」。
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址 (例如
按一下 [儲存]。
設定 Google SecOps 動態饋給
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Custom DNS Logs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「自訂 DNS」做為「記錄類型」。
- 點選「下一步」。
指定下列輸入參數的值:
儲存空間 bucket URI:輸入 GCS bucket URI:
gs://custom-dns-logs/dns/- 請將
custom-dns-logs替換為您的 GCS bucket 名稱。 - 將
dns替換為您設定的前置字串路徑。
- 請將
來源刪除選項:根據偏好設定選取刪除選項:
- 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。
檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)。
資產命名空間:資產命名空間。
擷取標籤:要套用至這個動態饋給事件的標籤。
點選「下一步」。
在「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 專業人員尋求答案。