1. บทนำและภาพรวม
DNS Armor ซึ่งขับเคลื่อนโดย Infoblox เป็นบริการที่มีการจัดการครบวงจรซึ่งให้การรักษาความปลอดภัยระดับ DNS สำหรับภาระงาน Google Cloud เครื่องตรวจจับภัยคุกคามขั้นสูงได้รับการออกแบบมาเพื่อตรวจหากิจกรรมที่เป็นอันตรายตั้งแต่จุดแรกสุดในห่วงโซ่การโจมตี ซึ่งก็คือคำขอ DNS โดยไม่ต้องเพิ่มความซับซ้อนในการปฏิบัติงานหรือค่าใช้จ่ายด้านประสิทธิภาพ
Codelab นี้มีวิธีการทีละขั้นตอนในการกำหนดค่าและทดสอบบริการ DNS Armor คุณจะต้องตั้งค่าโครงสร้างพื้นฐานของเครือข่ายที่จำเป็น สร้างเครื่องมือตรวจหาภัยคุกคาม ทดสอบบริการโดยจำลองภัยคุกคาม DNS และสุดท้ายคือวิเคราะห์บันทึกภัยคุกคามโดยใช้ Logs Explorer
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะจัดสรรทรัพยากรต่อไปนี้
- เครือข่าย VPC 2 รายการ ได้แก่
network-aและnetwork-b network-aจะรวมเครือข่ายย่อยและเครื่องเสมือนในภูมิภาคus-east4และus-central1network-bจะมีซับเน็ตและเครื่องเสมือนเฉพาะในus-east4- เครื่องมือตรวจจับภัยคุกคามขั้นสูงของ DNS Armor ที่กำหนดค่าให้ตรวจสอบคำค้นหา DNS

สิ่งที่คุณจะได้เรียนรู้
- วิธีจัดสรรทรัพยากรเครือข่ายที่จำเป็น รวมถึง VPC และเครื่องเสมือน
- วิธีติดตั้งใช้งานเครื่องตรวจจับภัยคุกคามขั้นสูงและยกเว้นเครือข่ายที่เฉพาะเจาะจง
- วิธีตรวจสอบการกำหนดค่าการตรวจหาภัยคุกคามโดยใช้สคริปต์การจำลองภัยคุกคาม
- วิธีวิเคราะห์บันทึกภัยคุกคามใน Logs Explorer
สิ่งที่คุณต้องมี
- โปรเจ็กต์ Google Cloud
- สิทธิ์เข้าถึงเครื่องมือบรรทัดคำสั่ง
gcloud
2. ข้อกำหนดเบื้องต้น
ในส่วนนี้ คุณจะทำงานต่อไปนี้
- ตรวจสอบว่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google เป็นไปตามข้อจำกัดของนโยบายองค์กรที่จำเป็น
- ยืนยันว่าบัญชีผู้ใช้ของคุณมีบทบาทและสิทธิ์ IAM ที่จำเป็น
- เปิดใช้ Google Cloud APIs ที่จำเป็นสำหรับ Codelab นี้
- มอบหมาย
roles/logging.viewerบทบาท IAM ให้กับบัญชีบริการ Compute Engine
ข้อจำกัดของนโยบายองค์กร
โปรดยืนยันข้อจํากัดของนโยบายขององค์กรที่ใช้กับโปรเจ็กต์เพื่อให้ Codelab นี้เสร็จสมบูรณ์ นโยบายบางอย่างอาจขัดขวางการจัดสรรทรัพยากรที่จำเป็น ข้อจำกัดต่อไปนี้อาจส่งผลต่อการกำหนดค่าของ Codelab นี้
constraints/gcp.resourceLocations: จำกัดภูมิภาคที่คุณสร้างทรัพยากรได้ Codelab ต้องใช้us-east4และus-central1constraints/compute.vmExternalIpAccess: ป้องกันการสร้างเครื่องเสมือนที่มีที่อยู่ IP สาธารณะ ซึ่งอาจรบกวนการตั้งค่าหากคุณไม่ปฏิบัติตามการใช้แฟล็ก--no-addressของ Codelabconstraints/compute.shieldedVm: บังคับใช้การสร้าง VM ที่มีการป้องกัน ซึ่งคำสั่งสร้าง VM ของ Codelab ไม่ได้ระบุไว้ จึงอาจทำให้เกิดข้อผิดพลาดconstraints/gcp.restrictServiceUsage: จำกัด Cloud APIs ของ Google Cloud ที่เปิดใช้ได้ และอาจบล็อก Codelab หากไม่อนุญาตcompute.googleapis.com,networksecurity.googleapis.com,logging.googleapis.comและmonitoring.googleapis.com
บทบาทและสิทธิ์ของ IAM
โปรดยืนยันบทบาทและสิทธิ์ IAM ที่มอบให้กับผู้ใช้เพื่อให้ Codelab นี้เสร็จสมบูรณ์ คุณต้องมีบทบาทและสิทธิ์ IAM ต่อไปนี้จึงจะทำ Codelab นี้ให้เสร็จสมบูรณ์ได้
- ผู้ดูแลการใช้บริการ (
roles/serviceusage.serviceUsageAdmin): เพื่อเปิดใช้ Cloud APIs ที่จำเป็นสำหรับ Codelab - ผู้ดูแลระบบเครือข่าย Compute (
roles/compute.networkAdmin): เพื่อสร้างและจัดการเครือข่าย VPC, เครือข่ายย่อย และ Cloud NAT - ผู้ดูแลระบบความปลอดภัยของ Compute (
roles/compute.securityAdmin): เพื่อกำหนดค่ากฎไฟร์วอลล์สำหรับการเข้าถึง SSH ในเครื่องเสมือน - ผู้ดูแลระบบอินสแตนซ์ Compute (v1) (
roles/compute.instanceAdmin.v1): เพื่อสร้างและจัดการเครื่องเสมือนที่จำเป็นสำหรับแล็บ - ผู้ใช้อุโมงค์ข้อมูลที่รักษาความปลอดภัยด้วย IAP (
roles/iap.tunnelResourceAccessor): เพื่อเชื่อมต่อกับเครื่องเสมือนโดยใช้ SSH ผ่าน Identity-Aware Proxy (IAP) - ผู้ดูแลระบบความปลอดภัยของเครือข่าย (
roles/networksecurity.admin): เพื่อสร้างและจัดการเครื่องมือตรวจหาภัยคุกคามของ DNS Armor - ผู้ดูบันทึก (
roles/logging.viewer): เพื่อดูและวิเคราะห์บันทึกภัยคุกคามในเครื่องมือสำรวจบันทึก
Google Cloud APIs
โปรดตรวจสอบว่าได้เปิดใช้ Google Cloud API ที่จำเป็นในโปรเจ็กต์แล้ว
1. เปิดใช้ API ที่จำเป็นโดยเรียกใช้คำสั่ง gcloud ต่อไปนี้ภายใน Cloud Shell
gcloud services enable compute.googleapis.com \
networksecurity.googleapis.com \
logging.googleapis.com \
monitoring.googleapis.com
2. ตรวจสอบว่าได้เปิดใช้ API แล้ว ให้เรียกใช้คำสั่ง gcloud ต่อไปนี้ภายใน Cloud Shell
gcloud services list --enabled
บัญชีบริการของ Compute Engine
สคริปต์การทดสอบต้องมีสิทธิ์ในการอ่านบันทึกภัยคุกคามจาก Cloud Logging เนื่องจากสคริปต์จะดำเนินการจาก VM ที่ใช้บัญชีบริการเริ่มต้นของ Compute Engine จึงต้องกำหนดบทบาท IAM ให้กับบัญชีบริการนี้roles/logging.viewer
1. ตั้งค่าตัวแปรสภาพแวดล้อม เรียกใช้คำสั่งต่อไปนี้ภายใน Cloud Shell
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
2. ให้บทบาทผู้ดูบันทึกแก่ SA ของ Compute Engine เรียกใช้คำสั่ง gcloud ต่อไปนี้ภายใน Cloud Shell
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="roles/logging.viewer"
3. การตั้งค่าสภาพแวดล้อมพื้นฐาน
ในส่วนนี้ คุณจะทำงานต่อไปนี้
- สร้างเครือข่าย VPC (
network-aและnetwork-b) ด้วยซับเน็ตที่กำหนดเอง - กำหนดค่า Cloud Router และ Cloud NAT สำหรับการรับส่งข้อมูลขาออกทางอินเทอร์เน็ตในทั้ง
network-aและnetwork-b - สร้างกฎไฟร์วอลล์เพื่ออนุญาตการเข้าถึง VM ผ่าน SSH จากช่วง IP ของ IAP สำหรับทั้ง
network-aและnetwork-b - จัดสรรเครื่องเสมือน Linux ทั้งใน
network-aและnetwork-bโดยไม่มีที่อยู่ IP สาธารณะ
สร้าง VPC และซับเน็ต
1. สร้างเครือข่าย-ก และซับเน็ตของเครือข่ายในภูมิภาค us-east4 และ us-central1 เรียกใช้คำสั่ง gcloud ต่อไปนี้ภายใน Cloud Shell
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 เรียกใช้คำสั่ง gcloud ต่อไปนี้ภายใน Cloud Shell
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. สร้าง Cloud Router และ Cloud NAT สำหรับ network-a เพื่ออนุญาตการออกอินเทอร์เน็ตสำหรับ VM ที่ไม่มี IP สาธารณะ
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. สร้าง Cloud Router และ Cloud NAT สำหรับ network-b เพื่ออนุญาตการออกอินเทอร์เน็ตสำหรับ VM ที่ไม่มี IP สาธารณะ
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 เพื่ออนุญาตการเข้าถึง SSH จากช่วง IP ของ IAP เรียกใช้คำสั่ง gcloud ต่อไปนี้ภายใน Cloud Shell
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 เพื่ออนุญาตการเข้าถึง SSH จากช่วง IP ของ IAP เรียกใช้คำสั่ง gcloud ต่อไปนี้ภายใน Cloud Shell
gcloud compute firewall-rules create allow-ssh-iap-b \
--network=network-b \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20
สร้างเครื่องเสมือน
1. สร้าง VM ของ Linux ใน network-a
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. สร้าง VM ของ Linux ใน network-b
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
ในส่วนนี้ คุณจะทำงานต่อไปนี้
- สร้างตัวตรวจจับภัยคุกคาม
- แสดงรายการ Threat Detector
- อธิบายทรัพยากร
เมื่อจัดสรร VPC, ซับเน็ต และเครื่องเสมือนแล้ว ขั้นตอนถัดไปคือการสร้างเครื่องตรวจหาภัยคุกคาม 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
- ติดตั้ง Git ใน VM
- โคลนที่เก็บเครื่องจำลองการตรวจหาภัยคุกคามของ Infoblox
- เรียกใช้สคริปต์และวิเคราะห์เอาต์พุตที่สร้างขึ้น
ตรวจสอบการตั้งค่าโดยสร้างการค้นหา DNS ที่เป็นอันตรายที่จำลองจาก VM คุณควรสังเกตรายการบันทึกสำหรับการค้นหาที่มาจาก network-a ในขณะที่จะไม่มีการสร้างบันทึกจาก network-b.
1. SSH เข้าสู่ vm-a-use4 เรียกใช้คำสั่ง gcloud ต่อไปนี้ภายใน Cloud Shell
gcloud compute ssh vm-a-use4 --zone=us-east4-c
2. ติดตั้ง Git ใน VM
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. เอาต์พุตตัวอย่าง
ภาพหน้าจอด้านล่างแสดงส่วนหนึ่งของเอาต์พุตสคริปต์จาก VM ในเครือข่าย-ก เอาต์พุตแสดงให้เห็นว่าตรวจพบภัยคุกคาม 100%

ภาพหน้าจอด้านล่างแสดงส่วนหนึ่งของเอาต์พุตสคริปต์จาก VM ในเครือข่าย-b เอาต์พุตแสดงว่าตรวจพบภัยคุกคาม 0% ซึ่งเป็นเรื่องปกติเนื่องจากมีการยกเว้น network-b ในระหว่างการสร้างเครื่องมือตรวจหาภัยคุกคาม

7. กลับไปที่ Cloud Shell โดยออกจากเซสชัน SSH
exit
6. ดูบันทึกภัยคุกคามในเครื่องมือสำรวจบันทึก
คุณดูบันทึกภัยคุกคามที่สร้างขึ้นได้ใน Logs Explorer หลังจากเรียกใช้สคริปต์การทดสอบ เนื่องจากระบบจะเขียนบันทึกไปยัง 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. ไปที่ส่วน Monitoring ในคอนโซล Google Cloud แล้วเลือก 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. กรองบันทึกตามเครือข่ายต้นทาง กรองบันทึกตามที่อยู่ IP ต้นทางของคำขอ DNS เพื่อดูภัยคุกคามที่มาจากเครือข่าย 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. ล้างข้อมูล
โปรดลบทรัพยากรที่สร้างขึ้นใน Codelab นี้เพื่อหลีกเลี่ยงการเรียกเก็บเงินในอนาคต อย่าลืมออกจาก Shell ของ 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. ลบ VPC
gcloud compute networks delete network-a --quiet
gcloud compute networks delete network-b --quiet
8. ขอแสดงความยินดี
ยินดีด้วย คุณกำหนดค่า ทำให้ใช้งานได้ และทดสอบเครื่องมือตรวจหาภัยคุกคาม DNS Armor เรียบร้อยแล้ว คุณได้รับประสบการณ์จริงในการปกป้องสภาพแวดล้อม Google Cloud จากภัยคุกคามที่อิงตาม DNS
ใน Codelab นี้ คุณจะมีสิ่งต่อไปนี้
- จัดสรรสภาพแวดล้อมเครือข่ายที่มี VPC, ซับเน็ต และเครื่องเสมือนหลายรายการ
- กำหนดค่าการรับส่งข้อมูลอินเทอร์เน็ตขาออกสำหรับ VM ส่วนตัวโดยใช้ Cloud NAT
- ติดตั้งเครื่องตรวจหาภัยคุกคาม DNS Armor และเรียนรู้วิธียกเว้นเครือข่ายที่เฉพาะเจาะจง
- จำลองภัยคุกคาม DNS และตรวจสอบการกำหนดค่าการตรวจจับภัยคุกคาม
- วิเคราะห์บันทึกภัยคุกคามในตัวสำรวจบันทึกเพื่อระบุและทำความเข้าใจกิจกรรม DNS ที่เป็นอันตราย