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



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

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

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

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সকল ডেভেলপমেন্ট টুল দিয়ে পূর্ণ। এটি একটি স্থায়ী 5GB হোম ডিরেক্টরি অফার করে এবং Google Cloud-এ চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার বেশিরভাগ কাজ, যদি সব না হয়, কেবল একটি ব্রাউজার বা আপনার Chromebook দিয়ে করা যেতে পারে।
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণিত এবং প্রকল্পটি ইতিমধ্যেই আপনার প্রকল্প আইডিতে সেট করা আছে।
- আপনি প্রমাণিত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
কমান্ড আউটপুট
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project
কমান্ড আউটপুট
[core] project = <PROJECT_ID>
যদি তা না হয়, তাহলে আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:
gcloud config set project <PROJECT_ID>
কমান্ড আউটপুট
Updated property [core/project].
পরিবেশ সেটআপ
এই ল্যাবের জন্য আপনি ক্লাউড শেল কমান্ড লাইনে কমান্ডগুলি চালাবেন। আপনি সাধারণত কমান্ডগুলি অনুলিপি করতে পারেন এবং সেগুলিকে যেমন আছে তেমন পেস্ট করতে পারেন, যদিও কিছু ক্ষেত্রে আপনাকে প্লেসহোল্ডারের মানগুলি সংশোধন করতে হবে।
- পরবর্তী কমান্ডগুলিতে ব্যবহারের জন্য প্রজেক্ট আইডিতে একটি পরিবেশ পরিবর্তনশীল সেট করুন:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export SERVICE_NAME=partner-registration-service
- আপনার অ্যাপটি চালানোর জন্য ক্লাউড রান সার্ভিস API, NoSQL ডেটা স্টোরেজ প্রদানকারী Firestore API, ডিপ্লয়মেন্ট কমান্ড দ্বারা ব্যবহৃত ক্লাউড বিল্ড API এবং তৈরির সময় অ্যাপ্লিকেশন কন্টেইনার ধরে রাখার জন্য ব্যবহৃত আর্টিফ্যাক্ট রেজিস্ট্রি সক্ষম করুন:
gcloud services enable \
run.googleapis.com \
firestore.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com
- নেটিভ মোডে ফায়ারস্টোর ডাটাবেসটি শুরু করুন। এই কমান্ডটি অ্যাপ ইঞ্জিন API ব্যবহার করে, তাই প্রথমে এটি সক্রিয় করতে হবে।
কমান্ডটিতে অ্যাপ ইঞ্জিনের জন্য একটি অঞ্চল নির্দিষ্ট করতে হবে, যা আমরা ব্যবহার করব না কিন্তু ঐতিহাসিক কারণে তৈরি করতে হবে, এবং ডাটাবেসের জন্য একটি অঞ্চল। আমরা অ্যাপ ইঞ্জিনের জন্য us-central এবং ডাটাবেসের জন্য nam5 ব্যবহার করব। nam5 হল মার্কিন যুক্তরাষ্ট্রের বহু-অঞ্চল অবস্থান। বহু-অঞ্চল অবস্থানগুলি ডাটাবেসের প্রাপ্যতা এবং স্থায়িত্ব সর্বাধিক করে তোলে।
gcloud services enable appengine.googleapis.com
gcloud app create --region=us-central
gcloud firestore databases create --region=nam5
- নমুনা অ্যাপ সংগ্রহস্থলটি ক্লোন করুন এবং ডিরেক্টরিতে নেভিগেট করুন।
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
cd cymbal-eats/partner-registration-service
৩. README পর্যালোচনা করুন
এডিটরটি খুলুন এবং অ্যাপটিতে থাকা ফাইলগুলি দেখুন। README.md দেখুন, যা এই অ্যাপটি স্থাপনের জন্য প্রয়োজনীয় পদক্ষেপগুলি বর্ণনা করে। এই পদক্ষেপগুলির মধ্যে কিছু অন্তর্নিহিত বা স্পষ্ট নিরাপত্তা সিদ্ধান্ত বিবেচনা করতে পারে। আপনার স্থাপন করা অ্যাপের নিরাপত্তা উন্নত করার জন্য আপনি এই পছন্দগুলির কয়েকটি পরিবর্তন করবেন, যেমনটি এখানে বর্ণনা করা হয়েছে:
ধাপ ৩ - npm install চালান
কোনও অ্যাপে ব্যবহৃত যেকোনো তৃতীয় পক্ষের সফ্টওয়্যারের উৎপত্তি এবং অখণ্ডতা জানা গুরুত্বপূর্ণ। সফ্টওয়্যার সাপ্লাই চেইন সিকিউরিটি পরিচালনা করা যেকোনো সফ্টওয়্যার তৈরির জন্য প্রাসঙ্গিক, কেবল ক্লাউড রানে মোতায়েন করা অ্যাপগুলির জন্য নয়। এই ল্যাবটি স্থাপনের উপর দৃষ্টি নিবদ্ধ করে, তাই এই ক্ষেত্রটি সম্বোধন করে না, তবে আপনি আলাদাভাবে বিষয়টি নিয়ে গবেষণা করতে চাইতে পারেন..
ধাপ ৪ এবং ৫ - সম্পাদনা করুন এবং deploy.sh চালান
এই ধাপগুলি অ্যাপটিকে ক্লাউড রানে স্থাপন করে, বেশিরভাগ বিকল্পকে তাদের ডিফল্ট অবস্থায় রেখে। স্থাপনাটিকে আরও নিরাপদ করতে আপনি দুটি গুরুত্বপূর্ণ উপায়ে এই ধাপটি পরিবর্তন করতে পারেন:
- অননুমোদিত অ্যাক্সেসের অনুমতি দেবেন না । অনুসন্ধানের সময় জিনিসগুলি চেষ্টা করার জন্য এটি অনুমতি দেওয়া সুবিধাজনক হতে পারে, তবে এটি বাণিজ্যিক অংশীদারদের ব্যবহারের জন্য একটি ওয়েব পরিষেবা, এবং সর্বদা এর ব্যবহারকারীদের প্রমাণীকরণ করা উচিত।
- নির্দিষ্ট করুন যে অ্যাপ্লিকেশনটি অবশ্যই একটি ডেডিকেটেড সার্ভিস অ্যাকাউন্ট ব্যবহার করবে যা শুধুমাত্র প্রয়োজনীয় সুবিধাগুলি সহ তৈরি করা হবে, এমন একটি ডিফল্ট অ্যাকাউন্টের পরিবর্তে যেখানে সম্ভবত প্রয়োজনের চেয়ে বেশি API এবং রিসোর্স অ্যাক্সেস থাকবে। এটি সর্বনিম্ন সুবিধার নীতি হিসাবে পরিচিত এবং এটি অ্যাপ্লিকেশন সুরক্ষার একটি মৌলিক ধারণা।
ধাপ ৬ থেকে ১১ - সঠিক আচরণ যাচাই করার জন্য নমুনা ওয়েব অনুরোধ করুন
যেহেতু এখন অ্যাপ্লিকেশন স্থাপনের জন্য প্রমাণীকরণ প্রয়োজন, তাই এই অনুরোধগুলিতে এখন অনুরোধকারীর পরিচয়ের প্রমাণ অন্তর্ভুক্ত করতে হবে। এই ফাইলগুলি পরিবর্তন করার পরিবর্তে, আপনি সরাসরি কমান্ড লাইন থেকে অনুরোধ করবেন।
৪. নিরাপদে পরিষেবাটি স্থাপন করুন
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 ফাইলটি পরিবর্তন করে unauthenticated access(–no-allow-unauthenticated) বাতিল করুন , এবং deployed অ্যাপের জন্য নতুন service account(–service-account) নির্দিষ্ট করুন। 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
অ্যাপটি অননুমোদিত অনুরোধগুলিকে অনুমোদন না করার বিকল্প সহ স্থাপন করা হয়েছিল। এই কার্ল কমান্ডটিতে কোনও প্রমাণীকরণ তথ্য নেই, তাই ক্লাউড রান দ্বারা এটি প্রত্যাখ্যান করা হয়েছে। প্রকৃত স্থাপন করা অ্যাপ্লিকেশনটি এই অনুরোধটি চালায় না বা থেকে কোনও ডেটা গ্রহণ করে না।
৫. প্রমাণিত অনুরোধ করুন
মোতায়েন করা অ্যাপটি ওয়েব অনুরোধ করে আহ্বান করা হয়, যা এখন ক্লাউড রানের জন্য অনুমোদনের জন্য প্রমাণীকরণ করতে হবে। ফর্মের একটি Authorization শিরোনাম অন্তর্ভুক্ত করে ওয়েব অনুরোধগুলি প্রমাণীকরণ করা হয়:
Authorization: Bearer identity-token
পরিচয়-টোকেন হল একটি স্বল্পমেয়াদী, ক্রিপ্টোগ্রাফিকভাবে স্বাক্ষরিত, এনকোডেড স্ট্রিং যা একটি বিশ্বস্ত প্রমাণীকরণ প্রদানকারী দ্বারা জারি করা হয়। এই ক্ষেত্রে, একটি অসমাপ্ত, বৈধ, Google-এর দ্বারা জারি করা পরিচয় টোকেন প্রয়োজন।
আপনার ব্যবহারকারী অ্যাকাউন্ট হিসেবে একটি অনুরোধ করুন
গুগল ক্লাউড সিএলআই টুলটি ডিফল্ট প্রমাণিত ব্যবহারকারীর জন্য একটি টোকেন প্রদান করতে পারে। আপনার নিজের অ্যাকাউন্টের জন্য একটি পরিচয় টোকেন পেতে এবং এটি ID_TOKEN পরিবেশ ভেরিয়েবলে সংরক্ষণ করতে এই কমান্ডটি চালান:
export ID_TOKEN=$(gcloud auth print-identity-token)
ডিফল্টরূপে, গুগল কর্তৃক জারি করা পরিচয় টোকেন এক ঘন্টার জন্য বৈধ। অনুমোদিত না হওয়ার কারণে পূর্বে প্রত্যাখ্যাত অনুরোধটি করতে নিম্নলিখিত কার্ল কমান্ডটি চালান। এই কমান্ডে প্রয়োজনীয় হেডার অন্তর্ভুক্ত থাকবে:
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 ডেটাতে আরও অনেক বেশি কন্টেন্ট দেখা উচিত, যা দুটি নিবন্ধিত অংশীদার সম্পর্কে তথ্য দেবে।
একটি অননুমোদিত অ্যাকাউন্ট হিসেবে একটি অনুরোধ করুন
শেষ ধাপে করা প্রমাণীকরণ অনুরোধটি কেবল প্রমাণীকরণের কারণেই সফল হয়নি, বরং প্রমাণীকরণকৃত ব্যবহারকারী (আপনার অ্যাকাউন্ট) অনুমোদিত হওয়ার কারণেও। অর্থাৎ, অ্যাকাউন্টটির অ্যাপটি চালু করার অনুমতি ছিল। সমস্ত প্রমাণীকরণকৃত অ্যাকাউন্ট এটি করার জন্য অনুমোদিত হবে না।
পূর্ববর্তী অনুরোধে ব্যবহৃত ডিফল্ট অ্যাকাউন্টটি অনুমোদিত ছিল কারণ এটিই সেই অ্যাকাউন্ট যা অ্যাপ ধারণকারী প্রকল্প তৈরি করেছিল এবং ডিফল্টরূপে এটিকে অ্যাকাউন্টে যেকোনো ক্লাউড রান অ্যাপ্লিকেশন চালু করার অনুমতি দিয়েছিল। প্রয়োজনে সেই অনুমতি বাতিল করা যেতে পারে, যা একটি প্রোডাকশন অ্যাপ্লিকেশনে কাম্য হবে। এখনই এটি করার পরিবর্তে, আপনি কোনও বিশেষাধিকার বা ভূমিকা ছাড়াই একটি নতুন পরিষেবা অ্যাকাউন্ট তৈরি করবেন এবং এটি ব্যবহার করে ডিপ্লয় করা অ্যাপটি অ্যাক্সেস করার চেষ্টা করবেন।
-
testerনামে একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন।
gcloud iam service-accounts create tester
- এই নতুন অ্যাকাউন্টের জন্য আপনি ঠিক যেমনটি আগে আপনার ডিফল্ট অ্যাকাউন্টের জন্য পেয়েছিলেন, ঠিক তেমনই একটি পরিচয় টোকেন পাবেন। তবে, এর জন্য আপনার ডিফল্ট অ্যাকাউন্টের পরিষেবা অ্যাকাউন্টের ছদ্মবেশ ধারণের অনুমতি থাকা প্রয়োজন। আপনার অ্যাকাউন্টকে এই অনুমতি দিন।
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
- এখন TEST_IDENTITY এনভায়রনমেন্ট ভেরিয়েবলে এই নতুন অ্যাকাউন্টের জন্য একটি আইডেন্টিটি টোকেন সংরক্ষণ করতে নিম্নলিখিত কমান্ডটি চালান। যদি কমান্ডটি একটি ত্রুটি বার্তা দেখায়, তাহলে এক বা দুই মিনিট অপেক্ষা করুন এবং আবার চেষ্টা করুন।
export TEST_TOKEN=$( \
gcloud auth print-identity-token \
--impersonate-service-account \
"tester@$PROJECT_ID.iam.gserviceaccount.com" \
)
- আগের মতোই প্রমাণিত ওয়েব অনুরোধটি করুন, কিন্তু এই পরিচয় টোকেনটি ব্যবহার করে:
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 প্রতিক্রিয়া রয়েছে। এই অনুরোধটি ক্লাউড রান দ্বারা গৃহীত হয়েছিল এবং অ্যাপ দ্বারা প্রক্রিয়া করা হয়েছিল।
৬. প্রোগ্রাম প্রমাণীকরণ বনাম ব্যবহারকারীদের প্রমাণীকরণ
আপনি এখন পর্যন্ত যে প্রমাণীকরণকৃত অনুরোধগুলি করেছেন সেগুলি 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 ক্লাউড পণ্যে চালানো হলে, ডিফল্ট পরিচয়টি একটি পরিষেবা অ্যাকাউন্ট হবে এবং এটি একটি ব্যক্তিগত অ্যাকাউন্টের পরিবর্তে ব্যবহার করা হবে।
৭. অভিনন্দন!
অভিনন্দন, তুমি কোডল্যাব শেষ করেছ!
এরপর কি:
অন্যান্য সিম্বাল ইটস কোডল্যাবগুলি অন্বেষণ করুন:
- Eventarc দিয়ে ক্লাউড ওয়ার্কফ্লো ট্রিগার করা
- ক্লাউড স্টোরেজ থেকে ইভেন্ট প্রসেসিং ট্রিগার করা হচ্ছে
- ক্লাউড রান থেকে প্রাইভেট ক্লাউডএসকিউএল-এর সাথে সংযোগ স্থাপন করা হচ্ছে
- ক্লাউড রান থেকে সম্পূর্ণরূপে পরিচালিত ডাটাবেসের সাথে সংযোগ স্থাপন করা
- আইডেন্টিটি অ্যাওয়্যার প্রক্সি (IAP) সহ সুরক্ষিত সার্ভারলেস অ্যাপ্লিকেশন
- ক্লাউড শিডিউলার দিয়ে ক্লাউড রান জবস ট্রিগার করা
- ক্লাউড রান ইনগ্রেস ট্র্যাফিক সুরক্ষিত করা
- GKE অটোপাইলট থেকে প্রাইভেট AlloyDB-তে সংযোগ করা হচ্ছে
পরিষ্কার কর
এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সের জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, হয় রিসোর্স ধারণকারী প্রজেক্টটি মুছে ফেলুন, অথবা প্রজেক্টটি রেখে পৃথক রিসোর্সগুলি মুছে ফেলুন।
প্রকল্পটি মুছে ফেলা হচ্ছে
বিলিং দূর করার সবচেয়ে সহজ উপায় হল টিউটোরিয়ালের জন্য তৈরি করা প্রকল্পটি মুছে ফেলা।