開始使用 DNS Armor 的進階威脅偵測功能

1. 簡介與總覽

DNS Armor 採用 Infoblox 技術,是全代管服務,可為 Google Cloud 工作負載提供 DNS 層級安全防護。這項工具的進階威脅偵測功能旨在偵測攻擊鏈最早的惡意活動 (DNS 查詢),且不會增加作業複雜度或效能負擔。

本程式碼研究室提供逐步操作說明,協助您設定及測試 DNS Armor 服務。您將設定必要的網路基礎架構、建立威脅偵測工具、模擬 DNS 威脅來測試服務,最後使用記錄檔探索工具分析威脅記錄。

建構項目

在本程式碼研究室中,您將佈建下列資源:

  • 兩個虛擬私有雲網路:network-anetwork-b
  • network-a 將包含 us-east4us-central1 地區的子網路和虛擬機器。
  • network-b 會包含子網路和虛擬機器,且僅限於 us-east4
  • 設定為檢查 DNS 查詢的 DNS Armor 進階威脅偵測工具。

75d6eeb807735645.png

課程內容

  • 如何佈建必要的網路資源,包括虛擬私有雲和虛擬機器。
  • 如何部署進階威脅偵測工具,並排除特定網路。
  • 如何使用威脅模擬指令碼驗證威脅偵測設定。
  • 如何使用記錄檔探索工具分析威脅記錄。

軟硬體需求

  • Google Cloud 專案。
  • 存取 gcloud 指令列工具。

2. 必要條件

在本節中,您將執行下列工作:

  • 確認 Google Cloud 專案符合必要的機構政策限制。
  • 確認使用者帳戶具備必要的 IAM 角色和權限。
  • 啟用本程式碼研究室所需的 Google Cloud API。
  • roles/logging.viewer 身分與存取權管理角色指派給 Compute Engine 服務帳戶。

機構政策限制

如要順利完成本程式碼研究室,請確認專案套用的機構政策限制。某些政策可能會阻礙必要資源的佈建作業。下列限制可能會影響本程式碼研究室的設定:

  • constraints/gcp.resourceLocations:限制可建立資源的區域;本程式碼研究室需要 us-east4us-central1
  • constraints/compute.vmExternalIpAccess:禁止建立具有公開 IP 位址的虛擬機器,以免您未按照程式碼研究室使用 --no-address 標記,導致設定受到干擾。
  • constraints/compute.shieldedVm:強制建立受防護的 VM,但 Codelab 的 VM 建立指令並未指定這項設定,因此可能會導致錯誤。
  • constraints/gcp.restrictServiceUsage:限制可啟用的 Google Cloud API,如果不允許 compute.googleapis.comnetworksecurity.googleapis.comlogging.googleapis.commonitoring.googleapis.com,可能會封鎖程式碼研究室。

IAM 角色和權限

如要順利完成本程式碼研究室,請確認授予使用者的 IAM 角色和權限。您必須具備下列 IAM 角色和權限,才能完成本程式碼研究室。

  • 服務使用管理員 (roles/serviceusage.serviceUsageAdmin):啟用 Codelab 必要的 Google Cloud API。
  • Compute 網路管理員 (roles/compute.networkAdmin):建立及管理 VPC 網路、子網路和 Cloud NAT。
  • Compute 安全管理員 (roles/compute.securityAdmin):設定防火牆規則,允許透過 SSH 存取虛擬機器。
  • Compute 執行個體管理員 (v1) (roles/compute.instanceAdmin.v1):建立及管理實驗室所需的虛擬機器。
  • 受 IAP 保護的通道使用者 (roles/iap.tunnelResourceAccessor):透過 Identity-Aware Proxy (IAP) 使用 SSH 連線至虛擬機器。
  • 網路安全管理員 (roles/networksecurity.admin):建立及管理 DNS Armor 威脅偵測工具。
  • 記錄檢視器 (roles/logging.viewer):在記錄檔探索工具中查看及分析威脅記錄。

Google Cloud API

請確認專案中已啟用必要的 Google Cloud API。

1. 啟用必要 API,在 Cloud Shell 中執行下列 gcloud 指令。

gcloud services enable compute.googleapis.com \
networksecurity.googleapis.com \
logging.googleapis.com \
monitoring.googleapis.com

2. 確認 API 已啟用,在 Cloud Shell 中執行下列 gcloud 指令。

gcloud services list --enabled

Compute Engine 服務帳戶

測試指令碼需要權限,才能從 Cloud Logging 讀取威脅記錄。由於指令碼會從使用預設 Compute Engine 服務帳戶的 VM 執行,因此必須將 roles/logging.viewer IAM 角色指派給這個服務帳戶。

1. 設定環境變數,在 Cloud Shell 中執行下列指令。

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

2. 將記錄檢視者角色授予 Compute Engine SA。在 Cloud Shell 中執行下列 gcloud 指令

gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="roles/logging.viewer"

3. 基本環境設定

在本節中,您將執行下列工作:

  • 建立虛擬私有雲網路 (network-anetwork-b),並使用自訂子網路。
  • network-anetwork-b 中,設定 Cloud Router 和 Cloud NAT,以進行網際網路輸出。
  • 建立防火牆規則,允許從 IAP 的 IP 範圍透過 SSH 存取 VM (適用於 network-anetwork-b)。
  • network-anetwork-b 中佈建沒有公開 IP 位址的 Linux 虛擬機器。

建立虛擬私有雲和子網路

1. 在 us-east4us-central1 區域中建立 network-a 及其子網路。在 Cloud Shell 中執行下列 gcloud 指令。

gcloud compute networks create network-a --subnet-mode=custom
gcloud compute networks subnets create subnet-a-use4 \
--network=network-a \
--range=10.10.0.0/24 \
--region=us-east4
gcloud compute networks subnets create subnet-a-usc1 \
--network=network-a \
--range=10.10.1.0/24 \
--region=us-central1

2. 在 us-east4 區域中建立 network-b 及其子網路。在 Cloud Shell 中執行下列 gcloud 指令。

gcloud compute networks create network-b --subnet-mode=custom
gcloud compute networks subnets create subnet-b-use4 \
--network=network-b \
--range=10.20.0.0/24 \
--region=us-east4

設定網際網路輸出

1. 為 network-a 建立 Cloud Router 和 Cloud NAT,允許沒有公用 IP 的 VM 傳出網際網路流量。

gcloud compute routers create router-a-use4 \
--network=network-a \
--region=us-east4
gcloud compute routers nats create nat-a-use4 \
--router=router-a-use4 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-east4
gcloud compute routers create router-a-usc1 \
--network=network-a \
--region=us-central1
gcloud compute routers nats create nat-a-usc1 \
--router=router-a-usc1 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-central1

2. 為 network-b 建立 Cloud Router 和 Cloud NAT,允許沒有公用 IP 的 VM 傳出網際網路流量。

gcloud compute routers create router-b-use4 \
--network=network-b \
--region=us-east4
gcloud compute routers nats create nat-b-use4 \
--router=router-b-use4 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-east4

設定防火牆規則

1. 為 network-a 建立防火牆規則,允許從 IAP 的 IP 範圍進行 SSH 存取。在 Cloud Shell 中執行下列 gcloud 指令。

gcloud compute firewall-rules create allow-ssh-iap-a \
--network=network-a \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20

2. 為 network-b 建立防火牆規則,允許從 IAP 的 IP 範圍進行 SSH 存取。在 Cloud Shell 中執行下列 gcloud 指令。

gcloud compute firewall-rules create allow-ssh-iap-b \
--network=network-b \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20

建立虛擬機器

1. 在 network-a 中建立 Linux VM

gcloud compute instances create vm-a-use4 \
--zone=us-east4-c \
--network=network-a \
--subnet=subnet-a-use4 \
--no-address \
--scopes=cloud-platform
gcloud compute instances create vm-a-usc1 \
--zone=us-central1-a \
--network=network-a \
--subnet=subnet-a-usc1 \
--no-address \
--scopes=cloud-platform

2. 在 network-b 中建立 Linux VM

gcloud compute instances create vm-b-use4 \
--zone=us-east4-c \
--network=network-b \
--subnet=subnet-b-use4 \
--no-address \
--scopes=cloud-platform

4. 建立 DNS 威脅偵測工具

在本節中,您將執行下列工作:

  • 建立威脅偵測工具。
  • 列出威脅偵測工具。
  • 描述資源。

現在已佈建虛擬私有雲、子網路和虛擬機器,下一步是建立 DNS 威脅偵測工具。

1. 使用 gcloud beta network-security dns-threat-detectors create 指令建立威脅偵測工具。使用 --excluded-networks 旗標排除 network-b

gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--provider=infoblox \
--excluded-networks=projects/$PROJECT_ID/global/networks/network-b

2. 列出威脅偵測工具,確認已建立。

gcloud beta network-security dns-threat-detectors list --location=global

3. 描述資源,確認 network-b 正確列在 excludedNetworks 下方。

gcloud beta network-security dns-threat-detectors describe my-dns-threat-detector --location=global

輸出範例:

createTime: '2025-08-06T17:06:30.297586089Z'
excludedNetworks:
- projects/dns-armor-demo-project/global/networks/network-b
name: projects/dns-armor-demo-project/locations/global/dnsThreatDetectors/my-dns-threat-detector
provider: INFOBLOX
updateTime: '2025-08-27T01:14:09.666357239Z'

5. 測試設定

在本節中,您將執行下列工作:

  • 透過 SSH 連線至 VM。
  • 在 VM 上安裝 Git。
  • 複製 Infoblox 威脅偵測模擬器存放區。
  • 執行指令碼並分析產生的輸出內容。

從 VM 產生模擬的惡意 DNS 查詢,驗證設定。您應該會看到來自 network-a 的查詢記錄項目,但不會產生來自 network-b. 的記錄

1. 透過 SSH 連線至 vm-a-use4。在 Cloud Shell 中執行下列 gcloud 指令。

gcloud compute ssh vm-a-use4 --zone=us-east4-c

2. 在 VM 上安裝 Git

sudo apt-get install git -y

3. 複製Infoblox 威脅偵測模擬器存放區。

git clone https://github.com/infobloxopen/ib-threat-detection-simulator

4. 將目錄變更為模擬器的目錄。

cd ib-threat-detection-simulator/threat_detection_simulator/

5. 執行指令碼,並分析產生的輸出內容。

將指令碼設為可執行狀態。

chmod +x run.sh

執行指令碼。

./run.sh info basic

6. 輸出範例

下方的螢幕截圖顯示 network-a 中 VM 的部分指令碼輸出內容。輸出結果顯示系統偵測到 100% 的威脅。

a66c1757f8c74da6.png

下方的螢幕截圖顯示網路 b 中 VM 的部分指令碼輸出內容。輸出結果顯示偵測到的威脅比例為 0%。這是預期行為,因為在建立威脅偵測工具時,已排除 network-b。

c12d130c95c04e84.png

7. 結束 SSH 工作階段,返回 Cloud Shell

exit

6. 在記錄檔探索工具中查看威脅記錄檔

執行測試指令碼後,您可以在記錄檔探索工具中查看產生的威脅記錄,因為這些記錄會寫入 Cloud Logging。

記錄項目範例

本節提供偵測到的 DNS 威脅記錄項目範例,說明 DNS Armor 擷取的詳細資訊,包括來源 IP、查詢的網域和威脅類別。可做為參考,瞭解您要分析的記錄結構和內容。

{
  "insertId": "1izjkneb44",
  "jsonPayload": {
    "partnerId": "Infoblox",
    "detectionTime": "2025-08-08T01:49:54.092250101Z",
    "dnsQuery": {
      "authAnswer": false,
      "rdata": "random.malicious-domain.com.\t300\tIN\ta\t196.251.118.39",
      "protocol": "UDP",
      "projectNumber": "1234567890",
      "responseCode": "NOERROR",
      "queryType": "A",
      "location": "us-east4",
      "sourceIp": "10.10.0.2",
      "queryName": "random.malicious-domain.com.",
      "vmProjectNumber": "1234567890",
      "vmInstanceId": "01234567899876543210",
      "destinationIp": "",
      "queryTime": "2025-08-08T01:49:53.712692495Z"
    },
    "threatInfo": {
      "severity": "HIGH",
      "confidence": "HIGH",
      "threatDescription": "",
      "category": "EmergentDomain",
      "threatId": "Suspicious_EmergentDomain",
      "type": "Suspicious",
      "threatIndicator": "izumisv1.cc",
      "threatIndicatorType": "FQDN",
      "threat": "Suspicious",
      "threatFeed": "suspicious-noed"
    }
  },
  "resource": {
    "type": "networksecurity.googleapis.com/DnsThreatDetector",
    "labels": {
      "resource_container": "projects/1234567890",
      "id": "",
      "location": "us-east4"
    }
  },
  "timestamp": "2025-08-08T01:49:54.092250101Z",
  "severity": "INFO",
  "logName": "projects/dns-armor-demo-project/logs/networksecurity.googleapis.com%2Fdns_threat_events",
  "receiveTimestamp": "2025-08-08T01:49:55.290965780Z"
}

