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

Resources-setup
- VPC सर्विस कंट्रोल के बुनियादी ट्यूटोरियल I के "संसाधन-सेटअप" सेक्शन में बताए गए तरीके से संसाधन सेट अप करें
- पुष्टि करें कि आपके पास Cloud Storage को मैनेज करने के लिए ज़रूरी अनुमतियां हों.
- इस ट्यूटोरियल के लिए, हम Cloud Console के बजाय CLI का इस्तेमाल करेंगे. किसी एक डेवलपमेंट एनवायरमेंट में, gcloud सीएलआई सेट अप करें:
- Cloud Shell: अगर आपको gcloud सीएलआई के साथ ऑनलाइन टर्मिनल का इस्तेमाल करना है, तो Cloud Shell चालू करें.
अपने Cloud Console के सबसे ऊपर दाएं कोने में मौजूद आइकॉन पर क्लिक करके, Cloud Shell को चालू करें. सेशन शुरू होने में कुछ सेकंड लग सकते हैं. ज़्यादा जानकारी के लिए, Cloud Shell गाइड देखें.

- लोकल शेल: लोकल डेवलपमेंट एनवायरमेंट का इस्तेमाल करने के लिए, gcloud सीएलआई को इंस्टॉल करें और शुरू करें.
लागत
Cloud संसाधनों/एपीआई का इस्तेमाल करने के लिए, आपको Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब को पूरा करने में ज़्यादा समय नहीं लगेगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, 300 डॉलर का मुफ़्त में आज़माने का प्रोग्राम मिलता है.
सिर्फ़ VM इंस्टेंस और Cloud Storage ऑब्जेक्ट के लिए शुल्क लिया जाएगा. वीएम इंस्टेंस की अनुमानित लागत, प्राइसिंग कैलकुलेटर में देखी जा सकती है. Cloud Storage की अनुमानित लागत की जानकारी, कीमत की इस सूची में देखी जा सकती है.
3. स्टोरेज बकेट और ऑब्जेक्ट बनाना
जैसा कि हमने पहले बताया था, हम पिछले ट्यूटोरियल में बनाए गए संसाधनों का फिर से इस्तेमाल करेंगे. इसलिए, हम Cloud Storage बकेट बनाने की प्रोसेस को जारी रखेंगे. इस ट्यूटोरियल के लिए, हम कंसोल के बजाय gcloud सीएलआई का इस्तेमाल करेंगे.
- Google Console में, ProjectX चुनें. इस प्रोजेक्ट में, हम स्टोरेज बकेट और ऑब्जेक्ट बनाएंगे.
- पक्का करें कि आपने क्लाउड शेल को ProjectX का इस्तेमाल करने के लिए सेट किया हो. इसके लिए, यह निर्देश चलाएं:
gcloud config set project PROJECT_ID
- अपने डेवलपमेंट एनवायरमेंट में, यह कमांड चलाएं:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
- एक स्टोरेज ऑब्जेक्ट बनाएं, ताकि हम उसे ProjectZ में मौजूद VM इंस्टेंस से पढ़ सकें. हम एक .txt फ़ाइल बनाएंगे.
nano hello.txt
टेक्स्ट फ़ाइल में अपनी पसंद का कोई भी कॉन्टेंट जोड़ें.
- ऑब्जेक्ट को बकेट में अपलोड करें.
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
- सूचीबद्ध करके पुष्टि करें कि ऑब्जेक्ट को बकेट में अपलोड कर दिया गया है.
gcloud storage ls gs://BUCKET_NAME
आपको कंसोल में hello.txt फ़ाइल दिखनी चाहिए.
4. Protect Cloud Storage API
पिछले कोडलैब में, हमने एक पेरीमीटर बनाया था और Compute Engine API को सुरक्षित किया था. इस कोडलैब में, हम ड्राई रन मोड की सीमा में बदलाव करेंगे और Cloud Storage जोड़ेंगे. इससे हमें ऑडिट लॉग में वीपीसी सेवा नियंत्रणों के उल्लंघन की जानकारी मिलेगी. इससे हमें पेरीमीटर सुरक्षा के असर का पता लगाने में मदद मिलेगी. हालांकि, जब तक हम पेरीमीटर लागू नहीं करते, तब तक संसाधनों को ऐक्सेस किया जा सकेगा.
- Google Console में, अपना संगठन चुनें. इसके बाद, वीपीसी सर्विस कंट्रोल ऐक्सेस करें. पक्का करें कि आप संगठन के स्कोप में हों.
- Cloud Shell खोलें और पिछले लैब में बनाए गए ड्राई रन पेरीमीटर "SuperProtection" को अपडेट करें:
gcloud access-context-manager perimeters dry-run update SuperProtection --policy=POLICY --add-restricted-services=storage.googleapis.com
- पेरीमीटर के बारे में बताकर पुष्टि करें कि Cloud Storage API अपडेट हो गया है
gcloud access-context-manager perimeters dry-run describe SuperProtection --policy=POLICY
आउटपुट में, आपको दिखेगा कि Cloud Storage API को प्रतिबंधित सेवाओं की सूची में शामिल किया गया है
Compute Engine API के साथ, लेकिन "-vpcAccessibleServices: {}" लेबल के साथ:

