सुरक्षित करने वाली ऐसी कुंजियों (सीएमईके) का इस्तेमाल करके क्लाउड फ़ंक्शन को एन्क्रिप्ट (सुरक्षित) करें जिन्हें ग्राहक मैनेज करते हैं

1. परिचय

खास जानकारी

Cloud Functions, डेवलपर के लिए लाइटवेट कंप्यूट सलूशन है. इसकी मदद से डेवलपर, अकेले काम करने वाले ऐसे फ़ंक्शन बना सकते हैं जो क्लाउड इवेंट को जवाब देते हैं. इसके लिए, सर्वर या रनटाइम एनवायरमेंट को मैनेज करने की ज़रूरत नहीं होती.

Cloud Key Management Service (ग्राहक की ओर से मैनेज की जाने वाली एन्क्रिप्शन की कुंजी) (सीएमईके) का इस्तेमाल करके, Cloud Functions और इससे जुड़े डेटा को सुरक्षित रखा जा सकता है. CMEK के साथ किसी फ़ंक्शन को डिप्लॉय करने पर, उससे जुड़ा डेटा सुरक्षित रहता है. इसके लिए, उस एन्क्रिप्शन कुंजी का इस्तेमाल किया जाता है जो आपके कंट्रोल में होती है. एन्क्रिप्ट करने के इस तरीके का इस्तेमाल करके, कुछ उद्योगों में ज़रूरी शर्तों का पालन किया जा सकता है. जैसे, वित्तीय सेवाएं. कुंजी का मालिकाना हक आपके पास है और इसे Google कंट्रोल नहीं करता. इसलिए, कुंजियों को बंद या खत्म करने पर, इन एन्क्रिप्शन कुंजियों की मदद से सुरक्षित किए गए डेटा को कोई भी नहीं ऐक्सेस कर सकता. इसमें आप भी शामिल हैं.

Cloud फ़ंक्शन के लिए, CMEK इन्हें एन्क्रिप्ट करता है:

  • फ़ंक्शन का सोर्स कोड, डिप्लॉयमेंट के लिए अपलोड किया जाता है और Google इसे Cloud Storage में सेव करता है. इसका इस्तेमाल बिल्ड प्रोसेस में किया जाता है.
  • फ़ंक्शन बनाने की प्रोसेस के नतीजों के साथ-साथ, आपके फ़ंक्शन के सोर्स कोड से बनी कंटेनर इमेज भी शामिल होती है. इस इमेज में, डिप्लॉय किए गए फ़ंक्शन के हर इंस्टेंस को शामिल किया जाता है.
  • इंटरनल इवेंट ट्रांसपोर्ट वाले चैनलों के लिए, ऐक्टिव नहीं रहने वाला डेटा (सिर्फ़ 1st gen के लिए).

कौनसा डेटा एन्क्रिप्ट (सुरक्षित) किया जाता है, इस बारे में ज़्यादा जानकारी के लिए, Cloud Function CMEK दस्तावेज़ देखें.

आपको क्या बनाना होगा

यह कोडलैब, ऐसे Cloud Function (1st gen या 2nd gen) को डिप्लॉय करने का तरीका बताता है जिसे सीएमईके का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) किया गया है. यह कोडलैब एक सार्वजनिक Cloud फ़ंक्शन का इस्तेमाल करता है, जिसका मतलब है कि डेमो के लिए पुष्टि करने की ज़रूरत नहीं होती. किसी भी दूसरे Cloud फ़ंक्शन की तरह ही, पुष्टि किए गए CMEK की सुविधा वाले फ़ंक्शन को शुरू किया जा सकता है. ऐसा उन फ़ंक्शन के लिए किया जा सकता है जिनके लिए पुष्टि करने की ज़रूरत होती है.

आप इन चीज़ों के बारे में जानेंगे

  • किसी मौजूदा सिमेट्रिक की रिंग पर CMEK कुंजी बनाने का तरीका
  • Artifact Registry का डेटा स्टोर करने की जगह बनाने का तरीका
  • 1st और 2nd gen, दोनों के लिए Cloud फ़ंक्शन पर CMEK को कॉन्फ़िगर करने का तरीका

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

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

  • आपने Cloud Console में लॉग इन किया है
  • आपने एचटीटीपी से ट्रिगर किया गया Cloud Function (यह पुष्टि करने के लिए कि आपके पास सही भूमिकाएं और एपीआई चालू हैं) पहले ही डिप्लॉय कर चुके हैं

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें 853e55310c205094.png पर क्लिक करें.

55efc1aaa7a4d3ad.png

अगर आपने Cloud Shell का इस्तेमाल पहली बार किया है, तो आपको बीच में आने वाली स्क्रीन दिखेगी. इसमें यह बताया जाएगा कि यह क्या है. अगर आपको बीच के लेवल पर मिलने वाली स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.

9c92662c6a846a5c.png

प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.

9f0e51b578fecce5.png

इस वर्चुअल मशीन में डेवलपमेंट के सभी ज़रूरी टूल मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री ऑफ़र करता है और Google Cloud में चलता है. यह नेटवर्क की परफ़ॉर्मेंस और ऑथेंटिकेशन को बेहतर बनाता है. अगर सभी नहीं, तो इस कोडलैब में आपका बहुत सारा काम ब्राउज़र से किया जा सकता है.

Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि हो चुकी है और प्रोजेक्ट आपके प्रोजेक्ट आईडी पर सेट है.

  1. यह पुष्टि करने के लिए Cloud Shell में नीचे दिया गया कमांड चलाएं कि आपकी पुष्टि हो गई है:
gcloud auth list

कमांड आउटपुट

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Cloud Shell में यह कमांड चलाएं, ताकि यह पुष्टि की जा सके कि gcloud के लिए कमांड को आपके प्रोजेक्ट के बारे में जानकारी है:
gcloud config list project

कमांड आउटपुट

[core]
project = <PROJECT_ID>

अगर ऐसा नहीं है, तो आप इसे इस निर्देश की मदद से सेट कर सकते हैं:

gcloud config set project <PROJECT_ID>

कमांड आउटपुट

Updated property [core/project].

3. Cloud Functions के लिए नया की-रिंग और की बनाएं

नीचे दिए गए कमांड को चलाकर पक्का करें कि Cloud KMS API चालू है:

gcloud services enable cloudkms.googleapis.com

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

KEYRING_NAME="keyring-functions"
REGION="us-central1"
KEY_NAME="key-encrypted-function"
PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUMBER="$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')"
USER_EMAIL="$(gcloud config list account --format "value(core.account)")"

इसके बाद, एक की रिंग बनाएं जो क्लाउड केएमएस कुंजियों और की वर्शन के लिए रूट संसाधन है.

gcloud kms keyrings create $KEYRING_NAME --location $REGION

आखिर में, अब क्लाउड केएमएस (KMS) में अपने नए की-रिंग में, सिमेट्रिक कुंजी बनाई जा सकती है.

gcloud kms keys create $KEY_NAME --keyring $KEYRING_NAME --location $REGION --purpose "encryption"

4. CMEK की सुविधा वाली Docker-फ़ॉर्मैट की गई Artifact Registry का डेटा स्टोर करने की जगह बनाएं

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

सबसे पहले, आपको Artifact Registry के लिए सेवा खाते की ज़रूरत होगी. इसे बनाने के लिए, इस निर्देश का इस्तेमाल करें:

gcloud beta services identity create --service=artifactregistry.googleapis.com --project=$PROJECT_ID

Artifact Registry सेवा खाते को क्रिप्टकी एन्क्रिप्टर/डिक्रिप्टर आईएएम की भूमिका (roles/cloudkms.cryptoKeyEncrypterDecrypter) देने के लिए, नीचे दिए गए निर्देश का इस्तेमाल करें, ताकि कुंजी का इस्तेमाल किया जा सके:

gcloud kms keys add-iam-policy-binding \
  $KEY_NAME --location $REGION --keyring=$KEYRING_NAME \
  --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
  --role roles/cloudkms.cryptoKeyEncrypterDecrypter

और उस सिद्धांत को भूमिका दें जो आर्टफ़ैक्ट रजिस्ट्री में डेटा स्टोर करने की जगह बनाएगा, जैसे कि आपका मौजूदा सक्रिय खाता gcloud पुष्टि की सूची चलाकर अपने मौजूदा चालू खाते की पुष्टि की जा सकती है.

gcloud kms keys add-iam-policy-binding \
       $KEY_NAME --location $REGION --keyring=$KEYRING_NAME \
       --member user:$USER_EMAIL \
       --role roles/cloudkms.cryptoKeyEncrypterDecrypter

अब आप Docker-फ़ॉर्मैट वाला रेपो बना सकते हैं, जो सीएमईके की सुविधा देता है.

ध्यान दें: क्षेत्र और CMEK कुंजी वाला क्षेत्र एक ही होना चाहिए.

REPO_NAME=my-cmek-encrypted-repo 

KEY_FULLPATH=projects/"$PROJECT_ID"/locations/"$REGION"/keyRings/"$KEYRING_NAME"/cryptoKeys/"$KEY_NAME" 

gcloud artifacts repositories create $REPO_NAME \
    --repository-format=docker \
    --location=$REGION \
    --kms-key=$KEY_FULLPATH \
    --async

आपके पास इस कमांड को चलाने वाले नए Artifact Registry रेपो को देखने का विकल्प है:

gcloud artifacts repositories describe $REPO_NAME --location=$REGION

5. सेवा खातों को इस कुंजी का ऐक्सेस देना (2nd gen)

इस सेक्शन में, 2nd gen के फ़ंक्शन के लिए सेवा खाते बनाने के बारे में बताया गया है. अगर आपको 1st gen फ़ंक्शन बनाना है, तो कृपया अगले सेक्शन पर जाएं.

आपको क्रिप्टोकी एन्क्रिप्टर/डिक्रिप्टर आईएएम की भूमिका (roles/cloudkms.cryptoKeyEncrypterDecrypter) देकर, कई सर्विस एजेंट को इस कुंजी का ऐक्सेस देना होगा. इन सेवा एजेंट का इस्तेमाल, Cloud Storage में सेव किए गए सोर्स कोड का ऐक्सेस पाने, Artifact Registry में CMEK से सुरक्षित डेटा स्टोर करने की जगह में फ़ंक्शन इमेज को सेव करने, और CMEK से एन्क्रिप्ट (सुरक्षित) किए गए Cloud फ़ंक्शन को डिप्लॉय करने के लिए किया जाता है.

2nd gen के फ़ंक्शन इस्तेमाल करने का तरीका

  1. Cloud Run के सर्विस एजेंट को इस कुंजी का ऐक्सेस दें:
CLOUDRUN_SA=service-$PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com

gcloud kms keys add-iam-policy-binding $KEY_NAME \
--keyring=$KEYRING_NAME \
--location=$REGION \
--member=serviceAccount:$CLOUDRUN_SA \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter
  1. Eventarc के सर्विस एजेंट को इस कुंजी का ऐक्सेस दें:
EVENTARC_SA=service-$PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com

gcloud kms keys add-iam-policy-binding $KEY_NAME \
--keyring=$KEYRING_NAME \
--location=$REGION \
--member=serviceAccount:$EVENTARC_SA \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter
  1. Artifact Registry के सर्विस एजेंट को इस कुंजी का ऐक्सेस दें:
AR_SA=service-$PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com

gcloud kms keys add-iam-policy-binding $KEY_NAME \
--keyring=$KEYRING_NAME \
--location=$REGION \
--member=serviceAccount:$AR_SA \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter
  1. Cloud Storage सेवा एजेंट को इस कुंजी का ऐक्सेस दें:
STORAGE_SA=service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com

gcloud kms keys add-iam-policy-binding $KEY_NAME \
--keyring=$KEYRING_NAME \
--location=$REGION \
--member=serviceAccount:$STORAGE_SA \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter

अगले सेक्शन में, आपको CMEK से एन्क्रिप्ट (सुरक्षित) किए गए फ़ंक्शन को बनाने और डिप्लॉय करने का तरीका पता चलेगा.

6. सेवा खातों को इस कुंजी का ऐक्सेस देना (1st gen)

इस सेक्शन में, 1st gen के फ़ंक्शन के लिए सेवा खाते बनाने के बारे में बताया गया है. अगर आपने पहले 2nd gen फ़ंक्शन के लिए सेवा खाते बनाए हैं, तो कृपया अगले सेक्शन पर जाएं.

आपको क्रिप्टोकी एन्क्रिप्टर/डिक्रिप्टर आईएएम की भूमिका (roles/cloudkms.cryptoKeyEncrypterDecrypter) देकर, कई सर्विस एजेंट को इस कुंजी का ऐक्सेस देना होगा. इन सेवा एजेंट का इस्तेमाल, Cloud Storage में सेव किए गए सोर्स कोड का ऐक्सेस पाने, Artifact Registry में CMEK से सुरक्षित डेटा स्टोर करने की जगह में फ़ंक्शन इमेज को सेव करने, और CMEK से एन्क्रिप्ट (सुरक्षित) किए गए Cloud फ़ंक्शन को डिप्लॉय करने के लिए किया जाता है.

1st gen के फ़ंक्शन इस्तेमाल करने का तरीका

  1. Cloud Functions सर्विस एजेंट को इस कुंजी का ऐक्सेस दें:
FUNCTION_SA=service-$PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com

gcloud kms keys add-iam-policy-binding $KEY_NAME \
--keyring=$KEYRING_NAME \
--location=$REGION \
--member=serviceAccount:$FUNCTION_SA \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter
  1. Artifact Registry के सर्विस एजेंट को इस कुंजी का ऐक्सेस दें:
AR_SA=service-$PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com

gcloud kms keys add-iam-policy-binding $KEY_NAME \
--keyring=$KEYRING_NAME \
--location=$REGION \
--member=serviceAccount:$AR_SA \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter
  1. Cloud Storage सेवा एजेंट को इस कुंजी का ऐक्सेस दें:
STORAGE_SA=service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com

gcloud kms keys add-iam-policy-binding $KEY_NAME \
--keyring=$KEYRING_NAME \
--location=$REGION \
--member=serviceAccount:$STORAGE_SA \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter

अगले सेक्शन में, आपको CMEK से एन्क्रिप्ट (सुरक्षित) किए गए फ़ंक्शन को बनाने और डिप्लॉय करने का तरीका पता चलेगा.

7. CMEK से एन्क्रिप्ट (सुरक्षित) किया गया फ़ंक्शन (2nd gen) बनाना

इस सेक्शन में 2nd gen फ़ंक्शन बनाने के बारे में बताया गया है. 1st gen के निर्देशों के लिए अगले सेक्शन पर जाएं.

अब आपके पास एक Artifact Registry का डेटा स्टोर करने की जगह है जिसे सीएमईके की मदद से कॉन्फ़िगर किया गया है और आपने Cloud Functions को अपनी कुंजी का ऐक्सेस दे दिया है. इसलिए, अब ऐसे फ़ंक्शन को डिप्लॉय किया जा सकता है जिसे आपकी CMEK कुंजी का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) किया गया हो.

2nd gen के फ़ंक्शन के लिए चरण:

फ़ंक्शन के लिए सोर्स कोड बनाएं

हालांकि, यह कोडलैब Node.js का इस्तेमाल करता है, लेकिन आप किसी भी काम करने वाले रनटाइम का इस्तेमाल कर सकते हैं.

सबसे पहले, एक डायरेक्ट्री बनाएं और उस डायरेक्ट्री में cd डालें.

mkdir ~/cmek-function-2ndgen && cd $_

इसके बाद, Package.json फ़ाइल बनाएं.

touch package.json

echo '{
  "dependencies": {
    "@google-cloud/functions-framework": "^2.1.0"
  }
}
' > package.json

इसके बाद, index.js सोर्स फ़ाइल बनाएं.

touch index.js

echo 'const functions = require("@google-cloud/functions-framework");

functions.http("helloWorld", (req, res) => {
 res.send(`Hello ${req.query.name || req.body.name || "World"}!`);
});' > index.js

CMEK एन्क्रिप्शन का इस्तेमाल करके 2nd gen Cloud Function को डिप्लॉय करें

ध्यान दें: नीचे दिए गए उदाहरण में, आपकी मौजूदा डायरेक्ट्री के सोर्स का इस्तेमाल करके फ़ंक्शन को डिप्लॉय करने का तरीका बताया गया है. पक्का करें कि आप उसी डायरेक्ट्री में हैं जिसमें आपके फ़ंक्शन का सोर्स कोड है.

FUNCTION_NAME=protect-me-cmek-2ndgen
ENTRY_POINT=helloWorld

REPO_FULLPATH=projects/"$PROJECT_ID"/locations/"$REGION"/repositories/$REPO_NAME

gcloud beta functions deploy $FUNCTION_NAME  \
--gen2 \
--region $REGION \
--kms-key $KEY_FULLPATH \
--docker-repository $REPO_FULLPATH \
--source . \
--trigger-http \
--allow-unauthenticated \
--runtime nodejs16 \
--entry-point $ENTRY_POINT

इस निर्देश को चलाकर, नतीजे में मिले आउटपुट में से CMEK कुंजी देखी जा सकती है

