গ্রাহক-পরিচালিত এনক্রিপশন কী (CMEK) ব্যবহার করে ক্লাউড ফাংশন এনক্রিপ্ট করুন

১. ভূমিকা

সংক্ষিপ্ত বিবরণ

ক্লাউড ফাংশনস হলো ডেভেলপারদের জন্য একটি হালকা কম্পিউট সলিউশন, যার মাধ্যমে তারা সার্ভার বা রানটাইম এনভায়রনমেন্ট পরিচালনার প্রয়োজন ছাড়াই ক্লাউড ইভেন্টে সাড়া দিতে পারে এমন একক-উদ্দেশ্যমূলক ও স্বতন্ত্র ফাংশন তৈরি করতে পারেন।

আপনি ক্লাউড ফাংশন এবং সংশ্লিষ্ট ডেটা সুরক্ষিত রাখতে ক্লাউড কী ম্যানেজমেন্ট সার্ভিস কাস্টমার-ম্যানেজড এনক্রিপশন কী (CMEK) ব্যবহার করতে পারেন। একটি CMEK সহ কোনো ফাংশন ডেপ্লয় করলে, আপনার সম্পূর্ণ নিয়ন্ত্রণে থাকা একটি এনক্রিপশন কী ব্যবহার করে এর সাথে যুক্ত ডেটা সুরক্ষিত থাকে। এই ধরনের এনক্রিপশন আপনাকে আর্থিক পরিষেবার মতো নির্দিষ্ট কিছু শিল্পে কমপ্লায়েন্সের প্রয়োজনীয়তা পূরণে সহায়তা করে। যেহেতু কী-টি আপনার মালিকানাধীন এবং গুগলের নিয়ন্ত্রণে নেই, তাই কী-গুলো নিষ্ক্রিয় বা নষ্ট করে দেওয়া হলে, এই এনক্রিপশন কী দ্বারা সুরক্ষিত ডেটা কেউ (আপনি সহ) অ্যাক্সেস করতে পারে না।

ক্লাউড ফাংশনের ক্ষেত্রে, CMEK নিম্নলিখিত বিষয়গুলো এনক্রিপ্ট করে:

  • ডিপ্লয়মেন্টের জন্য আপলোড করা এবং গুগলের ক্লাউড স্টোরেজে সংরক্ষিত ফাংশন সোর্স কোড বিল্ড প্রক্রিয়ায় ব্যবহৃত হয়।
  • ফাংশন বিল্ড প্রক্রিয়ার ফলাফল, যার মধ্যে রয়েছে আপনার ফাংশন সোর্স কোড থেকে তৈরি কন্টেইনার ইমেজ এবং ডেপ্লয় করা ফাংশনের প্রতিটি ইনস্ট্যান্স।
  • অভ্যন্তরীণ ইভেন্ট ট্রান্সপোর্ট চ্যানেলগুলির জন্য স্থির ডেটা (শুধুমাত্র প্রথম প্রজন্মের জন্য)।

কোন ডেটা এনক্রিপ্ট করা হয় সে সম্পর্কে আরও তথ্য আপনি ক্লাউড ফাংশন CMEK ডকুমেন্টেশনে পেতে পারেন।

আপনি যা তৈরি করবেন

এই কোডল্যাবটি দেখায় কিভাবে CMEK ব্যবহার করে এনক্রিপ্ট করা একটি ক্লাউড ফাংশন (প্রথম বা দ্বিতীয় প্রজন্মের) ডেপ্লয় করতে হয়। এই কোডল্যাবটি প্রদর্শনের উদ্দেশ্যে একটি পাবলিক ক্লাউড ফাংশন ব্যবহার করে, অর্থাৎ যেটির জন্য অথেনটিকেশনের প্রয়োজন হয় না। আপনি অথেনটিকেশন প্রয়োজন এমন অন্য যেকোনো ক্লাউড ফাংশনের মতোই একটি অথেনটিকেটেড CMEK-সক্ষম ফাংশন কল করতে পারেন।

আপনি যা শিখবেন

  • বিদ্যমান প্রতিসম কী রিং-এ কীভাবে একটি CMEK কী তৈরি করবেন
  • কীভাবে একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করবেন
  • প্রথম এবং দ্বিতীয় উভয় প্রজন্মের জন্য ক্লাউড ফাংশনে CMEK কীভাবে কনফিগার করবেন

২. সেটআপ এবং প্রয়োজনীয়তা

পূর্বশর্ত

  • আপনি ক্লাউড কনসোলে লগ ইন করেছেন।
  • আপনি পূর্বে একটি HTTP ট্রিগারড ক্লাউড ফাংশন ডেপ্লয় করেছেন (আপনার উপযুক্ত রোল এবং এপিআই সক্রিয় আছে কিনা তা যাচাই করার জন্য)।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, অ্যাক্টিভেট ক্লাউড শেল-এ ক্লিক করুন। 853e55310c205094.png .

55efc1aaa7a4d3ad.png

আপনি যদি প্রথমবারের মতো ক্লাউড শেল চালু করেন, তাহলে এটি কী তা বর্ণনা করে একটি মধ্যবর্তী স্ক্রিন আপনার সামনে আসবে। যদি একটি মধ্যবর্তী স্ক্রিন আসে, তাহলে 'চালিয়ে যান' (Continue) এ ক্লিক করুন।

9c92662c6a846a5c.png

ক্লাউড শেল প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত।

9f0e51b578fecce5.png

এই ভার্চুয়াল মেশিনটিতে প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার প্রায় সমস্ত কাজই একটি ব্রাউজার দিয়ে করা সম্ভব।

ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি দেখতে পাবেন যে আপনাকে প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
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 কমান্ডটি আপনার প্রজেক্ট সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না থাকে, তবে আপনি এই কমান্ডটি দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

৩. ক্লাউড ফাংশনের জন্য একটি নতুন কী রিং এবং কী তৈরি করুন

নিম্নলিখিত কমান্ডটি চালিয়ে ক্লাউড কেএমএস এপিআই (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

সবশেষে, এখন আপনি ক্লাউড কেএমএস-এর মধ্যে আপনার নতুন কী রিং-এ একটি সিমেট্রিক কী তৈরি করতে পারবেন।

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

৪. একটি CMEK-সক্ষম ডকার-ফরম্যাটেড আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করুন।

এই অংশে, আপনি আর্টিফ্যাক্ট রেজিস্ট্রি-তে একটি ডকার-ফরম্যাটেড রিপো তৈরি করবেন যেটি CMEK-সক্ষম করা আছে । এই কী-টিই আপনার ক্লাউড ফাংশন ডেপ্লয় করতে ব্যবহৃত হবে।

প্রথমে, আপনার আর্টিফ্যাক্ট রেজিস্ট্রির জন্য সার্ভিস অ্যাকাউন্টটি প্রয়োজন হবে। এই কমান্ডটি চালিয়ে আপনি এটি তৈরি করতে পারেন:

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

আর্টিফ্যাক্ট রেজিস্ট্রি সার্ভিস অ্যাকাউন্টকে কী-টির উপর অনুমতি দেওয়ার জন্য, নিম্নলিখিত কমান্ডটি ব্যবহার করে CryptoKey Encrypter/Decrypter 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-সক্ষম ডকার-ফরম্যাটেড রিপো তৈরি করতে পারবেন।

দ্রষ্টব্য: অঞ্চলটি অবশ্যই 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

এই কমান্ডটি চালিয়ে আপনি আপনার নতুন আর্টিফ্যাক্ট রেজিস্ট্রি রিপো দেখতে পারেন:

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

৫. সার্ভিস অ্যাকাউন্টগুলোকে কী-তে অ্যাক্সেস দিন (২য় প্রজন্ম)

এই বিভাগে ২য় প্রজন্মের ফাংশনগুলির জন্য সার্ভিস অ্যাকাউন্ট তৈরি করার পদ্ধতি আলোচনা করা হয়েছে। আপনি যদি ১ম প্রজন্মের ফাংশন তৈরি করেন, তবে অনুগ্রহ করে পরবর্তী বিভাগে যান।

আপনাকে অবশ্যই CryptoKey Encrypter/Decrypter IAM রোল ( roles/cloudkms.cryptoKeyEncrypterDecrypter ) প্রদান করার মাধ্যমে একাধিক সার্ভিস এজেন্টকে কী-টিতে অ্যাক্সেস দিতে হবে। এই সার্ভিস এজেন্টগুলি ক্লাউড স্টোরেজে সংরক্ষিত সোর্স কোডে অ্যাক্সেস পেতে, আর্টিফ্যাক্ট রেজিস্ট্রিতে একটি CMEK-সুরক্ষিত রিপোজিটরিতে ফাংশন ইমেজ সংরক্ষণ করতে এবং একটি CMEK-এনক্রিপ্টেড ক্লাউড ফাংশন ডেপ্লয় করতে ব্যবহৃত হয়।

দ্বিতীয় প্রজন্মের ফাংশনগুলির জন্য পদক্ষেপ

  1. ক্লাউড রান পরিষেবা এজেন্টকে কী-টিতে অ্যাক্সেস দিন:
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. আর্টিফ্যাক্ট রেজিস্ট্রি সার্ভিস এজেন্টকে কী-টিতে অ্যাক্সেস প্রদান করুন:
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. ক্লাউড স্টোরেজ পরিষেবা এজেন্টদের কী-টিতে অ্যাক্সেস দিন:
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-এনক্রিপ্টেড ফাংশন তৈরি এবং স্থাপন করতে হয়।

৬. সার্ভিস অ্যাকাউন্টগুলোকে কী-তে অ্যাক্সেস দিন (১ম প্রজন্ম)

এই বিভাগে প্রথম প্রজন্মের ফাংশনগুলির জন্য সার্ভিস অ্যাকাউন্ট তৈরি করার পদ্ধতি আলোচনা করা হয়েছে। আপনি যদি পূর্বে দ্বিতীয় প্রজন্মের কোনো ফাংশনের জন্য সার্ভিস অ্যাকাউন্ট তৈরি করে থাকেন, তবে অনুগ্রহ করে পরবর্তী বিভাগে যান।

আপনাকে অবশ্যই CryptoKey Encrypter/Decrypter IAM রোল ( roles/cloudkms.cryptoKeyEncrypterDecrypter ) প্রদান করার মাধ্যমে একাধিক সার্ভিস এজেন্টকে কী-টিতে অ্যাক্সেস দিতে হবে। এই সার্ভিস এজেন্টগুলি ক্লাউড স্টোরেজে সংরক্ষিত সোর্স কোডে অ্যাক্সেস পেতে, আর্টিফ্যাক্ট রেজিস্ট্রিতে একটি CMEK-সুরক্ষিত রিপোজিটরিতে ফাংশন ইমেজ সংরক্ষণ করতে এবং একটি CMEK-এনক্রিপ্টেড ক্লাউড ফাংশন ডেপ্লয় করতে ব্যবহৃত হয়।

প্রথম প্রজন্মের ফাংশনগুলির জন্য পদক্ষেপগুলি

  1. ক্লাউড ফাংশন পরিষেবা এজেন্টকে কী-টিতে অ্যাক্সেস দিন:
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. আর্টিফ্যাক্ট রেজিস্ট্রি সার্ভিস এজেন্টকে কী-টিতে অ্যাক্সেস প্রদান করুন:
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. ক্লাউড স্টোরেজ পরিষেবা এজেন্টদের কী-টিতে অ্যাক্সেস দিন:
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-এনক্রিপ্টেড ফাংশন তৈরি এবং স্থাপন করতে হয়।

৭. একটি CMEK-এনক্রিপ্টেড ফাংশন (২য় প্রজন্ম) তৈরি করুন

এই বিভাগে দ্বিতীয় প্রজন্মের ফাংশন তৈরি করার পদ্ধতি আলোচনা করা হয়েছে। প্রথম প্রজন্মের নির্দেশাবলীর জন্য আপনি পরবর্তী বিভাগে যেতে পারেন।

এখন যেহেতু আপনি CMEK সক্রিয় করে একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি কনফিগার করেছেন এবং ক্লাউড ফাংশনসকে আপনার কী-তে অ্যাক্সেস দিয়েছেন, আপনি এখন আপনার CMEK কী ব্যবহার করে এনক্রিপ্ট করা একটি ফাংশন ডেপ্লয় করতে পারবেন।

দ্বিতীয় প্রজন্মের ফাংশনগুলির জন্য পদক্ষেপ:

ফাংশনটির জন্য সোর্স কোড তৈরি করুন।

যদিও এই কোডল্যাবে Node.js ব্যবহার করা হয়েছে, আপনি যেকোনো সমর্থিত রানটাইম ব্যবহার করতে পারেন।

প্রথমে, একটি ডিরেক্টরি তৈরি করুন এবং সেই ডিরেক্টরিতে প্রবেশ করুন।

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 এনক্রিপশন ব্যবহার করে দ্বিতীয় প্রজন্মের ক্লাউড ফাংশন স্থাপন করুন।

দ্রষ্টব্য: নিচের উদাহরণটি দেখায় কিভাবে আপনার বর্তমান ডিরেক্টরির সোর্স ব্যবহার করে একটি ফাংশন ডেপ্লয় করতে হয়। নিশ্চিত করুন যে আপনি আপনার ফাংশনের সোর্স কোডের ডিরেক্টরিতেই আছেন।

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

দ্বিতীয় প্রজন্মের ফাংশনটি পরীক্ষা করুন

আপনি আপনার ফাংশনটি কার্ল করে পরীক্ষা করতে পারেন:

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

curl $FUNCTION_URL

যার ফলে নিম্নলিখিত বিষয়গুলো ঘটে:

Hello World!

যতক্ষণ এনক্রিপশন কী সক্রিয় থাকবে, ফাংশনটি কলকারীকে সফলতার বার্তা ফেরত দেবে। কিন্তু, এনক্রিপশন কী নিষ্ক্রিয় করা হলে, কলকারী একটি ত্রুটি বার্তা পাবে।

পরবর্তী অংশে আপনি দেখতে পাবেন, কী-টি নিষ্ক্রিয় করার পর ফাংশনটি কল করলে কী ঘটে।

৮. একটি CMEK-এনক্রিপ্টেড ফাংশন (১ম প্রজন্ম) তৈরি করুন

এই বিভাগে প্রথম প্রজন্মের ফাংশন তৈরি করার পদ্ধতি আলোচনা করা হয়েছে। আপনি যদি আগে দ্বিতীয় প্রজন্মের ফাংশন তৈরি করে থাকেন, তবে অনুগ্রহ করে পরবর্তী বিভাগে যান।

এখন যেহেতু আপনি CMEK সক্রিয় করে একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি কনফিগার করেছেন এবং ক্লাউড ফাংশনসকে আপনার কী-তে অ্যাক্সেস দিয়েছেন, আপনি এখন আপনার CMEK কী ব্যবহার করে এনক্রিপ্ট করা একটি ফাংশন ডেপ্লয় করতে পারবেন।

প্রথম প্রজন্মের ফাংশনগুলির জন্য পদক্ষেপ:

প্রথম প্রজন্মের ফাংশনের জন্য সোর্স কোড তৈরি করুন।

যদিও এই কোডল্যাবে Node.js ব্যবহার করা হয়েছে, আপনি যেকোনো সমর্থিত রানটাইম ব্যবহার করতে পারেন।

প্রথমে, একটি ডিরেক্টরি তৈরি করুন এবং সেই ডিরেক্টরিতে প্রবেশ করুন।

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 এনক্রিপশন ব্যবহার করে প্রথম প্রজন্মের ক্লাউড ফাংশন স্থাপন করুন।

দ্রষ্টব্য: নিচের উদাহরণটি দেখায় কিভাবে আপনার বর্তমান ডিরেক্টরির সোর্স ব্যবহার করে একটি ফাংশন ডেপ্লয় করতে হয়। নিশ্চিত করুন যে আপনি আপনার ফাংশনের সোর্স কোডের ডিরেক্টরিতেই আছেন।

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!

যতক্ষণ এনক্রিপশন কী সক্রিয় থাকবে, ফাংশনটি কলকারীকে সফলতার বার্তা ফেরত দেবে। কিন্তু, এনক্রিপশন কী নিষ্ক্রিয় করা হলে, কলকারী একটি ত্রুটি বার্তা পাবে।

পরবর্তী অংশে আপনি দেখতে পাবেন, কী-টি নিষ্ক্রিয় করার পর ফাংশনটি কল করলে কী ঘটে।

৯. এমন একটি CMEK-এনক্রিপ্টেড ফাংশন কল করুন যেখানে এনক্রিপশন কী নিষ্ক্রিয় করা হয়েছে।

এই শেষ অংশে, আপনি কী-টি বাতিল করে দেবেন এবং ফলাফলস্বরূপ ত্রুটিটি দেখার জন্য ফাংশনটি পুনরায় কল করবেন।

এনক্রিপশন কী নিষ্ক্রিয় করুন

কী-টি নিষ্ক্রিয় করতে আপনি এই কমান্ডটি চালাতে পারেন। যেহেতু এই কোডল্যাবটি কী-টির কেবল একটি সংস্করণ তৈরি করে, তাই আপনি সংস্করণ ১ নিষ্ক্রিয় করবেন।

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

এবং এবার আপনি 'হ্যালো ওয়ার্ল্ড' উত্তর পাবেন না।

ক্লাউড ফাংশনের লগগুলিতে, আপনি দেখতে পাবেন

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

CMEK কী নিষ্ক্রিয় থাকা অবস্থায় রিসোর্স দেখার চেষ্টা

এই অংশে, আপনি দেখতে পাবেন যে CMEK কী নিষ্ক্রিয় করা হলে নিম্নলিখিত রিসোর্সগুলি অনুপলব্ধ হয়ে যায়:

  • ফাংশন সোর্স কোড
  • আপনার সোর্স কোড থেকে তৈরি কন্টেইনার ইমেজ

উদাহরণস্বরূপ, ক্লাউড ফাংশনের সোর্স ট্যাবে গেলে আর্কাইভটি আনার সময় একটি ত্রুটি দেখা যায়। আপনি যদি ক্লাউড স্টোরেজে সরাসরি সোর্স কোড সম্বলিত .zip ফাইলটি দেখার চেষ্টা করেন, তাহলেও একই ধরনের ত্রুটি পাবেন।

ac3307bb05d30e19.png

এছাড়াও, আপনি আর্টিফ্যাক্ট রেজিস্ট্রি থেকে ফাংশনটির জন্য কন্টেইনার ইমেজটি ব্যবহার করার অ্যাক্সেস পাবেন না। উদাহরণস্বরূপ, আপনি যদি সেই কন্টেইনার ইমেজটি ক্লাউড রান-এ ডেপ্লয় করার চেষ্টা করেন, তাহলে আপনি একটি এরর পাবেন যে ইমেজটি খুঁজে পাওয়া যায়নি।

এনক্রিপ্টেড রিসোর্সসমূহের সম্পূর্ণ তালিকার জন্য অনুগ্রহ করে CMEK ফাংশন ডকুমেন্টেশন দেখুন।

১০. অভিনন্দন

অভিনন্দন, আপনি কোডল্যাবটি সম্পন্ন করেছেন!

আমরা যা আলোচনা করেছি

  • বিদ্যমান প্রতিসম কী রিং-এ কীভাবে একটি CMEK কী তৈরি করবেন
  • কীভাবে একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করবেন
  • ক্লাউড ফাংশনে CMEK কীভাবে কনফিগার করবেন

আরও তথ্যের জন্য

আপনি নিম্নলিখিত লিঙ্কগুলিতে ক্লাউড ফাংশন এবং CMEK সম্পর্কে আরও তথ্য পেতে পারেন: