VPC सर्विस कंट्रोल से जुड़ा बेसिक ट्यूटोरियल II - इग्रेस डेटा ट्रैफ़िक से जुड़ी समस्या को हल करना

1. परिचय

VPC सर्विस कंट्रोल (VPC-SC), Google Cloud में संगठन के लेवल पर मौजूद सुरक्षा सेटिंग है. इसकी मदद से एंटरप्राइज़ ग्राहकों को, डेटा बाहर निकाले जाने के जोखिमों को कम करने में मदद मिलती है. VPC सर्विस कंट्रोल, मल्टी-टेनेंट सेवाओं को ज़ीरो-ट्रस्ट स्टाइल ऐक्सेस की सुविधा देते हैं, ताकि क्लाइंट अनुमति वाले आईपी, क्लाइंट कॉन्टेक्स्ट, और डिवाइस पैरामीटर के ऐक्सेस पर पाबंदी लगा सकें. साथ ही, इंटरनेट और अन्य सेवाओं से मल्टी-टेनेंट सेवाओं से कनेक्ट करते समय, जान-बूझकर और अनजाने में हुए नुकसान, दोनों को कम किया जा सकता है. जैसा कि हमने VPC सर्विस कंट्रोल बेसिक ट्यूटोरियल I में देखा, आपके पास VPC सर्विस कंट्रोल की मदद से ऐसे पेरीमीटर बनाने का विकल्प होता है जो साफ़ तौर पर बताई गई सेवाओं के डेटा और संसाधनों की सुरक्षा करते हैं.

इस ट्यूटोरियल का मकसद ये है:

  • VPC सर्विस कंट्रोल की बुनियादी बातें समझना
  • सर्विस पेरीमीटर अपडेट करें और ड्राई-रन मोड का इस्तेमाल करके उसकी जांच करें
  • VPC सर्विस कंट्रोल की मदद से, दो सेवाओं को सुरक्षित रखना
  • Cloud Storage से किसी ऑब्जेक्ट को लिस्ट करते समय, VPC सर्विस कंट्रोल से होने वाले इग्रेस डेटा ट्रैफ़िक के उल्लंघन की समस्या को हल करना

2. सेटअप और ज़रूरी शर्तें

इस ट्यूटोरियल के लिए हमें पहले से दी गई इन शर्तों की ज़रूरत है:

  • GCP व्यवस्थित करना.
  • संगठन के तहत आने वाला फ़ोल्डर.
  • एक ही संगठन में दो GCP प्रोजेक्ट, फ़ोल्डर में डाले जा सकते हैं.
  • संगठन के लेवल पर ज़रूरी अनुमतियां.
  • दोनों प्रोजेक्ट के लिए बिलिंग खाता.
  • VPC सर्विस कंट्रोल बेसिक ट्यूटोरियल I VPC सर्विस कंट्रोल और ऐक्सेस कॉन्टेक्स्ट मैनेजर सेटअप.

dbec101f41102ca2.png

संसाधनों का सेटअप

  1. "संसाधनों का सेटअप" में बताए गए तरीके से संसाधनों को सेट अप करें VPC सर्विस कंट्रोल बेसिक ट्यूटोरियल I का सेक्शन
  2. पुष्टि करें कि आपके पास Cloud Storage को मैनेज करने के लिए ज़रूरी अनुमतियां हैं.
  3. इस ट्यूटोरियल में हम क्लाउड कंसोल के बजाय सीएलआई का इस्तेमाल करेंगे. किसी एक डेवलपमेंट एनवायरमेंट में, gcloud सीएलआई सेट अप करें:
  • Cloud Shell: पहले से सेट gcloud सीएलआई के साथ ऑनलाइन टर्मिनल का इस्तेमाल करने के लिए, Cloud Shell को चालू करें.

अपने Cloud कंसोल के सबसे ऊपर दाएं कोने में मौजूद आइकॉन पर क्लिक करके Cloud Shell को चालू करें. सेशन को शुरू होने में कुछ सेकंड लग सकते हैं. ज़्यादा जानकारी के लिए, Cloud Shell की गाइड देखें.

a0ceb29950db4eac.png

लागत

आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, बिलिंग से बचने के लिए संसाधनों को बंद करें. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त में आज़माने वाले प्रोग्राम में शामिल हो सकते हैं.

वीएम इंस्टेंस और Cloud Storage ऑब्जेक्ट ही सिर्फ़ ऐसे संसाधन हैं जिनके लिए लागत जनरेट होगी. वीएम इंस्टेंस की अनुमानित कीमत, प्राइसिंग कैलकुलेटर में देखी जा सकती है. Cloud Storage की अनुमानित कीमत, कीमतों की इस सूची में देखी जा सकती है.

3. स्टोरेज बकेट और ऑब्जेक्ट बनाना

जैसा कि पहले बताया गया है, हम पिछले ट्यूटोरियल में बनाए गए संसाधनों का फिर से इस्तेमाल करेंगे. इसलिए, हम आगे बढ़ें और Cloud Storage बकेट बनाना जारी रखें. इस ट्यूटोरियल में हम कंसोल के बजाय, gcloud सीएलआई का इस्तेमाल करेंगे.

  1. Google Console में, ProjectX चुनें. इस प्रोजेक्ट में, हम स्टोरेज बकेट और ऑब्जेक्ट बनाएंगे.
  2. यह पक्का करें कि आपने क्लाउड शेल को ProjectX का इस्तेमाल करने के लिए सेट किया है. इसके लिए, यह निर्देश दिया गया है:
gcloud config set project PROJECT_ID
  1. अपने डेवलपमेंट एनवायरमेंट में, नीचे दिया गया कमांड चलाएं:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
  1. कोई स्टोरेज ऑब्जेक्ट बनाएं, ताकि हम उसे ProjectZ में मौजूद VM इंस्टेंस से पढ़ सकें. हम एक .txt फ़ाइल बनाएंगे.
nano hello.txt 

टेक्स्ट फ़ाइल में जो चाहें वह जोड़ें.

  1. ऑब्जेक्ट को बकेट में अपलोड करें.
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
  1. ऑब्जेक्ट को शामिल करके पुष्टि करें कि वह बकेट में अपलोड हो गया है.
gcloud storage ls gs://BUCKET_NAME

आपको कंसोल में, hello.txt फ़ाइल ज़रूर दिखेगी.

4. Protect Cloud Storage API

पिछले कोडलैब में, हमने एक पेरीमीटर और सुरक्षित Compute Engine API बनाया था. इस कोडलैब में, हम अपने ड्राई रन मोड के पेरीमीटर में बदलाव करेंगे और Cloud Storage जोड़ेंगे. इससे हमें ऑडिट लॉग में VPC सर्विस कंट्रोल से जुड़े उल्लंघनों की जानकारी देकर, पेरीमीटर की सुरक्षा के असर का पता लगाने में मदद मिलेगी. हालांकि, इन संसाधनों को तब तक ऐक्सेस किया जा सकेगा, जब तक हम पेरीमीटर को लागू नहीं करते.

  1. Google Console में, अपना संगठन चुनें; VPC सर्विस कंट्रोल ऐक्सेस करें. पक्का करें कि आप संगठन के दायरे में हों.
  2. Cloud Shell खोलें और ड्राई रन पेरीमीटर "SuperProtection" को अपडेट करें को पिछले लैब में बनाया गया था:
gcloud access-context-manager perimeters dry-run update SuperProtection --policy=POLICY --add-restricted-services=storage.googleapis.com
  1. पेरीमीटर के बारे में जानकारी देकर पुष्टि करें कि Cloud Storage API को अपडेट कर दिया गया है
gcloud access-context-manager perimeters dry-run describe SuperProtection --policy=POLICY 

आउटपुट में, आपको Cloud Storage API का नाम, पाबंदी वाली सेवाओं की सूची में दिखेगा

साथ ही, Compute Engine API के साथ काम करेगा, लेकिन "-vpcAccessibleServices: {}" लेबल" में:

2025ddc01a2e9a81.png

5. पुष्टि करें कि Cloud Storage API को सुरक्षित कर लिया गया है

ड्राई रन मोड में, पुष्टि करें कि "सुपरप्रोटेक्टेशन" पेरीमीटर हमें ऑब्जेक्ट को ProjectZ में बनाए गए वीएम इंस्टेंस से ProjectX में शामिल करके अस्वीकार करने का दिखा रहा है, जो स्टोरेज बकेट को होस्ट कर रहा है

  1. Cloud Console में, प्रोजेक्ट सिलेक्टर पर जाएं और ProjectZ चुनें. इसके बाद, Compute Engine > पर जाएं VM इंस्टेंस.
  2. VM इंस्टेंस से कनेक्ट करने और इसकी कमांड लाइन को ऐक्सेस करने के लिए, एसएसएच बटन पर क्लिक करें.

5ca02149b78c11f9.png

  1. उस hello.txt फ़ाइल की सूची बनाएं जिसे हमने पहले अपलोड किया था.
gcloud storage ls gs://BUCKET_NAME

Cloud Storage API को ड्राई रन मोड में सुरक्षित किया जाता है, इसलिए संसाधनों की सूची बनाई जा सकती है. हालांकि, ProjectZ ऑडिट लॉग में गड़बड़ी का मैसेज दिखना ज़रूरी है.

  1. ProjectZ में लॉग एक्सप्लोरर एपीआई पर जाएं और VPC सर्विस कंट्रोल की आखिरी गड़बड़ी का मैसेज देखें. इस फ़िल्टर का इस्तेमाल करके, वह लॉग देखा जा सकता है जिसे हम ढूंढ रहे हैं:
protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS"
"(Dry Run Mode) Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:UNIQUE_ID"

यह फ़िल्टर हमें ड्राई-रन मोड में हुए पिछले उल्लंघन को दिखाएगा, जो Cloud Storage से संबंधित है. यहां एक उदाहरण दिया गया है, जिससे पता चलता है कि लॉग कैसा दिखता है. साथ ही, ProjectX में मौजूद बकेट में कॉन्टेंट को लिस्ट करने की कोशिश करते समय, हम यह पुष्टि कर सकते हैं कि उल्लंघन एक इग्रेस डेटा ट्रैफ़िक है.

egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTX_ID"
sourceType: "Network"
targetResource: "projects/PROJECTZ_ID"
}
]
resourceNames: [
0: "projects//buckets/BUCKET_NAME"
]
securityPolicyInfo: {
organizationId: "ORGANIZATION_ID"
servicePerimeterName: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
vpcServiceControlsUniqueId: "UNIQUE_ID"
}
methodName: "google.storage.objects.list"
  1. हमने इस बात की पुष्टि की है कि Cloud Storage के लिए एपीआई कॉल से VPC सर्विस कंट्रोल का उल्लंघन हुआ है, इसलिए हम नए कॉन्फ़िगरेशन के साथ पेरीमीटर को लागू करेंगे. Cloud Shell खोलें और ड्राई-रन पेरीमीटर को लागू करें:
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
  1. एसएसएच का इस्तेमाल करके वीएम इंस्टेंस से कनेक्ट करें. साथ ही, स्टोरेज बकेट को फिर से लिस्ट करें, ताकि यह पुष्टि की जा सके कि ड्राय-रन पेरीमीटर को सही तरीके से लागू किया गया है.
gcloud storage ls gs://BUCKET_NAME

हमें स्टोरेज ऑब्जेक्ट की सूची के बजाय, वीएम सीएलआई में VPC सर्विस कंट्रोल उल्लंघन की जानकारी मिलेगी:

ERROR: (gcloud.storage.ls) User [PROJECT_NUMBER-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:"UNIQUE_ID"

हमने VPC सर्विस कंट्रोल का इस्तेमाल करके, डेटा बाहर निकाले जाने पर रोक लगाई है, ताकि डेटा को पढ़ने या उसे पेरीमीटर के बाहर के किसी संसाधन में कॉपी करने से रोका जा सके.

6. सूची अस्वीकार होने की समस्या हल करना.

हम वीएम इंस्टेंस सीएलआई से मिले अस्वीकार किए जाने की समस्या को हल करने वाले हैं. ऑडिट लॉग की जांच करें और VPC सर्विस कंट्रोल का यूनीक आईडी देखें.

  1. प्रोजेक्ट सिलेक्टर पर जाएं और ProjectZ को चुनें.
  2. लॉग एक्सप्लोरर में दी गई क्वेरी का इस्तेमाल करके, ऑडिट लॉग में VPC सर्विस कंट्रोल यूनीक आईडी ढूंढें:
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"

ऐसा करने पर, VPC सर्विस कंट्रोल के सभी ऑडिट लॉग दिखेंगे. हम गड़बड़ी के आखिरी लॉग की जांच करेंगे. यह एपीआई कॉल, VM इंस्टेंस से किया गया है. इसलिए, मुख्य आईडी, Compute Engine का सेवा खाता "PROJECT_NUMBER-compute@developer.gserviceaccount.com" होना चाहिए

हमारे पास पहले से ही VPC सर्विस कंट्रोल यूनीक आईडी है. इसलिए, हम इस फ़िल्टर का इस्तेमाल करके, सीधे पसंदीदा लॉग पाने के लिए इसका इस्तेमाल कर सकते हैं:

protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
  1. VPC सर्विस कंट्रोल हेडर पर क्लिक करें और "अस्वीकार किए जाने की समस्या हल करें" चुनें इससे VPC सर्विस कंट्रोल समस्या हल करने वाला टूल खुल जाएगा.

यह एपीआई हमें आसान यूज़र इंटरफ़ेस (यूआई) में, उल्लंघन की वजह दिखाएगा. साथ ही, दूसरी ज़रूरी चीज़ों के साथ-साथ यह भी दिखाएगा कि क्या यह उल्लंघन या इग्रेस डेटा ट्रैफ़िक का उल्लंघन था.

इस अभ्यास में, हम इन बातों पर चर्चा करेंगे:

authenticationInfo: {
principalEmail: "PROJECT_ID-compute@developer.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTZ_ID"
sourceType: "Network"
targetResource: "projects/PROJECTX_ID"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

यह जानकारी हमारे लिए काफ़ी है कि हमें एक इग्रेस डेटा ट्रैफ़िक का नियम बनाना होगा, ताकि Compute Engine सेवा खाते को ProjectZ से ProjectX में स्टोरेज बकेट को ऐक्सेस करने की अनुमति मिल सके. साथ ही, हम देख सकते हैं कि नेटवर्क एक ही पेरीमीटर में नहीं है. इसलिए, हमें सेवाओं को VPC कम्यूनिकेशन की अनुमति देनी होगी और सभी सेवा पेरीमीटर के बीच डेटा शेयर करना होगा.

  1. Cloud Shell को चालू करें और टेक्स्ट एडिटर का इस्तेमाल करके, इग्रेस डेटा ट्रैफ़िक के नियम वाली .yaml फ़ाइल बनाएं.
nano egresstorage.yaml 
- egressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: \"*\"
    resources:
    - projects/PROJECTX_ID
 egressFrom:
    identities:
    - serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com
  1. ProjectZ को सुरक्षित रखने के लिए, इनग्रेस डेटा ट्रैफ़िक की नीति अपडेट करें.
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY 

अब हम वीएम इंस्टेंस से बकेट को ऐक्सेस करने की फिर से कोशिश कर सकते हैं.

  1. Cloud Console में, प्रोजेक्ट सिलेक्टर पर जाएं और ProjectZ चुनें. इसके बाद, Compute Engine > पर जाएं VM इंस्टेंस.
  2. VM इंस्टेंस से कनेक्ट करने और इसकी कमांड लाइन को ऐक्सेस करने के लिए, एसएसएच बटन पर क्लिक करें.
  3. वीएम सीएलआई में शामिल होने के बाद, स्टोरेज बकेट में ऑब्जेक्ट को शामिल करने की कोशिश करें.
gcloud storage ls gs://BUCKET_NAME/

आपको गड़बड़ी का यह मैसेज दिखेगा:

ERROR: (gcloud.storage.ls) User [PROJECT_ID-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): PROJECT_ID-compute@developer.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist).
  1. स्टोरेज बकेट में ऑब्जेक्ट को लिस्ट करने के लिए, हमें Compute Engine के सेवा खाते को ऑब्जेक्ट रीडर की अनुमति देनी होगी.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
  1. एक बार फिर से, वर्चुअल मशीन इंस्टेंस के सीएलआई से hello.txt फ़ाइल को लिस्ट करने की कोशिश करते हैं .
gcloud storage ls gs://BUCKET_NAME/
.
.
gs://BUCKET_NAME/hello.txt

अब हम VPC सर्विस कंट्रोल की अनुमति के उल्लंघन के बिना ऑब्जेक्ट को सूची में जोड़ सकते हैं. हालांकि, फ़ाइल डाउनलोड करने के बारे में क्या ख्याल है? आइए, इसे आज़माकर देखें.

gcloud storage cp gs://BUCKET_NAME/hello.txt /home/${USER}

साथ ही, हमें नीचे दिया गया आउटपुट मिलेगा

Copying gs://BUCKET_NAME/hello.txt to file:///home/${USER}
 Completed files 1/1 | 54.0B/54.0B  

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

सेवा का इस्तेमाल न किए जाने पर, VPC सर्विस कंट्रोल का इस्तेमाल करने के लिए अलग से कोई शुल्क नहीं लिया जाता. हालांकि, इस लैब में इस्तेमाल किए गए सेटअप को हटाने का सबसे सही तरीका है. शुल्क देने से बचने के लिए, अपना वीएम इंस्टेंस और/या क्लाउड प्रोजेक्ट भी मिटाए जा सकते हैं. Cloud प्रोजेक्ट मिटाने पर, उसमें इस्तेमाल किए गए सभी संसाधनों की बिलिंग बंद हो जाएगी.

  1. वीएम इंस्टेंस को मिटाने के लिए, वीएम इंस्टेंस के नाम की बाईं ओर मौजूद चेकबॉक्स को चुनें. इसके बाद, मिटाएं पर क्लिक करें.

da0abf0894fe03cd.png

  1. परिधि को हटाने के लिए, निम्न चरणों को पूरा करें:
  • Google Cloud Console में, सुरक्षा पर क्लिक करें. इसके बाद, संगठन के दायरे में VPC सेवा नियंत्रण पर क्लिक करें.
  • VPC सर्विस कंट्रोल पेज पर, जिस पेरीमीटर को मिटाना है उससे जुड़ी टेबल की लाइन में, "मिटाएं" आइकॉन पर क्लिक करें
  1. ऐक्सेस लेवल मिटाने के लिए, नीचे दिया गया तरीका अपनाएं:
  • Google Cloud Console में, फ़ोल्डर के स्कोप में ऐक्सेस कॉन्टेक्स्ट मैनेजर पेज खोलें.
  • ग्रिड में, जिस ऐक्सेस लेवल को मिटाना है उसकी लाइन में, "मिटाएं आइकॉन" पर क्लिक करें. इसके बाद, मिटाएं पर क्लिक करें.
  1. स्टोरेज ऑब्जेक्ट और बकेट को मिटाने के लिए, नीचे दिया गया तरीका अपनाएं:
  • Google Cloud Console में, Cloud Storage बकेट पेज खोलें .
  • आपने जो बकेट बनाई है उसके बगल में मौजूद चेकबॉक्स को चुनें.
  • मिटाएं पर क्लिक करें.
  • इसके बाद, खुलने वाली विंडो में पुष्टि करें कि आपको बकेट को मिटाना है.
  • मिटाएं पर क्लिक करें.
  1. प्रोजेक्ट को बंद करने के लिए, यह तरीका अपनाएं:

8. बधाई हो!

इस कोडलैब में, आपने VPC सर्विस कंट्रोल ड्राय रन पेरीमीटर को अपडेट किया है और उसे लागू किया है. साथ ही, इससे जुड़ी समस्या हल की है.

ज़्यादा जानें

लाइसेंस

इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.