การแสดงภาพบันทึกการตรวจหาภัยคุกคามขั้นสูงของ DNS Armor โดยใช้เมตริกตามบันทึกและแดชบอร์ดที่กำหนดเอง

1. บทนำและภาพรวม

DNS Armor ซึ่งขับเคลื่อนโดย Infoblox เป็นบริการที่มีการจัดการครบวงจรซึ่งให้การรักษาความปลอดภัยระดับ DNS สำหรับภาระงาน Google Cloud เครื่องตรวจจับภัยคุกคามขั้นสูงได้รับการออกแบบมาเพื่อตรวจหากิจกรรมที่เป็นอันตรายตั้งแต่จุดแรกสุดในห่วงโซ่การโจมตี ซึ่งก็คือคำขอ DNS โดยไม่ต้องเพิ่มความซับซ้อนในการปฏิบัติงานหรือค่าใช้จ่ายด้านประสิทธิภาพ

Codelab นี้มีวิธีการทีละขั้นตอนในการกำหนดค่าและทดสอบบริการ DNS Armor คุณจะต้องตั้งค่าโครงสร้างพื้นฐานของเครือข่ายที่จำเป็น สร้างเครื่องมือตรวจหาภัยคุกคาม ทดสอบบริการโดยจำลองภัยคุกคาม DNS และสุดท้ายคือแสดงภาพและวิเคราะห์บันทึกภัยคุกคามโดยใช้แดชบอร์ด Cloud Monitoring ที่กำหนดเอง

สิ่งที่คุณจะสร้าง

ใน Codelab นี้ คุณจะจัดสรรทรัพยากรต่อไปนี้

  • เครือข่าย VPC (network-a) ที่มีซับเน็ตและเครื่องเสมือนที่จัดสรรในภูมิภาค us-east4 และ us-central1
  • เครื่องมือตรวจจับภัยคุกคามขั้นสูงของ DNS Armor ที่กำหนดค่าให้ตรวจสอบคำค้นหา DNS
  • เมตริกตามบันทึกที่อิงตามบันทึกภัยคุกคาม DNS
  • แดชบอร์ดที่กำหนดเองเพื่อแสดงภาพบันทึกภัยคุกคาม DNS

cfe28f2c17ca2660.png

สิ่งที่คุณจะได้เรียนรู้

  • วิธีจัดสรรทรัพยากรเครือข่ายที่จำเป็น รวมถึง VPC และเครื่องเสมือน
  • วิธีติดตั้งใช้งานเครื่องตรวจจับภัยคุกคามขั้นสูงและยกเว้นเครือข่ายที่เฉพาะเจาะจง
  • วิธีตรวจสอบการกำหนดค่าการตรวจหาภัยคุกคามโดยใช้สคริปต์การจำลองภัยคุกคาม
  • วิธีแสดงภาพบันทึกภัยคุกคาม DNS โดยใช้เมตริกตามบันทึกและแดชบอร์ดที่กำหนดเอง

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ 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-central1
  • constraints/compute.vmExternalIpAccess: ป้องกันการสร้างเครื่องเสมือนที่มีที่อยู่ IP สาธารณะ ซึ่งอาจรบกวนการตั้งค่าหากคุณไม่ปฏิบัติตามการใช้แฟล็ก --no-address ของ Codelab
  • constraints/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 ที่มีซับเน็ตที่กำหนดเอง
  • กำหนดค่า Cloud Router และ Cloud NAT สำหรับการรับส่งข้อมูลอินเทอร์เน็ตขาออกใน network-a
  • สร้างกฎไฟร์วอลล์เพื่ออนุญาตการเข้าถึง VM ผ่าน SSH จากช่วง IP ของ IAP สำหรับ network-a
  • จัดสรรเครื่องเสมือน Linux ใน network-a โดยไม่มีที่อยู่ 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

กำหนดค่าการส่งข้อมูลขาออกทางอินเทอร์เน็ต

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

กำหนดค่ากฎไฟร์วอลล์

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

