ক্লাউড রানে নিরাপদে স্থাপন করা হচ্ছে

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

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

যা শিখবেন

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

তারপরে আপনি দেখতে পাবেন কীভাবে অ্যাপটিতে অ্যাক্সেস অনুমোদন করা যায় এবং অনুমোদিত অনুরোধ করা যায়।

এটি অ্যাপ্লিকেশান স্থাপনার সুরক্ষার একটি সম্পূর্ণ চেহারা নয়, তবে এর পরিবর্তে আপনি আপনার ভবিষ্যতের সমস্ত অ্যাপ স্থাপনায় পরিবর্তন করতে পারেন যা খুব সামান্য প্রচেষ্টায় তাদের সুরক্ষা উন্নত করবে।

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

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি যে কোনো সময় এটি আপডেট করতে পারেন.
  • প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন এবং এটি উপলব্ধ কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, একটি তৃতীয় মান রয়েছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে এই টিউটোরিয়ালের বাইরে আপনার বিলিং খরচ না হয়, আপনি আপনার তৈরি করা রিসোর্স মুছে ফেলতে পারেন বা পুরো প্রোজেক্ট মুছে ফেলতে পারেন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

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

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন 853e55310c205094.png .

55efc1aaa7a4d3ad.png

আপনি যদি আগে কখনও ক্লাউড শেল চালু না করে থাকেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রীন (ভাঁজের নীচে) উপস্থাপন করা হবে যা বর্ণনা করে। যদি এটি হয়, তবে চালিয়ে যান ক্লিক করুন (এবং আপনি এটি আর কখনও দেখতে পাবেন না)। এককালীন স্ক্রীনটি দেখতে কেমন তা এখানে রয়েছে:

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

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

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

  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].

এনভায়রনমেন্ট সেটআপ

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

  1. পরবর্তী কমান্ডগুলিতে ব্যবহারের জন্য প্রকল্প আইডিতে একটি পরিবেশ পরিবর্তনশীল সেট করুন:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export SERVICE_NAME=partner-registration-service
  1. ক্লাউড রান পরিষেবা API সক্ষম করুন যা আপনার অ্যাপটি চালাবে, Firestore API যা NoSQL ডেটা স্টোরেজ প্রদান করবে, ক্লাউড বিল্ড এপিআই যা ডিপ্লয়মেন্ট কমান্ড দ্বারা ব্যবহৃত হবে, এবং আর্টিফ্যাক্ট রেজিস্ট্রি যা তৈরি করার সময় অ্যাপ্লিকেশন কন্টেইনার ধরে রাখতে ব্যবহার করা হবে :
gcloud services enable \
  run.googleapis.com \
  firestore.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com
  1. নেটিভ মোডে Firestore ডাটাবেস আরম্ভ করুন। এই কমান্ডটি অ্যাপ ইঞ্জিন এপিআই ব্যবহার করে, তাই এটি প্রথমে সক্রিয় করা আবশ্যক।

কমান্ডটি অবশ্যই অ্যাপ ইঞ্জিনের জন্য একটি অঞ্চল নির্দিষ্ট করতে হবে, যা আমরা ব্যবহার করব না তবে ঐতিহাসিক কারণে তৈরি করতে হবে এবং ডাটাবেসের জন্য একটি অঞ্চল। আমরা অ্যাপ ইঞ্জিনের জন্য us-central এবং ডাটাবেসের জন্য nam5 ব্যবহার করব। nam5 হল মার্কিন যুক্তরাষ্ট্রের বহু-অঞ্চলের অবস্থান। বহু-অঞ্চলের অবস্থানগুলি ডাটাবেসের প্রাপ্যতা এবং স্থায়িত্বকে সর্বাধিক করে তোলে।

gcloud services enable appengine.googleapis.com

gcloud app create --region=us-central
gcloud firestore databases create --region=nam5
  1. নমুনা অ্যাপ সংগ্রহস্থল ক্লোন করুন এবং ডিরেক্টরিতে নেভিগেট করুন
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service

3. README পর্যালোচনা করুন

এডিটর খুলুন এবং অ্যাপটিতে থাকা ফাইলগুলো দেখুন। README.md দেখুন, যা এই অ্যাপটি স্থাপন করার জন্য প্রয়োজনীয় পদক্ষেপগুলি বর্ণনা করে৷ এই পদক্ষেপগুলির মধ্যে কিছু বিবেচনা করার জন্য অন্তর্নিহিত বা স্পষ্ট নিরাপত্তা সিদ্ধান্ত জড়িত থাকতে পারে। এখানে বর্ণিত হিসাবে আপনার নিয়োজিত অ্যাপের নিরাপত্তা উন্নত করতে আপনি এই পছন্দগুলির কয়েকটি পরিবর্তন করবেন:

ধাপ 3 - npm install চালান

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

ধাপ 4 এবং 5 - সম্পাদনা করুন এবং deploy.sh চালান

এই পদক্ষেপগুলি অ্যাপটিকে ক্লাউড রানে স্থাপন করে এবং বেশিরভাগ বিকল্পগুলি তাদের ডিফল্টে রেখে দেয়। আপনি দুটি মূল উপায়ে স্থাপনাটিকে আরও সুরক্ষিত করতে এই পদক্ষেপটি পরিবর্তন করবেন:

  1. অননুমোদিত অ্যাক্সেসের অনুমতি দেবেন না । অন্বেষণের সময় জিনিসগুলি চেষ্টা করার জন্য এটি অনুমতি দেওয়া সুবিধাজনক হতে পারে, তবে এটি বাণিজ্যিক অংশীদারদের দ্বারা ব্যবহারের জন্য একটি ওয়েব পরিষেবা এবং সর্বদা এর ব্যবহারকারীদের প্রমাণীকরণ করা উচিত৷
  2. নির্দিষ্ট করুন যে অ্যাপ্লিকেশনটিকে শুধুমাত্র প্রয়োজনীয় সুযোগ-সুবিধাগুলির সাথে উপযোগী একটি ডেডিকেটেড পরিষেবা অ্যাকাউন্ট ব্যবহার করতে হবে, একটি ডিফল্টের পরিবর্তে যাতে প্রয়োজনের চেয়ে বেশি API এবং সংস্থান অ্যাক্সেস থাকবে৷ এটি সর্বনিম্ন বিশেষাধিকারের নীতি হিসাবে পরিচিত, এবং এটি অ্যাপ্লিকেশন নিরাপত্তার একটি মৌলিক ধারণা।

ধাপ 6 থেকে 11 - সঠিক আচরণ যাচাই করতে নমুনা ওয়েব অনুরোধ করুন

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

4. নিরাপদে পরিষেবাটি স্থাপন করুন৷

deploy.sh স্ক্রিপ্টে প্রয়োজন অনুসারে দুটি পরিবর্তন চিহ্নিত করা হয়েছে: অননুমোদিত অ্যাক্সেসের অনুমতি না দেওয়া, এবং ন্যূনতম সুযোগ-সুবিধা সহ একটি ডেডিকেটেড পরিষেবা অ্যাকাউন্ট ব্যবহার করা।

আপনি প্রথমে একটি নতুন পরিষেবা অ্যাকাউন্ট তৈরি করবেন, তারপরে সেই পরিষেবা অ্যাকাউন্টের উল্লেখ করতে এবং অননুমোদিত অ্যাক্সেসের অনুমতি দেওয়ার জন্য deploy.sh স্ক্রিপ্টটি সম্পাদনা করুন, তারপরে আমরা পরিবর্তিত deploy.sh স্ক্রিপ্টটি চালানোর আগে পরিবর্তিত স্ক্রিপ্টটি চালিয়ে পরিষেবাটি স্থাপন করুন।

একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন এবং এটিকে ফায়ারস্টোর/ডেটাস্টোরে প্রয়োজনীয় অ্যাক্সেস দিন

gcloud iam service-accounts create partner-sa

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:partner-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role=roles/datastore.user

deploy.sh সম্পাদনা করুন

অননুমোদিত অ্যাক্সেস (–না-অনুমোদিত-অপ্রমাণিত) অনুমোদন করতে এবং স্থাপন করা অ্যাপের জন্য নতুন পরিষেবা অ্যাকাউন্ট (–পরিষেবা-অ্যাকাউন্ট) নির্দিষ্ট করতে deploy.sh ফাইলটি পরিবর্তন করুন৷ GOOGLE_PROJECT_ID আপনার নিজের প্রকল্পের ID হতে সংশোধন করুন৷

আপনি প্রথম দুটি লাইন মুছে ফেলবেন এবং নীচে দেখানো হিসাবে অন্য তিনটি লাইন পরিবর্তন করবেন।

gcloud run deploy $SERVICE_NAME \
  --source . \
  --platform managed \
  --region ${REGION} \
  --no-allow-unauthenticated \
  --project=$PROJECT_ID \
  --service-account=partner-sa@${PROJECT_ID}.iam.gserviceaccount.com

পরিষেবাটি স্থাপন করুন

কমান্ড লাইন থেকে, deploy.sh স্ক্রিপ্ট চালান:

./deploy.sh

যখন স্থাপনা সম্পূর্ণ হয়, কমান্ড আউটপুটের শেষ লাইনটি নতুন অ্যাপের পরিষেবা URL প্রদর্শন করবে। একটি পরিবেশ পরিবর্তনশীল মধ্যে URL সংরক্ষণ করুন:

export SERVICE_URL=<URL from last line of command output>

এখন curl টুল ব্যবহার করে অ্যাপ থেকে একটি অর্ডার আনার চেষ্টা করুন:

curl -i -X GET $SERVICE_URL/partners

curl কমান্ডের জন্য -i পতাকা এটিকে আউটপুটে প্রতিক্রিয়া শিরোনাম অন্তর্ভুক্ত করতে বলে। আউটপুটের প্রথম লাইনটি হওয়া উচিত:

HTTP/2 403

অপ্রমাণিত অনুরোধগুলিকে অনুমোদন না করার বিকল্পের সাথে অ্যাপটি স্থাপন করা হয়েছিল। এই কার্ল কমান্ডে কোন প্রমাণীকরণ তথ্য নেই, তাই এটি ক্লাউড রান দ্বারা প্রত্যাখ্যান করা হয়েছে। প্রকৃত নিয়োজিত অ্যাপ্লিকেশনটি এমনকি এই অনুরোধ থেকে কোনো ডেটা চালাতে বা গ্রহণ করে না।

5. প্রমাণীকৃত অনুরোধ করুন

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

Authorization: Bearer identity-token

পরিচয়-টোকেন হল একটি স্বল্প মেয়াদী, ক্রিপ্টোগ্রাফিকভাবে স্বাক্ষরিত, একটি বিশ্বস্ত প্রমাণীকরণ প্রদানকারী দ্বারা জারি করা এনকোড করা স্ট্রিং। এই ক্ষেত্রে, একটি অপ্রয়োজনীয়, বৈধ, Google-এর জারি করা পরিচয় টোকেন প্রয়োজন৷

আপনার ব্যবহারকারী অ্যাকাউন্ট হিসাবে একটি অনুরোধ করুন

Google Cloud CLI টুল ডিফল্ট প্রমাণীকৃত ব্যবহারকারীর জন্য একটি টোকেন প্রদান করতে পারে। আপনার নিজের অ্যাকাউন্টের জন্য একটি পরিচয় টোকেন পেতে এই কমান্ডটি চালান এবং ID_TOKEN এনভায়রনমেন্ট ভেরিয়েবলে সংরক্ষণ করুন:

export ID_TOKEN=$(gcloud auth print-identity-token)

ডিফল্টরূপে, Google জারি করা পরিচয় টোকেন এক ঘন্টার জন্য বৈধ। অনুরোধটি করার জন্য নিম্নলিখিত কার্ল কমান্ডটি চালান যা আগে প্রত্যাখ্যান করা হয়েছিল কারণ এটি অনুমোদিত ছিল না। এই কমান্ডটি প্রয়োজনীয় শিরোনাম অন্তর্ভুক্ত করবে:

curl -i -X GET $SERVICE_URL/partners \
  -H "Authorization: Bearer $ID_TOKEN"

কমান্ড আউটপুট HTTP/2 200 দিয়ে শুরু হওয়া উচিত, এটি নির্দেশ করে যে অনুরোধটি গ্রহণযোগ্য এবং সম্মানিত হচ্ছে। (যদি আপনি এক ঘন্টা অপেক্ষা করেন এবং এই অনুরোধটি আবার চেষ্টা করেন, এটি ব্যর্থ হবে কারণ টোকেনের মেয়াদ শেষ হয়ে গেছে।) প্রতিক্রিয়ার মূল অংশটি আউটপুটের শেষে, একটি ফাঁকা লাইনের পরে:

{"status":"success","data":[]}

এখনও কোন অংশীদার নেই.

দুটি curl কমান্ড সহ ডিরেক্টরিতে নমুনা JSON ডেটা ব্যবহার করে অংশীদারদের নিবন্ধন করুন:

curl -X POST \
  -H "Authorization: Bearer $ID_TOKEN" \
  -H "Content-Type: application/json" \
  -d "@example-partner.json" \
  $SERVICE_URL/partner

এবং

curl -X POST \
  -H "Authorization: Bearer $ID_TOKEN" \
  -H "Content-Type: application/json" \
  -d "@example-partner2.json" \
  $SERVICE_URL/partner

এখন সমস্ত নিবন্ধিত অংশীদারদের দেখতে আগের GET অনুরোধটি পুনরাবৃত্তি করুন:

curl -i -X GET $SERVICE_URL/partners \
  -H "Authorization: Bearer $ID_TOKEN"

দুটি নিবন্ধিত অংশীদার সম্পর্কে তথ্য প্রদান করে আপনার আরও অনেক বেশি সামগ্রী সহ JSON ডেটা দেখতে হবে।

একটি অননুমোদিত অ্যাকাউন্ট হিসাবে একটি অনুরোধ করুন

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

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

  1. tester নামে একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন।
gcloud iam service-accounts create tester
  1. আপনি এই নতুন অ্যাকাউন্টের জন্য একটি আইডেন্টিটি টোকেন পাবেন যেভাবে আপনি আগে আপনার ডিফল্ট অ্যাকাউন্টের জন্য পেয়েছিলেন। যাইহোক, এর জন্য আপনার ডিফল্ট অ্যাকাউন্টের পরিষেবা অ্যাকাউন্টের ছদ্মবেশী করার অনুমতি প্রয়োজন। আপনার অ্যাকাউন্টকে এই অনুমতি দিন।
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="user:$USER_EMAIL" \
  --role=roles/iam.serviceAccountTokenCreator
  1. এখন TEST_IDENTITY এনভায়রনমেন্ট ভেরিয়েবলে এই নতুন অ্যাকাউন্টের জন্য একটি পরিচয় টোকেন সংরক্ষণ করতে নিম্নলিখিত কমান্ডটি চালান। যদি কমান্ড একটি ত্রুটি বার্তা দেখায়, এক বা দুই মিনিট অপেক্ষা করুন এবং আবার চেষ্টা করুন।
export TEST_TOKEN=$( \
  gcloud auth print-identity-token \
    --impersonate-service-account \
    "tester@$PROJECT_ID.iam.gserviceaccount.com" \
)
  1. পূর্বের মত প্রমাণীকৃত ওয়েব অনুরোধ করুন, কিন্তু এই পরিচয় টোকেন ব্যবহার করে:
curl -i -X GET $SERVICE_URL/partners \
  -H "Authorization: Bearer $TEST_TOKEN"

কমান্ড আউটপুট আবার HTTP/2 403 দিয়ে শুরু হবে কারণ অনুরোধটি, যদিও প্রমাণীকৃত , অনুমোদিত নয়। নতুন পরিষেবা অ্যাকাউন্টের এই অ্যাপটি চালু করার অনুমতি নেই৷

একটি অ্যাকাউন্ট অনুমোদন

একটি ব্যবহারকারী বা পরিষেবা অ্যাকাউন্টে অনুরোধ করার জন্য একটি ক্লাউড রান পরিষেবাতে ক্লাউড রান ইনভোকার ভূমিকা থাকতে হবে৷ কমান্ড সহ পরীক্ষক পরিষেবা অ্যাকাউন্টকে সেই ভূমিকাটি দিন:

export REGION=us-central1
gcloud run services add-iam-policy-binding ${SERVICE_NAME} \
  --member="serviceAccount:tester@$PROJECT_ID.iam.gserviceaccount.com" \
  --role=roles/run.invoker \
  --region=${REGION}

নতুন ভূমিকা আপডেট করার জন্য এক বা দুই মিনিট অপেক্ষা করার পরে, প্রমাণীকৃত অনুরোধটি পুনরাবৃত্তি করুন। একটি নতুন TEST_TOKEN সংরক্ষণ করুন যদি এটি প্রথম সংরক্ষিত হওয়ার এক ঘন্টা বা তার বেশি হয়ে থাকে।

curl -i -X GET $SERVICE_URL/partners \
  -H "Authorization: Bearer $TEST_TOKEN"

কমান্ড আউটপুট এখন HTTP/1.1 200 OK দিয়ে শুরু হয় এবং শেষ লাইনে JSON প্রতিক্রিয়া রয়েছে। এই অনুরোধটি ক্লাউড রান দ্বারা গৃহীত হয়েছে এবং অ্যাপ দ্বারা প্রক্রিয়া করা হয়েছে।

6. প্রমাণীকরণ প্রোগ্রাম বনাম প্রমাণীকরণ ব্যবহারকারী

আপনি এখন পর্যন্ত যে প্রমাণীকৃত অনুরোধগুলি করেছেন সেগুলি curl কমান্ড লাইন টুল ব্যবহার করেছে। এর পরিবর্তে ব্যবহার করা যেতে পারে এমন অন্যান্য সরঞ্জাম এবং প্রোগ্রামিং ভাষা রয়েছে। যাইহোক, প্রমাণিত ক্লাউড রান অনুরোধগুলি প্লেইন ওয়েব পেজ সহ একটি ওয়েব ব্রাউজার ব্যবহার করে করা যাবে না । যদি কোনও ব্যবহারকারী কোনও লিঙ্কে ক্লিক করেন বা কোনও ওয়েব পৃষ্ঠায় একটি ফর্ম জমা দেওয়ার জন্য একটি বোতামে ক্লিক করেন, তবে ব্রাউজার প্রমাণীকৃত অনুরোধের জন্য ক্লাউড রানের জন্য প্রয়োজনীয় Authorization শিরোনাম যোগ করবে না।

ক্লাউড রানের অন্তর্নির্মিত প্রমাণীকরণ প্রক্রিয়াটি প্রোগ্রামগুলির দ্বারা ব্যবহারের উদ্দেশ্যে, শেষ ব্যবহারকারীদের দ্বারা নয়৷

বিঃদ্রঃ:

ক্লাউড রান ব্যবহারকারী-মুখী ওয়েব অ্যাপ্লিকেশনগুলিকে হোস্ট করতে পারে, তবে এই ধরণের অ্যাপ্লিকেশনগুলিকে অবশ্যই ব্যবহারকারীদের ওয়েব ব্রাউজার থেকে অননুমোদিত অনুরোধগুলিকে অনুমতি দেওয়ার জন্য ক্লাউড রান সেট করতে হবে৷ যদি অ্যাপ্লিকেশনগুলির ব্যবহারকারীর প্রমাণীকরণের প্রয়োজন হয় তবে ক্লাউড রানকে এটি করতে বলার পরিবর্তে অ্যাপ্লিকেশনটিকে অবশ্যই এটি পরিচালনা করতে হবে। অ্যাপ্লিকেশনটি ক্লাউড রানের বাইরের ওয়েব অ্যাপ্লিকেশনগুলি একইভাবে করতে পারে। এটি কীভাবে করা হয় তা এই কোডল্যাবের সুযোগের বাইরে।

আপনি হয়তো লক্ষ্য করেছেন যে এখন পর্যন্ত উদাহরণের অনুরোধের প্রতিক্রিয়াগুলি JSON অবজেক্ট ছিল, ওয়েব পৃষ্ঠা নয়। কারণ এই অংশীদার নিবন্ধন পরিষেবাটি প্রোগ্রামগুলির ব্যবহারের জন্য তৈরি করা হয়েছে এবং JSON তাদের ব্যবহার করার জন্য একটি সুবিধাজনক ফর্ম৷ এর পরে, আপনি এই ডেটা ব্যবহার এবং ব্যবহার করার জন্য একটি প্রোগ্রাম লিখবেন এবং চালাবেন।

একটি পাইথন প্রোগ্রাম থেকে প্রমাণীকৃত অনুরোধ

একটি প্রোগ্রাম স্ট্যান্ডার্ড HTTP ওয়েব অনুরোধের মাধ্যমে একটি সুরক্ষিত ক্লাউড রান অ্যাপ্লিকেশনের প্রমাণীকৃত অনুরোধ করতে পারে, তবে একটি Authorization শিরোনাম সহ। এই প্রোগ্রামগুলির জন্য একমাত্র নতুন চ্যালেঞ্জ হল সেই হেডারে স্থাপন করার জন্য একটি বৈধ, অপ্রয়োজনীয় পরিচয় টোকেন পাওয়া। সেই টোকেনটি Google ক্লাউড আইডেন্টিটি অ্যান্ড অ্যাকসেস ম্যানেজমেন্ট (IAM) ব্যবহার করে ক্লাউড রান দ্বারা যাচাই করা হবে, তাই টোকেনটি অবশ্যই IAM দ্বারা স্বীকৃত কোনো কর্তৃপক্ষ দ্বারা জারি এবং স্বাক্ষরিত হতে হবে। অনেক ভাষায় ক্লায়েন্ট লাইব্রেরি উপলব্ধ রয়েছে প্রোগ্রামগুলি এই ধরনের টোকেন জারি করার অনুরোধ করতে ব্যবহার করতে পারে। এই উদাহরণটি যে ক্লায়েন্ট লাইব্রেরিটি ব্যবহার করবে তা হল Python google.auth । সাধারণভাবে ওয়েব অনুরোধ করার জন্য বেশ কয়েকটি পাইথন লাইব্রেরি রয়েছে; এই উদাহরণ জনপ্রিয় requests মডিউল ব্যবহার করে.

প্রথম ধাপ হল দুটি ক্লায়েন্ট লাইব্রেরি ইনস্টল করা:

pip install google-auth
pip install requests

ডিফল্ট ব্যবহারকারীর জন্য একটি পরিচয় টোকেন অনুরোধ করার জন্য পাইথন কোড হল:

credentials, _ = google.auth.default()
credentials.refresh(google.auth.transport.requests.Request())
identity_token = credentials.id_token

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

একটি প্রোগ্রামের জন্য অন্য প্রোগ্রামের অনুরোধ করার জন্য, আপনি সাধারণত একজন ব্যক্তির পরিচয় ব্যবহার করতে চান না, বরং অনুরোধকারী প্রোগ্রামের পরিচয় ব্যবহার করতে চান। যে জন্য পরিষেবা অ্যাকাউন্ট হয়. আপনি একটি ডেডিকেটেড পরিষেবা অ্যাকাউন্টের সাথে ক্লাউড রান পরিষেবা স্থাপন করেছেন যা API অনুরোধ করার সময় এটি ব্যবহার করে এমন পরিচয় প্রদান করে, যেমন ক্লাউড ফায়ারস্টোরে। যখন একটি প্রোগ্রাম একটি Google ক্লাউড প্ল্যাটফর্মে চলে তখন ক্লায়েন্ট লাইব্রেরিগুলি স্বয়ংক্রিয়ভাবে এটিকে নির্ধারিত পরিষেবা অ্যাকাউন্টটি তার ডিফল্ট পরিচয় হিসাবে ব্যবহার করবে, তাই একই প্রোগ্রাম কোড উভয় পরিস্থিতিতে কাজ করে।

একটি অতিরিক্ত অনুমোদন শিরোনাম সহ একটি অনুরোধ করার জন্য পাইথন কোড হল:

auth_header = {"Authorization": "Bearer " + identity_token}
response = requests.get(url, headers=auth_header)

নিম্নলিখিত সম্পূর্ণ পাইথন প্রোগ্রামটি সমস্ত নিবন্ধিত অংশীদারদের পুনরুদ্ধার করার জন্য ক্লাউড রান পরিষেবার কাছে একটি প্রমাণীকৃত অনুরোধ করবে এবং তারপর তাদের নাম এবং নির্ধারিত আইডি প্রিন্ট করবে। এই কোডটি print_partners.py ফাইলে সংরক্ষণ করতে নিচের কমান্ডটি অনুলিপি করুন এবং চালান।

cat > ./print_partners.py << EOF
def print_partners():
    import google.auth
    import google.auth.transport.requests
    import requests

    credentials, _ = google.auth.default()
    credentials.refresh(google.auth.transport.requests.Request())
    identity_token = credentials.id_token

    auth_header = {"Authorization": "Bearer " + identity_token}
    response = requests.get("${SERVICE_URL}/partners", headers=auth_header)

    parsed_response = response.json()
    partners = parsed_response["data"]

    for partner in partners:
        print(f"{partner['partnerId']}: {partner['name']}")


print_partners()
EOF

আপনি একটি শেল কমান্ড দিয়ে এই প্রোগ্রাম চালাবেন। আপনাকে প্রথমে ডিফল্ট ব্যবহারকারী হিসাবে প্রমাণীকরণ করতে হবে, যাতে প্রোগ্রামটি সেই শংসাপত্রগুলি ব্যবহার করতে সক্ষম হয়। নীচের gcloud auth কমান্ডটি চালান:

gcloud auth application-default login

লগইন সম্পূর্ণ করতে নির্দেশাবলী অনুসরণ করুন. তারপর কমান্ড লাইন থেকে প্রোগ্রাম চালান:

python print_partners.py

আউটপুট নিম্নলিখিত মত কিছু দেখাবে:

10102: Zippy food delivery
67292: Foodful

প্রোগ্রামটির অনুরোধটি ক্লাউড রান পরিষেবাতে পৌঁছেছে কারণ এটি আপনার পরিচয়ের সাথে প্রমাণীকৃত ছিল এবং আপনি এই প্রকল্পের মালিক এবং তাই এটিকে ডিফল্টরূপে চালানোর জন্য অনুমোদিত৷ এই প্রোগ্রামটি একটি পরিষেবা অ্যাকাউন্টের পরিচয়ের অধীনে চালানো আরও সাধারণ হবে৷ যখন বেশিরভাগ Google ক্লাউড পণ্যগুলিতে চালিত হয়, যেমন ক্লাউড রান বা অ্যাপ ইঞ্জিন, তখন ডিফল্ট পরিচয়টি একটি পরিষেবা অ্যাকাউন্ট হবে এবং একটি ব্যক্তিগত অ্যাকাউন্টের পরিবর্তে ব্যবহার করা হবে৷

7. অভিনন্দন!

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

এরপর কি:

অন্যান্য Cymbal Eats কোডল্যাবগুলি অন্বেষণ করুন:

পরিষ্কার কর

এই টিউটোরিয়ালে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, হয় সংস্থানগুলি রয়েছে এমন প্রকল্পটি মুছুন, অথবা প্রকল্পটি রাখুন এবং পৃথক সংস্থানগুলি মুছুন৷

প্রকল্প মুছে ফেলা হচ্ছে

বিলিং দূর করার সবচেয়ে সহজ উপায় হল আপনি টিউটোরিয়ালের জন্য তৈরি করা প্রকল্পটি মুছে ফেলা।