1. परिचय
Private Service Connect, Google Cloud नेटवर्किंग की एक सुविधा है. इसकी मदद से, उपभोक्ता प्रोड्यूसर की सेवाओं को ऐक्सेस कर सकते हैं. इसमें, उपयोगकर्ता के वीपीसी(आम तौर पर उपभोक्ता) में होस्ट किए गए निजी एंडपॉइंट की मदद से, Google API से कनेक्ट करने की सुविधा शामिल है.
इसके अलावा, क्षेत्र के हिसाब से Google API पर ले जाने के लिए, PSC बैकएंड का इस्तेमाल Google Cloud प्रॉक्सी लोड बैलेंसर के साथ किया जा सकता है. पीएससी बैकएंड का इस्तेमाल करने से, उपभोक्ता के पास ज़्यादा कंट्रोल होते हैं. जैसे:
- यूआरएल मैप का इस्तेमाल करके, यह चुनना कि Google API की कौनसी सेवाएं उपलब्ध हैं
- बेहतर तरीके से निगरानी करना
- Cloud Armor इंटिग्रेशन
- कस्टम URL
- बेहतर ट्रैफ़िक मैनेजमेंट
उपलब्ध सेवाओं और उनके क्षेत्रीय एपीआई की सूची यहां देखी जा सकती है.
इस कोडलैब में, आपको क्षेत्रीय Cloud KMS API पर ले जाने वाला PSC बैकएंड बनाना होगा. साथ ही, उस एपीआई से कनेक्टिविटी की जांच करनी होगी.
आपको क्या सीखने को मिलेगा
- Cloud Key Management Service (KMS) की-रिंग और पासकोड बनाएं.
- Cloud KMS रीजनल एपीआई पर ले जाने वाले पीएससी बैकएंड के साथ, इंटरनल ऐप्लिकेशन लोड बैलेंसर बनाना
- Cloud DNS से मैनेज किया जाने वाला निजी ज़ोन और A रिकॉर्ड बनाना.
- रीजनल Cloud KMS ऐक्सेस करना
आपको इन चीज़ों की ज़रूरत होगी
- Google Cloud प्रोजेक्ट, जिसमें आपके पास "मालिक" या "एडिटर" की सभी अनुमतियां हों.
2. कोडलैब टोपोलॉजी
europe-west9 क्षेत्र में एक सबनेट के साथ एक उपभोक्ता वीपीसी बनाया जाएगा. यह सबनेट, वीएम को होस्ट करने, इंटरनल रीजनल ऐप्लिकेशन लोड बैलेंसर फ़ॉरवर्डिंग नियम, और पीएससी बैकएंड के लिए होगा. साथ ही, लोड बैलेंसर के साथ इस्तेमाल करने के लिए, सिर्फ़ एक प्रॉक्सी सबनेट भी बनाया जाएगा. हम यूरोप-वेस्ट क्षेत्र में, Cloud Key Management System (KMS) में की-रिंग और की बनाएंगे. इसके बाद, हम europe-west9 में रीजनल KMS API को रिज़ॉल्व करने के लिए, लोड बैलेंसर और PSC बैकएंड बनाएंगे.
3. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेट अप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, अपने-आप एक यूनीक स्ट्रिंग जनरेट करता है. आम तौर पर, आपको यह जानने की ज़रूरत नहीं होती कि यह स्ट्रिंग क्या है. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं आता है, तो कोई दूसरा आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास खुद का कोई दूसरा डोमेन इस्तेमाल करने का विकल्प भी है. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट के दौरान बना रहता है. - आपकी जानकारी के लिए बता दें कि तीसरी वैल्यू, प्रोजेक्ट नंबर होती है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको Cloud के संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब को चलाने के लिए, आपसे कोई शुल्क नहीं लिया जाएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है या प्रोजेक्ट को मिटाया जा सकता है. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले कार्यक्रम में शामिल हो सकते हैं.
Cloud Shell शुरू करना
Google Cloud को आपके लैपटॉप से रिमोट तौर पर इस्तेमाल किया जा सकता है. हालांकि, इस कोडलैब में आपको Google Cloud Shell का इस्तेमाल करना होगा. यह Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है.
Google Cloud Console में, सबसे ऊपर दाएं टूलबार में मौजूद Cloud Shell आइकॉन पर क्लिक करें:
एनवायरमेंट से कनेक्ट होने और उसे प्रोवाइड करने में सिर्फ़ कुछ मिनट लगेंगे. प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:
इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल लोड होते हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. यह Google Cloud पर चलता है, जिससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की सुविधा बेहतर होती है. इस कोडलैब में, सारा काम ब्राउज़र में किया जा सकता है. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.
4. शुरू करने से पहले
एपीआई चालू करें
Cloud Shell में, पक्का करें कि आपका प्रोजेक्ट आईडी सेट अप हो
gcloud config list project gcloud config set project <project-id> export PROJECT_ID=$(gcloud config get-value project) export REGION=europe-west9 export ZONE=europe-west9-a echo $PROJECT_ID echo $REGION echo $ZONE
सभी ज़रूरी सेवाएं चालू करना
gcloud services enable compute.googleapis.com gcloud services enable servicedirectory.googleapis.com gcloud services enable dns.googleapis.com gcloud services enable cloudkms.googleapis.com
5. VPC नेटवर्क, सबनेट, और फ़ायरवॉल नियम बनाना
VPC नेटवर्क बनाना
Cloud Shell से
# Set environment variables export VPC_NAME="consumer-vpc" export SUBNET_NAME="consumer-subnet-1" # Create VPC network gcloud compute networks create ${VPC_NAME} \ --subnet-mode=custom \ --bgp-routing-mode=regional
सबनेट बनाना
Cloud Shell से
gcloud compute networks subnets create ${SUBNET_NAME} \ --network=${VPC_NAME} \ --region=${REGION} \ --range=10.0.0.0/24 \ --enable-private-ip-google-access
इस लैब में, आपको रीजनल एपीआई बैकएंड पर ले जाने के लिए, इंटरनल एल7 रीजनल लोड बैलेंसर बनाना होगा. यह लोड बैलेंसर, प्रॉक्सी लोड बैलेंसर है. इसलिए, आपको प्रॉक्सी की सुविधा देने के लिए, लोड बैलेंसर के लिए खास तौर पर एक "प्रॉक्सी सबनेट" बनाना होगा. सिर्फ़ प्रॉक्सी वाले सबनेट के बारे में ज़्यादा जानकारी यहां मिल सकती है.
Cloud Shell से
gcloud compute networks subnets create eu-west9-proxy-subnet \ --network=${VPC_NAME} \ --region=${REGION} \ --range=10.100.100.0/24 \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE
फ़ायरवॉल के नियम बनाना
इस लैब के लिए, आपको अपने बनाए गए इंस्टेंस से कनेक्ट करने के लिए IAP का इस्तेमाल करना होगा. अगर आपको आईएपी का इस्तेमाल नहीं करना है, तो इस चरण को छोड़ा जा सकता है. इसके बजाय, इंस्टेंस पर सार्वजनिक आईपी पते जोड़ें और फ़ायरवॉल का ऐसा नियम बनाएं जिससे 0.0.0.0/0 से टीसीपी पोर्ट 22 पर इन्ग्रेस डेटा ट्रैफ़िक को आने की अनुमति मिल सके.
आईएपी को अपने वीएम इंस्टेंस से कनेक्ट करने की अनुमति देने के लिए, फ़ायरवॉल का ऐसा नियम बनाएं जो:
- यह उन सभी वीएम इंस्टेंस पर लागू होता है जिन्हें आपको आईएपी का इस्तेमाल करके ऐक्सेस करना है.
- 35.235.240.0/20 आईपी रेंज से आने वाले ट्रैफ़िक को अनुमति देता है. इस रेंज में वे सभी आईपी पते शामिल होते हैं जिनका इस्तेमाल IAP, टीसीपी फ़ॉरवर्डिंग के लिए करता है.
Cloud Shell से
gcloud compute firewall-rules create allow-ssh-iap \ --network=${VPC_NAME} \ --allow tcp:22 \ --source-ranges=35.235.240.0/20
6. क्लाउड एनएटी बनाना
Linux पैकेज डिस्ट्रिब्यूशन डाउनलोड करने के लिए, Cloud NAT बनाना ज़रूरी है.
क्लाउड राऊटर बनाना
Cloud Shell से
gcloud compute routers create crnat \ --network=${VPC_NAME} \ --region=${REGION}
क्लाउड एनएटी बनाना
Cloud Shell से
gcloud compute routers nats create europe-nat \ --router=crnat \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges \ --enable-logging \ --region=${REGION}
7. पासकोड मैनेज करने के लिए की-रिंग और पासकोड बनाना
Cloud Shell से
gcloud kms keyrings create europe-kr \ --location ${REGION}
Cloud Shell से
gcloud kms keys create europe-key \ --location ${REGION} \ --keyring europe-kr \ --purpose encryption
Cloud Shell में जाकर, पुष्टि करें कि europe-west क्षेत्र में पासकोड और पासकोड की रिंग बनाई गई है.
gcloud kms keys list \ --location ${REGION} \ --keyring europe-kr
संभावित नतीजा
NAME: projects/<project-id>/locations/europe-west9/keyRings/europe-kr/cryptoKeys/europe-key PURPOSE: ENCRYPT_DECRYPT ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION PROTECTION_LEVEL: SOFTWARE LABELS: PRIMARY_ID: 1 PRIMARY_STATE: ENABLED
कुंजियों के लिए दिए गए पूरे पाथ का नाम नोट करें, क्योंकि बाद में कनेक्ट करने के लिए इसका इस्तेमाल किया जाएगा.
8. क्लाइंट वीएम बनाना और उसे KMS API से कनेक्ट करना
इसके बाद, आपको क्लाइंट वीएम बनाना होगा, वीएम में एसएसएच करना होगा, और ग्लोबल KMS API के रिज़ॉल्यूशन की जांच करनी होगी. यह टेस्ट, ग्लोबल Google API की गड़बड़ियों को ठीक करने के लिए डिफ़ॉल्ट विकल्प दिखाता है.
Cloud Shell से
#Create the startup script touch startup.sh #Open the startup.sh file using a text editor of your choice (e.g., nano, vim, gedit, etc.) nano startup.sh #Paste the following script content into the startup.sh file #! /bin/bash sudo apt-get update sudo apt-get install dnsutils -y sudo apt-get install tcpdump -y #Save the changes you made to the startup.sh file #Use the chmod command to make the script executable chmod +x startup.sh #Create the VM instance gcloud compute instances create client-vm \ --network="${VPC_NAME}" \ --subnet="${SUBNET_NAME}" \ --zone="europe-west9-a" \ --machine-type="e2-medium" \ --no-address \ --scopes="https://www.googleapis.com/auth/cloud-platform" \ --image-family="debian-12" \ --image-project="debian-cloud" \ --metadata-from-file="startup-script=./startup.sh"
इसके बाद, आपको अपनी बनाई गई केएमएस कुंजी का ऐक्सेस पाने के लिए, Compute के डिफ़ॉल्ट सेवा खाते को अपडेट करना होगा. डिफ़ॉल्ट Compute सेवा खाता, <Project_Number> -compute@developer.gserviceaccount.com फ़ॉर्मैट में होगा. प्रोजेक्ट नंबर पाने के लिए, Cloud Shell में यह कमांड चलाएं और नतीजों में दिखने वाली आखिरी लाइन में मौजूद नंबर को कॉपी करें.
gcloud projects describe $PROJECT_ID
आपने जो केएमएस कुंजी बनाई है उसका ऐक्सेस पाने के लिए, डिफ़ॉल्ट Compute सेवा खाता अपडेट करें.
Cloud Shell से
gcloud kms keys add-iam-policy-binding europe-key \ --location $REGION \ --keyring europe-kr \ --member serviceAccount:<project_number>-compute@developer.gserviceaccount.com \ --role roles/cloudkms.admin
+ (नीचे स्क्रीनशॉट) पर क्लिक करके, एक और Cloud Shell टर्मिनल बनाएं
टैब 2 में, क्लाइंट-वीएम में एसएसएच करने के लिए, आईएपी के ज़रिए टनल करें. ध्यान दें कि एनवायरमेंट वैरिएबल काम नहीं करेंगे. आपको नीचे दिए गए निर्देश में अपना प्रोजेक्ट-आईडी जोड़ना होगा.
Cloud Shell से
# Set the environment variable export PROJECT_ID=$(gcloud config get-value project) # ssh into the client-vm gcloud beta compute ssh --zone europe-west9-a "client-vm" \ --tunnel-through-iap \ --project $PROJECT_ID
पहले से नोट किए गए केएमएस पासकोड का इस्तेमाल करके, ग्लोबल केएमएस एपीआई से कनेक्ट करें.
टैब 2 में, client-vm
# Store the access token in a variable TOKEN=$(gcloud auth print-access-token) # Run the full command with maximum verbosity curl -v \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ 'https://cloudkms.googleapis.com/v1/projects/<project-id>/locations/europe-west9/keyRings/europe-kr/cryptoKeys/europe-key'
संभावित नतीजा
* Trying 216.58.214.74:443... * Connected to cloudkms.googleapis.com (216.58.214.74) port 443 (#0) * ALPN: offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN: server accepted h2 * Server certificate: * subject: CN=upload.video.google.com * start date: Aug 26 07:12:45 2024 GMT * expire date: Nov 18 07:12:44 2024 GMT * subjectAltName: host "cloudkms.googleapis.com" matched cert's "*.googleapis.com" * issuer: C=US; O=Google Trust Services; CN=WR2 * SSL certificate verify ok. * using HTTP/2 * h2h3 [:method: GET] * h2h3 [:path: /v1/projects/<project-id>/locations/europe-west9/keyRings/europe-kr/cryptoKeys/europe-key] * h2h3 [:scheme: https] * h2h3 [:authority: cloudkms.googleapis.com] * h2h3 [user-agent: curl/7.88.1] * h2h3 [accept: */*] * h2h3 [authorization: Bearer dsnkjfdnvjfd * h2h3 [content-type: application/json] * Using Stream ID: 1 (easy handle 0x55ed8bb7ece0) > GET /v1/projects/<project-id>/locations/europe-west9/keyRings/europe-kr/cryptoKeys/europe-key HTTP/2 > Host: cloudkms.googleapis.com > user-agent: curl/7.88.1 > accept: */* > authorization: Bearer dsnkjfdnvjfd > content-type: application/json > < HTTP/2 200 < content-type: application/json; charset=UTF-8 < vary: X-Origin < vary: Referer < vary: Origin,Accept-Encoding < date: Tue, 24 Sep 2024 18:25:42 GMT < server: ESF < cache-control: private < x-xss-protection: 0 < x-frame-options: SAMEORIGIN < x-content-type-options: nosniff < accept-ranges: none < { "name": "projects/<project-id>/locations/europe-west9/keyRings/europe-kr/cryptoKeys/europe-key", "primary": { "name": "projects/<project-id>/locations/europe-west9/keyRings/europe-kr/cryptoKeys/europe-key/cryptoKeyVersions/1", "state": "ENABLED", "createTime": "2024-09-24T17:56:01.905156045Z", "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION", "generateTime": "2024-09-24T17:56:01.905156045Z" }, "purpose": "ENCRYPT_DECRYPT", "createTime": "2024-09-24T17:56:01.905156045Z", "versionTemplate": { "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION" }, "destroyScheduledDuration": "2592000s" } * Connection #0 to host cloudkms.googleapis.com left intact
देखें कि डीएनएस, KMS एंडपॉइंट को कहां रिज़ॉल्व करता है.
tab2 से, client-vm
dig cloudkms.googleapis.com
संभावित नतीजा
<<>> DiG 9.18.28-1~deb12u2-Debian <<>> cloudkms.googleapis.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62617 ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;cloudkms.googleapis.com. IN A ;; ANSWER SECTION: cloudkms.googleapis.com. 300 IN A 142.250.74.234 cloudkms.googleapis.com. 300 IN A 142.250.75.234 cloudkms.googleapis.com. 300 IN A 216.58.214.170 cloudkms.googleapis.com. 300 IN A 172.217.20.170 cloudkms.googleapis.com. 300 IN A 172.217.20.202 cloudkms.googleapis.com. 300 IN A 216.58.215.42 cloudkms.googleapis.com. 300 IN A 216.58.213.74 cloudkms.googleapis.com. 300 IN A 142.250.179.74 cloudkms.googleapis.com. 300 IN A 142.250.179.106 cloudkms.googleapis.com. 300 IN A 142.250.178.138 cloudkms.googleapis.com. 300 IN A 142.250.201.170 cloudkms.googleapis.com. 300 IN A 172.217.18.202 cloudkms.googleapis.com. 300 IN A 216.58.214.74 ;; Query time: 4 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) ;; WHEN: Wed Oct 23 19:58:58 UTC 2024 ;; MSG SIZE rcvd: 260
tab2 से, client-vm
dig cloudkms.europe-west9.rep.googleapis.com
संभावित नतीजा
<<>> DiG 9.18.28-1~deb12u2-Debian <<>> cloudkms.europe-west9.rep.googleapis.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2736 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;cloudkms.europe-west9.rep.googleapis.com. IN A ;; ANSWER SECTION: cloudkms.europe-west9.rep.googleapis.com. 3043 IN A 34.1.65.232 ;; Query time: 0 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) ;; WHEN: Wed Oct 23 20:00:04 UTC 2024 ;; MSG SIZE rcvd: 85
Google API के लिए, डिफ़ॉल्ट रूप से ग्लोबल एपीआई सेवा एंडपॉइंट का इस्तेमाल किया जाता है. यह एंडपॉइंट, सार्वजनिक आईपी की सूची में बदल जाएगा. cloudkms.googleapis.com के लिए dig करने पर यह जानकारी मिलती है. (ध्यान दें: आपको दिखने वाला आईपी पता, कोई दूसरा एक्सटर्नल आईपी पता हो सकता है. यह Google API का सामान्य व्यवहार है.)
PSC के साथ क्षेत्रीय Google API एंडपॉइंट का इस्तेमाल करके, एपीआई ट्रैफ़िक के लिए क्षेत्रीय ज़रूरी शर्तों को पूरा किया जा सकता है. साथ ही, रिज़ॉल्यूशन को सार्वजनिक से निजी में बदला जा सकता है. cloudkms.europe-west9.rep.googleapis.com पर 'डिग' करने से पता चलता है कि फ़िलहाल, क्षेत्रीय KSM API एंडपॉइंट का रिज़ॉल्यूशन अब भी सार्वजनिक है.
नीचे दिए गए सेक्शन में, हम ग्लोबल KMS API एंडपॉइंट का इस्तेमाल करने से, क्षेत्रीय एंडपॉइंट पर माइग्रेट करेंगे. साथ ही, PSC बैकएंड का इस्तेमाल करके, रिज़ॉल्यूशन को निजी पर सेट कर देंगे.
9. PSC NEG और लोड बैलेंसर बनाना
अगले सेक्शन के लिए, Cloud Shell में पहले टैब पर वापस जाएं.
आपको इंटरनल एचटीटीपी या एचटीटीपीएस लोड बैलेंसर बनाना होगा. इसमें, बैकएंड सेवा के तौर पर यूरोप के क्षेत्रीय केएमएस एंडपॉइंट पर ले जाने वाले नेटवर्क एंडपॉइंट ग्रुप (एनईजी) का इस्तेमाल किया जाएगा. लोड बैलेंसर का फ़ॉरवर्डिंग नियम, Private Service Connect(PSC) एंडपॉइंट के तौर पर काम करता है.
Private Service Connect टाइप और टारगेट सेवा europe-west9-cloudkms.example.com के साथ नेटवर्क एंडपॉइंट ग्रुप (एनईजी) बनाएं
Cloud Shell से
#Set the necessary variables NEG_NAME="l7psc-kms-neg" PSC_TARGET="cloudkms.europe-west9.rep.googleapis.com" #Create the Private Service Connect NEG gcloud compute network-endpoint-groups create ${NEG_NAME} \ --project=${PROJECT_ID} \ --region=${REGION} \ --network-endpoint-type=PRIVATE_SERVICE_CONNECT \ --psc-target-service=${PSC_TARGET} # Verify the NEG creation gcloud compute network-endpoint-groups describe ${NEG_NAME} \ --project=${PROJECT_ID} \ --region=${REGION}
लोड बैलेंसर के लिए बैकएंड सेवा बनाएं.
Cloud Shell से
# 1. Set the necessary variables BACKEND_SERVICE_NAME="l7-psc-kms" # 2. Create the backend service gcloud compute backend-services create $BACKEND_SERVICE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --region=$REGION \
बैकएंड सेवा में एनईजी जोड़ें.
Cloud Shell से
gcloud compute backend-services add-backend $BACKEND_SERVICE_NAME \ --network-endpoint-group=${NEG_NAME} \ --region=$REGION
लोड बैलेंसर के लिए यूआरएल मैप बनाएं.
Cloud Shell से
gcloud compute url-maps create l7-psc-url-map \ --default-service=l7-psc-kms \ --region=$REGION
उस कस्टम यूआरएल के लिए पाथ मैचर बनाएं जिसका इस्तेमाल एंडपॉइंट करेगा.
Cloud Shell से
gcloud compute url-maps add-path-matcher l7-psc-url-map \ --path-matcher-name=example \ --default-service=l7-psc-kms \ --region=$REGION
कस्टम यूआरएल europe-west9-cloudkms.example.com के लिए होस्ट नियम बनाएं.
Cloud Shell से
gcloud compute url-maps add-host-rule l7-psc-url-map \ --hosts=europe-west9-cloudkms.example.com \ --path-matcher-name=example \ --region=$REGION
लोड बैलेंसर के लिए टारगेट एचटीटीपीएस प्रॉक्सी बनाएं. इसके लिए, आपको क्षेत्र के हिसाब से एसएसएल सर्टिफ़िकेट का संसाधन बनाना होगा. खुद से हस्ताक्षर वाला सर्टिफ़िकेट बनाने का तरीका जानने के लिए, कृपया यहां जाएं. हम openssl का इस्तेमाल करके, खुद से हस्ताक्षर किया गया सर्टिफ़िकेट बनाएंगे. साथ ही, इसका इस्तेमाल GCP पर क्षेत्र के हिसाब से सर्टिफ़िकेट का संसाधन बनाने के लिए करेंगे. टारगेट https प्रॉक्सी इस सर्टिफ़िकेट का इस्तेमाल करेगी.
Cloud Shell से
# Set environment variables export CERT_NAME="my-ssl-cert" # Generate a private key openssl genrsa -out private.key 2048 # Create a configuration file for the CSR cat > csr_config.cnf << EOF [req] default_bits = 2048 prompt = no default_md = sha256 req_extensions = req_ext distinguished_name = dn [dn] CN = example.com O = My Organization C = US [req_ext] subjectAltName = @alt_names [alt_names] DNS.1 = example.com DNS.2 = *.example.com EOF # Create a CSR using the configuration openssl req -new -key private.key -out server.csr -config csr_config.cnf # Create a self-signed certificate using the CSR openssl x509 -req -days 365 -in server.csr -signkey private.key -out server.crt \ -extfile csr_config.cnf -extensions req_ext # Verify the certificate openssl x509 -in server.crt -text -noout #Create a regional SSL certificate resource gcloud compute ssl-certificates create ${CERT_NAME} \ --region=${REGION} \ --certificate=server.crt \ --private-key=private.key #Create the target HTTPS proxy for the load balancer gcloud compute target-https-proxies create psc-http-proxy \ --region=${REGION} \ --url-map=l7-psc-url-map \ --ssl-certificates=${CERT_NAME}
लोड बैलेंसर के लिए फ़ॉरवर्डिंग नियम बनाएं, जो Private Service Connect एंडपॉइंट के तौर पर काम करेगा. फ़ॉरवर्डिंग नियम के लिए आईपी पता, VPC के उस रीजनल सबनेट से जुड़ा होना चाहिए जो उस एपीआई एंडपॉइंट के रीजन में हो जिसे ऐक्सेस किया जा रहा है.
Cloud Shell से
# Set environment variables export PROXY_NAME="psc-http-proxy" # Create the forwarding rule gcloud compute forwarding-rules create kms-lb-rule \ --project=${PROJECT_ID} \ --region=${REGION} \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=${VPC_NAME} \ --subnet=${SUBNET_NAME} \ --target-https-proxy=${PROXY_NAME} \ --target-https-proxy-region=${REGION} \ --address=10.0.0.100 \ --ports=443
10. डीएनएस कॉन्फ़िगरेशन
इस सेक्शन में, आपको example.com के लिए एक निजी डीएनएस ज़ोन और एक A रिकॉर्ड बनाना होगा. यह रिकॉर्ड, पिछले चरण में बनाए गए फ़ॉरवर्डिंग नियम पर ले जाएगा.
मैनेज किया जाने वाला डीएनएस निजी ज़ोन बनाएं.
Cloud Shell से
# Set environment variables export LB_RULE_NAME="kms-lb-rule" export DNS_ZONE_NAME="example-com-private-zone" # Create the private DNS zone gcloud dns managed-zones create ${DNS_ZONE_NAME} \ --dns-name="example.com." \ --description="Private DNS zone for example.com" \ --visibility=private \ --networks=${VPC_NAME}
europe-west9-cloudkms.example.com के लिए A रिकॉर्ड बनाएं.
Cloud Shell से
gcloud dns record-sets transaction start \ --zone=${DNS_ZONE_NAME} gcloud dns record-sets transaction add 10.0.0.100 \ --name=europe-west9-cloudkms.example.com \ --ttl=300 \ --type=A \ --zone=${DNS_ZONE_NAME} gcloud dns record-sets transaction execute \ --zone=${DNS_ZONE_NAME}
11. पीएससी के ज़रिए रीजनल KMS API से कनेक्ट करना
टैब 2 में क्लाइंट-वीएम पर वापस जाएं और tcpdump चलाकर कनेक्शन की पूरी जानकारी देखें. साथ ही, PSC बैकएंड की मदद से रीजनल KMS एंडपॉइंट के कनेक्शन की जांच करें.
sudo tcpdump -i any net 10.0.0.100 or port 53 -n
Cloud Shell में तीसरा टैब खोलें और क्लाइंट-वीएम में एसएसएच करें.
# Set environment variables export PROJECT_ID=$(gcloud config get-value project) export KMS_HOSTNAME="europe-west9-cloudkms.example.com" export KEY_RING="europe-kr" export KEY_NAME="europe-key" export REGION="europe-west9" # Command to access the specific key curl -k "https://${KMS_HOSTNAME}/v1/projects/${PROJECT_ID}/locations/${REGION}/keyRings/${KEY_RING}/cryptoKeys/${KEY_NAME}" \ -H "Authorization: Bearer $(gcloud auth print-access-token)"
curl कमांड + TCPDUMP के लिए अनुमानित नतीजा
{ "name": "projects/<project-id>/locations/europe-west9/keyRings/europe-kr/cryptoKeys/europe-key", "primary": { "name": "projects/<project-id>/locations/europe-west9/keyRings/europe-kr/cryptoKeys/europe-key/cryptoKeyVersions/1", "state": "ENABLED", "createTime": "2024-10-10T18:50:24.357027036Z", "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION", "generateTime": "2024-10-10T18:50:24.357027036Z" }, "purpose": "ENCRYPT_DECRYPT", "createTime": "2024-10-10T18:50:24.357027036Z", "versionTemplate": { "protectionLevel": "SOFTWARE", "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION" }, "destroyScheduledDuration": "2592000s" } Tcpdump output listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes 18:13:51.220209 lo In IP 127.0.0.1.48873 > 127.0.0.53.53: 2086+ [1au] A? europe-west9-cloudkms.example.com. (62) 18:13:51.220230 lo In IP 127.0.0.1.48873 > 127.0.0.53.53: 24619+ [1au] AAAA? europe-west9-cloudkms.example.com. (62) 18:13:51.220669 ens4 Out IP 10.0.0.2.52121 > 169.254.169.254.53: 8885+ [1au] A? europe-west9-cloudkms.example.com. (62) 18:13:51.220784 ens4 Out IP 10.0.0.2.53041 > 169.254.169.254.53: 57748+ [1au] AAAA? europe-west9-cloudkms.example.com. (62) 18:13:51.229638 ens4 In IP 169.254.169.254.53 > 10.0.0.2.52121: 8885 1/0/1 A 10.0.0.100 (78) 18:13:51.229945 lo In IP 127.0.0.53.53 > 127.0.0.1.48873: 2086 1/0/1 A 10.0.0.100 (78) 18:13:51.230068 ens4 In IP 169.254.169.254.53 > 10.0.0.2.53041: 57748 0/1/1 (155) 18:13:51.230203 lo In IP 127.0.0.53.53 > 127.0.0.1.48873: 24619 0/1/1 (155) 18:13:51.230390 ens4 Out IP 10.0.0.2.59474 > 10.0.0.100.443: Flags [S], seq 1606150798, win 65320, options [mss 1420,sackOK,TS val 4135800856 ecr 0,nop,wscale 7], length 0 18:13:51.232565 ens4 In IP 10.0.0.100.443 > 10.0.0.2.59474: Flags [S.], seq 1041507402, ack 1606150799, win 65535, options [mss 1420,sackOK,TS val 2276748382 ecr 4135800856,nop,wscale 8], length 0 18:13:51.232583 ens4 Out IP 10.0.0.2.59474 > 10.0.0.100.443: Flags [.], ack 1, win 511, options [nop,nop,TS val 4135800859 ecr 2276748382], length 0 18:13:51.235494 ens4 Out IP 10.0.0.2.59474 > 10.0.0.100.443: Flags [P.], seq 1:518, ack 1, win 511, options [nop,nop,TS val 4135800862 ecr 2276748382], length 517 18:13:51.236571 ens4 In IP 10.0.0.100.443 > 10.0.0.2.59474: Flags [.], ack 518, win 267, options [nop,nop,TS val 2276748387 ecr 4135800862], length 0 18:13:51.239119 ens4 In IP 10.0.0.100.443 > 10.0.0.2.59474: Flags [P.], seq 1:1356, ack 518, win 267, options [nop,nop,TS val 2276748389 ecr 4135800862], length 1355 18:13:51.239140 ens4 Out IP 10.0.0.2.59474 > 10.0.0.100.443: Flags [.], ack 1356, win 501, options [nop,nop,TS val 4135800865 ecr 2276748389], length 0 18:13:51.240978 ens4 Out IP 10.0.0.2.59474 > 10.0.0.100.443: Flags [P.], seq 518:598, ack 1356, win 501, options [nop,nop,TS val 4135800867 ecr 2276748389], length 80 18:13:51.241266 ens4 Out IP 10.0.0.2.59474 > 10.0.0.100.443: Flags [P.], seq 598:684, ack 1356, win 501, options [nop,nop,TS val 4135800867 ecr 2276748389], length 86 18:13:51.241366 ens4 Out IP 10.0.0.2.59474 > 10.0.0.100.443: Flags [P.], seq 684:1646, ack 1356, win 501, options [nop,nop,TS val 4135800867 ecr 2276748389], length 962 18:13:51.242370 ens4 In IP 10.0.0.100.443 > 10.0.0.2.59474: Flags [.], ack 684, win 267, options [nop,nop,TS val 2276748392 ecr 4135800867], length 0 18:13:51.242619 ens4 In IP 10.0.0.100.443 > 10.0.0.2.59474: Flags [P.], seq 1356:1433, ack 1646, win 278, options [nop,nop,TS val 2276748393 ecr 4135800867], length 77 18:13:51.242730 ens4 Out IP 10.0.0.2.59474 > 10.0.0.100.443: Flags [P.], seq 1646:1677, ack 1433, win 501, options [nop,nop,TS val 4135800869 ecr 2276748393], length 31 18:13:51.248724 ens4 In IP 10.0.0.100.443 > 10.0.0.2.59474: Flags [.], ack 1677, win 278, options [nop,nop,TS val 2276748399 ecr 4135800869], length 0 18:13:51.296676 ens4 In IP 10.0.0.100.443 > 10.0.0.2.59474: Flags [P.], seq 1433:2357, ack 1677, win 278, options [nop,nop,TS val 2276748447 ecr 4135800869], length 924 18:13:51.297223 ens4 Out IP 10.0.0.2.59474 > 10.0.0.100.443: Flags [F.], seq 1677, ack 2357, win 501, options [nop,nop,TS val 4135800923 ecr 2276748447], length 0 18:13:51.298304 ens4 In IP 10.0.0.100.443 > 10.0.0.2.59474: Flags [P.], seq 2357:2381, ack 1678, win 278, options [nop,nop,TS val 2276748448 ecr 4135800923], length 24 18:13:51.298305 ens4 In IP 10.0.0.100.443 > 10.0.0.2.59474: Flags [F.], seq 2381, ack 1678, win 278, options [nop,nop,TS val 2276748448 ecr 4135800923], length 0 18:13:51.298336 ens4 Out IP 10.0.0.2.59474 > 10.0.0.100.443: Flags [R], seq 1606152476, win 0, length 0 18:13:51.298343 ens4 Out IP 10.0.0.2.59474 > 10.0.0.100.443: Flags [R], seq 1606152476, win 0, length 0
टैब 2 विंडो पर वापस जाएं और tcpdump की जानकारी देखें. आपको पता चलेगा कि आपने जो पीएससी एंडपॉइंट बनाया था उससे Cloud KMS के रीजनल एंडपॉइंट को ऐक्सेस किया जा सकता है. साथ ही, europe-west9 रीजनल एंडपॉइंट, मैनेज किए जा रहे Cloud DNS ज़ोन को निजी तौर पर रिज़ॉल्व करता है. tcpdump के आउटपुट में काम की लाइनों को ऊपर हाइलाइट किया गया है और यहां उनका रेफ़रंस दिया गया है:
18:13:51.229638 ens4 In IP 169.254.169.254.53 > 10.0.0.2.52121: 8885 1/0/1 A 10.0.0.100 (78)
(GCP मेटाडेटा सर्वर, A रिकॉर्ड के साथ जवाब देता है: 10.0.0.100- लोड बैलेंसर आईपी. डीएनएस रिज़ॉल्यूशन ठीक से काम कर रहा है. europe-west9-cloudkms.example.com, 10.0.0.100 पर रिज़ॉल्व होता है, जो आपका लोड बैलेंसर आईपी है)
18:13:51.230390 ens4 Out IP 10.0.0.2.59474 > 10.0.0.100.443: Flags [S], seq 1606150798, win 65320, options [mss 1420,sackOK,TS val 4135800856 ecr 0,nop,wscale 7], length 0
(यह लोड बैलेंसर आईपी से एचटीटीपीएस कनेक्शन के लिए टीसीपी हैंडशेक दिखाता है)
तीसरे टैब में, client-vm
dig europe-west9-cloudkms.example.com
संभावित नतीजा
; <<>> DiG 9.18.28-1~deb12u2-Debian <<>> europe-west9-cloudkms.example.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7008 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;europe-west9-cloudkms.example.com. IN A ;; ANSWER SECTION: europe-west9-cloudkms.example.com. 300 IN A 10.0.0.100 ;; Query time: 12 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) ;; WHEN: Fri Oct 11 20:03:00 UTC 2024 ;; MSG SIZE rcvd: 78
dig कमांड के आउटपुट से पता चलता है कि europe-west9-cloudkms.example.com के लिए बनाया गया कस्टम यूआरएल, 10.0.0.100 पर सही तरीके से रीडायरेक्ट करता है. यह आपका इंटरनल लोड बैलेंसर आईपी है. europe-west9-cloudkms.example.com पर किए गए अनुरोध, आपके इंटरनल लोड बैलेंसर पर भेजे जाएंगे. इसके बाद, लोड बैलेंसर उन्हें Private Service Connect के ज़रिए, KMS के रीजनल एंडपॉइंट पर भेजेगा.
अब क्लाइंट-वीएम के लिए, SSH के दोनों टैब बंद किए जा सकते हैं.
12. क्लीनअप करने का तरीका
Cloud Shell के किसी एक टर्मिनल से, लैब के कॉम्पोनेंट मिटाना
# Set environment variables export PROJECT_ID=$(gcloud config get-value project) export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)") export REGION=europe-west9 export ZONE=europe-west9-a export VPC_NAME="consumer-vpc" export SUBNET_NAME="consumer-subnet-1" export NEG_NAME="l7psc-kms-neg" export BACKEND_SERVICE_NAME="l7-psc-kms" export CERT_NAME="my-ssl-cert" export PROXY_NAME="psc-http-proxy" export LB_RULE_NAME="kms-lb-rule" export DNS_ZONE_NAME="example-com-private-zone" # Delete DNS records and zone gcloud dns record-sets delete europe-west9-cloudkms.example.com. \ --zone=${DNS_ZONE_NAME} --type=A --quiet gcloud dns managed-zones delete ${DNS_ZONE_NAME} --quiet # Delete Load Balancer components gcloud compute forwarding-rules delete ${LB_RULE_NAME} --region=${REGION} --quiet gcloud compute target-https-proxies delete ${PROXY_NAME} --region=${REGION} --quiet gcloud compute url-maps delete l7-psc-url-map --region=${REGION} --quiet gcloud compute backend-services delete ${BACKEND_SERVICE_NAME} --region=${REGION} --quiet gcloud compute network-endpoint-groups delete ${NEG_NAME} --region=${REGION} --quiet # Delete SSL certificate gcloud compute ssl-certificates delete ${CERT_NAME} --region=${REGION} --quiet # Delete VM instance gcloud compute instances delete client-vm --zone=${ZONE} --quiet # Delete firewall rules gcloud compute firewall-rules delete allow-ssh-iap --quiet # Delete Cloud NAT and router gcloud compute routers nats delete europe-nat --router=crnat --region=${REGION} --quiet gcloud compute routers delete crnat --region=${REGION} --quiet # Delete subnets and VPC gcloud compute networks subnets delete ${SUBNET_NAME} --region=${REGION} --quiet gcloud compute networks subnets delete eu-west9-proxy-subnet --region=${REGION} --quiet gcloud compute networks delete ${VPC_NAME} --quiet # Schedule KMS key for deletion and provide instructions for keyring deletion gcloud kms keys remove-iam-policy-binding europe-key \ --location ${REGION} \ --keyring europe-kr \ --member serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \ --role roles/cloudkms.admin gcloud kms keys versions destroy 1 --location=${REGION} --keyring=europe-kr --key=europe-key # Disable services (optional, only if you want to completely disable these APIs) gcloud services disable compute.googleapis.com --force gcloud services disable servicedirectory.googleapis.com --force gcloud services disable dns.googleapis.com --force gcloud services disable cloudkms.googleapis.com --force # Clean up local files rm -f private.key server.csr server.crt csr_config.cnf startup.sh
13. बधाई हो!
कोडलैब पूरा करने के लिए बधाई.