১. ভূমিকা
এই কোডল্যাবটি একটি প্রাইভেট ভিপিসি নেটওয়ার্কের মাধ্যমে রিমোট এন্ডপয়েন্ট অ্যাক্সেসকারী এআই এজেন্টদের জন্য এজেন্ট গেটওয়ের ইগ্রেস গভর্নেন্স অন্বেষণ করে। ইগ্রেস ( এজেন্ট-টু-এনিহোয়্যার ) মোডে পরিচালিত এজেন্ট গেটওয়ে প্রাইভেট সার্ভিস কানেক্ট (পিএসসি) ইন্টারফেস ব্যবহার করে একটি ভিপিসি নেটওয়ার্কে প্রাইভেট কানেক্টিভিটি সমর্থন করে। এই সিনারিওতে, এজেন্ট রানটাইম ভিপিসি নেটওয়ার্কে থাকা গুগল এপিআই-এর জন্য একটি প্রাইভেট সার্ভিস কানেক্ট (পিএসসি) এন্ডপয়েন্ট ব্যবহার করে ক্লাউড রানে হোস্ট করা একটি রিমোট স্ট্রিমেবল এইচটিটিপি এমসিপি সার্ভার অ্যাক্সেস করার জন্য এজেন্ট গেটওয়ে ব্যবহার করে।
স্বতন্ত্র চ্যাটবট থেকে শুরু করে মাল্টি-এজেন্ট ওয়ার্কফ্লো সহ স্বায়ত্তশাসিত সিস্টেম পর্যন্ত এআই অ্যাপগুলো গতিশীলভাবে বাহ্যিক টুল আহ্বান করতে পারে। নিরাপদ এবং উৎপাদনশীল এজেন্টের জন্য, ডেটাবেস কোয়েরি করা, ওয়েব কন্টেন্ট আনা এবং অ্যাকশন সম্পাদনের জন্য এজেন্টদের নিয়ন্ত্রিত অ্যাক্সেস প্রদান করা অপরিহার্য। তবে, এন্টারপ্রাইজ পরিবেশে এজেন্ট টুল এক্সিকিউশন সুরক্ষিত করা একটি চ্যালেঞ্জ। যদি কোনো এজেন্টের সরাসরি নেটওয়ার্ক অ্যাক্সেস থাকে, তাহলে প্রম্পট ইনজেকশন অ্যাটাক বা মডেল হ্যালুসিনেশনের কারণে এজেন্টটি সংবেদনশীল ডেটা পাচার করতে বা ধ্বংসাত্মক কমান্ড চালাতে পারে।
বৃহৎ পরিসরে স্বায়ত্তশাসিত এজেন্টদের পরিচালনা করার জন্য, এজেন্ট গেটওয়ে একটি কেন্দ্রীভূত, জিরো-ট্রাস্ট প্রয়োগ ব্যবস্থা প্রদান করে যা সরাসরি এজেন্ট প্ল্যাটফর্ম আর্কিটেকচারের সাথে সমন্বিত। প্রতিটি অ্যাপ্লিকেশন বা এজেন্ট কোডের জন্য স্বতন্ত্র কাস্টম বাস্তবায়নের উপর নির্ভর করার পরিবর্তে, এজেন্ট গেটওয়ে প্ল্যাটফর্ম স্তরে নেটওয়ার্ক রাউটিং, এজেন্ট গভর্নেন্স এবং রানটাইম নিরাপত্তা প্রয়োগ করে।
যখন এজেন্ট গেটওয়ে ইগ্রেস ( এজেন্ট-টু-এনিহোয়্যার ) মোডে কাজ করে, তখন এটি গেটওয়ে ব্যবহার করার জন্য কনফিগার করা এজেন্টদের থেকে আসা সমস্ত বহির্গামী অনুরোধ প্রক্সি করে। প্রতিটি এজেন্ট ওয়ার্কলোড অনুরোধ অনন্য এজেন্ট আইডেন্টিটি ব্যবহার করে প্রমাণীকৃত হয় এবং আইডেন্টিটি-অ্যাওয়্যার প্রক্সি (IAP) পলিসি ব্যবহার করে অনুমোদিত হয়। পলিসি প্রয়োগের জন্য MCP টুল কলগুলো ডায়নামিকভাবে ডিকোড এবং পরিদর্শন করা হয়। নিরাপত্তা অ্যাডমিনরা কেন্দ্রীয়ভাবে সূক্ষ্ম-স্তরের অনুমতি প্রয়োগ করতে পারেন, যাতে এজেন্টরা শুধুমাত্র অনুমোদিত এন্ডপয়েন্ট এবং মেথডগুলোই ব্যবহার করতে পারে।
আপনি যা তৈরি করেন
- এজেন্ট গেটওয়ে বহির্গমন ( এজেন্ট-টু-এনিহোয়্যার ) মোডে
- পরিচয়-সচেতন প্রক্সি (IAP) অনুমোদন এক্সটেনশন
- এজেন্ট পরিচয় সহ এজেন্ট রানটাইম ADK এজেন্ট
- ক্লাউড রান স্ট্রিমেবল HTTP MCP সার্ভার
- গুগল এপিআই এবং কাস্টম এমসিপি এন্ডপয়েন্ট সহ এজেন্ট রেজিস্ট্রি
- IAM অ্যাক্সেস কন্ট্রোল সহ অনুমোদন নীতি
- VPC নেটওয়ার্ক রিসোর্স, ক্লাউড DNS জোন, এবং Google API-এর জন্য PSC এন্ডপয়েন্ট
- এজেন্ট গেটওয়ে বহির্গমনের জন্য পিএসসি নেটওয়ার্ক সংযুক্তি
- ক্লাউড নেক্সট জেনারেশন ফায়ারওয়াল (NGFW) ফায়ারওয়াল পলিসি নিয়মাবলী
চিত্র ১. কোডল্যাব আর্কিটেকচার
আপনি যা শিখবেন
- একটি কাঠামোগত কনফিগারেশন অনুক্রমে এজেন্ট গেটওয়ে কীভাবে স্থাপন করবেন
- প্রাইভেট ভিপিসি নেটওয়ার্ক সংযোগের সাথে এজেন্ট গেটওয়ে কীভাবে কনফিগার করবেন
- অনুমোদন নীতিগুলিকে পরীক্ষামূলক পর্যায় থেকে বাধ্যতামূলক মোডে কীভাবে রূপান্তর করবেন
- এজেন্ট রেজিস্ট্রিতে গুগল এপিআই এন্ডপয়েন্ট এবং এমসিপি সার্ভার কীভাবে নিবন্ধন করবেন
- বহির্গমন শাসনব্যবস্থা যাচাই করার জন্য এজেন্ট গেটওয়ে লগগুলি কীভাবে নিরীক্ষা করবেন
- ক্লাউড এনজিএফডব্লিউ লগ ব্যবহার করে এজেন্ট গেটওয়ের বহির্গামী ট্র্যাফিক কীভাবে যাচাই করবেন
আপনার যা প্রয়োজন
- বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট
- নেটওয়ার্কিং পরিষেবা, BigQuery ডেটাসেট এবং এজেন্ট প্ল্যাটফর্ম রিসোর্স সরবরাহ করার জন্য IAM অনুমতি
- Google Cloud CLI (
gcloudএবংbqউপাদানসমূহ) ইনস্টল করা একটি POSIX-সামঞ্জস্যপূর্ণ শেল (bashবাzsh)। - কমান্ড-লাইন টুলস:
git,curl,jq(JSON প্রসেসর), Python 3, এবংuv(Python প্যাকেজ ম্যানেজার)
২. ধারণা
মোতায়েন ক্রম
এই কোডল্যাবটি একটি সুসংগঠিত কনফিগারেশন অনুক্রম অনুসরণ করে, যার ফলে এজেন্টরা ইনিশিয়ালাইজেশনের সময় প্রয়োজনীয় রিসোর্সগুলিতে অ্যাক্সেস পায় এবং বাধ্যতামূলক অ্যাক্সেস নীতি প্রয়োগ করার আগে কানেক্টিভিটি নিশ্চিত করা যায়।
এই কোডল্যাবটি নিম্নলিখিত ডেপ্লয়মেন্ট সিকোয়েন্স ব্যবহার করে:
-
DRY_RUNমোডে শুরু করুন : নিশ্চিত করুন যে এজেন্ট অনুরোধগুলি সফলভাবে গেটওয়েতে পৌঁছাচ্ছে এবং পাস করছে (শুধুমাত্র নিরীক্ষা মোড)। - সমস্ত পরিষেবা নিবন্ধন করুন: এজেন্ট রেজিস্ট্রি-তে সমস্ত এজেন্টিক উপাদান নিবন্ধন করুন এবং এজেন্ট টুল অ্যাক্সেস নিশ্চিত করুন। এজেন্ট রেজিস্ট্রি-তে করা কোয়েরিগুলো দেখতে ক্লাউড লগিং এবং এজেন্ট গেটওয়ে অবজার্ভেবিলিটি ড্যাশবোর্ড ব্যবহার করুন।
- অনুমোদন নীতিমালা তৈরি করুন: এজেন্ট থেকে এমসিপি সার্ভার এবং এন্ডপয়েন্টগুলিতে বহির্গমন ট্র্যাফিকের অনুমতি দেওয়ার জন্য অনুমোদন নীতিমালা তৈরি ও প্রয়োগ করুন।
-
ENFORCEDমোডে স্যুইচ করুন : নীতিমালা কার্যকর করতে এবং অননুমোদিত বহির্গমন ট্র্যাফিক ব্লক করতে অনুমোদন এক্সটেনশন নীতি আপডেট করুন।
চিত্র ২. মোতায়েন ক্রম
বহির্গমন রাউটিং টপোলজি
এজেন্ট গেটওয়ে ইগ্রেস ( এজেন্ট-টু-এনিহোয়্যার ) এজেন্টিক ওয়ার্কলোডগুলির জন্য একটি কেন্দ্রীভূত, জিরো-ট্রাস্ট আউটবাউন্ড প্রক্সি হিসাবে কাজ করে। যখন কোনো এজেন্ট একটি বাহ্যিক টুল বা এপিআই-তে অনুরোধ করে, তখন সেই আউটবাউন্ড অনুরোধটি এজেন্ট গেটওয়ে দ্বারা আটকানো হয় এবং গন্তব্যে পাঠানোর আগে গভর্নেন্স পলিসির সাথে মিলিয়ে মূল্যায়ন করা হয়। গুগল ক্লাউড এজেন্ট প্ল্যাটফর্ম আর্কিটেকচারে, এজেন্ট গেটওয়ে নিম্নলিখিতগুলির জন্য ডেটা প্লেন কানেক্টিভিটি প্রদান করে:
- প্রাইভেট নেটওয়ার্ক (VPC): প্রাইভেট VPC-তে হোস্ট করা অভ্যন্তরীণ এন্টারপ্রাইজ API, মাইক্রোসার্ভিস, ডেটাবেস এবং হাইব্রিড কানেক্টিভিটির মাধ্যমে পৌঁছানো যায় এমন অন-প্রিমিসেস বা ক্রস-ক্লাউড নেটওয়ার্ককে লক্ষ্য করে পরিচালিত আউটবাউন্ড ট্র্যাফিক।
- বাহ্যিক নেটওয়ার্ক (ইন্টারনেট): তৃতীয় পক্ষের ওয়েব পরিষেবা, SaaS API, বা পাবলিক এন্ডপয়েন্টকে লক্ষ্য করে বহির্গামী ট্র্যাফিক।
- এআই পরিষেবা ও এজেন্ট প্ল্যাটফর্ম: পরিচালিত গুগল ক্লাউড এপিআই, ফাউন্ডেশন মডেল, গুগল এমসিপি এন্ডপয়েন্ট (যেমন বিগকোয়েরি), এবং প্ল্যাটফর্ম গভর্নেন্স পরিষেবা (এজেন্ট রেজিস্ট্রি ও আইএপি পলিসি)-কে লক্ষ্য করে আউটবাউন্ড ট্র্যাফিক।
চিত্র ৩. এজেন্ট গেটওয়ের বহির্গমন রাউটিং টপোলজি
এই কোডল্যাবের মূল লক্ষ্য হলো এজেন্ট রানটাইমে থাকা একটি কাস্টম এজেন্ট থেকে বহির্গামী ট্র্যাফিক পরিচালনা করা, যা একটি ভিপিসি নেটওয়ার্কে স্থাপিত গুগল এপিআই এন্ডপয়েন্টের জন্য একটি পিএসসি-কে লক্ষ্য করে। এই আর্কিটেকচারটি এজেন্ট গেটওয়ের বহির্গমনের জন্য পিএসসি নেটওয়ার্ক অ্যাটাচমেন্ট ব্যবহার করে ক্লাউড রানে হোস্ট করা এমসিপি সার্ভারে ব্যক্তিগত অ্যাক্সেস সক্ষম করে।
ভিপিসি সংযোগ
ডিপ্লয়মেন্ট YAML কনফিগারেশন ফাইলে networkConfig: egress: networkAttachment: [URI] উল্লেখ করার মাধ্যমে এজেন্ট গেটওয়ে ইগ্রেস ( এজেন্ট-টু-এনিহোয়্যার ) একটি VPC নেটওয়ার্কের সাথে সংযোগ স্থাপন করতে পারে। এই সেটিংটি এজেন্ট গেটওয়েতে রাউটিং নিয়ম কনফিগার করে, যার ফলে প্রাইভেট আইপি অ্যাড্রেসে রিজলভ হওয়া ট্র্যাফিক PSC নেটওয়ার্ক অ্যাটাচমেন্টের মাধ্যমে VPC নেটওয়ার্কে পাঠানো হয়।
চিত্র ৪. এজেন্ট গেটওয়ে ভিপিসি সংযোগ
এজেন্ট গেটওয়ে ক্লাউড ডিএনএস পিয়ারিং ব্যবহার করে একটি নির্দিষ্ট টার্গেট প্রজেক্ট এবং ভিপিসি নেটওয়ার্কে প্রাইভেট ডিএনএস হোস্টনেম রিজলভ করতে সক্ষম। dnsPeeringConfig: domains: [NAME] কনফিগারেশনে তালিকাভুক্ত যেকোনো প্রাইভেট জোন টার্গেট প্রজেক্টের ক্লাউড ডিএনএস রেকর্ড ব্যবহার করবে। অন্য যেকোনো ডিএনএস কোয়েরি ডিফল্ট ভিপিসি ক্লাউড ডিএনএস পাবলিক রিজলভার ব্যবহার করবে।
এর মাধ্যমেই ধারণা পর্ব শেষ হলো... এরপর সেটআপ অংশে যাওয়া যাক।
৩. সেটআপ
প্রয়োজনীয় IAM ভূমিকা
এই কোডল্যাবে রিসোর্সগুলো তৈরি করার জন্য নিম্নলিখিত ভূমিকাগুলো প্রয়োজন:
বিভাগ | প্রয়োজনীয় IAM ভূমিকা (ID) | বর্ণনা |
এপিআই ব্যবস্থাপনা | | গুগল ক্লাউড এপিআই পরিষেবাগুলি সক্রিয় করুন |
নেটওয়ার্কিং এবং গেটওয়ে | | প্রোভিশন এজেন্ট গেটওয়ে |
পরিষেবা সম্প্রসারণ | | রাউটিং এক্সটেনশন কনফিগার করুন |
নেটওয়ার্ক নিরাপত্তা | | অনুমোদন নীতিগুলি স্থাপন করুন |
এজেন্ট রেজিস্ট্রি | | ক্যাটালগ অনুমোদিত হোস্ট |
ভার্টেক্স এআই এবং এজেন্ট | | এজেন্ট রানটাইম ওয়ার্কলোড স্থাপন করুন |
বহির্গমন নীতি | | |
ক্লাউড স্টোরেজ | | ডেপ্লয়মেন্ট স্টেজিং বাকেটগুলি পরিচালনা করুন |
লগ এবং নিরীক্ষা | | ট্রেস এবং অডিট লগ পরিদর্শন করুন |
ক্লাউড রান ডেভেলপার | | ক্লাউড রান পরিষেবাগুলি স্থাপন করুন |
আর্টিফ্যাক্ট রেজিস্ট্রি রিডার | | কন্টেইনারের ছবি টানুন |
কম্পিউটার নেটওয়ার্ক অ্যাডমিন | | VPC নেটওয়ার্কিং রিসোর্স পরিচালনা করুন |
ডিএনএস প্রশাসক | | ক্লাউড ডিএনএস জোন এবং রেকর্ড পরিচালনা করুন |
বিকল্পভাবে, roles/admin মতো একটি ব্যাপক মৌলিক রোল অথবা roles/owner মতো লিগ্যাসি রোল ব্যবহার করুন।
আপনার প্রজেক্ট অ্যাক্সেস করুন
এই কোডল্যাবটিতে একটিমাত্র গুগল ক্লাউড প্রজেক্ট ব্যবহার করা হয়েছে। কনফিগারেশন ধাপগুলোতে gcloud CLI এবং লিনাক্স শেল কমান্ড ব্যবহার করা হয়।
আপনার গুগল ক্লাউড প্রজেক্টের কমান্ড লাইন অ্যাক্সেস করে শুরু করুন:
- cloud Shell,
shell.cloud.google.comএ, অথবা -
gcloudCLI ইনস্টল করা একটি স্থানীয় টার্মিনাল
আপনার প্রজেক্ট আইডি সেট করুন
gcloud config set project SET_YOUR_PROJECT_ID_HERE
সেশন প্রমাণীকরণ করুন
# login to gcloud cli
gcloud auth login
# login for gcloud api
gcloud auth application-default login
শেল এনভায়রনমেন্ট ভেরিয়েবল সেট করুন
# set custom var for slug (eg, "foo") and region preference
export SLUG="foo"
export REGION="us-central1"
export MREGION="us"
echo ${SLUG}
echo ${REGION}
echo ${MREGION}
# create project vars (automatic)
export PROJ_ID=$(gcloud config list --format="value(core.project)")
export PROJ_NO=$(gcloud projects describe ${PROJ_ID} --format="value(projectNumber)")
export ORG_ID=$(gcloud projects get-ancestors ${PROJ_ID} --format="value(id)" | tail -n 1)
export USER_IDENTITY=$(gcloud config get-value account)
echo ${PROJ_ID}
echo ${PROJ_NO}
echo ${ORG_ID}
echo ${USER_IDENTITY}
# create resource vars (automatic)
export AGW_NAME="agw-${SLUG}-${REGION}-ata"
export AGW_URI="projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
export RE_AGENT_NAME="agent-weather"
export RE_AGENT_ID_SET="principalSet://agents.global.org-${ORG_ID}.system.id.goog/attribute.platformContainer/aiplatform/projects/${PROJ_NO}"
export STAGING_BUCKET="agent-staging-${PROJ_NO}"
export MCP_NAME="mcp-weather"
export MCP_DISPLAY_NAME="${MCP_NAME}-${PROJ_NO}.${REGION}.run.app"
export MCP_URL="https://${MCP_DISPLAY_NAME}/mcp"
echo ${AGW_NAME}
echo ${AGW_URI}
echo ${RE_AGENT_NAME}
echo ${RE_AGENT_ID_SET}
echo ${STAGING_BUCKET}
echo ${MCP_NAME}
echo ${MCP_DISPLAY_NAME}
echo ${MCP_URL}
# create local dir for config files
mkdir -p cfg
gcloud cli আপডেট করুন (সুপারিশকৃত)
যদি গুগল ক্লাউড এসডিকে-র একটি সেলফ-ম্যানেজড ইনস্টল (অর্থাৎ, ক্লাউড শেল-এর বাইরে) চালান, তাহলে কম্পোনেন্টগুলিকে সর্বশেষ সংস্করণে আপডেট করুন।
# update gcloud cli
gcloud components update
এপিআই পরিষেবাগুলি সক্ষম করুন
# enable google apis (agent platform bundle, part 1)
gcloud services enable \
agentregistry.googleapis.com \
aiplatform.googleapis.com \
apphub.googleapis.com \
apptopology.googleapis.com \
cloudapiregistry.googleapis.com \
cloudtrace.googleapis.com \
compute.googleapis.com \
dataform.googleapis.com \
iam.googleapis.com \
iamconnectors.googleapis.com \
iap.googleapis.com \
logging.googleapis.com \
modelarmor.googleapis.com \
monitoring.googleapis.com \
networksecurity.googleapis.com \
networkservices.googleapis.com \
notebooks.googleapis.com \
observability.googleapis.com
# enable google apis (agent platform bundle, part 2)
gcloud services enable \
securitycenter.googleapis.com \
saasservicemgmt.googleapis.com \
storage.googleapis.com \
telemetry.googleapis.com \
texttospeech.googleapis.com
# enable google apis (all the rest)
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
dns.googleapis.com
এর মাধ্যমেই সেটআপ পর্ব শেষ হলো... এরপর নেটওয়ার্ক অংশে যাওয়া যাক।
৪. নেটওয়ার্ক
এজেন্ট গেটওয়ের জন্য পিএসসি নেটওয়ার্ক অ্যাটাচমেন্ট এবং ক্লাউড রান ডাইরেক্ট ভিপিসি ইগ্রেস সমর্থনকারী নিয়মিত সাবনেট তৈরি করতে ভিপিসি নেটওয়ার্কটি কাস্টম মোড ব্যবহার করে স্থাপন করা হয়।
ক্লাউড রানে ব্যক্তিগত অভ্যন্তরীণ অ্যাক্সেস সমর্থন করার জন্য, গুগল এপিআই-এর পিএসসি এন্ডপয়েন্টটি একটি একক /32 গ্লোবাল অভ্যন্তরীণ IPv4 অ্যাড্রেস ব্যবহার করে স্থাপন করা হয়েছে। এই আইপি অ্যাড্রেসটি কোনো আঞ্চলিক সাবনেট থেকে বরাদ্দ করা হয় না।
নেটওয়ার্ক তৈরি করুন
একটি গ্লোবাল ভিপিসি নেটওয়ার্ক তৈরি করুন।
# create vpc network
gcloud compute networks create vnet-${SLUG} --subnet-mode=custom
এজেন্ট গেটওয়ে পিএসসি নেটওয়ার্ক অ্যাটাচমেন্ট এবং ক্লাউড রান ডাইরেক্ট ভিপিসি ইগ্রেসের জন্য সাবনেট তৈরি করুন।
# create subnet for agent gateway psc na
gcloud compute networks subnets create subnet-${REGION}-agw \
--network=vnet-${SLUG} \
--range=192.168.10.0/28 \
--region=${REGION} \
--enable-private-ip-google-access
# create subnet for cloud run dvpc egress
gcloud compute networks subnets create subnet-${REGION}-crun \
--network=vnet-${SLUG} \
--range=10.10.10.0/24 \
--region=${REGION} \
--enable-private-ip-google-access
ফায়ারওয়াল নিয়ম তৈরি করুন
লগিং সক্ষম করে সমস্ত বহির্গামী ট্র্যাফিকের অনুমতি দেওয়ার জন্য একটি ফায়ারওয়াল পলিসি এবং রুল তৈরি করুন। এটি এজেন্ট গেটওয়ে থেকে ভিপিসি নেটওয়ার্কে বহির্গামী ট্র্যাফিক নিরীক্ষণের জন্য ব্যবহৃত হবে।
# create fw policy
gcloud compute network-firewall-policies create fw-policy-${SLUG} --global
# create fw policy rule
gcloud compute network-firewall-policies rules create 1001 \
--description="allow all out and log" \
--firewall-policy=fw-policy-${SLUG} \
--global-firewall-policy \
--action=allow \
--direction=EGRESS \
--layer4-configs=all \
--dest-ip-ranges=0.0.0.0/0 \
--enable-logging
# associate fw policy to vpc network
gcloud compute network-firewall-policies associations create \
--name=fw-policy-bind-${SLUG} \
--firewall-policy=fw-policy-${SLUG} \
--network=vnet-${SLUG} \
--global-firewall-policy
পিএসসি নেটওয়ার্ক সংযুক্তি তৈরি করুন
নতুন প্রডিউসার সংযোগ স্বয়ংক্রিয়ভাবে গ্রহণ করার জন্য কনফিগার করা একটি PSC নেটওয়ার্ক অ্যাটাচমেন্ট তৈরি করুন।
# create psc network attachment
gcloud compute network-attachments create psc-na-${REGION}-agw \
--region=${REGION} \
--subnets=subnet-${REGION}-agw \
--connection-preference=ACCEPT_AUTOMATIC
পিএসসি নেটওয়ার্ক সংযুক্তি যাচাই করুন
# show psc network attachment details
gcloud compute network-attachments describe psc-na-${REGION}-agw --region=${REGION}
# fetch psc na uri
export PSC_NA_URI=$(gcloud compute network-attachments describe psc-na-${REGION}-agw \
--region=${REGION} \
--format="value(selfLink.scope(v1))")
echo ${PSC_NA_URI}
PSC এন্ডপয়েন্ট তৈরি করুন
গ্লোবাল পিএসসি এন্ডপয়েন্টের জন্য একটি আইপি অ্যাড্রেস রিজার্ভেশন তৈরি করুন। এখানে ব্যবহৃত অ্যাড্রেসটি কোনো বিদ্যমান সাবনেট থেকে আসতে পারবে না বা তার সাথে ওভারল্যাপ করতে পারবে না।
# set env var for psc ep ip address
export PSC_EP_IP="240.0.0.10"
echo ${PSC_EP_IP}
# reserve internal global ipv4 address
gcloud compute addresses create ip-psc2gapis \
--global \
--purpose=PRIVATE_SERVICE_CONNECT \
--addresses=${PSC_EP_IP} \
--network=vnet-${SLUG}
all-apis বান্ডেলটি ব্যবহার করে গুগল এপিআই-এর জন্য একটি পিএসসি এন্ডপয়েন্ট তৈরি করুন, যার মধ্যে ক্লাউড রান ( run.app ) অন্তর্ভুক্ত রয়েছে।
# create psc endpoint for google apis
gcloud compute forwarding-rules create psc2gapis \
--global \
--network=vnet-${SLUG} \
--address=ip-psc2gapis \
--target-google-apis-bundle=all-apis
PSC এন্ডপয়েন্ট যাচাই করুন
# show psc endpoint details
gcloud compute forwarding-rules describe psc2gapis --global
ডিএনএস জোন এবং রেকর্ড তৈরি করুন
run.app ডোমেনের জন্য একটি প্রাইভেট ক্লাউড ডিএনএস ম্যানেজড জোন তৈরি করুন।
# create private dns zone
gcloud dns managed-zones create priv-zone-run \
--description="private zone for cloud run" \
--dns-name="run.app." \
--visibility=private \
--networks=vnet-${SLUG}
PSC এন্ডপয়েন্টের IP অ্যাড্রেসকে নির্দেশ করে *.run.app. এর জন্য একটি ওয়াইল্ডকার্ড DNS A রেকর্ড তৈরি করুন।
# create dns record
gcloud dns record-sets create *.run.app \
--zone=priv-zone-run \
--type=A \
--ttl=300 \
--rrdatas=${PSC_EP_IP}
DNS কোয়েরি লগিং চালু করতে একটি ক্লাউড DNS পলিসি তৈরি করুন।
# create dns policy (logging)
gcloud dns policies create dns-policy-${SLUG} \
--description="dns logging for vnet-${SLUG}" \
--networks=vnet-${SLUG} \
--enable-logging
ক্লাউড NAT তৈরি করুন
MCP সার্ভারের জন্য ক্লাউড রান ডাইরেক্ট VPC ইগ্রেস সমর্থন করতে একটি ক্লাউড রাউটার এবং ক্লাউড NAT তৈরি করুন, যাতে এটি VPC নেটওয়ার্কের মাধ্যমে বাহ্যিক আবহাওয়ার ডেটা অ্যাক্সেস করতে পারে।
# create router for nat
gcloud compute routers create cr-nat-${SLUG}-${REGION} \
--network=vnet-${SLUG} \
--asn=16550 \
--region=${REGION}
# create nat gateway
gcloud compute routers nats create nat-${SLUG}-${REGION} \
--router=cr-nat-${SLUG}-${REGION} \
--region=${REGION} \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges
এর মাধ্যমেই নেটওয়ার্ক পর্ব শেষ হলো... এরপর গেটওয়ে অংশে যাওয়া যাক।
৫. গেটওয়ে
অ্যাক্সেস কন্ট্রোল প্রয়োগ করার আগে, এজেন্ট গেটওয়ে স্থাপন করুন এবং অথরাইজেশন এক্সটেনশনটি DRY_RUN মোডে কনফিগার করুন। এর ফলে আউটবাউন্ড টুল কলগুলো সফল হয় এবং অডিটের উদ্দেশ্যে মূল্যায়নের ফলাফল লগ করা থাকে।
এখানে এজেন্ট গেটওয়ে আঞ্চলিক এজেন্ট রানটাইম রিসোর্স সমর্থন করার জন্য একটি আঞ্চলিক রেজিস্ট্রি ব্যবহার করে এবং VPC নেটওয়ার্ক, PSC নেটওয়ার্ক অ্যাটাচমেন্ট ও DNS পিয়ারিং কনফিগের জন্য networkConfig ফিল্ডগুলি নির্দিষ্ট করে।
গেটওয়ে তৈরি করুন
# create new agent gateway config file (with network settings)
cat > cfg/${AGW_NAME}-networkConfig.yaml << EOF
name: ${AGW_NAME}
protocols:
- MCP
googleManaged:
governedAccessPath: AGENT_TO_ANYWHERE
registries:
- "//agentregistry.googleapis.com/projects/${PROJ_ID}/locations/${REGION}"
networkConfig:
egress:
networkAttachment: ${PSC_NA_URI}
dnsPeeringConfig:
domains:
- run.app.
targetProject: ${PROJ_ID}
targetNetwork: projects/${PROJ_ID}/global/networks/vnet-${SLUG}
EOF
# import agent gateway config file (create gateway)
gcloud network-services agent-gateways import ${AGW_NAME} \
--source="cfg/${AGW_NAME}-networkConfig.yaml" \
--location=${REGION}
গেটওয়ে যাচাই করুন
# show agent gateway details
gcloud network-services agent-gateways describe ${AGW_NAME} \
--location=${REGION}
# show psc network attachment details
gcloud compute network-attachments describe psc-na-${REGION}-agw --region=${REGION}
যাচাই করুন যে একটি স্বীকৃত সংযোগ প্রান্তবিন্দু আছে।
connectionEndpoints:
- ipAddress: 192.168.10.2
projectIdOrNum: '[AGW_PROJECT_NO]'
status: ACCEPTED
subnetwork: https://www.googleapis.com/compute/v1/projects/${PROJ_ID}/regions/${REGION}/subnetworks/subnet-${REGION}-agw
এর মাধ্যমেই গেটওয়ে পর্ব শেষ হলো... এরপর অনুমোদন অংশে যাওয়া যাক।
৬. অনুমোদন
আইডেন্টিটি-অ্যাওয়্যার প্রক্সি (IAP)-এর জন্য এজেন্ট গেটওয়ে অথরাইজেশন এক্সটেনশন হলো এক ধরনের সার্ভিস এক্সটেনশন, যা এজেন্ট প্ল্যাটফর্মের সমস্ত যোগাযোগের জন্য অথরাইজেশন সংক্রান্ত সিদ্ধান্ত অর্পণ করতে ব্যবহৃত হয়।
- ডেলিগেশন ফ্লো: যখন কোনো এজেন্ট একটি এক্সটার্নাল এন্ডপয়েন্ট বা এমসিপি সার্ভারকে কল করার চেষ্টা করে, তখন এটি অনুরোধটি এজেন্ট গেটওয়েতে পাঠিয়ে দেয়। স্থানীয়ভাবে অ্যাক্সেস মূল্যায়ন করার পরিবর্তে, গেটওয়েটি অথরাইজেশন এক্সটেনশন ব্যবহার করে আইএপি ইভ্যালুয়েশন সার্ভিসে একটি কলআউট পাঠায়। আইএপি এজেন্ট রেজিস্ট্রিতে থাকা টার্গেট রিসোর্সের আইএএম পলিসির সাথে এজেন্টের ( SPIFFE-ভিত্তিক ) আইডেন্টিটি মূল্যায়ন করে। আইএপি গেটওয়েতে একটি
ALLOWবাDENYসিদ্ধান্ত ফেরত পাঠায়, যা হয় ট্র্যাফিকটি সামনে পাঠিয়ে দেয় অথবা একটি HTTP403 Forbiddenস্ট্যাটাস কোড দিয়ে ব্লক করে দেয়। - প্রয়োগ মোড:
DRY_RUNমোডে, IAP ট্র্যাফিক ব্লক না করেই অনুরোধগুলি মূল্যায়ন করে এবং ক্লাউড লগিং-এ সিদ্ধান্তগুলি লগ করে।ENFORCEমোডে, কোনো অননুমোদিত এজেন্ট বা অনিবন্ধিত টার্গেটের কাছে করা যেকোনো অনুরোধ অবিলম্বে ব্লক করা হয়। - বাইন্ডিং লেয়ার: সার্ভিস এক্সটেনশনটি
REQUEST_AUTHZপ্রোফাইল দিয়ে কনফিগার করা একটি অথরাইজেশন পলিসি ব্যবহার করে এজেন্ট গেটওয়ের সাথে সংযুক্ত থাকে।
অনুমোদন সম্প্রসারণ
একটি অথরাইজেশন এক্সটেনশন কানেক্টিভিটি সেটিংস এবং অন্যান্য প্যারামিটারসহ সিকিউরিটি প্রোভাইডার সার্ভিসটি নির্দিষ্ট করে, যা নির্ধারণ করে সার্ভিসটি কীভাবে কাজ করবে এবং এজেন্ট গেটওয়ের সাথে সমন্বিত হবে।
প্রমাণীকরণ এক্সটেনশন তৈরি করুন
# create authz extension config file (dry run mode)
cat > cfg/${AGW_NAME}-svc-ext-authz-iap-dryrun.yaml << EOF
name: ${AGW_NAME}-svc-ext-authz-iap-dryrun
service: iap.googleapis.com
failOpen: true
timeout: 1s
metadata:
iamEnforcementMode: "DRY_RUN"
iapPolicyVersion: "V1"
EOF
প্রমাণীকরণ এক্সটেনশন আমদানি করুন
# import authz extension file (create extension)
gcloud service-extensions authz-extensions import ${AGW_NAME}-svc-ext-authz-iap-dryrun \
--source=cfg/${AGW_NAME}-svc-ext-authz-iap-dryrun.yaml \
--location=${REGION}
প্রমাণীকরণ এক্সটেনশন যাচাই করুন
# show authz extension details
gcloud service-extensions authz-extensions describe ${AGW_NAME}-svc-ext-authz-iap-dryrun \
--location=${REGION}
অনুমোদন নীতি
একটি অনুমোদন নীতি নিরাপত্তা প্রদানকারীকে (IAP) লক্ষ্য গেটওয়ে রিসোর্সের সাথে আবদ্ধ করে এবং ইন্টারসেপশন প্রোফাইল ( REQUEST_AUTHZ ) নির্দিষ্ট করে।
অনুমোদন নীতি তৈরি করুন
# create authz policy config file (attach dry-run authz extension)
cat > cfg/${AGW_NAME}-authz-policy-profile-iap.yaml << EOF
name: ${AGW_NAME}-authz-policy-profile-iap
target:
resources:
- "projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
policyProfile: REQUEST_AUTHZ
action: CUSTOM
customProvider:
authzExtension:
resources:
- "projects/${PROJ_ID}/locations/${REGION}/authzExtensions/${AGW_NAME}-svc-ext-authz-iap-dryrun"
EOF
অনুমোদন নীতি বাধ্যতামূলক করুন
# import authz policy config file (enable authz policy)
gcloud beta network-security authz-policies import ${AGW_NAME}-authz-policy-profile-iap \
--source=cfg/${AGW_NAME}-authz-policy-profile-iap.yaml \
--location=${REGION}
প্রমাণীকরণ নীতি যাচাই করুন
# show authz policy details
gcloud beta network-security authz-policies describe ${AGW_NAME}-authz-policy-profile-iap \
--location=${REGION}
এর মাধ্যমেই অনুমোদন পর্ব শেষ হলো... এরপর কোডবেস অংশে যাওয়া যাক।
৭. কোডবেস
এই কোডল্যাবের জন্য ব্যবহৃত এজেন্ট, এমসিপি সার্ভার এবং এন্ডপয়েন্ট রেজিস্ট্রেশন কোড একটি রিমোট গুগল ক্লাউড গিটহাব রিপোজিটরিতে রক্ষণাবেক্ষণ করা হয়। নিম্নলিখিত ধাপগুলো রিপোজিটরিটি স্থানীয়ভাবে ক্লোন করবে, প্রয়োজনীয় ফাইলগুলো বর্তমান ওয়ার্কিং ডিরেক্টরি কাঠামোতে কপি করবে এবং তারপর টেম্পোরারি ফাইলগুলো পরিষ্কার করবে।
এজেন্ট রানটাইমের জন্য একটি স্টোরেজ স্টেজিং বাকেট তৈরি করা হয়, যেখানে প্যাকেজ করা এজেন্ট অ্যাপ্লিকেশন কোড এবং এর নির্ভরশীল আর্টিফ্যাক্টগুলো আপলোড, বিল্ড ও ডিপ্লয় করা হয়।
দূরবর্তী নিদর্শনগুলি আনুন
# clone remote repository to temp local dir
git clone https://github.com/GoogleCloudPlatform/cloud-networking-solutions.git ./temp_agw_cuj_arun_egress_vpc
# copy agent runtime and endpoint definitions to working project dir
cp -r temp_agw_cuj_arun_egress_vpc/codelabs/agw-cuj-arun-egress-vpc/agent-weather ./agent-weather
cp -r temp_agw_cuj_arun_egress_vpc/codelabs/agw-cuj-arun-egress-vpc/mcp-weather ./mcp-weather
# remove temporary directory
rm -rf temp_agw_cuj_arun_egress_vpc
স্টেজিং বাকেট তৈরি করুন
# create storage bucket for agent deployment artifacts
gcloud storage buckets create gs://${STAGING_BUCKET} --location=${REGION}
# verify staging bucket url
gcloud storage buckets list --format="value(storage_url)"
এর মাধ্যমেই কোডবেস পর্ব শেষ হলো... এরপর রেজিস্ট্রি অংশে যাওয়া যাক।
৮. রেজিস্ট্রি
এজেন্ট রেজিস্ট্রি হলো এআই ইকোসিস্টেমের সমস্ত এজেন্ট, এমসিপি সার্ভার এবং এন্ডপয়েন্ট (এপিআই)-এর একটি কেন্দ্রীভূত তালিকা। এটি এমন একটি ক্যাটালগ যা এআই অ্যাপ্লিকেশন দ্বারা ব্যবহারের জন্য অন্যান্য নিবন্ধিত টুল এবং পরিষেবা তালিকাভুক্ত করতে, অনুসন্ধান করতে এবং খুঁজে বের করতে ব্যবহার করা যেতে পারে। এজেন্ট গেটওয়ে বহির্গমন অ্যাক্সেস নিয়ন্ত্রণ প্রয়োগ করার জন্য গভর্নেন্স ফ্রেমওয়ার্ক হিসেবে রেজিস্ট্রি ডেটা মডেল ব্যবহার করে। প্রিন্সিপাল কলিং এজেন্টদের জন্য আইএএম রোল গ্রান্টগুলো রেজিস্ট্রি রিসোর্সের সাথে আবদ্ধ পলিসির সাথে মিলিয়ে যাচাই করা হয়।
পরিবেশটি বুটস্ট্র্যাপ করতে এবং বিভিন্ন গুগল এপিআই ও সার্ভিস ব্যবহার করে এজেন্টকে সমর্থন করার জন্য, একটি একক রেজিস্ট্রি এন্ডপয়েন্ট সার্ভিস তৈরি করুন যা এই ল্যাবের জন্য প্রয়োজনীয় মূল এপিআই ইন্টারফেসগুলোকে একত্রিত করবে। এটি বেশিরভাগ এজেন্ট দ্বারা ব্যবহৃত সাধারণ টুলগুলোর জন্য গভর্নেন্স পলিসি পরিচালনা করা সহজ করে তুলবে।
এন্ডপয়েন্ট নিবন্ধন করুন
# create endpoint service (with multiple entries)
gcloud agent-registry services create core-gapi-services \
--location=${REGION} \
--display-name="gapi.core.services" \
--description="core apis and services" \
--endpoint-spec-type=no-spec \
--interfaces=protocolBinding=JSONRPC,url=https://telemetry.googleapis.com \
--interfaces=protocolBinding=JSONRPC,url=https://${REGION}-aiplatform.googleapis.com \
--interfaces=protocolBinding=JSONRPC,url=https://cloudresourcemanager.googleapis.com \
--interfaces=protocolBinding=JSONRPC,url=https://iamcredentials.googleapis.com
এন্ডপয়েন্ট রেজিস্ট্রেশন যাচাই করুন
# list registry regional endpoints
gcloud agent-registry endpoints list --location=${REGION} \
--flatten="interfaces[]" \
--format="table(displayName, name.basename():label=ENDPOINT_ID, interfaces.url:label=URL)"
এর মাধ্যমেই রেজিস্ট্রি পর্ব শেষ হলো... এরপর এমসিপি সার্ভার অংশে যাওয়া যাক।
৯. এমসিপি সার্ভার
ডেপ্লয়মেন্টের জন্য IAM অনুমতি প্রদান করুন
সোর্স কোড থেকে ক্লাউড রান সার্ভিস ডেপ্লয় করার জন্য ডিফল্ট কম্পিউট সার্ভিস অ্যাকাউন্টকে অনুমতি প্রদান করুন।
# grant cloud run builder role to default compute sa
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:${PROJ_NO}-compute@developer.gserviceaccount.com" \
--role="roles/run.builder"
IAM অনুমতি যাচাই করুন
# show iam policy on project for default compute sa
gcloud projects get-iam-policy ${PROJ_ID} \
--flatten="bindings[].members" \
--filter="bindings.members=serviceAccount:${PROJ_NO}-compute@developer.gserviceaccount.com" \
--format="table(bindings.role:label=ROLE, bindings.members:label=PRINCIPAL_IDENTITY)"
এমসিপি সার্ভার স্থাপন করুন
# deploy cloud run service
gcloud -q run deploy ${MCP_NAME} \
--source=mcp-weather/server \
--region=${REGION} \
--no-allow-unauthenticated \
--min-instances=1 \
--network=vnet-${SLUG} \
--subnet=subnet-${REGION}-crun \
--vpc-egress=all-traffic \
--startup-probe=httpGet.path=/warmup
প্রবেশের জন্য IAM অনুমতি দিন
ব্যবহারকারীর অ্যাক্সেসের জন্য নীতি সংযুক্ত করুন
ক্লাউড রান-এ হোস্ট করা এমসিপি সার্ভারটি চালু করার জন্য ব্যবহারকারী অ্যাকাউন্টকে (নিজস্ব) অনুমতি প্রদান করুন। toolspec জেনারেশন স্ক্রিপ্টটি চালানোর জন্য এটি প্রয়োজন।
# grant run invoker role to user account on cloud run service level
gcloud run services add-iam-policy-binding ${MCP_NAME} \
--region=${REGION} \
--member="user:${USER_IDENTITY}" \
--role="roles/run.invoker"
IAM অনুমতি যাচাই করুন
# show iam policy on cloud run service for invoker role
gcloud run services get-iam-policy ${MCP_NAME} \
--region=${REGION} \
--flatten="bindings[].members" \
--filter="bindings.role=roles/run.invoker" \
--format="table(bindings.members:label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"
MCP আহ্বানের জন্য কাস্টম SA তৈরি করুন
ক্লাউড রান-এ হোস্ট করা এমসিপি সার্ভার চালু করার জন্য একটি কাস্টম সার্ভিস অ্যাকাউন্ট তৈরি করুন। এই সার্ভিস অ্যাকাউন্টটি এজেন্ট দ্বারা ক্লাউড রান অ্যাক্সেস করার জন্য একটি বৈধ গুগল-স্বাক্ষরিত OIDC আইডি টোকেন সংগ্রহ করতে ব্যবহৃত হবে।
# create custom sa for mcp server invocation
gcloud iam service-accounts create sa-${MCP_NAME}-invoker \
--display-name="custom sa to invoke ${MCP_NAME}"
# set env var for service account identity
export MCP_INVOKER_SA="sa-${MCP_NAME}-invoker@${PROJ_ID}.iam.gserviceaccount.com"
echo ${MCP_INVOKER_SA}
পরিষেবা অ্যাকাউন্টের জন্য নীতি সংযুক্ত করুন
# grant run invoker role to custom sa on cloud run service level
gcloud run services add-iam-policy-binding ${MCP_NAME} \
--role="roles/run.invoker" \
--member="serviceAccount:${MCP_INVOKER_SA}" \
--region=${REGION}
IAM অনুমতি যাচাই করুন
# show iam policy on cloud run service for invoker role
gcloud run services get-iam-policy ${MCP_NAME} \
--region=${REGION} \
--flatten="bindings[].members" \
--filter="bindings.role=roles/run.invoker" \
--format="table(bindings.members:label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"
প্রমাণীকরণের জন্য IAM অনুমতি প্রদান করুন
ডিফল্ট কম্পিউট সার্ভিস অ্যাকাউন্টকে সার্ভিস অ্যাকাউন্ট ইমপার্সোনেশন রোল প্রদান করুন। এর ফলে, অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়ালস (ADC)-এর অধীনে চলমান এজেন্ট, কাস্টম ইনভোকার সার্ভিস অ্যাকাউন্টের পক্ষ থেকে ক্লাউড রান-এ করা কলগুলোর প্রমাণীকরণের জন্য গুগল-স্বাক্ষরিত OIDC আইডি টোকেন তৈরি করতে পারবে।
প্রমাণীকরণের জন্য নীতি সংযুক্ত করুন
# grant oidc token creator role to default compute service account
gcloud iam service-accounts add-iam-policy-binding ${MCP_INVOKER_SA} \
--role="roles/iam.serviceAccountOpenIdTokenCreator" \
--member="serviceAccount:${PROJ_NO}-compute@developer.gserviceaccount.com"
# grant service account token creator role to default compute service account
gcloud iam service-accounts add-iam-policy-binding ${MCP_INVOKER_SA} \
--role="roles/iam.serviceAccountTokenCreator" \
--member="serviceAccount:${PROJ_NO}-compute@developer.gserviceaccount.com"
IAM অনুমতি যাচাই করুন
# show iam policy for the custom service account
gcloud iam service-accounts get-iam-policy ${MCP_INVOKER_SA} \
--flatten="bindings[].members" \
--format="table(bindings.role:label=ROLE, bindings.members:label=PRINCIPAL_IDENTITY)"
এমসিপি toolspec তৈরি করুন
ম্যানুয়ালি একটি এমসিপি সার্ভার নিবন্ধন করার সময়, একটি টুল স্পেসিফিকেশন ফাইল অবশ্যই অন্তর্ভুক্ত করতে হবে। toolspec.json ফাইলটিতে এমসিপি সার্ভার দ্বারা উপলব্ধ সমস্ত টুলের তালিকা থাকে এবং একবার নিবন্ধিত হয়ে গেলে এটি অন্যান্য ব্যবহারকারীদের সেগুলি খুঁজে পেতে সাহায্য করে।
mcp-weather/ কোডবেসে অন্তর্ভুক্ত test_mcp.py স্ক্রিপ্টটি, টার্গেট MCP সার্ভারের সাথে (SSE বা HTTP-এর মাধ্যমে) সংযোগ স্থাপন করে এবং সার্ভার দ্বারা উন্মুক্ত করা সমস্ত উপলব্ধ টুল পুনরুদ্ধার করার জন্য list_tools() ফাংশন কল করে একটি toolspec.json ফাইল তৈরি করে।
# fetch oidc token for cloud run authentication
export OIDC_TOKEN=$(gcloud auth print-identity-token)
# generate toolspec for registry ingestion
uv --directory mcp-weather run test_mcp.py --toolspec=include --token="${OIDC_TOKEN}"
তৈরি হওয়া toolspec আউটপুটটি দেখলে এমসিপি অ্যাট্রিবিউটগুলো দেখা যায়, যা এজেন্ট গেটওয়ে বহির্গমন নীতি মূল্যায়ন ও প্রয়োগের জন্য ব্যবহার করতে পারে।
MCP toolspec যাচাই করুন
# show toolspec mcp attributes
jq '.tools[] | {name, isReadOnly, isDestructive, isIdempotent, isOpenWorld}' mcp-weather/toolspec.json
ক্লাউড রান ইনগ্রেস আপডেট করুন
Cloud Run সার্ভিসের ইনগ্রেস সেটিং পরিবর্তন করুন যাতে এটি শুধুমাত্র VPC নেটওয়ার্ক থেকে আগত অনুরোধ গ্রহণ করে। এটি MCP এন্ডপয়েন্টে সরাসরি পাবলিক অ্যাক্সেস প্রতিরোধ করে এবং শুধুমাত্র অভ্যন্তরীণ রিসোর্সগুলোকে এটি অ্যাক্সেস করার অনুমতি দেয়। VPC নেটওয়ার্কে থাকা Google API-এর PSC এন্ডপয়েন্টের উদ্দেশ্যে প্রেরিত ট্র্যাফিককে অভ্যন্তরীণ ইনগ্রেস হিসেবে বিবেচনা করা হবে এবং অনুমতি দেওয়া হবে।
# update cloud run service config
gcloud run services update ${MCP_NAME} \
--region=${REGION} \
--ingress=internal
ক্লাউড রান ইনগ্রেস যাচাই করুন
# show cloud run service details
gcloud run services describe ${MCP_NAME} --region=${REGION} | grep -iE 'ingress|egress'
এমসিপি সার্ভার নিবন্ধন করুন
এখন toolspec হাতে নিয়ে, আঞ্চলিক এজেন্ট রেজিস্ট্রিতে এমসিপি সার্ভারটি রেজিস্টার করুন।
# register mcp server
gcloud agent-registry services create ${MCP_NAME} \
--location=${REGION} \
--display-name="${MCP_DISPLAY_NAME}" \
--description="mcp server for weather info" \
--mcp-server-spec-type=tool-spec \
--mcp-server-spec-content=mcp-weather/toolspec.json \
--interfaces=url=${MCP_URL},protocolBinding=JSONRPC
এমসিপি নিবন্ধন যাচাই করুন
# list registry regional mcp servers
gcloud agent-registry mcp-servers list --location=${REGION} --format="table(displayName, interfaces.url)"
# show mcp server registry details
gcloud agent-registry services describe ${MCP_NAME} --location=${REGION}
# fetch mcp server registry id
export MCP_REGISTRY_ID=$(gcloud agent-registry services describe ${MCP_NAME} \
--location=${REGION} \
--format="value(registryResource.basename())")
echo ${MCP_REGISTRY_ID}
এর মাধ্যমেই এমসিপি সার্ভার পর্ব শেষ হলো... এরপর আমরা এডিকে এজেন্ট পর্বে যাব।
১০. এডিকে এজেন্ট
এজেন্ট প্ল্যাটফর্মের সাথে ইন্টিগ্রেট করার জন্য, এজেন্ট রানটাইমে ডেপ্লয় করা agent-weather ADK এজেন্টটিকে ডেপ্লয়মেন্ট স্ক্রিপ্টে নিম্নলিখিত সেটিংস দিয়ে কনফিগার করা হয়েছে:
-
"identity_type": types.IdentityType.AGENT_IDENTITYএজেন্টের জন্য একটি অনন্য SPIFFE-ভিত্তিক প্রিন্সিপাল আইডেন্টিটি প্রদান করতে ব্যবহৃত হয়। -
"agent_gateway_config": { "agent_to_anywhere_config": {"agent_gateway": } }পলিসি মূল্যায়ন এবং প্রয়োগের জন্য এজেন্ট-প্রবর্তিত সমস্ত বহির্গামী ট্র্যাফিক এজেন্ট গেটওয়েতে নির্দেশ করতে।
OIDC ID টোকেন আনার জন্য URL এবং সার্ভিস অ্যাকাউন্ট পাস করে MCP সার্ভার ব্যবহার করার জন্যও এজেন্টটিকে কনফিগার করা হয়েছে।
এজেন্ট মোতায়েন করুন
# deploy agent runtime workload
uv --directory agent-weather run python3 deploy_agent.py \
--project=${PROJ_ID} \
--region=${REGION} \
--src-dir=./agent \
--staging-bucket=${STAGING_BUCKET} \
--display-name="${RE_AGENT_NAME}" \
--description="agent for weather info" \
--mcp-server-url="${MCP_URL}" \
--mcp-invoker-sa="${MCP_INVOKER_SA}" \
--enable-telemetry \
--enable-agent-identity \
--agent-gateway-egress=${AGW_URI} \
--allow-token-sharing
স্থাপন যাচাই করুন
মোতায়েনের গুরুত্বপূর্ণ তথ্য আনুন
# fetch agent runtime resource (reasoning engine) id
export RE_ENGINE_ID=$(curl -s -X GET "https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" | \
jq -r --arg name "${RE_AGENT_NAME}" '.reasoningEngines[] | select(.displayName==$name) | .name | split("/") | last')
echo ${RE_ENGINE_ID}
# fetch agent runtime (reasoning engine) agent identity
export RE_AGENT_IDENTITY=$(gcloud agent-registry agents list \
--location=${REGION} --filter="displayName=${RE_AGENT_NAME}" \
--format="value(attributes.'agentregistry.googleapis.com/system/RuntimeIdentity'.principal)")
echo ${RE_AGENT_IDENTITY}
# fetch agent registry uid for agent
export RE_AGENT_REGISTRY_ID=$(gcloud agent-registry agents list \
--location=${REGION} \
--filter="displayName=${RE_AGENT_NAME}" \
--format="value(uid)")
echo ${RE_AGENT_REGISTRY_ID}
রেজিস্ট্রি এন্ট্রি যাচাই করুন
# show agent resource registry details
gcloud agent-registry agents describe ${RE_AGENT_REGISTRY_ID} --location=${REGION}
গেটওয়ে কনফিগারেশন যাচাই করুন
# show agent config details (gateway config)
curl -s -X GET "https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
| jq '{displayName: .displayName, name: .name, effectiveIdentity: .spec.effectiveIdentity, agentGatewayConfig: .spec.deploymentSpec.agentGatewayConfig}'
প্রমাণীকরণের জন্য IAM অনুমতি প্রদান করুন
যখন কোনো এজেন্টকে এজেন্ট আইডেন্টিটি ব্যবহার করার জন্য কনফিগার করা হয়, তখন এটি ফেডারেটেড সিকিউরিটি টোকেন সার্ভিস (STS) থেকে একটি টোকেন (JWT-SVID ফরম্যাট) পায়, যা sts.googleapis.com (SPIFFE আইডেন্টিটি প্রোভাইডার) দ্বারা স্বাক্ষরিত থাকে।
তবে, বিল্ট-ইন ক্লাউড রান আইএএম ইনভোকার চেক শুধুমাত্র প্রধান গুগল ওআইডিসি ইস্যুকারী ( accounts.google.com ) দ্বারা স্বাক্ষরিত স্ট্যান্ডার্ড ওআইডিসি আইডি টোকেনগুলোকেই বিশ্বাস করে এবং যাচাই করতে পারে।
সুতরাং, এজেন্ট আইডেন্টিটি দ্বারা প্রাপ্ত ফেডারেটেড এসটিএস টোকেন (JWT-SVID)-কে রানটাইমে সার্ভিস অ্যাকাউন্ট ইমপার্সোনেশন ব্যবহার করে প্রাপ্ত একটি স্ট্যান্ডার্ড গুগল (OIDC) টোকেনের সাথে বিনিময় করার জন্য একটি কাস্টম সার্ভিস অ্যাকাউন্ট ব্যবহার করা হয়।
কাস্টম সার্ভিস অ্যাকাউন্টের জন্য প্রয়োজনীয় রোল বাইন্ডিংগুলো তৈরি করুন।
প্রমাণীকরণের (ছদ্মবেশ) জন্য নীতি সংযুক্ত করুন
# grant service account token creator role to agent principal identity
gcloud iam service-accounts add-iam-policy-binding ${MCP_INVOKER_SA} \
--role="roles/iam.serviceAccountTokenCreator" \
--member="${RE_AGENT_IDENTITY}"
# grant service account openid token creator role to agent principal identity
gcloud iam service-accounts add-iam-policy-binding ${MCP_INVOKER_SA} \
--role="roles/iam.serviceAccountOpenIdTokenCreator" \
--member="${RE_AGENT_IDENTITY}"
IAM অনুমতি যাচাই করুন
# show iam policy for custom service account
gcloud iam service-accounts get-iam-policy ${MCP_INVOKER_SA} \
--flatten="bindings[].members" \
--format="table(bindings.members.sub('^.*locations/', '.../locations/'):label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"
রানটাইমের জন্য IAM অনুমতি দিন
রানটাইমের জন্য IAM অনুমতি প্রদান করলে এজেন্ট তার SPIFFE-ভিত্তিক প্রিন্সিপাল এজেন্ট আইডেন্টিটি ব্যবহার করে এআই প্ল্যাটফর্ম পরিষেবা এবং অন্যান্য কোর গুগল এপিআই ও পরিষেবা অ্যাক্সেস করতে পারে। এই নীতিগুলি রিসোর্স লেভেলে IAM ব্যবহার করে প্রয়োগ করা হয়।
এজেন্ট আইডেন্টিটির জন্য প্রয়োজনীয় রোল বাইন্ডিংগুলো তৈরি করুন।
এজেন্ট অ্যাক্সেসের জন্য নীতিগুলি সংযুক্ত করুন
# grant ai platform user role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/aiplatform.user"
# grant agent default access role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/aiplatform.agentDefaultAccess"
# grant agent registry viewer role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/agentregistry.viewer"
# grant cloud logging writer role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/logging.logWriter"
# grant cloud monitoring writer role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/monitoring.metricWriter"
# grant browser role for resource manager lookup
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/browser"
IAM অনুমতি যাচাই করুন
# show iam policy on project for agent identity
gcloud projects get-iam-policy ${PROJ_ID} \
--flatten="bindings[].members" \
--filter="bindings.members:${RE_AGENT_IDENTITY}" \
--format="table(bindings.members.sub('^.*locations/', '.../locations/'):label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"
এর মাধ্যমেই ADK এজেন্ট পর্ব শেষ হলো... এরপর পলিসি অংশে যাওয়া যাক।
১১. নীতিমালা
এজেন্ট গভর্নেন্স অনুমোদন নীতিগুলি একটি এআই এজেন্ট থেকে এজেন্ট গেটওয়ের মাধ্যমে ট্র্যাফিককে চূড়ান্ত রিসোর্স গন্তব্যে (যেমন, ডেটা পুনরুদ্ধারের জন্য একটি ব্যক্তিগত এমসিপি সার্ভার এন্ডপয়েন্ট) রাউট করার অনুমতি দেয়। ট্র্যাফিক গন্তব্যে পৌঁছানোর পর, সাধারণ পরিষেবা-স্তর বা অ্যাপ্লিকেশন-স্তরের অনুমতিগুলি ডেটা অ্যাক্সেসের অনুমোদন দেয়।
এজেন্ট গেটওয়ে ইগ্রেসের জন্য আইএএম রোল প্রদান করা হলে এমন অ্যাক্সেস পলিসি সক্রিয় হয়, যা এজেন্ট প্রিন্সিপাল আইডেন্টিটিকে এজেন্ট গেটওয়ের মাধ্যমে নিবন্ধিত গন্তব্য রিসোর্সগুলিতে অ্যাক্সেস করার অনুমতি দেয়। পলিসিগুলি এজেন্ট গেটওয়ে স্তরে প্রয়োগ করা হয় এবং আইডেন্টিটি-অ্যাওয়্যার প্রক্সি (আইএপি) আইএএম পলিসি ব্যবহার করে যাচাই করা হয়।
এজেন্ট গেটওয়ে বহির্গমনের জন্য IAM ভূমিকা মঞ্জুর করুন
এজেন্ট গেটওয়ে আগত অনুরোধগুলি যাচাই করে নিশ্চিত করে যে কলিং এজেন্ট আইডেন্টিটির টার্গেট রিসোর্সের উপর iap.webServiceVersions.egressViaIAP পারমিশন (যা roles/iap.egressor রোল দ্বারা প্রদত্ত) আছে।
নির্বাচিত গন্তব্য রিসোর্সে সেট করা এজেন্ট আইডেন্টিটি বা এজেন্ট রানটাইম প্রিন্সিপালকে roles/iap.egressor প্রদান করলে এই বহির্গামী ট্র্যাফিকের অনুমতি দেওয়া হয়। এই কোডল্যাবে, রোলটি প্রিন্সিপাল এজেন্টের উপর প্রয়োগ করা হয়েছে, যা নির্দিষ্ট এজেন্ট রানটাইম এজেন্ট আইডেন্টিটিকে অনুমতি প্রদান করে।
এজেন্ট রেজিস্ট্রি ডেটা মডেলে সংজ্ঞায়িত গন্তব্য রিসোর্সগুলোর সাথে IAM পলিসিগুলো আবদ্ধ থাকে। iap_web/agentRegistry রিসোর্সটি IAM হায়ারার্কিতে একটি " রেজিস্ট্রি-ব্যাপী " স্তরকে প্রতিনিধিত্ব করে। যেখানে agentRegistry agents , mcpServers , এবং endpoints মতো স্বতন্ত্র চাইল্ড রিসোর্সগুলোর প্যারেন্ট হিসেবে কাজ করে। এই কোডল্যাবে, IAM পলিসিটি mcpServer এবং endpoint স্তরের সাথে আবদ্ধ করা হয়েছে, যা নির্দিষ্ট চাইল্ড রিসোর্সগুলোতে অনুমতি প্রয়োগ করে।
এজেন্টকে MCP সার্ভার পলিসিতে কনফিগার করুন
এজেন্টের জন্য এমসিপি সার্ভারে পলিসি তৈরি করুন
# fetch active etag on policy for mcp server
export IAP_ETAG=$(gcloud beta iap web get-iam-policy \
--resource-type=agent-registry --region=${REGION} \
--mcp-server=${MCP_REGISTRY_ID} --format="value(etag)")
echo ${IAP_ETAG}
দ্রষ্টব্য: যেহেতু এখনও কোনো নীতি সংজ্ঞায়িত করা হয়নি, তাই etag: ডিফল্ট ACAB রিটার্ন করা উচিত।
# create policy config file
cat > cfg/iap-policy-agent-to-mcp.json << EOF
{
"bindings": [
{
"role": "roles/iap.egressor",
"members": [
"${RE_AGENT_IDENTITY}"
]
}
],
"etag": "${IAP_ETAG}"
}
EOF
এজেন্টের জন্য পলিসি এমসিপি সার্ভারের সাথে সংযুক্ত করুন।
# import policy file
gcloud beta iap web set-iam-policy cfg/iap-policy-agent-to-mcp.json \
--resource-type=agent-registry \
--mcp-server=${MCP_REGISTRY_ID} \
--region=${REGION}
IAM অনুমতি যাচাই করুন
# show iap iam policy on mcp server for agent
gcloud beta iap web get-iam-policy \
--region=${REGION} \
--resource-type=agent-registry \
--mcp-server=${MCP_REGISTRY_ID}
এর মাধ্যমেই নীতিমালা পর্ব শেষ হলো... এরপর নিরীক্ষা অংশে যাওয়া যাক।
১২. নিরীক্ষা
এজেন্ট গেটওয়ে অথরাইজেশন এক্সটেনশনটি DRY_RUN মোডে কাজ করছে। বহির্গামী অনুরোধগুলো পর্যবেক্ষণ ও লগ করা হচ্ছে, কিন্তু ব্লক করা হচ্ছে না। ENFORCED মোডে পরিবর্তন করার আগে লগগুলো বিশ্লেষণ করলে নিশ্চিত হওয়া যাবে যে উদ্দিষ্ট ট্র্যাফিককে অনুমতি দেওয়ার জন্য কোন পলিসিগুলো কনফিগার করতে হবে।
টেস্ট এজেন্ট কোয়েরি
একটি ব্রাউজার উইন্ডো খুলে গুগল ক্লাউড কনসোল UI-তে যান এবং এখানে নেভিগেট করুন:
- এজেন্ট প্ল্যাটফর্ম → এজেন্ট → ডেপ্লয়মেন্ট →
agent-weather - প্লেগ্রাউন্ড ট্যাবটি নির্বাচন করুন
অথবা এই টার্মিনাল কমান্ডটি ইকো করুন এবং এজেন্ট প্লেগ্রাউন্ডে যেতে লিঙ্কে ক্লিক করুন:
# playground
echo "https://console.cloud.google.com/agent-platform/runtimes/locations/${REGION}/agent-engines/${RE_ENGINE_ID}/playground?project=${PROJ_ID}"
কিছু পরীক্ষামূলক কোয়েরি জমা দিন...
-
What is the weather like in London? -
How warm is it in New York?
কোয়েরিগুলো বৈধ প্রতিক্রিয়া প্রদান করে কিনা তা যাচাই করুন।
অডিট লগ বিশ্লেষণ করুন
লগগুলো দেখুন এবং পরীক্ষামূলক নীতি মূল্যায়নগুলো খতিয়ে দেখুন।
# show gateway logs for endpoints and authz status (duplicates removed)
gcloud logging read \
"resource.type=\"networkservices.googleapis.com/Gateway\" \
AND httpRequest.requestUrl:*" \
--project=${PROJ_ID} \
--limit=50 \
--freshness=24h \
--format="table( \
timestamp.date(tz=LOCAL):label=TIMESTAMP, \
httpRequest.status:label=STATUS, \
jsonPayload.authzPolicyInfo.result:label=AUTHZ, \
httpRequest.requestUrl.sub('(https?://[^/:]+).*', '\1'):label=ENDPOINT \
)" | awk 'NR==1 {print; next} ! seen[$2,$3,$4]++'
TIMESTAMP STATUS AUTHZ ENDPOINT
YYYY-MM-DDTHH:MM:SS 200 ALLOWED https://cloudresourcemanager.googleapis.com
YYYY-MM-DDTHH:MM:SS 200 ALLOWED https://${REGION}-aiplatform.googleapis.com
YYYY-MM-DDTHH:MM:SS 200 ALLOWED https://iamcredentials.googleapis.com
YYYY-MM-DDTHH:MM:SS 200 ALLOWED https://mcp-weather-${PROJ_NO}.${REGION}.run.app
YYYY-MM-DDTHH:MM:SS 200 ALLOWED https://telemetry.googleapis.com
YYYY-MM-DDTHH:MM:SS 202 ALLOWED https://mcp-weather-${PROJ_NO}.${REGION}.run.app
এজেন্টকে এন্ডপয়েন্ট পলিসিতে কনফিগার করুন
যেহেতু agent-weather জন্য গুগলের মূল এপিআইগুলো রেজিস্ট্রি-তে একটি সম্মিলিত এন্ডপয়েন্ট সার্ভিসের ( gapi.core.services ) অধীনে নিবন্ধিত ছিল, তাই এন্ডপয়েন্ট অ্যাক্সেসের জন্য এজেন্টকে বহির্গমন অনুমতি দিতে শুধুমাত্র একটি পলিসিই যথেষ্ট।
এজেন্টের জন্য এন্ডপয়েন্টে পলিসি তৈরি করুন
# set var for endpoint display name
export ENDPOINT_DISPLAY_NAME="gapi.core.services"
echo ${ENDPOINT_DISPLAY_NAME}
# fetch endpoint registry id
export ENDPOINT_REGISTRY_ID=$(gcloud agent-registry services list \
--location=${REGION} \
--filter="displayName=${ENDPOINT_DISPLAY_NAME}" \
--format="value(registryResource.basename())")
echo ${ENDPOINT_REGISTRY_ID}
# create policy config file
cat > cfg/iap-policy-agent-to-ep.json << EOF
{
"bindings": [
{
"role": "roles/iap.egressor",
"members": [
"${RE_AGENT_IDENTITY}"
]
}
]
}
EOF
এজেন্টের জন্য পলিসিকে এন্ডপয়েন্টের সাথে সংযুক্ত করুন।
# import policy file (bind iam policy)
gcloud -q beta iap web set-iam-policy cfg/iap-policy-agent-to-ep.json \
--resource-type=agent-registry \
--endpoint=${ENDPOINT_REGISTRY_ID} \
--region=${REGION}
IAM অনুমতি যাচাই করুন
# show iap iam policy on endpoint for agent
gcloud beta iap web get-iam-policy \
--region=${REGION} \
--resource-type=agent-registry \
--endpoint=${ENDPOINT_REGISTRY_ID}
এর মাধ্যমেই নিরীক্ষা পর্ব শেষ হলো... এরপর আমরা প্রয়োগ (Enforce) অংশে যাব।
১৩. বলবৎ করুন
এজেন্টটি DRY_RUN মোডে গেটওয়ের মাধ্যমে সফলভাবে অনুরোধ পাঠাতে সক্ষম হয়েছিল। এজেন্ট থেকে প্রয়োজনীয় বহির্গমন ট্র্যাফিকের অনুমতি দেওয়ার জন্য এক সেট গভর্নেন্স পলিসি তৈরি করতে অ্যাক্সেস লগ এবং এন্ডপয়েন্টগুলো বিশ্লেষণ করা হয়েছিল। এখন অথরাইজেশন পলিসি আপডেট করে এজেন্ট গেটওয়ে IAP অথরাইজেশন এক্সটেনশনটিকে ENFORCE মোডে রূপান্তর করুন।
অনুমোদন এক্সটেনশন আপডেট করুন
প্রমাণীকরণ এক্সটেনশন তৈরি করুন
# create authz extension config file (enforced mode)
cat > cfg/${AGW_NAME}-svc-ext-authz-iap-enforced.yaml << EOF
name: ${AGW_NAME}-svc-ext-authz-iap-enforced
service: iap.googleapis.com
failOpen: false
timeout: 1s
metadata:
iapPolicyVersion: "V1"
EOF
প্রমাণীকরণ এক্সটেনশন আমদানি করুন
# import authz extension file (create extension)
gcloud service-extensions authz-extensions import ${AGW_NAME}-svc-ext-authz-iap-enforced \
--source=cfg/${AGW_NAME}-svc-ext-authz-iap-enforced.yaml \
--location=${REGION}
প্রমাণীকরণ এক্সটেনশন যাচাই করুন
# list authz extensions (imported configs)
gcloud service-extensions authz-extensions list --location=${REGION}
অনুমোদন নীতি আপডেট করুন
অনুমোদন নীতি তৈরি করুন
# re-write authz policy config file (pointing to enforced authz extension)
cat > cfg/${AGW_NAME}-authz-policy-profile-iap.yaml << EOF
name: ${AGW_NAME}-authz-policy-profile-iap
target:
resources:
- "projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
policyProfile: REQUEST_AUTHZ
action: CUSTOM
customProvider:
authzExtension:
resources:
- "projects/${PROJ_ID}/locations/${REGION}/authzExtensions/${AGW_NAME}-svc-ext-authz-iap-enforced"
EOF
অনুমোদন নীতি বাধ্যতামূলক করুন
# import authz policy config file (enable new authz policy)
gcloud beta network-security authz-policies import ${AGW_NAME}-authz-policy-profile-iap \
--source=cfg/${AGW_NAME}-authz-policy-profile-iap.yaml \
--location=${REGION}
প্রমাণীকরণ নীতি যাচাই করুন
# show authz policy details (verify enforced mode)
gcloud beta network-security authz-policies describe ${AGW_NAME}-authz-policy-profile-iap \
--location=${REGION}
প্রয়োগ যাচাই করুন
কনসোল UI-তে এজেন্ট প্লেগ্রাউন্ডে ফিরে যান।
- একটি নতুন চ্যাট সেশন তৈরি করতে " + নতুন সেশন " বোতামে ক্লিক করুন।
একটি অতিরিক্ত পরীক্ষার কোয়েরি জমা দিন...
-
What is the current temperature in Los Angeles?
লক্ষ্য করুন, জেমিনি ফাউন্ডেশন মডেল ( ${REGION}-aiplatform.googleapis.com/... ) এবং এমসিপি সার্ভার এন্ডপয়েন্ট ( mcp-weather-${PROJ_NO}.${REGION}.run.app/mcp )-এ পাঠানো এজেন্ট রিকোয়েস্টগুলো HTTP 200 OK স্ট্যাটাস কোডসহ পাস করা হচ্ছে।
গেটওয়ে লগ বিশ্লেষণ করুন
# show gateway logs for http requests
gcloud logging read \
"resource.type=\"networkservices.googleapis.com/Gateway\" \
AND httpRequest.requestUrl:*" \
--project=${PROJ_ID} \
--limit=10 \
--format="table(
timestamp.date(tz=LOCAL):label=TIMESTAMP,
httpRequest.requestMethod:label=METHOD,
httpRequest.status:label=STATUS,
jsonPayload.authzPolicyInfo.result:label=IAP_AUTHZ,
jsonPayload.agentGatewayInfo.mcpInfo.method:label=MCP_METHOD,
httpRequest.requestUrl:label=URL)"
কোনো অনুরোধ ব্লক করা হচ্ছে কিনা তা পরীক্ষা করুন। গেটওয়ের অডিট লগে HTTP 403 Forbidden স্ট্যাটাস কোডসহ বহির্গমনের কোনো প্রত্যাখ্যাত প্রচেষ্টা আছে কিনা তা সন্ধান করুন।
# show gateway logs for authz denies
gcloud logging read \
"resource.type=\"networkservices.googleapis.com/Gateway\" \
AND (jsonPayload.authzPolicyInfo.result=\"DENIED\" OR httpRequest.status=403)" \
--project=${PROJ_ID} \
--limit=10 \
--format="table(
timestamp.date(tz=LOCAL):label=TIMESTAMP,
httpRequest.requestMethod:label=METHOD,
httpRequest.status:label=STATUS,
jsonPayload.enforcedGatewaySecurityPolicy.serverNameIndication:label=SNI,
jsonPayload.authzPolicyInfo.result:label=AUTHZ_RESULT,
jsonPayload.authzPolicyInfo.policies[0].name.basename():label=DENYING_POLICY
)"
এজেন্ট গেটওয়ে এমসিপি লগগুলো পর্যালোচনা করুন এবং লক্ষ্য করুন কীভাবে এমসিপি অ্যাপ্লিকেশন পেলোড (JSON-RPC) পরীক্ষা করে প্রোটোকল মেটাডেটা উন্মোচন করা হয়, যার মধ্যে কোন টুলগুলো চালানো হচ্ছে তাও অন্তর্ভুক্ত।
# show gateway logs for mcp requests with method and tool name
gcloud logging read \
"resource.type=\"networkservices.googleapis.com/Gateway\" \
AND jsonPayload.agentGatewayInfo.mcpInfo.method:*" \
--project=${PROJ_ID} \
--limit=10 \
--format="table(
timestamp.date(tz=LOCAL):label=TIMESTAMP,
httpRequest.status:label=STATUS,
jsonPayload.authzPolicyInfo.result:label=IAP_AUTHZ,
jsonPayload.agentGatewayInfo.mcpInfo.method:label=MCP_METHOD,
jsonPayload.agentGatewayInfo.mcpInfo.parameter:label=TOOL_NAME,
httpRequest.requestUrl:label=URL
)"
ফায়ারওয়াল লগ বিশ্লেষণ করুন
নেটওয়ার্ক ফায়ারওয়াল পলিসি রুল প্রায়োরিটি 1001 লগ দেখুন।
# show firewall logs for rule 1001
gcloud logging read \
"jsonPayload.rule_details.priority=1001" \
--project=${PROJ_ID} \
--limit=10 \
--format="table(
timestamp.date(tz=LOCAL):label=TIMESTAMP,
jsonPayload.disposition:label=ACTION,
jsonPayload.connection.src_ip:label=SRC_IP,
jsonPayload.connection.dest_ip:label=DEST_IP,
jsonPayload.connection.dest_port:label=DEST_PORT,
jsonPayload.vpc.subnetwork_name:label=SUBNET
)"
বিভিন্ন ট্র্যাফিক পথের নেটওয়ার্ক-স্তরের দৃশ্যটি লক্ষ্য করুন:
- এজেন্ট গেটওয়ে
subnet-${REGION}-agwব্যবহার করে অভ্যন্তরীণ VPC নেটওয়ার্ক রিসোর্সের সাথে যোগাযোগ করছে - ক্লাউড রান হোস্টেড এমসিপি সার্ভারটি
subnet-${REGION}-crunব্যবহার করে বাহ্যিক আবহাওয়া এপিআই-গুলিতে কল করছে।
TIMESTAMP ACTION SRC_IP DEST_IP DEST_PORT SUBNET
YYYY-MM-DDTHH:MM:SS ALLOWED 10.10.10.16 188.40.99.226 443 subnet-${REGION}-crun
YYYY-MM-DDTHH:MM:SS ALLOWED 10.10.10.16 202.61.206.6 443 subnet-${REGION}-crun
YYYY-MM-DDTHH:MM:SS ALLOWED 10.10.10.16 188.40.99.226 443 subnet-${REGION}-crun
YYYY-MM-DDTHH:MM:SS ALLOWED 10.10.10.16 202.61.206.6 443 subnet-${REGION}-crun
YYYY-MM-DDTHH:MM:SS ALLOWED 10.10.10.16 202.61.206.6 443 subnet-${REGION}-crun
YYYY-MM-DDTHH:MM:SS ALLOWED 10.10.10.16 202.61.206.6 443 subnet-${REGION}-crun
YYYY-MM-DDTHH:MM:SS ALLOWED 192.168.10.2 240.0.0.10 443 subnet-${REGION}-agw
YYYY-MM-DDTHH:MM:SS ALLOWED 192.168.10.2 240.0.0.10 443 subnet-${REGION}-agw
YYYY-MM-DDTHH:MM:SS ALLOWED 192.168.10.2 240.0.0.10 443 subnet-${REGION}-agw
ডিএনএস লগ বিশ্লেষণ করুন
ব্যক্তিগত ডিএনএস জোন ( priv-zone-run ) দ্বারা সমাধান করা অনুরোধগুলির জন্য ডিএনএস কোয়েরি লগ দেখুন।
gcloud logging read \
"resource.type=\"dns_query\" AND resource.labels.target_name=\"priv-zone-run\"" \
--project=${PROJ_ID} \
--limit=10 \
--format="table(
timestamp.date(tz=LOCAL):label=TIMESTAMP,
jsonPayload.queryName:label=QUERY_NAME,
jsonPayload.queryType:label=TYPE,
jsonPayload.rdata:label=RESPONSE_RDATA,
jsonPayload.sourceNetwork:label=NETWORK,
resource.labels.source_type:label=SRC_TYPE
)"
উল্লেখ্য যে, ক্লাউড রান পরিষেবার ( mcp-weather...run.app ) জন্য ডিএনএস লুকআপগুলি ডিএনএস পিয়ারিং ব্যবহার করে ভিপিসি নেটওয়ার্ক থেকে শুরু হয় এবং গুগল এপিআই-এর অভ্যন্তরীণ পিএসসি এন্ডপয়েন্টে ( 240.0.0.10 ) সফলভাবে সমাধান করা হয়।
TIMESTAMP QUERY_NAME TYPE RESPONSE_RDATA NETWORK SRC_TYPE
YYYY-MM-DDTHH:MM:SS mcp-weather-${PROJ_NO}.${REGION}.run.app. A mcp-weather-${PROJ_NO}.${REGION}.run.app. 300 IN a 240.0.0.10 vnet-${SLUG} peering-zone
YYYY-MM-DDTHH:MM:SS mcp-weather-${PROJ_NO}.${REGION}.run.app. A mcp-weather-${PROJ_NO}.${REGION}.run.app. 300 IN a 240.0.0.10 vnet-${SLUG} peering-zone
YYYY-MM-DDTHH:MM:SS mcp-weather-${PROJ_NO}.${REGION}.run.app. A mcp-weather-${PROJ_NO}.${REGION}.run.app. 300 IN a 240.0.0.10 vnet-${SLUG} peering-zone
YYYY-MM-DDTHH:MM:SS mcp-weather-${PROJ_NO}.${REGION}.run.app. A mcp-weather-${PROJ_NO}.${REGION}.run.app. 300 IN a 240.0.0.10 vnet-${SLUG} peering-zone
এর মাধ্যমেই প্রয়োগ পর্ব শেষ হলো... এরপর পরিচ্ছন্নতা পর্বে যাওয়া যাক।
১৪. পরিচ্ছন্নতা
# delete agent runtime
curl -s -X DELETE "https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}?force=true" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)"
# next
# delete agent resources
gcloud -q storage rm --recursive gs://${STAGING_BUCKET}
for ROLE in \
"roles/aiplatform.user" \
"roles/aiplatform.agentDefaultAccess" \
"roles/agentregistry.viewer" \
"roles/logging.logWriter" \
"roles/monitoring.metricWriter" \
"roles/browser"; do
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="${ROLE}"
done
# next
# delete mcp (cloud run) resources
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:${PROJ_NO}-compute@developer.gserviceaccount.com" \
--role="roles/run.builder"
gcloud -q run services delete ${MCP_NAME} --region=${REGION}
gcloud -q artifacts repositories delete cloud-run-source-deploy --location=${REGION}
gcloud -q iam service-accounts delete sa-${MCP_NAME}-invoker@${PROJ_ID}.iam.gserviceaccount.com
gcloud -q agent-registry services delete ${MCP_NAME} --location=${REGION}
# next
# delete gateway resources (policy binding must be deleted synchronously first)
gcloud -q beta network-security authz-policies delete ${AGW_NAME}-authz-policy-profile-iap --location=${REGION}
gcloud -q beta service-extensions authz-extensions delete ${AGW_NAME}-svc-ext-authz-iap-dryrun --location=${REGION} --async
gcloud -q beta service-extensions authz-extensions delete ${AGW_NAME}-svc-ext-authz-iap-enforced --location=${REGION} --async
gcloud -q network-services agent-gateways delete ${AGW_NAME} --location=${REGION} --async
# next
# remove policies
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --endpoint=${ENDPOINT_REGISTRY_ID} --region=${REGION} --format="value(etag)")
cat > cfg/iap-policy-empty.json << EOF
{
"bindings": [],
"etag": "${IAP_ETAG}"
}
EOF
gcloud -q beta iap web set-iam-policy cfg/iap-policy-empty.json \
--resource-type=agent-registry \
--endpoint=${ENDPOINT_REGISTRY_ID} \
--region=${REGION}
# next
# delete dns resources
gcloud -q dns record-sets delete *.run.app --type=A --zone=priv-zone-run
gcloud -q dns managed-zones delete priv-zone-run
gcloud -q dns policies update dns-policy-${SLUG} --networks=""
gcloud -q dns policies delete dns-policy-${SLUG}
# next
# delete router (includes nat) and psc resources
gcloud -q compute routers delete cr-nat-${SLUG}-${REGION} --region=${REGION}
gcloud -q compute forwarding-rules delete psc2gapis --global
gcloud -q compute addresses delete ip-psc2gapis --global
# next
# delete firewall resources
gcloud -q compute network-firewall-policies associations delete --name=fw-policy-bind-${SLUG} --firewall-policy=fw-policy-${SLUG} --global-firewall-policy
gcloud -q compute network-firewall-policies rules delete 1001 --firewall-policy=fw-policy-${SLUG} --global-firewall-policy
gcloud -q compute network-firewall-policies delete fw-policy-${SLUG} --global
# next
# delete network resources
gcloud -q compute networks subnets delete subnet-${REGION}-agw --region=${REGION}
gcloud -q compute networks subnets delete subnet-${REGION}-crun --region=${REGION}
gcloud -q compute network-attachments delete psc-na-${REGION}-agw --region=${REGION}
gcloud -q compute networks delete vnet-${SLUG}
# next
# clean up local working directories and generated configs
rm -rf cfg agent-weather mcp-weather
# end
এর মাধ্যমেই পরিচ্ছন্নতা পর্ব শেষ হলো... এরপর আসা যাক উপসংহারে !
১৫. উপসংহার
অভিনন্দন! আপনি সফলভাবে এজেন্ট গেটওয়ে স্থাপন করেছেন এবং বহির্গামী এআই এজেন্ট ট্র্যাফিক পরিচালনা করেছেন!

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