สร้างเครื่องเสมือน

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

4. สร้างตัวตรวจหาภัยคุกคาม DNS

ในส่วนนี้ คุณจะทำงานต่อไปนี้

  • สร้างตัวตรวจจับภัยคุกคาม
  • แสดงรายการ Threat Detector

เมื่อจัดสรร VPC, ซับเน็ต และเครื่องเสมือนแล้ว ขั้นตอนถัดไปคือการสร้างเครื่องตรวจหาภัยคุกคาม DNS

1. สร้างตัวตรวจจับภัยคุกคามโดยใช้คำสั่ง gcloud beta network-security dns-threat-detectors create

gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--provider=infoblox

2. แสดงรายการเครื่องมือตรวจหาภัยคุกคามเพื่อยืนยันการสร้าง

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

5. สร้างเมตริกตามบันทึก

ในส่วนนี้ คุณจะทำงานต่อไปนี้

  • ทำความเข้าใจรายการบันทึก
  • สร้างไฟล์ config.yaml
  • สร้างเมตริกตามบันทึก

1. ทำความเข้าใจรายการบันทึก คุณตรวจสอบตารางของฟิลด์ทั้งหมดในบันทึก DNS Armor ได้ในเอกสารประกอบเกี่ยวกับบันทึกภัยคุกคาม ส่วนนี้จะมุ่งเน้นที่ฟิลด์เฉพาะที่จะใช้ในการสร้างเมตริกตามบันทึก

ระบบจะใช้ฟิลด์ต่อไปนี้เพื่อสร้างเมตริกตามบันทึก

  • vmInstanceId: ชื่ออินสแตนซ์ VM ของ Compute Engine ใช้ได้เฉพาะกับคำค้นหาที่เริ่มต้นโดย VM ของ Compute Engine เท่านั้น
  • queryName: ชื่อคำขอ DNS
  • ความรุนแรง: ความรุนแรง (สูง ปานกลาง ต่ำ หรือข้อมูล) ที่เชื่อมโยงกับภัยคุกคามที่ตรวจพบ ดูข้อมูลเพิ่มเติมได้ที่คำจำกัดความระดับความรุนแรงของ Infoblox
  • location: ภูมิภาค Google Cloud ที่แสดงการตอบกลับ
  • ภัยคุกคาม: ชื่อของภัยคุกคามที่ตรวจพบ
  • threatId: ตัวระบุภัยคุกคามที่ไม่ซ้ำกัน

2. สร้างไฟล์ config.yaml ก่อนอื่น ให้สร้างไฟล์ config.yaml ที่ว่างเปล่าโดยใช้คำสั่ง touch

touch config.yaml

3. ป้อนข้อมูลในไฟล์ config.yaml ไฟล์นี้กำหนดวิธีสร้างเมตริกตามบันทึกสำหรับบันทึกภัยคุกคามของ DNS Armor โดยจะระบุรายการบันทึกที่จะกรอง ป้ายกำกับที่จะดึงออกจากรายการเหล่านั้น และพร็อพเพอร์ตี้ของเมตริกเอง

เปิดไฟล์ config.yaml ในโปรแกรมแก้ไขข้อความที่คุณเลือก แล้ววางเนื้อหาต่อไปนี้

filter: |
  resource.type="networksecurity.googleapis.com/DnsThreatDetector"
  jsonPayload.dnsQuery.projectNumber="PROJECT_NUMBER"
labelExtractors:
  InstanceId: EXTRACT(jsonPayload.dnsQuery.vmInstanceId)
  QueryName: EXTRACT(jsonPayload.dnsQuery.queryName)
  Severity: EXTRACT(jsonPayload.threatInfo.severity)
  region: EXTRACT(jsonPayload.dnsQuery.location)
  threat: EXTRACT(jsonPayload.threatInfo.threat)
  threatId: EXTRACT(jsonPayload.threatInfo.threatId)
metricDescriptor:
  labels:
  - key: InstanceId
  - key: threat
  - key: Severity
  - key: threatId
  - key: region
  - key: QueryName
  metricKind: DELTA
  unit: '1'
  valueType: INT64