5. पुष्टि करें कि Cloud Storage API को सुरक्षित किया गया है
ड्राई रन मोड में, पुष्टि करें कि "SuperProtection" पेरीमीटर, हमें प्रोजेक्टZ में बनाए गए वीएम इंस्टेंस से ProjectX में स्टोरेज बकेट को होस्ट करने वाले ऑब्जेक्ट को सूची में शामिल करके, ऐक्सेस से इनकार करने की जानकारी दिखा रहा है
- Cloud Console में, प्रोजेक्ट चुनने वाले टूल पर जाएं और ProjectZ चुनें. इसके बाद, Compute Engine > वीएम इंस्टेंस पर जाएं.
- वीएम इंस्टेंस से कनेक्ट करने और उसकी कमांड लाइन को ऐक्सेस करने के लिए, एसएसएच बटन पर क्लिक करें.

- हमने पहले जो hello.txt फ़ाइल अपलोड की थी उसकी सूची दिखाओ.
gcloud storage ls gs://BUCKET_NAME
Cloud Storage API को ड्राय-रन मोड में सुरक्षित किया जाता है. इसलिए, आपको संसाधनों की सूची दिखनी चाहिए. हालांकि, ProjectZ के ऑडिट लॉग में आपको गड़बड़ी का मैसेज दिखना चाहिए.
- ProjectZ में Logs Explorer API पर जाएं और 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"
- हमने पुष्टि कर ली है कि Cloud Storage को किए गए एपीआई कॉल से, वीपीसी सर्विस कंट्रोल के नियमों का उल्लंघन होता है. इसलिए, हम नए कॉन्फ़िगरेशन के साथ पेरीमीटर लागू करेंगे. Cloud Shell खोलें और ड्राई-रन पेरीमीटर लागू करें:
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
- एसएसएच का इस्तेमाल करके वीएम इंस्टेंस से कनेक्ट करें. इसके बाद, स्टोरेज बकेट को फिर से लिस्ट करें. इससे यह पुष्टि की जा सकेगी कि ड्राई-रन पेरीमीटर को सही तरीके से लागू किया गया है.
gcloud storage ls gs://BUCKET_NAME
हमें स्टोरेज ऑब्जेक्ट की सूची के बजाय, वीएम सीएलआई में वीपीसी सेवा नियंत्रण के उल्लंघन की सूचना मिलेगी:
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"
हमने वीपीसी सर्विस कंट्रोल का इस्तेमाल करके, डेटा एक्सफ़िल्ट्रेशन को रोका है. इससे पेरीमीटर के बाहर मौजूद किसी संसाधन से डेटा को पढ़ने या उस पर डेटा को कॉपी करने से रोका जा सकता है.
6. सूची को अस्वीकार किए जाने से जुड़ी समस्या हल करना.
हम वीएम इंस्टेंस के सीएलआई से मिली अनुमति न मिलने की समस्या को हल करने जा रहे हैं. आइए, ऑडिट लॉग की जांच करें और वीपीसी सर्विस कंट्रोल का यूनीक आईडी ढूंढें.
- प्रोजेक्ट चुनने वाले टूल पर जाएं और ProjectZ चुनें.
- लॉग एक्सप्लोरर में यह क्वेरी इस्तेमाल करके, ऑडिट लॉग में वीपीसी सर्विस कंट्रोल का यूनीक आईडी ढूंढें:
resource.type="audited_resource" protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
इससे, वीपीसी सर्विस कंट्रोल के सभी ऑडिट लॉग दिखेंगे. हम गड़बड़ी के आखिरी लॉग की जांच करेंगे. एपीआई कॉल, वीएम इंस्टेंस से किया गया था. इसलिए, प्रिंसिपल Compute Engine का सेवा खाता "PROJECT_NUMBER-compute@developer.gserviceaccount.com"
हमारे पास VPC सेवा नियंत्रण का यूनीक आईडी पहले से मौजूद है. इसलिए, हम इस फ़िल्टर का इस्तेमाल करके, सीधे तौर पर मनचाहा लॉग पा सकते हैं:
protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
- 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 तक स्टोरेज बकेट को ऐक्सेस कर सके. हम यह भी देख सकते हैं कि नेटवर्क एक ही पेरीमीटर में नहीं है. इसलिए, हमें सेवाओं के साथ वीपीसी कम्यूनिकेशन की अनुमति देनी होगी और सेवा पेरीमीटर के बीच डेटा शेयर करना होगा.
- 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
- ProjectZ की सुरक्षा करने वाली इनग्रेस नीति को अपडेट करें.
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY
अब हम वीएम इंस्टेंस से बकेट को ऐक्सेस करने की कोशिश कर सकते हैं.
- Cloud Console में, प्रोजेक्ट चुनने वाले टूल पर जाएं और ProjectZ चुनें. इसके बाद, Compute Engine > वीएम इंस्टेंस पर जाएं.
- वीएम इंस्टेंस से कनेक्ट करने और उसकी कमांड लाइन को ऐक्सेस करने के लिए, एसएसएच बटन पर क्लिक करें.
- वीएम सीएलआई में जाने के बाद, स्टोरेज बकेट में मौजूद ऑब्जेक्ट की सूची बनाने की कोशिश करें.
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).
- हमें Compute Engine के सेवा खाते को ऑब्जेक्ट रीडर की अनुमति देनी होगी, ताकि वह स्टोरेज बकेट में मौजूद ऑब्जेक्ट की सूची बना सके.
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
- एक बार फिर, वीएम इंस्टेंस के सीएलआई से hello.txt फ़ाइल को लिस्ट करने की कोशिश करते हैं .
gcloud storage ls gs://BUCKET_NAME/ . . gs://BUCKET_NAME/hello.txt
अब हम वीपीसी सेवा नियंत्रण की अनुमति के उल्लंघन के बिना ऑब्जेक्ट को लिस्ट कर सकते हैं. हालांकि, फ़ाइल को डाउनलोड करने के बारे में क्या? आइए, इसे आज़माकर देखें.
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. साफ़-सफ़ाई सेवा
जब सेवा का इस्तेमाल नहीं किया जा रहा होता है, तब वीपीसी सर्विस कंट्रोल का इस्तेमाल करने के लिए कोई शुल्क नहीं लिया जाता. हालांकि, इस लैब में इस्तेमाल किए गए सेटअप को हटाना सबसे सही तरीका है. शुल्क से बचने के लिए, अपने वीएम इंस्टेंस और/या Cloud प्रोजेक्ट भी मिटाए जा सकते हैं. Cloud प्रोजेक्ट मिटाने पर, उस प्रोजेक्ट में इस्तेमाल किए गए सभी संसाधनों के लिए बिलिंग बंद हो जाती है.
- अपने वीएम इंस्टेंस को मिटाने के लिए, वीएम इंस्टेंस के नाम के बाईं ओर मौजूद चेकबॉक्स को चुनें. इसके बाद, मिटाएं पर क्लिक करें.