gcloud के फ़ंक्शन में $Function_NAME –क्षेत्र $region | के बारे में बताया गया है ग्रेप किमीकेनाम

2nd gen फ़ंक्शन की जांच करना

आप अपने फ़ंक्शन को कर्ल करके उसकी जांच कर सकते हैं:

FUNCTION_URL="$(gcloud functions describe $FUNCTION_NAME --region $REGION --format='get(serviceConfig.uri)')"

curl $FUNCTION_URL

जिसकी वजह से ये नतीजे दिखते हैं:

Hello World!

जब तक एन्क्रिप्शन कुंजी सक्षम रहेगी, तब तक फ़ंक्शन कॉलर को वापस लौटा देगा. हालांकि, एन्क्रिप्शन कुंजी बंद होने के बाद, कॉल करने वाले (कॉलर) को गड़बड़ी का मैसेज मिलेगा.

अगले सेक्शन में, आपको दिखेगा कि बटन को बंद करने के बाद, फ़ंक्शन शुरू करने पर क्या होता है.

8. CMEK से एन्क्रिप्ट (सुरक्षित) किया गया फ़ंक्शन (1st gen) बनाएं

इस सेक्शन में 1st gen के फ़ंक्शन बनाने के बारे में बताया गया है. अगर आपने पहले ही 2nd gen फ़ंक्शन बनाया है, तो कृपया अगले सेक्शन पर जाएं.

अब आपके पास एक Artifact Registry का डेटा स्टोर करने की जगह है जिसे सीएमईके की मदद से कॉन्फ़िगर किया गया है और आपने Cloud Functions को अपनी कुंजी का ऐक्सेस दे दिया है. इसलिए, अब ऐसे फ़ंक्शन को डिप्लॉय किया जा सकता है जिसे आपकी CMEK कुंजी का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) किया गया हो.

1st gen के फ़ंक्शन इस्तेमाल करने का तरीका:

1st gen फ़ंक्शन के लिए सोर्स कोड बनाना

हालांकि, यह कोडलैब Node.js का इस्तेमाल करता है, लेकिन आप किसी भी काम करने वाले रनटाइम का इस्तेमाल कर सकते हैं.

सबसे पहले, एक डायरेक्ट्री बनाएं और उस डायरेक्ट्री में cd डालें.

mkdir ~/cmek-function-1stgen && cd $_

इसके बाद, Package.json फ़ाइल बनाएं.

touch package.json

echo '{
    "name": "function-cmek-codelab",
    "version": "0.0.1"
}' > package.json

इसके बाद, index.js सोर्स फ़ाइल बनाएं.

touch index.js

echo "exports.helloWorld = (req, res) => {
    let message = req.query.message || req.body.message || 'Hello World!';
    res.status(200).send(message);
};" > index.js

CMEK एन्क्रिप्शन का इस्तेमाल करके 1st gen Cloud Function को डिप्लॉय करें

ध्यान दें: नीचे दिए गए उदाहरण में, आपकी मौजूदा डायरेक्ट्री के सोर्स का इस्तेमाल करके फ़ंक्शन को डिप्लॉय करने का तरीका बताया गया है. पक्का करें कि आप उसी डायरेक्ट्री में हैं जिसमें आपके फ़ंक्शन का सोर्स कोड है.

FUNCTION_NAME=protect-me-cmek-1stgen
ENTRY_POINT=helloWorld

REPO_FULLPATH=projects/"$PROJECT_ID"/locations/"$REGION"/repositories/$REPO_NAME

gcloud functions deploy $FUNCTION_NAME  \
--region $REGION \
--kms-key $KEY_FULLPATH \
--docker-repository $REPO_FULLPATH \
--source . \
--trigger-http \
--allow-unauthenticated \
--runtime nodejs16 \
--entry-point $ENTRY_POINT

इस निर्देश को चलाकर, नतीजे में मिले आउटपुट में से CMEK कुंजी देखी जा सकती है

gcloud के फ़ंक्शन में $Function_NAME –क्षेत्र $region | के बारे में बताया गया है ग्रेप किमीकेनाम

1st gen के फ़ंक्शन को टेस्ट करें

आप अपने फ़ंक्शन को कर्ल करके उसकी जांच कर सकते हैं:

FUNCTION_URL="$(gcloud functions describe $FUNCTION_NAME --region $REGION --format='get(httpsTrigger.url)')"

curl $FUNCTION_URL

जिसकी वजह से ये नतीजे दिखते हैं:

Hello World!

