लॉग पर आधारित मेट्रिक और कस्टम डैशबोर्ड का इस्तेमाल करके, DNS Armor की ऐडवांस थ्रेट डिटेक्शन सुविधा के लॉग को विज़ुअलाइज़ करना

1. परिचय और अवलोकन

DNS Armor, Infoblox की मदद से काम करता है. यह पूरी तरह से मैनेज की जाने वाली सेवा है. यह आपके Google Cloud वर्कलोड के लिए, डीएनएस-लेयर की सुरक्षा उपलब्ध कराती है. इसमें मौजूद बेहतर थ्रेट डिटेक्टर को, हमला करने वाले की गतिविधि का पता लगाने के लिए डिज़ाइन किया गया है. यह हमला करने की चेन में सबसे पहले, डीएनएस क्वेरी के ज़रिए ऐसा करता है. इससे ऑपरेशनल जटिलता या परफ़ॉर्मेंस ओवरहेड नहीं बढ़ता.

इस कोडलैब में, DNS Armor सेवा को कॉन्फ़िगर और टेस्ट करने के सिलसिलेवार निर्देश दिए गए हैं. आपको ज़रूरी नेटवर्क इंफ़्रास्ट्रक्चर सेट अप करना होगा. साथ ही, थ्रेट डिटेक्टर बनाना होगा. इसके बाद, डीएनएस से जुड़े खतरों का सिम्युलेशन करके सेवा की जांच करनी होगी. आखिर में, कस्टम Cloud Monitoring डैशबोर्ड का इस्तेमाल करके, खतरे के लॉग को विज़ुअलाइज़ और उनका विश्लेषण करना होगा.

आपको क्या बनाने को मिलेगा

इस कोडलैब में, आपको ये संसाधन उपलब्ध कराए जाएंगे:

  • एक वीपीसी नेटवर्क (network-a), जिसमें सबनेट और वर्चुअल मशीनें us-east4 और us-central1 क्षेत्रों में उपलब्ध कराई गई हैं.
  • डीएनएस क्वेरी की जांच करने के लिए कॉन्फ़िगर किया गया, DNS Armor का ऐडवांस थ्रेट डिटेक्टर.
  • डीएनएस से जुड़े खतरों के लॉग के आधार पर, लॉग पर आधारित मेट्रिक.
  • डीएनएस से जुड़े खतरों के लॉग को विज़ुअलाइज़ करने के लिए, कस्टम डैशबोर्ड.

cfe28f2c17ca2660.png

आपको क्या सीखने को मिलेगा

  • ज़रूरी नेटवर्किंग रिसॉर्स, जैसे कि वीपीसी और वर्चुअल मशीनें कैसे उपलब्ध कराई जाती हैं.
  • एडवांस थ्रेट डिटेक्टर को डिप्लॉय करने और कुछ नेटवर्क को बाहर रखने का तरीका.
  • धमकी का पता लगाने की सुविधा के कॉन्फ़िगरेशन की पुष्टि करने के लिए, धमकी का सिम्युलेशन करने वाली स्क्रिप्ट का इस्तेमाल कैसे करें.
  • लॉग पर आधारित मेट्रिक और कस्टम डैशबोर्ड का इस्तेमाल करके, डीएनएस से जुड़े खतरों के लॉग को विज़ुअलाइज़ करने का तरीका.

आपको किन चीज़ों की ज़रूरत होगी

  • Google Cloud प्रोजेक्ट.
  • gcloud कमांड-लाइन टूल का ऐक्सेस.

2. ज़रूरी शर्तें

इस सेक्शन में, आपको ये काम करने होंगे:

  • पुष्टि करें कि आपका Google Cloud प्रोजेक्ट, संगठन की नीति से जुड़ी ज़रूरी शर्तों को पूरा करता हो.
  • पुष्टि करें कि आपके उपयोगकर्ता खाते के पास ज़रूरी IAM भूमिकाएं और अनुमतियां हों.
  • इस कोडलैब के लिए ज़रूरी Google Cloud API चालू करें.
  • Compute Engine सेवा खाते को roles/logging.viewer IAM की भूमिका असाइन करें.

संगठन की नीति से जुड़ी पाबंदियां

