১. ভূমিকা
ঐতিহাসিকভাবে, যখন অন্যান্য পদ্ধতি অনুপলব্ধ বা অসুবিধাজনক বলে বিবেচিত হত, তখন গুগল এপিআই অ্যাক্সেস করার জন্য গুগল এপিআই কী ব্যবহার করা হত। এর জনপ্রিয় ব্যবহারগুলোর মধ্যে ছিল গুগল ম্যাপস এপিআই এবং ফায়ারবেস দ্বারা উন্মুক্ত গুগল এপিআইগুলো অ্যাক্সেস করা। এআই মডেল, জেমিনির মতো এআই এজেন্ট, এবং এআই স্টুডিও ও এজেন্ট ডেভেলপমেন্ট কিটের মতো এজেন্ট ডেভেলপমেন্ট ফ্রেমওয়ার্কের প্রবর্তনের সাথে সাথে, গুগলের বৃহৎ ল্যাঙ্গুয়েজ মডেলগুলো অ্যাক্সেস করার জন্য এপিআই কী একটি প্রধান পদ্ধতিতে পরিণত হয়েছে।
এপিআই কী স্বল্প স্তরের সুরক্ষা প্রদান করে। যদিও গুগল ক্লাউড কী-গুলোর অপব্যবহার রোধ করার জন্য বিভিন্ন পদ্ধতি সরবরাহ করে, একটি সক্রিয় এপিআই কী থাকলে কোনো অতিরিক্ত প্রমাণীকরণ বা অনুমোদন যাচাইকরণ ছাড়াই গুগল এপিআই-গুলোতে অ্যাক্সেস পাওয়া যায়। এপিআই কী-এর ব্যবহার সীমিত করার পদ্ধতিগুলো ডকুমেন্টেশনে বর্ণনা করা আছে। ক্লাউড ব্লগের ' Securing Your Gemini and Google API keys' পোস্টে এপিআই কী রক্ষণাবেক্ষণ সম্পর্কে অতিরিক্ত সুপারিশ দেওয়া হয়েছে। এই কোডল্যাবে, আপনি এই সুপারিশগুলো বাস্তবে প্রয়োগ করবেন।
আপনি যা করবেন
- গুগল ক্লাউডে নতুন এপিআই কী তৈরি করার সময় আরোপিত বিধিনিষেধগুলো পর্যালোচনা করুন।
- আপনার সমস্ত API কী তালিকাভুক্ত করুন এবং নিরাপত্তা সুরক্ষা ছাড়া কীগুলি খুঁজে বের করুন।
- বিদ্যমান এপিআই কীগুলোর ব্যবহারের উপর ভিত্তি করে বিধিনিষেধ আরোপ করুন।
- এমন অটোমেশন তৈরি করুন যা অস্বাভাবিক ব্যবহারের ক্ষেত্রে কী-টি মুছে ফেলবে।
আপনার যা যা লাগবে
- একটি আধুনিক ওয়েব ব্রাউজার (যেমন ক্রোম)।
- একটি গুগল অ্যাকাউন্ট
২. সেটআপ
এই কোডল্যাবের নির্দেশাবলীতে ধরে নেওয়া হয়েছে যে আপনি গুগল ক্লাউড কনসোলের ক্লাউড শেলে কমান্ডগুলো চালান। আপনার লোকাল এনভায়রনমেন্টে যদি gcloud CLI থাকে, তবে আপনি সেখানেও কমান্ডগুলো চালাতে পারেন।
যদিও ধাপগুলোর অপারেশন ক্লাউড কনসোল UI ব্যবহার করে করা যায়, পদ্ধতিগুলো ভিন্ন। এই কোডল্যাবটি ইন্টারঅ্যাকশন সহজ করতে এবং আধুনিক AI এজেন্টদের (যেমন Antigravity CLI) সাথে সহজতর ইন্টিগ্রেশন সক্ষম করতে কমান্ড লাইন ইন্টারফেস ব্যবহার করে।
একটি ক্লাউড শেল টার্মিনাল চালু করুন
- একটি নতুন ব্রাউজার উইন্ডোতে https://console.cloud.google.com/ ব্যবহার করে গুগল ক্লাউড কনসোলটি খুলুন। সর্বোত্তম ব্যবহারকারীর অভিজ্ঞতার জন্য ক্রোম ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।
- গুগল ক্লাউডে আপনার গুগল অ্যাকাউন্টে সাইন ইন করুন।
- ক্লাউড শেল সক্রিয় করতে ক্লিক করুন
গুগল ক্লাউড কনসোলের শীর্ষে।
দেখানো হলে, নিম্নলিখিত উইন্ডোগুলি ক্লিক করে এগিয়ে যান:- ক্লাউড শেল তথ্য উইন্ডোটির মাধ্যমে এগিয়ে যান।
- গুগল ক্লাউড এপিআই কল করার জন্য আপনার ক্রেডেনশিয়াল ব্যবহার করতে ক্লাউড শেলকে অনুমোদন দিন।
একটি গুগল ক্লাউড প্রজেক্ট নির্বাচন করুন
ক্লাউড কনসোল খোলার পর, আপনাকে প্রমাণীকরণ করা হয় এবং সাধারণত আপনার কাজের জন্য একটি প্রজেক্ট বেছে নেওয়ার অপশন থাকে। প্রজেক্ট আইডি হলো ছোট হাতের অক্ষর, সংখ্যা এবং ড্যাশ চিহ্নের ৬ থেকে ৩০ অক্ষরের একটি ক্রম, উদাহরণস্বরূপ qwiklabs-gcp-04-3075fc9fd77f । ক্লাউড শেল টার্মিনাল নির্বাচিত প্রজেক্টটি দিয়ে gcloud CLI কনফিগার করে। আপনি নিচের মতো একটি আউটপুট দেখতে পাবেন:
Your Cloud Platform project in this session is set to qwiklabs-gcp-04-3075fc9fd77f
এর মানে হলো, gcloud এ আপনার পরবর্তী কমান্ডগুলো qwiklabs-gcp-04-3075fc9fd77f প্রজেক্ট আইডিটি ব্যবহার করবে।
প্রজেক্ট আইডিটি PROJECT_ID এনভায়রনমেন্ট ভেরিয়েবল হিসেবে সেট করুন। নিচের কমান্ডটি ব্যবহার করে আপনি আপনার সব প্রজেক্টের তালিকা দেখতে পারবেন:
gcloud projects list
- যদি আপনি
gcloudএ কনফিগার করা প্রজেক্ট আইডি থেকে ভিন্ন কোনো প্রজেক্ট আইডি ব্যবহার করতে চান, তাহলেyour-project-idপ্রতিস্থাপন করুন এবং কমান্ডটি চালান। উদাহরণস্বরূপ:export PROJECT_ID="your-project-id"export PROJECT_ID="qwiklabs-gcp-04-3075fc9fd77f" - নির্বাচিত প্রজেক্ট আইডিটি ব্যবহার করতে চাইলে নিম্নলিখিত কমান্ডটি চালান:
export PROJECT_ID=$(gcloud config get project)
৩. একটি নতুন এপিআই কী সীমাবদ্ধ করুন
অতীতে, ব্যবহারকারীরা সম্পূর্ণ সীমাবদ্ধতাহীন এপিআই কী তৈরি করতে পারতেন। এই সীমাবদ্ধতাহীন কী ব্যবহার করে, যে প্রজেক্টে কী-টি তৈরি করা হয়েছিল, সেখানে সক্রিয় থাকা যেকোনো গুগল এপিআই কল করা যেত। যদিও গুগল ক্লাউড কনসোল ব্যবহারকারীদের সীমাবদ্ধতাহীন কী তৈরি করতে বাধা দেয়, তবুও gcloud CLI বা সরাসরি এপিআই কলের মাধ্যমে এটি করা এখনও সম্ভব।
নিম্নলিখিত ধাপগুলিতে দেখানো হয়েছে কীভাবে একটি সীমাবদ্ধ এপিআই কী তৈরি করতে হয়, যা এর ব্যবহারকে শুধুমাত্র নির্দিষ্ট এপিআই এবং নির্দিষ্ট ওয়েবসাইটের মধ্যে সীমাবদ্ধ রাখে।
- শুধুমাত্র গুগল ম্যাপ জিওলোকেশন এপিআই-এর জন্য সীমাবদ্ধ একটি নতুন এপিআই কী তৈরি করতে, শেল টার্মিনালে নিম্নলিখিত কমান্ডটি চালান:
এই কমান্ডটি একটি নতুন এপিআই কী তৈরি করে যা শুধুমাত্র গুগল ম্যাপ জিওলোকেশন পরিষেবা কল করার জন্য ব্যবহার করা যাবে।gcloud services api-keys create --key-id=restricted-api-key \ --display-name="restricted api key" \ --api-target=service=geolocation.googleapis.com \ --project=${PROJECT_ID} - একটি অ্যাপ্লিকেশন সীমাবদ্ধতা যোগ করে কী-এর নিরাপত্তা বৃদ্ধি করুন। কী-টির ব্যবহার শুধুমাত্র
example.comওয়েবসাইটের ভেতরের সমস্ত পাথে সীমাবদ্ধ করুন। কী-টিতে অ্যাপ্লিকেশন সীমাবদ্ধতা যোগ করতে নিম্নলিখিত কমান্ডটি চালান: নির্দিষ্ট ওয়েবসাইটে কী-এর ব্যবহারের অনুমতি দেওয়ার পরিবর্তে, আপনি অনুমোদিত অ্যান্ড্রয়েড অ্যাপ্লিকেশন নির্ধারণ করতেgcloud services api-keys update restricted-api-key \ --location=global \ --allowed-referrers="example.com/*" \ --project=${PROJECT_ID}--allowed-applicationঅথবা অনুমোদিত আইপি অ্যাড্রেস নির্ধারণ করতেallowed-ipsব্যবহার করতে পারেন। সমস্ত বিকল্পের জন্য সম্পূর্ণ ডকুমেন্টেশন দেখুন।
পরিষ্কার করা
আপনার তৈরি করা API কী-টি মুছে ফেলুন, যদি না আপনি এটি ব্যবহার করার পরিকল্পনা করেন:
gcloud services api-keys delete --key-id=restricted-api-key \
--project=${PROJECT_ID}
৪. আপনার এপিআই কীগুলো তালিকাভুক্ত করুন
এই ধাপে আপনি gcloud CLI ব্যবহার করে আপনার API কীগুলির একটি তালিকা পাবেন। প্রাপ্ত তালিকাটিতে আপনার অ্যাক্সেস আছে এমন সমস্ত সক্রিয় (মুছে ফেলা হয়নি এমন) API কী দেখানো হবে।
- সমস্ত কী-এর নাম, আইডি এবং তৈরির তারিখ দেখতে নিম্নলিখিত কমান্ডটি চালান:
আউটপুটে কী-টির পাঠযোগ্য নাম, কী আইডি এবং কী-টি তৈরি হওয়ার তারিখ দেখানো হবে। এটি নিম্নলিখিতের অনুরূপ হবে:gcloud services api-keys list --project=${PROJECT_ID} \ --format='value(displayName,name.basename(),createTime.date())'api key 1 api-key-1 2024-05-10T07:53:24 api key 2 api-key-2 2025-06-12T14:47:57
- যেকোনো একটি কী আইডি বেছে নিন এবং সেটিতে কোনো বিধিনিষেধ আছে কিনা তা পরীক্ষা করতে নিম্নলিখিত কমান্ডটি পেস্ট করুন।
your-key-idজায়গায় নির্বাচিত কী আইডির মানটি বসান:gcloud services api-keys describe "your-key-id" --project=${PROJECT_ID}
আউটপুটে (YAML ফরম্যাটে) restrictions এর অধীনে বিধিনিষেধগুলির একটি তালিকা থাকবে।
createTime: '2024-05-10T07:53:24.986528Z'
displayName: api key 1
etag: W/"u1WuY41K2tPKUZd7cfLoKg=="
name: projects/123456789012/locations/global/keys/api-key-1
restrictions:
apiTargets:
- service: geolocation.googleapis.com
browserKeyRestrictions:
allowedReferrers:
- https://example.com/*
uid: 1a2b3c4d-1234-abcd-1234-a1b2c3d4e5f6
updateTime: '2024-05-10T07:53:24.071228Z'
মনে রাখবেন যে, যদি কী-টি কখনও আপডেট করা না হয়, তাহলে createTime এবং updateTime ফিল্ড দুটির টাইমস্ট্যাম্প একই হবে।
- স্ক্রিপ্টটি ডাউনলোড করে চালান যা আপনার সমস্ত প্রোজেক্টের মধ্য দিয়ে যাবে এবং কোনো বিধিনিষেধ নেই এমন সমস্ত API কী প্রিন্ট করে দেবে:
স্ক্রিপ্টটি চালানোর পর আপনি নিম্নলিখিত ধরনের একটি আউটপুট দেখতে পাবেন:curl -fsSL -o unrestricted_api_keys.sh \ "https://github.com/GoogleCloudPlatform/devrel-demos/blob/main/security/api-key-audit/unrestricted_api_keys.sh" chmod +x unrestricted_api_keys.sh ./unrestricted_api_keys.sh এই কোডল্যাবে ব্যবহৃত সমস্ত স্ক্রিপ্ট আপনি গিটহাবের devrel-demos রিপোজিটরির Security ফোল্ডারে খুঁজে পাবেন।DISPLAY NAME KEY ID PROJECT ID CREATION DATE Key 1 1a2b3c4d-1234-abcd-1234-a1b2c3d4e5f6 my-project-1 2024-05-10T07:53:24.071228Z
৫. এপিআই কী-এর ব্যবহার সম্পর্কে জানুন
এই ধাপে আপনি গুগল ক্লাউড মেট্রিক্স কোয়েরি করবেন, যা আপনাকে খুঁজে বের করতে সাহায্য করবে যে আপনার এপিআই কী ব্যবহার করে কোন এপিআইগুলো কল করা হয়েছিল। এই তথ্য ব্যবহার করে আপনি কী-গুলোর বর্তমান ব্যবহার পর্যালোচনা করতে পারবেন এবং অনুমানের পরিবর্তে প্রকৃত তথ্যের ভিত্তিতে কী-টির উপর এপিআই বিধিনিষেধ প্রয়োগ করতে পারবেন।
- পূর্ববর্তী ধাপে ব্যবহৃত একই কী আইডি ব্যবহার করুন অথবা অন্য একটি কী আইডি বেছে নিন। নিম্নলিখিত কমান্ডে
your-key-idএর পরিবর্তে নির্বাচিত কী আইডিটি বসান:export KEY_UID=$( gcloud services api-keys describe "your-key-id" \ --format='value(uid)' \ --project=${PROJECT_ID}) - অনুসন্ধানটি বিগত এক বছরের ব্যবহারের ইতিহাস দেখার জন্য সেট করুন। যদি আপনি এর চেয়ে বেশি বা কম সময়ের জন্য অনুসন্ধান করতে চান, তাহলে
365(দিনের সংখ্যা)-এর পরিবর্তে অন্য কোনো ধনাত্মক সংখ্যা ব্যবহার করুন।export DAYS=365 - ক্লাউড মনিটরিং এপিআই-তে সরাসরি কল সক্ষম করতে অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল ( ADC ) রিফ্রেশ করুন। নিম্নলিখিত কমান্ডটি চালান এবং টার্মিনালের নির্দেশাবলী অনুসরণ করুন:
gcloud auth application-default login - ক্লাউড মনিটরিং এপিআই-তে পরিষেবা ব্যবহারের মেট্রিক ডেটার জন্য অনুরোধ পাঠাতে নিম্নলিখিত কমান্ডটি চালান:
curl -s -G -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
--data-urlencode "filter=metric.type=\"serviceruntime.googleapis.com/api/request_count\" AND resource.labels.credential_id=\"apikey:${KEY_UID}\"" \
--data-urlencode "interval.startTime=$(date -u -d "${DAYS} days ago" +%Y-%m-%dT%H:%M:%SZ)" \
--data-urlencode "interval.endTime=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
"https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/timeSeries" \
| jq -r '.timeSeries[]?.resource.labels.service' | sort -u
এই কমান্ডটি serviceruntime/api/request_count বিল্ট-ইন মেট্রিক থেকে credential_id লেবেলযুক্ত সেইসব ডেটা পয়েন্ট খুঁজে বের করে, যেগুলো নির্বাচিত API কী-এর ইউনিক আইডির সাথে মেলে। এরপর এটি service লেবেলের জন্য মানগুলো পুনরুদ্ধার করে এবং পুনরাবৃত্তি বাদ দিয়ে মানগুলো প্রিন্ট করে।
হার্ডেনিং এপিআই কী
এই ধাপে আপনি পূর্ববর্তী ধাপগুলোতে সংগৃহীত তথ্য ব্যবহার করে ব্যবহারের তথ্যের উপর ভিত্তি করে এপিআই কী-এর বিধিনিষেধ কনফিগারেশন আপডেট করবেন।
আপনি আগের ধাপে ব্যবহৃত একই API কী ব্যবহার করবেন। প্রয়োজনে, PROJECT_ID , KEY_UID এবং DAYS এনভায়রনমেন্ট ভেরিয়েবলগুলো সেট করা আছে কিনা তা নিশ্চিত করতে আগের ধাপগুলোর নির্দেশাবলী পুনরায় চালান।
- এপিআই কী ব্যবহার করে কল করা গুগল এপিআইগুলোর তালিকা পেতে নিম্নলিখিত কমান্ডটি চালান:
SERVICES=$(curl -s -G -H "Authorization: Bearer $(gcloud auth application-default print-access-token)"
–data-urlencode "filter=metric.type="serviceruntime.googleapis.com/api/request_count" AND resource.labels.credential_id="apikey:${KEY_UID}""
–data-urlencode "interval.startTime=$(date -u -d "${DAYS} দিন আগে" +%Y-%m-%dT%H:%M:%SZ)"
–data-urlencode "interval.endTime=$(date -u +%Y-%m-%dT%H:%M:%SZ)"
"https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/timeSeries"
| jq -r '.timeSeries[]?.resource.labels.service' | sort -u)
1. Build the list of arguments to restrict the API usage for the API key based
on the retrieved list.
```shell
API_TARGET_ARGS=()
for SERVICE in $SERVICES; do
API_TARGET_ARGS+=("--api-target=service=${SERVICE}")
done
- সীমাবদ্ধ API-এর তালিকাটি অ-খালি তালিকা দিয়ে প্রতিস্থাপন করুন:
if [ ${#API_TARGET_ARGS[@]} -gt 0 ]; then gcloud services api-keys update "projects/${PROJECT_ID}/locations/global/keys/${KEY_UID}" \ ${API_TARGET_ARGS} fi
৬. অস্বাভাবিক ব্যবহার সনাক্তকরণ সংজ্ঞায়িত করুন
পূর্ববর্তী ধাপগুলোতে দেখানো হয়েছে কীভাবে এপিআই কী (API key) অন্বেষণ এবং সুরক্ষিত করতে হয়। এই ধাপে দেখানো হয়েছে কীভাবে মনিটরিং অ্যালার্টের (Monitoring Alerts) সাহায্যে কী-এর ব্যবহারের অপ্রত্যাশিত বৃদ্ধির ক্ষেত্রে স্বয়ংক্রিয়ভাবে প্রতিক্রিয়া জানানো যায়।
নিম্নলিখিত নির্দেশাবলী এমন একটি অ্যালার্ট তৈরি করে যা গত ৫ মিনিটে কোনো এপিআই কী ব্যবহার করে করা এপিআই কলের হার ১০%-এর বেশি বৃদ্ধি পেলে সক্রিয় হয়। অ্যালার্টটি একটি ক্লাউড বিল্ড স্ক্রিপ্ট চালু করার জন্য কনফিগার করা হয়েছে, যা পরবর্তী ব্যবহার রোধ করতে এপিআই কী-টি মুছে ফেলে। পরবর্তী ৩০ দিনের মধ্যে কী-টি পুনরুদ্ধার করা যেতে পারে। কী-টি কীভাবে আনডিলিট করতে হয় তা জানতে ডকুমেন্টেশন দেখুন।
এই নির্দেশাবলীতে PROJECT_ID এবং KEY_UID ভ্যারিয়েবলগুলো পুনরায় ব্যবহার করা হয়েছে, যা আপনি পূর্ববর্তী ধাপগুলোতে ব্যবহার করেছিলেন। আপনি যদি একটি ভিন্ন কী এবং/অথবা প্রজেক্ট নির্বাচন করতে চান, তাহলে "একটি এপিআই কী-এর সেটআপ এবং ব্যবহার আবিষ্কার" ধাপগুলোতে বর্ণিত পদ্ধতি অনুযায়ী এই ভ্যারিয়েবলগুলোর জন্য নতুন মান সেট করুন।
- একটি অ্যালার্ট পলিসি ফাইল তৈরি করতে নিম্নলিখিত স্ক্রিপ্টটি চালান:
অ্যালার্ট পলিসিটি অ্যালার্ট ট্রিগার করার জন্য নিম্নলিখিত PromQL ফিল্টারটি ব্যবহার করে:cat <<EOF > alert_policy.json { "displayName": "Credential API Request Count Increase Alert (Project: ${PROJECT_ID})", "combiner": "OR", "conditions": [ { "displayName": "API Request Count Increase > 10% in 5m with Min Volume", "conditionPrometheusQueryLanguage": { "query": "(sum(increase(serviceruntime_googleapis_com:api_request_count{metric_label_credential_id=\\"apikey:${KEY_UID}\\"}[5m])) / (sum(increase(serviceruntime_googleapis_com:api_request_count{metric_label_credential_id=\\"apikey:${KEY_UID}\\"}[5m] offset 5m)) or on() vector(1)) > 1.10) and (sum(increase(serviceruntime_googleapis_com:api_request_count{metric_label_credential_id=\\"apikey:${KEY_UID}\\"}[5m])) > 50)", "duration": "0s", "evaluationInterval": "60s" } } ], "enabled": true } EOF এটি বৃদ্ধির হার গণনা করে এবং এটিকে পূর্ববর্তী উইন্ডোর সাথে তুলনা করে। এবং শুধুমাত্র যদি এটি ১০% এর বেশি হয় তবেই অ্যালার্টটি ট্রিগার করে। যখন মোট কলের সংখ্যা নগণ্য থাকে তখন অ্যালার্ট ট্রিগার হওয়া এড়াতে, এটি উইন্ডোতে ৫০টির বেশি API কল থাকার শর্ত আরোপ করে। যখন পূর্ববর্তী ৫ মিনিটের হার ০ ছিল তখন(sum( increase( serviceruntime_googleapis_com:api_request_count{metric_label_credential_id="API_KEY_UID"}[5m]) ) / (sum( increase( serviceruntime_googleapis_com:api_request_count{metric_label_credential_id="API_KEY_UID"}[5m] offset 5m) ) or on() vector(1)) > 1.10) and (sum( increase( serviceruntime_googleapis_com:api_request_count{metric_label_credential_id=\"YOUR_CREDENTIAL_ID_HERE\"}[5m])) > 50)NaN(শূন্য দ্বারা মুছে ফেলা) গণনা এড়াতে, পূর্ববর্তী উইন্ডোর হার শূন্য হলে এটি হরকে ১ দিয়ে প্রতিস্থাপন করে। আপনি অ্যালার্টের প্যারামিটার যেমন উইন্ডোর দৈর্ঘ্য (5m), ন্যূনতম থ্রেশহোল্ড (50) বা ১০% বৃদ্ধির থ্রেশহোল্ড (1.10) পরিবর্তন করতে পারেন। অতিরিক্ত পলিসি প্যারামিটারগুলি নির্ধারণ করে যে শর্তটি পূরণ হলে অ্যালার্টটি ফায়ার করা উচিত (duration) এবং প্রতি ৬০ সেকেন্ডে শর্তটি পরীক্ষা করা উচিত (evaluationInterval)। - অ্যালার্ট নোটিফিকেশন পোস্ট করার জন্য একটি পাবসাব টপিক তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
gcloud pubsub topics create api-key-alert-notifications --project=$PROJECT_ID - PubSub ব্যবহার করে অ্যালার্টের জন্য নোটিফিকেশন চ্যানেল তৈরি করতে নিম্নলিখিত কমান্ডটি চালান।
আপনি ক্লিন আপ ধাপেCHANNEL_NAME=$(gcloud beta monitoring channels create \ --display-name="Pub/Sub Alert Channel" \ --type="pubsub" \ --channel-labels="topic=projects/$PROJECT_ID/topics/api-key-alert-notifications" \ --format='value(name)' \ --project=$PROJECT_ID)CHANNEL_NAMEএনভায়রনমেন্ট ভেরিয়েবলটি ব্যবহার করবেন। - একটি নতুন মনিটরিং অ্যালার্ট তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
gcloud monitoring policies create --policy-from-file=alert_policy.json \ --project=$PROJECT_ID - প্রজেক্ট থেকে এপিআই কীগুলো মুছে ফেলার জন্য ক্লাউড বিল্ড সার্ভিসকে অনুমতি দিতে নিম্নলিখিত কমান্ডটি চালান।
শুধুমাত্র এপিআই কী-এর নির্দিষ্ট ইনস্ট্যান্সগুলো পরিচালনা করার জন্যPROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)") gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \ --role="roles/apikeys.admin"apikeys.adminরোলটিকে সীমিত করা সম্ভব। আরও বিস্তারিত জানতে IAM শর্তাবলী দেখুন। - এপিআই কী মুছে ফেলার জন্য একটি ক্লাউড বিল্ড ট্রিগার তৈরি করতে নিম্নলিখিত স্ক্রিপ্টটি চালান।
cat <<EOF > trigger_config.yaml name: "delete-compromised-api-key" description: "Triggered by Pub/Sub alert to automatically delete the leaking API Key" pubsubConfig: topic: "projects/${PROJECT_ID}/topics/api-key-alert-notifications" build: steps: - name: "gcr.io/google.com/cloudsdktool/cloud-sdk:slim" args: - "gcloud" - "services" - "api-keys" - "delete" - "${KEY_UID}" - "--quiet" EOF - একটি নতুন মনিটরিং অ্যালার্ট ট্রিগার তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:
gcloud builds triggers create pubsub \ --trigger-config=trigger_config.yaml \ --project=$PROJECT_ID
আপনি এখন অ্যালার্ট পলিসি এবং ক্লাউড বিল্ড ট্রিগার কনফিগারেশন ফাইলগুলো মুছে ফেলতে পারেন:
rm alert_policy.json trigger_config.yaml
বিকল্পভাবে, আপনি Terraform প্ল্যান ব্যবহার করে এই অটোমেশনটি সেট আপ করতে পারেন। Google Cloud DevRel রিপোজিটরির abnormal-usage-detection ফোল্ডার থেকে Terraform ফাইলগুলো ডাউনলোড করুন। প্ল্যানটি ইনপুট প্যারামিটার হিসেবে একটি প্রজেক্ট আইডি এবং একটি API Key UID গ্রহণ করে এবং এই ধাপে আপনি যে রিসোর্স ও কনফিগারেশনগুলো দেখেছেন, সেগুলো সেট আপ করে।
৭. পরিষ্কার করুন
আপনার গুগল ক্লাউড অ্যাকাউন্টে অপ্রত্যাশিত চার্জ এড়ানোর জন্য, এই অনুশীলনের সময় তৈরি করা পাব/সাব টপিক, ক্লাউড বিল্ড ট্রিগার এবং অ্যালার্ট পলিসিগুলো মুছে ফেলতে মনে রাখবেন।
আপনার তৈরি করা সমস্ত রিসোর্স মুছে ফেলতে নিম্নলিখিত কমান্ডগুলি চালান:
gcloud builds triggers delete delete-compromised-api-key \
--project=$PROJECT_ID
gcloud beta monitoring channels delete $CHANNEL_NAME \
--project=$PROJECT_ID \
--quiet
gcloud pubsub topics delete api-key-alert-notifications \
--project=$PROJECT_ID
gcloud projects remove-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
--role="roles/apikeys.admin"
৮. সারসংক্ষেপ
এই কোডল্যাবে, আপনি গুগল ক্লাউড এপিআই কী-গুলির জন্য একটি শক্তিশালী এন্ড-টু-এন্ড নিরাপত্তা এবং অটোমেশন ফ্রেমওয়ার্ক বাস্তবায়ন করেছেন:
- সুরক্ষিত ডিফল্ট কনফিগারেশন : আপনি শুধুমাত্র প্রয়োজনীয় এপিআই এবং বিশ্বস্ত প্ল্যাটফর্মগুলিতে (যেমন নির্দিষ্ট এইচটিটিপি রেফারার) অ্যাক্সেস সীমাবদ্ধ করতে এপিআই কী তৈরি এবং নিয়ন্ত্রিত করেছেন।
- আপনার কী ইনভেন্টরি নিরীক্ষা করা হয়েছে : আপনি আপনার প্রোজেক্ট এনভায়রনমেন্টগুলো স্ক্যান করে এমন অনিয়ন্ত্রিত কীগুলো সনাক্ত ও পৃথক করেছেন যা তাৎক্ষণিক নিরাপত্তা ঝুঁকি তৈরি করে।
- বিশ্লেষিত ব্যবহারের ডেটা : আপনি প্রোগ্রাম্যাটিকভাবে ক্লাউড মনিটরিং মেট্রিক ডেটা কোয়েরি করে ঐতিহাসিক কী ব্যবহারের প্রোফাইল তৈরি করেছেন, যা আপনাকে যাচাইকৃত ব্যবহারের পদচিহ্নের উপর ভিত্তি করে কী সীমাবদ্ধ করতে সক্ষম করে।
- স্বয়ংক্রিয় হুমকি প্রশমন : আপনি একটি পাব/সাব টপিক এবং একটি ক্লাউড বিল্ড ট্রিগারের সাথে একটি ক্লাউড মনিটরিং অ্যালার্ট পলিসি সংযুক্ত করে একটি প্রতিক্রিয়াশীল "সার্কিট ব্রেকার" স্থাপন করেছেন, যা আপনাকে অস্বাভাবিক ট্র্যাফিক স্পাইকের সময় স্বয়ংক্রিয়ভাবে আপোসকৃত কীগুলি মুছে ফেলার সুযোগ দেয়।
পরবর্তী পদক্ষেপ
- আপনার সমস্ত API কী-তে বিধিনিষেধ প্রয়োগ করুন : এই ল্যাবে যা শিখেছেন তা ব্যবহার করে সমস্ত আংশিকভাবে সীমাবদ্ধ বা অসীমাবদ্ধ API কী সনাক্ত করুন এবং API ও ক্লায়েন্ট বিধিনিষেধ প্রয়োগ করুন।
- এপিআই কী-তে 'সার্কিট ব্রেকার' সেট আপ করুন : হঠাৎ ব্যবহার বেড়ে গেলে স্বয়ংক্রিয়ভাবে কী মুছে ফেলার ব্যবস্থা করে আপনার এপিআই কী-গুলোকে অপ্রত্যাশিত ব্যবহার থেকে আরও সুরক্ষিত করুন। ল্যাবে দেখানো
gcloudকমান্ড বা Terraform ব্যবহার করুন। IAM কন্ডিশন ব্যবহার করে পারমিশন আরও কঠোর করার কথা বিবেচনা করুন। - মনিটরিং অ্যালার্টিং সম্পর্কে জানুন : গুগল ক্লাউড মনিটরিং পরিষেবা ব্যবহার করে অ্যালার্ট সেট আপ করার বিষয়ে আরও জানুন।
- গুগল ক্লাউডে উপলব্ধ অ্যাক্সেস কন্ট্রোল সম্পর্কে আরও জানুন : অ্যাক্সেস বাউন্ডারি পলিসি এবং অ্যাক্সেস পরিবর্তনের বিস্তার পর্যালোচনা করুন।