在記錄檔探索工具中查看記錄檔

1. 前往 Google Cloud 控制台中的「Monitoring」部分,然後選取 Logs explorer

4a90c593d7e339d8.png

2. 如要篩選所有 DNS Armor 威脅記錄,請使用下列查詢。這會根據 DNS 威脅偵測工具的資源類型篩選記錄。

resource.type="networksecurity.googleapis.com/DnsThreatDetector"

3. 篩選 us-east4 地區的記錄,並新增位置篩選器。這項查詢只會顯示在 us-east4 區域偵測到的威脅。

resource.type="networksecurity.googleapis.com/DnsThreatDetector"
resource.labels.location="us-east4"

4. 依來源網路篩選記錄:根據 DNS 查詢的來源 IP 位址篩選記錄,查看來自特定 VPC 網路的威脅。

如要查看 network-a (子網路 10.10.0.0/24 和 10.10.1.0/24) 的記錄,請按照下列步驟操作:

resource.type="networksecurity.googleapis.com/DnsThreatDetector"
(jsonPayload.dnsQuery.sourceIp:"10.10.0." OR jsonPayload.dnsQuery.sourceIp:"10.10.1.")

如要查看 network-b (子網路 10.20.0.0/24) 的記錄,請按照下列步驟操作:

resource.type="networksecurity.googleapis.com/DnsThreatDetector"
jsonPayload.dnsQuery.sourceIp:"10.20.0."

7. 清除

為避免日後產生費用,請刪除本程式碼研究室中建立的資源。執行清除指令時,請務必退出 VM 的殼層,並返回 Cloud Shell。

1. 刪除 VM。

gcloud compute instances delete vm-a-use4 --zone=us-east4-c --quiet
gcloud compute instances delete vm-a-usc1 --zone=us-central1-a --quiet
gcloud compute instances delete vm-b-use4 --zone=us-east4-c --quiet

2. 刪除防火牆規則。

gcloud compute firewall-rules delete allow-ssh-iap-a --quiet
gcloud compute firewall-rules delete allow-ssh-iap-b --quiet

3. 刪除 Cloud NAT 閘道。

gcloud compute routers nats delete nat-a-use4 --router=router-a-use4 --region=us-east4 --quiet
gcloud compute routers nats delete nat-a-usc1 --router=router-a-usc1 --region=us-central1 --quiet
gcloud compute routers nats delete nat-b-use4 --router=router-b-use4 --region=us-east4 --quiet

4. 刪除 Cloud Router

gcloud compute routers delete router-a-use4 --region=us-east4 --quiet
gcloud compute routers delete router-a-usc1 --region=us-central1 --quiet
gcloud compute routers delete router-b-use4 --region=us-east4 --quiet

5. 刪除子網路。

gcloud compute networks subnets delete subnet-a-use4 --region=us-east4 --quiet
gcloud compute networks subnets delete subnet-a-usc1 --region=us-central1 --quiet
gcloud compute networks subnets delete subnet-b-use4 --region=us-east4 --quiet

6. 刪除 DNS 威脅偵測工具。

gcloud beta network-security dns-threat-detectors delete my-dns-threat-detector --location=global --quiet

7. 刪除虛擬私有雲。

gcloud compute networks delete network-a --quiet
gcloud compute networks delete network-b --quiet

8. 恭喜

恭喜!您已成功設定、部署及測試 DNS Armor 威脅偵測工具。您已獲得實務經驗,瞭解如何保護 Google Cloud 環境免於 DNS 威脅。

在本程式碼研究室中,您已完成下列事項:

  • 已佈建包含多個 VPC、子網路和虛擬機器的網路環境。
  • 使用 Cloud NAT 為私人 VM 設定網際網路輸出。
  • 部署 DNS Armor 威脅偵測工具,並瞭解如何排除特定網路。
  • 模擬 DNS 威脅,並驗證威脅偵測設定。
  • 在 Logs Explorer 中分析威脅記錄,找出並瞭解惡意 DNS 活動。

後續步驟

參考文件