इस कोडलैब को पूरा करने के लिए, कृपया अपने प्रोजेक्ट पर लागू संगठन की नीति की पाबंदियों की पुष्टि करें. कुछ नीतियां, ज़रूरी संसाधनों को उपलब्ध कराने में रुकावट डाल सकती हैं. यहां दी गई पाबंदियों से, इस कोडलैब के कॉन्फ़िगरेशन पर असर पड़ सकता है:

  • constraints/gcp.resourceLocations: इससे उन क्षेत्रों को सीमित किया जाता है जहां संसाधन बनाए जा सकते हैं. कोडलैब के लिए us-east4 और us-central1 की ज़रूरत होती है.
  • constraints/compute.vmExternalIpAccess: यह फ़्लैग, सार्वजनिक आईपी पतों वाली वर्चुअल मशीनें बनाने से रोकता है. अगर आपने कोडलैब में --no-address फ़्लैग के इस्तेमाल से जुड़ी जानकारी को फ़ॉलो नहीं किया, तो यह फ़्लैग सेटअप में रुकावट डाल सकता है.
  • constraints/compute.shieldedVm: यह शील्ड किए गए वीएम बनाने की सुविधा को लागू करता है. हालांकि, कोडलैब के वीएम बनाने के निर्देशों में इसके बारे में नहीं बताया गया है. इससे गड़बड़ी हो सकती है.
  • constraints/gcp.restrictServiceUsage: इससे यह तय किया जा सकता है कि किन Google Cloud API को चालू किया जा सकता है. साथ ही, अगर कोडलैब में compute.googleapis.com, networksecurity.googleapis.com, logging.googleapis.com, और monitoring.googleapis.com की अनुमति नहीं है, तो यह कोडलैब को ब्लॉक कर सकता है.

IAM की भूमिकाएं और अनुमतियां

इस कोडलैब को पूरा करने के लिए, कृपया पुष्टि करें कि आपके उपयोगकर्ता को IAM की भूमिकाएं और अनुमतियां दी गई हैं. इस कोडलैब को पूरा करने के लिए, IAM की इन भूमिकाओं और अनुमतियों की ज़रूरत होती है.

  • सेवा के इस्तेमाल से जुड़ा एडमिन (roles/serviceusage.serviceUsageAdmin): कोडलैब के लिए ज़रूरी Google Cloud API चालू करने के लिए.
  • Compute Network Admin (roles/compute.networkAdmin): वीपीसी नेटवर्क, सबनेट, और Cloud NAT बनाने और मैनेज करने के लिए.
  • Compute Security Admin (roles/compute.securityAdmin): वर्चुअल मशीनों के एसएसएच ऐक्सेस के लिए फ़ायरवॉल के नियम कॉन्फ़िगर करने के लिए.
  • Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1): लैब के लिए ज़रूरी वर्चुअल मशीनें बनाने और उन्हें मैनेज करने के लिए.
  • IAP-सुरक्षित टनल का इस्तेमाल करने वाला व्यक्ति (roles/iap.tunnelResourceAccessor): इस भूमिका को असाइन करने पर, उपयोगकर्ता आइडेंटिटी-अवेयर प्रॉक्सी (IAP) के ज़रिए एसएसएच का इस्तेमाल करके वर्चुअल मशीनों से कनेक्ट कर सकता है.
  • नेटवर्क सुरक्षा एडमिन (roles/networksecurity.admin): डीएनएस आर्मर थ्रेट डिटेक्टर बनाने और मैनेज करने के लिए.
  • लॉग व्यूअर (roles/logging.viewer): Logs Explorer में थ्रेट लॉग देखने और उनका विश्लेषण करने के लिए.

Google Cloud API

कृपया पक्का करें कि आपके प्रोजेक्ट में ज़रूरी Google Cloud API चालू हों.

1. ज़रूरी एपीआई चालू करें. इसके बाद, Cloud Shell में यहां दी गई gcloud कमांड चलाएं.

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

2. पक्का करें कि एपीआई चालू हों. इसके बाद, Cloud Shell में ये gcloud कमांड चलाएं.

gcloud services list --enabled

Compute Engine सेवा खाता

थ्रेट सिमुलेशन स्क्रिप्ट को Cloud Logging से जनरेट किए गए थ्रेट लॉग को पढ़ने और उनकी रिपोर्ट करने के लिए अनुमतियों की ज़रूरत होती है. स्क्रिप्ट को Compute Engine के डिफ़ॉल्ट सेवा खाते का इस्तेमाल करके किसी वीएम से एक्ज़ीक्यूट किया जाएगा. इसलिए, इस सेवा खाते को 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. 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-a में इंटरनेट इग्रेस के लिए, Cloud Router और Cloud NAT कॉन्फ़िगर करें.
  • network-a के लिए, आईएपी की आईपी रेंज से वीएम को एसएसएच ऐक्सेस करने की अनुमति देने वाले फ़ायरवॉल नियम बनाएं.
  • सार्वजनिक आईपी पतों के बिना, network-a में 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

इंटरनेट इग्रेस कॉन्फ़िगर करना

1. network-a के लिए Cloud Router और Cloud NAT बनाएं, ताकि सार्वजनिक आईपी के बिना वीएम के लिए इंटरनेट इग्रेस की अनुमति दी जा सके.

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 के लिए फ़ायरवॉल के नियम बनाएं, ताकि IAP की आईपी रेंज से 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

वर्चुअल मशीनें बनाना

1. network-a. मेंLinux वीएम बनाना

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. डीएनएस थ्रेट डिटेक्टर बनाना

इस सेक्शन में, आपको ये काम करने होंगे:

  • थ्रेट डिटेक्टर बनाएं.
  • खतरे का पता लगाने वाले टूल की सूची बनाएं.

वीपीसी, सबनेट, और वर्चुअल मशीनें अब उपलब्ध हो गई हैं. अब अगला चरण, डीएनएस थ्रेट डिटेक्टर बनाना है.

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. लॉग एंट्री को समझना. थ्रेट लॉग के दस्तावेज़ में, डीएनएस आर्मर लॉग में मौजूद सभी फ़ील्ड की टेबल देखी जा सकती है. इस सेक्शन में, उन फ़ील्ड के बारे में बताया गया है जिनका इस्तेमाल, लॉग पर आधारित मेट्रिक बनाने के लिए किया जाएगा.

लॉग पर आधारित मेट्रिक बनाने के लिए, इन फ़ील्ड का इस्तेमाल किया जाएगा:

  • vmInstanceId: Compute Engine वीएम इंस्टेंस का नाम. यह सिर्फ़ Compute Engine वीएम से शुरू की गई क्वेरी पर लागू होता है.
  • queryName: डीएनएस क्वेरी का नाम.
  • severity: यह पता चली गड़बड़ी की गंभीरता (ज़्यादा, सामान्य, कम या जानकारी) के बारे में बताता है. ज़्यादा जानकारी के लिए, Infoblox का Severity Level Definition लेख पढ़ें.
  • location: Google Cloud का वह क्षेत्र जहां से रिस्पॉन्स दिया गया था.
  • threat: पता लगाई गई थ्रेट का नाम.
  • threatId: थ्रेट का यूनीक आइडेंटिफ़ायर.

2. config.yaml फ़ाइलबनाएं. सबसे पहले, touch कमांड का इस्तेमाल करके, एक खाली config.yaml फ़ाइल बनाएं.

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. प्रोजेक्ट नंबर अपडेट करें. PROJECT_NUMBER प्लेसहोल्डर को अपने एनवायरमेंट वैरिएबल की वैल्यू से बदलने के लिए, यहां दिए गए sed कमांड का इस्तेमाल करें.

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

5. लॉग पर आधारित मेट्रिक बनाएं. आखिर में, मेट्रिक बनाने के लिए Cloud Shell में यह gcloud कमांड चलाएं.

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

6. कस्टम डैशबोर्ड बनाना

इस सेक्शन में, आपको ये काम करने होंगे:

  • dashboard.json फ़ाइल बनाएं.
  • कस्टम डैशबोर्ड बनाना

1. dashboard.json फ़ाइलबनाएं. सबसे पहले, touch कमांड का इस्तेमाल करके, एक खाली dashboard.json फ़ाइल बनाएं.

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. कस्टम डैशबोर्डबनाएं. Cloud Shell में, यहां दी गई gcloud कमांड चलाएं.

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

7. डीएनएस की नकली क्वेरी जनरेट करना

इस सेक्शन में, आपको ये काम करने होंगे:

  • वीएम में एसएसएच करें.
  • वीएम पर Git इंस्टॉल करें.
  • Infoblox के थ्रेट डिटेक्शन सिम्युलेटर की रिपॉज़िटरी को क्लोन करें.
  • स्क्रिप्ट चलाएं और जनरेट किए गए आउटपुट का विश्लेषण करें.

अपने वीएम से, नकली तौर पर नुकसान पहुंचाने वाली डीएनएस क्वेरी जनरेट करके सेटअप की पुष्टि करें.

1. vm-a-use4 में SSH करें. Cloud Shell में, यहां दी गई gcloud कमांड चलाएं.

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

2. वीएम पर 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 में मौजूद वीएम पर दिखता है. इस आउटपुट में, डीएनएस से जुड़े अलग-अलग तरह के खतरों का पता लगाने की दर के बारे में जानकारी दी गई है. ये ऐसे खतरे हैं जिनकी नकल टेस्ट स्क्रिप्ट ने की थी.

2ed3402eed85ff0a.png

7. एसएसएच सेशन से बाहर निकलकर,Cloud Shell पर वापस जाएं.

exit

8. कस्टम डैशबोर्ड देखना

डैशबोर्ड देखना

1. Google Cloud Console में सबसे ऊपर मौजूद खोज फ़ील्ड में, Dashboards टाइप करें. इसके बाद, सबसे ऊपर मिले नतीजों में जाकर Dashboards पर क्लिक करें.

b28134f84c44d872.png

2. खोज फ़ील्ड में DNS Armor - Custom Dashboardखोजें. इसके बाद, डैशबोर्ड खोलने के लिए DNS Armor - Custom Dashboard पर क्लिक करें.

490ec7642ef95ffc.png

3. डैशबोर्ड देखें.

4ff503f457f67399.png

डैशबोर्ड में विजेट

इस सेक्शन में, कस्टम डैशबोर्ड पर उपलब्ध अलग-अलग विजेट के बारे में बताया गया है. साथ ही, उनकी सुविधाओं और उनसे मिलने वाले डेटा के बारे में खास जानकारी दी गई है.

  • खतरे से जुड़ी जानकारी देने वाले लॉग: यह स्टैक किया गया बार चार्ट होता है. इसमें किसी प्रोजेक्ट में शामिल सभी नेटवर्क के लिए, तय समयसीमा में जनरेट हुए खतरे से जुड़ी जानकारी देने वाले लॉग दिखाए जाते हैं.
  • हर क्षेत्र के हिसाब से खतरे के लॉग: स्टैक किए गए बार चार्ट में, खतरे के लॉग दिखाए गए हैं. इन्हें क्षेत्र के हिसाब से ग्रुप किया गया है. साथ ही, इन्हें तय की गई समयावधि के हिसाब से दिखाया गया है.
  • खतरे के हिसाब से ग्रुप करना: यह एक पाई चार्ट है. इसमें, किसी तय समयावधि में खतरे के टाइप के आधार पर, खतरे के लॉग को कैटगरी में बांटा जाता है.
  • सबसे ज़्यादा बार इस्तेमाल किए गए थ्रेट आईडी की सूची: इस सूची में, किसी तय समयसीमा के दौरान सबसे ज़्यादा बार इस्तेमाल किए गए 30 थ्रेट आईडी दिखाए जाते हैं.
  • गंभीरता के हिसाब से ग्रुप करना: इस पाई चार्ट में, तय की गई समयावधि के दौरान थ्रेट लॉग को गंभीरता के स्तर के हिसाब से ग्रुप किया गया है.
  • सबसे ज़्यादा इस्तेमाल किए गए इंस्टेंस की सूची - सोर्स: इस सूची में, तय की गई समयावधि के दौरान सबसे ज़्यादा इस्तेमाल किए गए 30 इंस्टेंस आईडी (सोर्स वीएम) दिखाए जाते हैं.
  • डोमेन के हिसाब से ग्रुप करना: यह स्टैक किया गया बार चार्ट होता है. इसमें क्वेरी में मिले डोमेन नेम के हिसाब से, थ्रेट लॉग को ग्रुप किया जाता है.

9. साफ़-सफ़ाई सेवा

आने वाले समय में शुल्क से बचने के लिए, इस कोडलैब में बनाए गए संसाधनों को मिटाएं. सफ़ाई से जुड़े कमांड चलाने के दौरान, वीएम के शेल से बाहर निकलें और 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. वर्चुअल मशीनें मिटाएं.

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. डीएनएस थ्रेट डिटेक्टर मिटाएं.

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 एनवायरमेंट को सुरक्षित रखने का व्यावहारिक अनुभव मिला है. साथ ही, आपने सुरक्षा से जुड़ी अहम जानकारी के लिए, निगरानी रखने का कस्टम समाधान तैयार किया है.

इस कोडलैब में, आपके पास ये विकल्प हैं:

  • वीपीसी, सबनेट, और वर्चुअल मशीन की मदद से नेटवर्क एनवायरमेंट बनाया गया हो.
  • Cloud NAT का इस्तेमाल करके, निजी वीएम के लिए इंटरनेट इग्रेस को कॉन्फ़िगर किया गया हो.
  • DNS Armor के थ्रेट डिटेक्टर को डिप्लॉय किया गया है.
  • डीएनएस से जुड़े खतरों का सिम्युलेशन किया गया और खतरे का पता लगाने से जुड़े कॉन्फ़िगरेशन की पुष्टि की गई.
  • डीएनएस थ्रेट लॉग से कस्टम लॉग-आधारित मेट्रिक बनाई गई.
  • डीएनएस से जुड़े खतरों को विज़ुअलाइज़ और उनका विश्लेषण करने के लिए, Cloud Monitoring का कस्टम डैशबोर्ड बनाया.

आगे क्या करना है?

रेफ़रंस दस्तावेज़