जब तक एन्क्रिप्शन कुंजी सक्षम रहेगी, तब तक फ़ंक्शन कॉलर को वापस लौटा देगा. हालांकि, एन्क्रिप्शन कुंजी बंद होने के बाद, कॉल करने वाले (कॉलर) को गड़बड़ी का मैसेज मिलेगा.

अगले सेक्शन में, आपको दिखेगा कि बटन को बंद करने के बाद, फ़ंक्शन शुरू करने पर क्या होता है.

9. सीएमईके से एन्क्रिप्ट (सुरक्षित) किया गया ऐसा फ़ंक्शन शुरू करें जिसमें एन्क्रिप्शन कुंजी को बंद कर दिया गया हो

इस आखिरी सेक्शन में, आपको कुंजी को अमान्य करके, फ़ंक्शन को फिर से शुरू करना होगा. ऐसा करने पर, आपको गड़बड़ी का नया मैसेज दिखेगा.

एन्क्रिप्ट (सुरक्षित) करने की कुंजी बंद करें

इस निर्देश को चलाकर, पासकोड को बंद किया जा सकता है. यह कोडलैब, कुंजी का सिर्फ़ एक वर्शन बनाता है, इसलिए आपको वर्शन 1 को बंद करना होगा.

gcloud kms keys versions disable 1 \
    --key=$KEY_NAME \
    --keyring=$KEYRING_NAME \
    --location=$REGION

आपको यह जानकारी दिखेगी:

algorithm: GOOGLE_SYMMETRIC_ENCRYPTION
createTime: '2023-04-11T03:30:49.111832653Z'
generateTime: '2023-04-11T03:30:49.111832653Z'
name: projects/dogfood-gcf-saraford/locations/us-central1/keyRings/myKeyRing/cryptoKeys/encrypted-function/cryptoKeyVersions/1
protectionLevel: SOFTWARE
state: DISABLED

बंद की गई कुंजी का इस्तेमाल करके फ़ंक्शन को शुरू करें

अब फ़ंक्शन को फिर से curl करें.

curl $FUNCTION_URL

और आपको इस बार नमस्कार दुनिया का कोई जवाब नहीं मिलेगा.

Cloud फ़ंक्शन के लॉग में, आपको

User's CMEK key has been disabled. CMEK key: projects/<PROJECT-NAME>/locations/us-central1/keyRings/myKeyRing/cryptoKeys/encrypted-function

सीएमईके कुंजी बंद होने पर संसाधन देखने की कोशिश करें

इस सेक्शन में, CMEK बटन के बंद होने पर, इन संसाधनों को ऐक्सेस नहीं किया जा सकेगा:

  • फ़ंक्शन का सोर्स कोड
  • आपके सोर्स कोड से तैयार की गई कंटेनर इमेज

उदाहरण के लिए, Cloud Function के लिए सोर्स टैब पर जाने पर, संग्रह फ़ेच करते समय गड़बड़ी दिखती है. अगर आप सोर्स कोड वाली .zip फ़ाइल को सीधे Cloud Storage में देखने की कोशिश करते हैं, तो आपको इस तरह की गड़बड़ी दिखेगी.

ac3307bb05d30e19.png

इसके अलावा, आपके पास Artifact Registry के फ़ंक्शन के लिए, कंटेनर इमेज का इस्तेमाल करने का ऐक्सेस नहीं होगा. उदाहरण के लिए, अगर उस कंटेनर इमेज को Cloud Run पर डिप्लॉय करने की कोशिश की जाती है, तो आपको गड़बड़ी का मैसेज मिलेगा कि इमेज नहीं मिली.

एन्क्रिप्ट (सुरक्षित) किए गए संसाधनों की पूरी सूची देखने के लिए, कृपया CMEK फ़ंक्शन दस्तावेज़ देखें.

10. बधाई हो

बधाई हो, आपने कोडलैब पूरा कर लिया है!

इसमें हमने इन विषयों के बारे में बताया

  • किसी मौजूदा सिमेट्रिक की रिंग पर CMEK कुंजी बनाने का तरीका
  • Artifact Registry का डेटा स्टोर करने की जगह बनाने का तरीका
  • किसी Cloud फ़ंक्शन पर CMEK को कॉन्फ़िगर करने का तरीका

ज़्यादा जानकारी के लिए

Cloud Functions और CMEK के बारे में ज़्यादा जानकारी पाने के लिए इन लिंक पर जाएं: