1. 簡介與總覽
DNS Armor 採用 Infoblox 技術,是全代管服務,可為 Google Cloud 工作負載提供 DNS 層級安全防護。這項工具的進階威脅偵測功能旨在偵測攻擊鏈最早的惡意活動 (DNS 查詢),且不會增加作業複雜度或效能負擔。
本程式碼研究室提供逐步操作說明,協助您設定及測試 DNS Armor 服務。您將設定必要的網路基礎架構、建立威脅偵測工具、模擬 DNS 威脅來測試服務,最後使用記錄檔探索工具分析威脅記錄。
建構項目
在本程式碼研究室中,您將佈建下列資源:
- 兩個虛擬私有雲網路:
network-a和network-b network-a將包含us-east4和us-central1地區的子網路和虛擬機器。network-b會包含子網路和虛擬機器,且僅限於us-east4。- 設定為檢查 DNS 查詢的 DNS Armor 進階威脅偵測工具。

課程內容
- 如何佈建必要的網路資源,包括虛擬私有雲和虛擬機器。
- 如何部署進階威脅偵測工具,並排除特定網路。
- 如何使用威脅模擬指令碼驗證威脅偵測設定。
- 如何使用記錄檔探索工具分析威脅記錄。
軟硬體需求
- Google Cloud 專案。
- 存取
gcloud指令列工具。
2. 必要條件
在本節中,您將執行下列工作:
- 確認 Google Cloud 專案符合必要的機構政策限制。
- 確認使用者帳戶具備必要的 IAM 角色和權限。
- 啟用本程式碼研究室所需的 Google Cloud API。
- 將
roles/logging.viewer身分與存取權管理角色指派給 Compute Engine 服務帳戶。
機構政策限制
如要順利完成本程式碼研究室,請確認專案套用的機構政策限制。某些政策可能會阻礙必要資源的佈建作業。下列限制可能會影響本程式碼研究室的設定:
constraints/gcp.resourceLocations:限制可建立資源的區域;本程式碼研究室需要us-east4和us-central1。constraints/compute.vmExternalIpAccess:禁止建立具有公開 IP 位址的虛擬機器,以免您未按照程式碼研究室使用--no-address標記,導致設定受到干擾。constraints/compute.shieldedVm:強制建立受防護的 VM,但 Codelab 的 VM 建立指令並未指定這項設定,因此可能會導致錯誤。constraints/gcp.restrictServiceUsage:限制可啟用的 Google Cloud API,如果不允許compute.googleapis.com、networksecurity.googleapis.com、logging.googleapis.com和monitoring.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-a和network-b),並使用自訂子網路。 - 在
network-a和network-b中,設定 Cloud Router 和 Cloud NAT,以進行網際網路輸出。 - 建立防火牆規則,允許從 IAP 的 IP 範圍透過 SSH 存取 VM (適用於
network-a和network-b)。 - 在
network-a和network-b中佈建沒有公開 IP 位址的 Linux 虛擬機器。
建立虛擬私有雲和子網路
1. 在 us-east4 和 us-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% 的威脅。

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

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。

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 活動。