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

1. परिचय

खास जानकारी

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

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

Cloud Functions के लिए, CMEK इन चीज़ों को एन्क्रिप्ट करता है:

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

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

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

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

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

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

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

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

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

Cloud Shell चालू करें

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

55efc1aaa7a4d3ad.png

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

9c92662c6a846a5c.png

Cloud Shell को प्रोवाइड करने और उससे कनेक्ट करने में सिर्फ़ कुछ मिनट लगेंगे.

9f0e51b578fecce5.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल लोड होते हैं. इसमें लगातार पांच जीबी की होम डायरेक्ट्री मिलती है और यह 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. gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है या नहीं, इसकी पुष्टि करने के लिए Cloud Shell में यह कमांड चलाएं:
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)")"

इसके बाद, एक की रिंग बनाएं. यह Cloud KMS कुंजियों और कुंजी के वर्शन का रूट रिसॉर्स होता है.

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 के सेवा खाते को CryptoKey एन्क्रिप्टर/डिक्रिप्टर IAM भूमिका (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 auth list चलाकर, अपने मौजूदा ऐक्टिव खाते की पुष्टि की जा सकती है.

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

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

ध्यान दें: यह ज़रूरी है कि क्षेत्र वही हो जो सीएमईके पासकोड के लिए चुना गया है.

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

इस निर्देश को चलाकर, अपना नया आर्टफ़ैक्ट रजिस्ट्री रिपॉज़िटरी देखा जा सकता है:

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

5. सेवा खातों को कुंजी का ऐक्सेस देना (दूसरा जनरेशन)

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

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

दूसरे जनरेशन के फ़ंक्शन इस्तेमाल करने का तरीका

  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

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

6. सेवा खातों को कुंजी का ऐक्सेस देना (पहले जनरेशन)

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

आपको कई सेवा एजेंट को इस पासकोड का ऐक्सेस देना होगा. इसके लिए, आपको क्रिप्टोकी एन्क्रिप्टर/डिक्रिप्टर आईएएम की भूमिका (roles/cloudkms.cryptoKeyEncrypterDecrypter) देनी होगी. इन सेवा एजेंट का इस्तेमाल, Cloud Storage में स्टोर किए गए सोर्स कोड का ऐक्सेस पाने, आर्टफ़ैक्ट रजिस्ट्री में सीएमईके से सुरक्षित डेटा स्टोर करने की जगह में फ़ंक्शन इमेज को स्टोर करने, और सीएमईके से एन्क्रिप्ट किए गए 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) बनाना

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

अब आपके पास CMEK की सुविधा चालू करके कॉन्फ़िगर किया गया आर्टफ़ैक्ट रजिस्ट्री रिपॉज़िटरी है. साथ ही, आपने 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 एन्क्रिप्शन का इस्तेमाल करके, दूसरे जनरेशन का 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 functions describe $FUNCTION_NAME –region $REGION | grep kmsKeyName

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

अपने फ़ंक्शन की जांच करने के लिए, उसे कर्ल करें:

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

curl $FUNCTION_URL

इस वजह से, ये समस्याएं होती हैं:

Hello World!

जब तक एन्क्रिप्शन पासकोड चालू रहेगा, तब तक फ़ंक्शन कॉल करने वाले को 'सफलता' दिखाएगा. हालांकि, एन्क्रिप्शन पासकोड बंद होने के बाद, कॉल करने वाले को गड़बड़ी का मैसेज मिलेगा.

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

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

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

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

पहले जनरेशन के फ़ंक्शन इस्तेमाल करने का तरीका:

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 एन्क्रिप्शन का इस्तेमाल करके, पहले जनरेशन का 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 functions describe $FUNCTION_NAME –region $REGION | grep kmsKeyName

पहले जनरेशन के फ़ंक्शन की जांच करना

अपने फ़ंक्शन की जांच करने के लिए, उसे कर्ल करें:

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 Function के लॉग में, आपको यह जानकारी दिखेगी

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

सीएमईके पासकोड बंद होने पर, रिसॉर्स देखने की कोशिश करना

इस सेक्शन में, आपको यह जानकारी दिखेगी कि सीएमईके पासकोड बंद होने पर, ये संसाधन उपलब्ध नहीं होंगे:

  • फ़ंक्शन का सोर्स कोड
  • आपके सोर्स कोड से कंटेनर इमेज बनाना

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

ac3307bb05d30e19.png

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

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

10. बधाई हो

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

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

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

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

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