4. อัปเดตหมายเลขโปรเจ็กต์ ใช้คำสั่ง sed ต่อไปนี้เพื่อแทนที่ตัวยึดตำแหน่ง PROJECT_NUMBER ด้วยค่าจากตัวแปรสภาพแวดล้อม

sed -i "s/PROJECT_NUMBER/$PROJECT_NUMBER/g" config.yaml

5. สร้างเมตริกตามบันทึก สุดท้าย ให้เรียกใช้คำสั่ง gcloud ต่อไปนี้ภายใน Cloud Shell เพื่อสร้างเมตริก

gcloud logging metrics create dns-armor-log-based-metric --config-from-file=config.yaml

6. สร้างแดชบอร์ดที่กำหนดเอง

ในส่วนนี้ คุณจะทำงานต่อไปนี้

  • สร้างไฟล์ dashboard.json
  • สร้างแดชบอร์ดที่กำหนดเอง

1. สร้างไฟล์ dashboard.json ก่อนอื่น ให้สร้างไฟล์ dashboard.json ที่ว่างเปล่าโดยใช้คำสั่ง touch

touch dashboard.json

2. ป้อนข้อมูลในไฟล์ dashboard.json dashboard.json ไฟล์จะกำหนดค่าแดชบอร์ดการตรวจสอบที่กำหนดเอง กำหนดวิดเจ็ต แสดงพร็อพเพอร์ตี้ และกำหนดวิธีแสดงภาพ รวม และกรองเมตริกที่อิงตามบันทึก

เปิดไฟล์ dashboard.json ในโปรแกรมแก้ไขข้อความที่คุณเลือก แล้ววางเนื้อหาต่อไปนี้

{
  "displayName": "DNS Armor - Custom Dashboard",
  "dashboardFilters": [],
  "description": "",
  "labels": {},
  "mosaicLayout": {
    "columns": 48,
    "tiles": [
      {
        "height": 20,
        "width": 24,
        "widget": {
          "title": "Threat Logs",
          "id": "",
          "xyChart": {
            "chartOptions": {
              "displayHorizontal": false,
              "mode": "COLOR",
              "showLegend": false
            },
            "dataSets": [
              {
                "breakdowns": [],
                "dimensions": [],
                "legendTemplate": "",
                "measures": [],
                "minAlignmentPeriod": "60s",
                "plotType": "STACKED_BAR",
                "targetAxis": "Y1",
                "timeSeriesQuery": {
                  "outputFullDuration": false,
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "crossSeriesReducer": "REDUCE_SUM",
                      "groupByFields": [],
                      "perSeriesAligner": "ALIGN_SUM"
                    },
                    "filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
                  },
                  "unitOverride": ""
                }
              }
            ],
            "thresholds": [],
            "yAxis": {
              "label": "",
              "scale": "LINEAR"
            }
          }
        }
      },
      {
        "xPos": 24,
        "height": 20,
        "width": 24,
        "widget": {
          "title": "Threat Logs per region",
          "id": "",
          "xyChart": {
            "chartOptions": {
              "displayHorizontal": false,
              "mode": "COLOR",
              "showLegend": false
            },
            "dataSets": [
              {
                "breakdowns": [],
                "dimensions": [],
                "legendTemplate": "",
                "measures": [],
                "minAlignmentPeriod": "60s",
                "plotType": "STACKED_BAR",
                "targetAxis": "Y1",
                "timeSeriesQuery": {
                  "outputFullDuration": false,
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "crossSeriesReducer": "REDUCE_SUM",
                      "groupByFields": [
                        "metric.label.\"region\""
                      ],
                      "perSeriesAligner": "ALIGN_SUM"
                    },
                    "filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
                  },
                  "unitOverride": ""
                }
              }
            ],
            "thresholds": [],
            "yAxis": {
              "label": "",
              "scale": "LINEAR"
            }
          }
        }
      },
      {
        "yPos": 20,
        "height": 20,
        "width": 24,
        "widget": {
          "title": "Group by Threat",
          "id": "",
          "pieChart": {
            "chartType": "DONUT",
            "dataSets": [
              {
                "breakdowns": [],
                "dimensions": [],
                "measures": [],
                "minAlignmentPeriod": "60s",
                "sliceNameTemplate": "",
                "timeSeriesQuery": {
                  "outputFullDuration": true,
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "crossSeriesReducer": "REDUCE_SUM",
                      "groupByFields": [
                        "metric.label.\"threat\""
                      ],
                      "perSeriesAligner": "ALIGN_SUM"
                    },
                    "filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
                  },
                  "unitOverride": ""
                }
              }
            ],
            "showLabels": false,
            "showTotal": false,
            "sliceAggregatedThreshold": 0
          }
        }
      },
      {
        "yPos": 20,
        "xPos": 24,
        "height": 20,
        "width": 24,
        "widget": {
          "title": "Top List - ThreatID",
          "timeSeriesTable": {
            "columnSettings": [
              {
                "column": "threatId",
                "visible": true
              },
              {
                "column": "threat",
                "visible": true
              },
              {
                "column": "project_id",
                "visible": false
              },
              {
                "column": "value",
                "visible": true
              }
            ],
            "dataSets": [
              {
                "minAlignmentPeriod": "60s",
                "timeSeriesQuery": {
                  "outputFullDuration": true,
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "crossSeriesReducer": "REDUCE_SUM",
                      "groupByFields": [
                        "metric.label.\"threatId\"",
                        "metric.label.\"threat\""
                      ],
                      "perSeriesAligner": "ALIGN_SUM"
                    },
                    "filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\"",
                    "pickTimeSeriesFilter": {
                      "direction": "TOP",
                      "numTimeSeries": 30,
                      "rankingMethod": "METHOD_MEAN"
                    }
                  }
                }
              }
            ],
            "metricVisualization": "BAR"
          }
        }
      },
      {
        "yPos": 40,
        "height": 20,
        "width": 24,
        "widget": {
          "title": "Group by Severity",
          "id": "",
          "pieChart": {
            "chartType": "DONUT",
            "dataSets": [
              {
                "breakdowns": [],
                "dimensions": [],
                "measures": [],
                "minAlignmentPeriod": "60s",
                "sliceNameTemplate": "",
                "timeSeriesQuery": {
                  "outputFullDuration": true,
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "crossSeriesReducer": "REDUCE_SUM",
                      "groupByFields": [
                        "metric.label.\"Severity\""
                      ],
                      "perSeriesAligner": "ALIGN_SUM"
                    },
                    "filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
                  },
                  "unitOverride": ""
                }
              }
            ],
            "showLabels": false,
            "showTotal": false,
            "sliceAggregatedThreshold": 0
          }
        }
      },
      {
        "yPos": 40,
        "xPos": 24,
        "height": 20,
        "width": 24,
        "widget": {
          "title": "Top List - Source",
          "id": "",
          "timeSeriesTable": {
            "columnSettings": [
              {
                "column": "InstanceId",
                "visible": true
              },
              {
                "column": "region",
                "visible": true
              },
              {
                "column": "project_id",
                "visible": true
              },
              {
                "column": "value",
                "visible": true
              }
            ],
            "dataSets": [
              {
                "minAlignmentPeriod": "60s",
                "tableTemplate": "",
                "timeSeriesQuery": {
                  "outputFullDuration": true,
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "crossSeriesReducer": "REDUCE_SUM",
                      "groupByFields": [
                        "metric.label.\"InstanceId\"",
                        "metric.label.\"region\""
                      ],
                      "perSeriesAligner": "ALIGN_SUM"
                    },
                    "filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\"",
                    "pickTimeSeriesFilter": {
                      "direction": "TOP",
                      "numTimeSeries": 30,
                      "rankingMethod": "METHOD_MEAN"
                    }
                  },
                  "unitOverride": ""
                }
              }
            ],
            "displayColumnType": false,
            "metricVisualization": "BAR"
          }
        }
      },
      {
        "yPos": 60,
        "height": 20,
        "width": 48,
        "widget": {
          "title": "Group by Domains",
          "id": "",
          "xyChart": {
            "chartOptions": {
              "displayHorizontal": false,
              "mode": "COLOR",
              "showLegend": false
            },
            "dataSets": [
              {
                "breakdowns": [],
                "dimensions": [],
                "legendTemplate": "",
                "measures": [],
                "minAlignmentPeriod": "60s",
                "plotType": "STACKED_BAR",
                "targetAxis": "Y1",
                "timeSeriesQuery": {
                  "outputFullDuration": false,
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "crossSeriesReducer": "REDUCE_SUM",
                      "groupByFields": [
                        "metric.label.\"QueryName\""
                      ],
                      "perSeriesAligner": "ALIGN_SUM"
                    },
                    "filter": "metric.type=\"logging.googleapis.com/user/dns-armor-log-based-metric\" resource.type=\"networksecurity.googleapis.com/DnsThreatDetector\""
                  },
                  "unitOverride": ""
                }
              }
            ],
            "thresholds": [],
            "yAxis": {
              "label": "",
              "scale": "LINEAR"
            }
          }
        }
      }
    ]
  }
}

2. สร้างแดชบอร์ดที่กำหนดเอง เรียกใช้คำสั่ง gcloud ต่อไปนี้ภายใน Cloud Shell

gcloud monitoring dashboards create --config-from-file=dashboard.json

7. สร้างการจำลองการค้นหา DNS ที่เป็นอันตราย

ในส่วนนี้ คุณจะทำงานต่อไปนี้

  • SSH เข้าสู่ VM
  • ติดตั้ง Git ใน VM
  • โคลนที่เก็บเครื่องจำลองการตรวจหาภัยคุกคามของ Infoblox
  • เรียกใช้สคริปต์และวิเคราะห์เอาต์พุตที่สร้างขึ้น

ตรวจสอบการตั้งค่าโดยสร้างการค้นหา DNS ที่เป็นอันตรายที่จำลองจาก VM

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 ภายใน network-a เอาต์พุตนี้จะแสดงรายละเอียดอัตราการตรวจหาภัยคุกคาม DNS ประเภทต่างๆ ที่สคริปต์การทดสอบจำลอง

2ed3402eed85ff0a.png

7. กลับไปที่ Cloud Shell โดยออกจากเซสชัน SSH

exit

8. ดูแดชบอร์ดที่กำหนดเอง

ดูหน้าแดชบอร์ด

1. พิมพ์แดชบอร์ดในช่องค้นหาที่ด้านบนของคอนโซล Google Cloud จากนั้นคลิกแดชบอร์ดในส่วนผลการค้นหาเด่น

b28134f84c44d872.png

2. ค้นหา DNS Armor - Custom Dashboard ในช่องค้นหา แล้วคลิก DNS Armor - Custom Dashboard เพื่อเปิดแดชบอร์ด

490ec7642ef95ffc.png

3. ดูแดชบอร์ด

4ff503f457f67399.png

วิดเจ็ตในแดชบอร์ด