- पेरीमीटर को मिटाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, सुरक्षा पर क्लिक करें. इसके बाद, संगठन के स्कोप में जाकर VPC सेवा नियंत्रण पर क्लिक करें.
- VPC सेवा कंट्रोल पेज पर, उस पेरीमीटर से जुड़ी टेबल लाइन में "मिटाएं आइकॉन" पर क्लिक करें जिसे आपको मिटाना है
- ऐक्सेस लेवल मिटाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, फ़ोल्डर के स्कोप पर Access Context Manager पेज खोलें.
- ग्रिड में, ऐक्सेस लेवल की उस लाइन में "मिटाएं आइकॉन" पर क्लिक करें जिसे आपको मिटाना है. इसके बाद, मिटाएं पर क्लिक करें.
- स्टोरेज ऑब्जेक्ट और बकेट को मिटाने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, Cloud Storage बकेट पेज खोलें .
- आपने जो बकेट बनाई है उसके बगल में मौजूद चेकबॉक्स को चुनें.
- मिटाएं पर क्लिक करें.
- इसके बाद खुलने वाली विंडो में, पुष्टि करें कि आपको बकेट मिटाना है.
- मिटाएं पर क्लिक करें.
- अपने प्रोजेक्ट को बंद करने के लिए, यह तरीका अपनाएं:
- Google Cloud Console में, उस प्रोजेक्ट के IAM और एडमिन सेटिंग पेज पर जाएं जिसे मिटाना है.
- आईएएम और एडमिन सेटिंग पेज पर, बंद करें पर क्लिक करें.
- प्रोजेक्ट आईडी डालें और शटडाउन करें पर क्लिक करें.
8. बधाई हो!
इस कोडलैब में, आपने वीपीसी सर्विस कंट्रोल के ड्राई-रन पेरीमीटर को अपडेट किया, उसे लागू किया, और उससे जुड़ी समस्या को हल किया.
ज़्यादा जानें
- VPC सर्विस कंट्रोल से जुड़ा दस्तावेज़ देखें.
- ऐक्सेस कॉन्टेक्स्ट मैनेजर से जुड़ा दस्तावेज़ देखें.
- VPC-SC की समस्या हल करने वाले टूल से जुड़ा दस्तावेज़ देखें.
- डेटा ट्रांसफ़र करने और पाने से जुड़े नियमों का दस्तावेज़ देखें.
- ड्राई-रन से जुड़ा दस्तावेज़ देखें.
- Cloud Storage से जुड़े दस्तावेज़ देखें.
लाइसेंस
इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.