ส่วนนี้จะอธิบายวิดเจ็ตต่างๆ ที่มีในแดชบอร์ดที่กำหนดเอง โดยจะแสดงภาพรวมของฟังก์ชันการทำงานและข้อมูลที่วิดเจ็ตแสดง

  • บันทึกภัยคุกคาม: แผนภูมิแท่งแบบซ้อนที่แสดงบันทึกภัยคุกคามที่สร้างขึ้นสำหรับเครือข่ายทั้งหมดที่รวมไว้ในโปรเจ็กต์ในช่วงระยะเวลาที่ระบุ
  • บันทึกภัยคุกคามต่อภูมิภาค: แผนภูมิแท่งแบบซ้อนที่แสดงบันทึกภัยคุกคามซึ่งจัดกลุ่มตามภูมิภาคในช่วงเวลาที่กำหนด
  • จัดกลุ่มตามภัยคุกคาม: แผนภูมิวงกลมที่จัดหมวดหมู่บันทึกภัยคุกคามตามประเภทภัยคุกคามภายในกรอบเวลาที่กำหนด
  • รายการยอดนิยม - ThreatID: รายการที่แสดง ThreatID 30 รายการแรกภายในกรอบเวลาที่ระบุ
  • จัดกลุ่มตามความรุนแรง: แผนภูมิวงกลมที่จัดกลุ่มบันทึกภัยคุกคามตามระดับความรุนแรงภายในกรอบเวลาที่กำหนด
  • รายการยอดนิยม - แหล่งที่มา: รายการที่แสดงรหัสอินสแตนซ์ 30 อันดับแรก (VM ต้นทาง) ภายในกรอบเวลาที่ระบุ
  • จัดกลุ่มตามโดเมน: แผนภูมิแท่งแบบซ้อนที่จัดกลุ่มบันทึกภัยคุกคามตามชื่อโดเมนที่พบในคำค้นหา

9. ล้างข้อมูล

โปรดลบทรัพยากรที่สร้างขึ้นใน Codelab นี้เพื่อหลีกเลี่ยงการเรียกเก็บเงินในอนาคต อย่าลืมออกจาก Shell ของ VM และกลับไปที่ Cloud Shell เมื่อเรียกใช้คำสั่งล้างข้อมูล

1. ลบแดชบอร์ดที่กำหนดเอง

เนื่องจากระบบจะสร้างรหัสแดชบอร์ดแบบไดนามิกเมื่อสร้าง คุณจึงต้องดึงข้อมูลชื่อทรัพยากรโดยใช้ชื่อที่แสดงก่อน

DASHBOARD_NAME=$(gcloud monitoring dashboards list --filter="displayName='DNS Armor - Custom Dashboard'" --format='value(name)')
gcloud monitoring dashboards delete $DASHBOARD_NAME --quiet

2. ลบเมตริกตามบันทึก

gcloud logging metrics delete dns-armor-log-based-metric --quiet

3. ลบ 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

4. ลบกฎไฟร์วอลล์

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

5. ลบเกตเวย์ 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

6. ลบ Cloud Router

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

7. ลบซับเน็ต

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

8. ลบตัวตรวจหาภัยคุกคาม DNS

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

9. ลบ VPC

gcloud compute networks delete network-a --quiet

10. ขอแสดงความยินดี

ยินดีด้วย คุณกำหนดค่า ปรับใช้ และแสดงภาพบันทึกการตรวจหาภัยคุกคามของ DNS Armor ได้สำเร็จแล้ว คุณได้รับประสบการณ์จริงในการปกป้องสภาพแวดล้อม Google Cloud จากภัยคุกคามที่อิงตาม DNS และการสร้างโซลูชันการตรวจสอบที่กำหนดเองเพื่อรับข้อมูลเชิงลึกด้านความปลอดภัย

ใน Codelab นี้ คุณจะมีสิ่งต่อไปนี้

  • จัดสรรสภาพแวดล้อมเครือข่ายด้วย VPC, ซับเน็ต และเครื่องเสมือน
  • กำหนดค่าการรับส่งข้อมูลอินเทอร์เน็ตขาออกสำหรับ VM ส่วนตัวโดยใช้ Cloud NAT
  • ติดตั้งใช้งานเครื่องมือตรวจหาภัยคุกคาม DNS Armor
  • จำลองภัยคุกคาม DNS และตรวจสอบการกำหนดค่าการตรวจจับภัยคุกคาม
  • สร้างเมตริกตามบันทึกที่กำหนดเองจากบันทึกภัยคุกคาม DNS
  • สร้างแดชบอร์ด Cloud Monitoring ที่กำหนดเองเพื่อแสดงภาพและวิเคราะห์ภัยคุกคาม DNS

สิ่งต่อไปที่ควรทำ

เอกสารอ้างอิง