১. ভূমিকা
এই কোডল্যাবটি দূরবর্তী গুগল ক্লাউড মডেল কনটেক্সট প্রোটোকল (MCP) সার্ভার অ্যাক্সেসকারী এআই এজেন্টদের জন্য এজেন্ট গেটওয়ে ইগ্রেস গভর্নেন্স অন্বেষণ করে।
স্বতন্ত্র চ্যাটবট থেকে শুরু করে মাল্টি-এজেন্ট ওয়ার্কফ্লো সহ স্বায়ত্তশাসিত সিস্টেম পর্যন্ত এআই অ্যাপগুলো গতিশীলভাবে বাহ্যিক টুল আহ্বান করতে পারে। নিরাপদ এবং উৎপাদনশীল এজেন্টের জন্য, ডেটাবেস কোয়েরি করা, ওয়েব কন্টেন্ট আনা এবং অ্যাকশন সম্পাদনের জন্য এজেন্টদের নিয়ন্ত্রিত অ্যাক্সেস প্রদান করা অপরিহার্য। তবে, এন্টারপ্রাইজ পরিবেশে এজেন্ট টুল এক্সিকিউশন সুরক্ষিত করা একটি চ্যালেঞ্জ। যদি কোনো এজেন্টের সরাসরি নেটওয়ার্ক অ্যাক্সেস থাকে, তাহলে প্রম্পট ইনজেকশন অ্যাটাক বা মডেল হ্যালুসিনেশনের কারণে এজেন্টটি সংবেদনশীল ডেটা পাচার করতে বা ধ্বংসাত্মক কমান্ড চালাতে পারে।
To manage autonmous agents at scale, Agent Gateway provides a centralized, zero-trust enforcement point directly integrated into the Agent Platform architecture. Instead of relying on custom implementations unique to each application or agent code, Agent Gateway provides network routing, agent governance, and runtime security enforced at the platform level.
When Agent Gateway operates in egress ( agent-to-anywhere ) mode, it proxies all outbound requests from agents configured to use the gateway. Each agent workload request is authenticated using the unique Agent Identity and authorized using Identity-Aware Proxy (IAP) policies. MCP tool calls are dynamically decoded and inspected for policy enforcement. Security admins can centrally enforce fine-grained permissions to ensure agents can only invoke approved endpoints and methods.
আপনি যা তৈরি করেন
- এজেন্ট গেটওয়ে বহির্গমন ( এজেন্ট-টু-এনিহোয়্যার ) মোডে
- পরিচয়-সচেতন প্রক্সি (IAP) অনুমোদন এক্সটেনশন
- এজেন্ট পরিচয় সহ এজেন্ট রানটাইম ADK এজেন্ট
- গুগল এপিআই এবং এমসিপি এন্ডপয়েন্ট সহ এজেন্ট রেজিস্ট্রি
- IAM অ্যাক্সেস কন্ট্রোল সহ অনুমোদন নীতি
- MCP ব্যবহার করে BigQuery ডেটাসেটে কোয়েরি করার জন্য
চিত্র ১. কোডল্যাব আর্কিটেকচার
আপনি যা শিখবেন
- একটি কাঠামোগত কনফিগারেশন অনুক্রমে এজেন্ট গেটওয়ে কীভাবে স্থাপন করবেন
- অনুমোদন নীতিগুলিকে পরীক্ষামূলক পর্যায় থেকে বাধ্যতামূলক মোডে কীভাবে রূপান্তর করবেন
- এজেন্ট রেজিস্ট্রিতে গুগল এপিআই এন্ডপয়েন্ট এবং এমসিপি সার্ভার কীভাবে নিবন্ধন করবেন
- বহির্গমন শাসনব্যবস্থা যাচাই করার জন্য এজেন্ট গেটওয়ে লগগুলি কীভাবে নিরীক্ষা করবেন
আপনার যা প্রয়োজন
- বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট
- নেটওয়ার্কিং পরিষেবা, BigQuery ডেটাসেট এবং এজেন্ট প্ল্যাটফর্ম রিসোর্স সরবরাহ করার জন্য IAM অনুমতি
- Google Cloud CLI (
gcloudএবংbqউপাদানসমূহ) ইনস্টল করা একটি POSIX-সামঞ্জস্যপূর্ণ শেল (bashবাzsh)। - Command-line tools:
git,curl,jq(JSON processor), Python 3, anduv(Python package manager)
২. ধারণা
মোতায়েন ক্রম
When deploying Agent Gateway with governance controls, it is important to follow a structured configuration sequence so that agents have access to the necessary resources on initialization and network requests will be successful.
এই কোডল্যাবটি নিম্নলিখিত ডেপ্লয়মেন্ট সিকোয়েন্স ব্যবহার করে:
- Start in dry-run mode: If an agent runtime is configured to route outbound calls to the gateway before the gateway is fully provisioned, the workload will fail to initialize. Configuring the gateway authorization extension in
DRY_RUNmode first ensures that when agent traffic arrives at the gateway no requests are dropped. - Register all services: All agents, MCP servers, and endpoints that use Agent Gateway must be registered in Agent Registry. Requests are denied for any unregistered sources or destinations. Agents deployed on Agent Runtime and Google MCP servers are automatically registered. Any Google API endpoint or custom MCP server must be manually registered.
- অনুমোদন নীতি প্রয়োগ করুন: নিবন্ধিত এজেন্টদের এজেন্টিক উপাদানগুলিতে অ্যাক্সেস দেওয়ার জন্য অনুমোদন নীতি ব্যবহার করা হয়। এর জন্য এজেন্ট আইডেন্টিটি প্রিন্সিপালকে roles
roles/iap.egressorরোলটি প্রদান করা হয় এবং এটিকে টার্গেট রেজিস্ট্রি রিসোর্সের সাথে বাইন্ড করা হয়। ড্রাই-রান মোড ব্যবহার করে এজেন্টের আচরণ মূল্যায়ন করুন এবং তারপর গেটওয়ের মাধ্যমে নির্বাচিত বহির্গমন ট্র্যাফিকের অনুমতি দেওয়ার জন্য নীতি নির্ধারণ করুন। নীতিগুলি কার্যকর হয়ে গেলে, গেটওয়েকে সক্রিয়ভাবে গভর্নেন্স নীতিগুলি প্রয়োগ করতে সক্ষম করার জন্যENFORCEDমোডে স্যুইচ করুন।
চিত্র ২. মোতায়েন ক্রম
বহির্গমন রাউটিং টপোলজি
Gateways typically manage inbound traffic (ingress) to backend services. Agent Gateway, operating in egress ( agent-to-anywhere ) mode, acts as a centralized, zero-trust outbound proxy for agentic workloads.
When an AI app or agentic workload attempts to invoke an external tool or API, the outbound request is intercepted by Agent Gateway and evaluated against governance policies before routing to its destination:
- Private networks (VPC): Outbound traffic targeting internal enterprise APIs, microservices, databases hosted within private VPCs, and on-premises or cross-cloud networks reachable through hybrid connectivity.
- বাহ্যিক নেটওয়ার্ক (ইন্টারনেট): তৃতীয় পক্ষের ওয়েব পরিষেবা, SaaS API, বা পাবলিক এন্ডপয়েন্টকে লক্ষ্য করে বহির্গামী ট্র্যাফিক।
- AI services & Agent Platform: Outbound traffic targeting managed Google Cloud APIs, foundation models, Google MCP endpoints (such as BigQuery), and platform governance services (Agent Registry and IAP policies).
চিত্র ৩. এজেন্ট গেটওয়ের বহির্গমন রাউটিং টপোলজি
এই কোডল্যাবের মূল লক্ষ্য হলো এজেন্ট রানটাইমে থাকা একটি কাস্টম এজেন্ট থেকে বিগকোয়েরির জন্য দূরবর্তী গুগল এমসিপি সার্ভার এন্ডপয়েন্টকে লক্ষ্য করে বহির্গামী ট্র্যাফিক পরিচালনা করা।
৩. সেটআপ
প্রয়োজনীয় IAM ভূমিকা
এই কোডল্যাবে রিসোর্সগুলো তৈরি করার জন্য নিম্নলিখিত ভূমিকাগুলো প্রয়োজন:
বিভাগ | প্রয়োজনীয় IAM ভূমিকা (ID) | বর্ণনা |
এপিআই ব্যবস্থাপনা | | গুগল ক্লাউড এপিআই পরিষেবাগুলি সক্রিয় করুন |
নেটওয়ার্কিং এবং গেটওয়ে | | প্রোভিশন এজেন্ট গেটওয়ে |
পরিষেবা সম্প্রসারণ | | রাউটিং এক্সটেনশন কনফিগার করুন |
নেটওয়ার্ক নিরাপত্তা | | অনুমোদন নীতিগুলি স্থাপন করুন |
এজেন্ট রেজিস্ট্রি | | ক্যাটালগ অনুমোদিত হোস্ট |
ভার্টেক্স এআই এবং এজেন্ট | | এজেন্ট রানটাইম ওয়ার্কলোড স্থাপন করুন |
বহির্গমন নীতি | | |
বিগকোয়েরি | | স্কিমা এবং টেস্ট ডেটাসেট সেটআপ করুন |
ক্লাউড স্টোরেজ | | ডেপ্লয়মেন্ট স্টেজিং বাকেটগুলি পরিচালনা করুন |
লগ এবং নিরীক্ষা | | ট্রেস এবং অডিট লগ পরিদর্শন করুন |
বিকল্পভাবে, 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)
echo ${PROJ_ID}
echo ${PROJ_NO}
echo ${ORG_ID}
# 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-dj"
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}"
echo ${AGW_NAME}
echo ${AGW_URI}
echo ${RE_AGENT_NAME}
echo ${RE_AGENT_ID_SET}
echo ${STAGING_BUCKET}
# create local dir for config files
mkdir -p cfg
এপিআই পরিষেবাগুলি সক্ষম করুন
# 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 \
discoveryengine.googleapis.com
এর মাধ্যমেই সেটআপ পর্ব শেষ হলো... এরপর গেটওয়ে অংশে যাওয়া যাক।
৪. গেটওয়ে
Before enforcing access controls, deploy Agent Gateway and configure its authorization extension in DRY_RUN mode. This allows outbound tool calls to succeed while logging evaluation results for audit purposes.
এখানে এজেন্ট গেটওয়ে আঞ্চলিক এজেন্ট রানটাইম রিসোর্সসমূহকে সমর্থন করার জন্য একটি আঞ্চলিক রেজিস্ট্রি ব্যবহার করে।
গেটওয়ে তৈরি করুন
# create agent gateway config file (regional registry)
cat > cfg/${AGW_NAME}.yaml << EOF
name: ${AGW_NAME}
protocols:
- MCP
googleManaged:
governedAccessPath: AGENT_TO_ANYWHERE
registries:
- "//agentregistry.googleapis.com/projects/${PROJ_ID}/locations/${REGION}"
EOF
# import agent gateway config file (create gateway)
gcloud network-services agent-gateways import ${AGW_NAME} \
--source="cfg/${AGW_NAME}.yaml" \
--location=${REGION}
# show agent gateway details (verify deployment state)
gcloud network-services agent-gateways describe ${AGW_NAME} \
--location=${REGION}
এর মাধ্যমেই গেটওয়ে পর্ব শেষ হলো... এরপর অনুমোদন অংশে যাওয়া যাক।
৫. অনুমোদন
The Agent Gateway authorization extension for Identity-Aware Proxy (IAP) is a type of Service Extension used to delegate authorization decisions for all Agent Platform communications.
- ডেলিগেশন ফ্লো: যখন কোনো এজেন্ট একটি এক্সটার্নাল এন্ডপয়েন্ট বা এমসিপি সার্ভারকে কল করার চেষ্টা করে, তখন এটি অনুরোধটি এজেন্ট গেটওয়েতে পাঠিয়ে দেয়। স্থানীয়ভাবে অ্যাক্সেস মূল্যায়ন করার পরিবর্তে, গেটওয়েটি অথরাইজেশন এক্সটেনশন ব্যবহার করে আইএপি ইভ্যালুয়েশন সার্ভিসে একটি কলআউট পাঠায়। আইএপি এজেন্ট রেজিস্ট্রিতে থাকা টার্গেট রিসোর্সের আইএএম পলিসির সাথে এজেন্টের ( SPIFFE-ভিত্তিক ) আইডেন্টিটি মূল্যায়ন করে। আইএপি গেটওয়েতে একটি
ALLOWবাDENYসিদ্ধান্ত ফেরত পাঠায়, যা হয় ট্র্যাফিকটি সামনে পাঠিয়ে দেয় অথবা একটি HTTP403 Forbiddenস্ট্যাটাস কোড দিয়ে ব্লক করে দেয়। - Enforcement modes: In
DRY_RUNmode, IAP evaluates requests and logs decisions in Cloud Logging without blocking traffic. InENFORCEmode, any request from an unauthorized agent or to an unregistered target is immediately blocked. - বাইন্ডিং লেয়ার: সার্ভিস এক্সটেনশনটি
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 (verify extension state)
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 (verify dry run mode)
gcloud beta network-security authz-policies describe ${AGW_NAME}-authz-policy-profile-iap \
--location=${REGION}
এর মাধ্যমেই অনুমোদন পর্ব শেষ হলো... এরপর কোডবেস অংশে যাওয়া যাক।
৬. কোডবেস
The agent code, BigQuery dataset, and registration script used for this Codelab are maintained in a remote Google Cloud GitHub repository . The following steps will clone the repository locally, copy the necessary files to the current working directory structure, and then cleanup the unneeded temporary files.
এজেন্ট রানটাইমের জন্য একটি স্টোরেজ স্টেজিং বাকেট তৈরি করা হয়, যেখানে প্যাকেজ করা এজেন্ট অ্যাপ্লিকেশন কোড এবং এর নির্ভরশীল আর্টিফ্যাক্টগুলো আপলোড, বিল্ড ও ডিপ্লয় করা হয়।
দূরবর্তী নিদর্শনগুলি আনুন
# clone remote repository to temp local dir
git clone https://github.com/GoogleCloudPlatform/cloud-networking-solutions.git ./temp_agw_cuj_arun_egress_gmcp
# copy agent runtime and endpoint definitions to working project dir
cp -r temp_agw_cuj_arun_egress_gmcp/codelabs/agw-cuj-arun-egress-gmcp/agent-dj ./agent-dj
cp -r temp_agw_cuj_arun_egress_gmcp/codelabs/agw-cuj-arun-egress-gmcp/endpoints ./endpoints
# remove temporary directory
rm -rf temp_agw_cuj_arun_egress_gmcp
BigQuery ডেটাসেট তৈরি করুন
# create bq dataset schema and load data
bq --project_id=${PROJ_ID} query \
--use_legacy_sql=false < agent-dj/setup.sql
স্টেজিং বাকেট তৈরি করুন
# 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)"
এর মাধ্যমেই কোডবেস পর্ব শেষ হলো... এরপর রেজিস্ট্রি অংশে যাওয়া যাক।
৭. রেজিস্ট্রি
The Agent Registry is a centralized inventory of all agents, MCP servers, and endpoints (APIs) in the AI ecosystem. It is also a catalog that can be used to list, search, and discover other registered tools and services for use by AI applications. Agent Gateway egress ( agent-to-anywhere ) mode uses the registry data model as the governance framework to enforce egress access control. IAM role grants for principal calling agents are checked against the policy bound to the registry resource.
In order to bootstrap the environment and support agents using various Google APIs and Services , a script is used to quickly register a common set of API endpoints using hostnames and locations from endpoints/googleapis.txt .
এন্ডপয়েন্ট নিবন্ধন করুন
# run python script to register google api endpoints
python3 endpoints/register_endpoints.py \
--multi-region=${MREGION} \
--region=${REGION} \
--mtls-endpoints=include
এন্ডপয়েন্টগুলি যাচাই করুন
# list regional endpoints (verify registration)
gcloud agent-registry endpoints list --location=${REGION} \
--format="table(displayName, name.basename():label=ENDPOINT_ID, interfaces[0].url:label=URL)"
এর মাধ্যমেই রেজিস্ট্রি পর্ব শেষ হলো... এরপর রানটাইম অংশে যাওয়া যাক।
৮. রানটাইম
এজেন্ট প্ল্যাটফর্মের সাথে ইন্টিগ্রেট করার জন্য, এজেন্ট রানটাইমে ডেপ্লয় করা agent-dj ADK এজেন্টটিকে ডেপ্লয়মেন্ট স্ক্রিপ্টে নিম্নলিখিত সেটিংস দিয়ে কনফিগার করা হয়েছে:
-
"identity_type": types.IdentityType.AGENT_IDENTITYএজেন্টের জন্য একটি অনন্য SPIFFE-ভিত্তিক প্রিন্সিপাল আইডেন্টিটি প্রদান করতে ব্যবহৃত হয়। -
"agent_gateway_config": { "agent_to_anywhere_config": {"agent_gateway": } }পলিসি মূল্যায়ন এবং প্রয়োগের জন্য এজেন্ট-প্রবর্তিত সমস্ত বহির্গামী ট্র্যাফিক এজেন্ট গেটওয়েতে নির্দেশ করতে।
এজেন্ট মোতায়েন করুন
# deploy agent runtime workload
uv --directory agent-dj 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 dj contact info" \
--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 AGENT_UID=$(gcloud agent-registry agents list \
--location=${REGION} \
--filter="displayName=${RE_AGENT_NAME}" \
--format="value(uid)")
echo ${AGENT_UID}
রেজিস্ট্রি এন্ট্রি যাচাই করুন
# show agent resource registry details
gcloud agent-registry agents describe ${AGENT_UID} --location=${REGION}
agentId: urn:agent:projects-${PROJ_NO}:projects:${PROJ_NO}:locations:${REGION}:aiplatform:reasoningEngines:${RE_ENGINE_ID}
attributes:
agentregistry.googleapis.com/system/Framework:
framework: google-adk
agentregistry.googleapis.com/system/RuntimeIdentity:
principal: principal://agents.global.org-${PROJ_NO}.system.id.goog/resources/aiplatform/projects/${PROJ_NO}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}
agentregistry.googleapis.com/system/RuntimeReference:
uri: //aiplatform.googleapis.com/projects/${PROJ_NO}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}
createTime: 'YYYY-MM-DDTHH:MM:SS.ssssssZ'
description: agent for dj contact info
displayName: agent-dj
name: projects/${PROJ_ID}/locations/${REGION}/agents/agentregistry-${RE_AGENT_ID}
protocols:
- interfaces:
- protocolBinding: HTTP_JSON
url: https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:query
- protocolBinding: HTTP_JSON
url: https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:streamQuery
type: CUSTOM
uid: agentregistry-00000000-0000-0000-1234-4567abcd1234
updateTime: 'YYYY-MM-DDTHH:MM:SS.ssssssZ'
গেটওয়ে কনফিগারেশন যাচাই করুন
# verify agent gateway routing specification
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 ভূমিকা
IAM role grants for resources enable the agent principal identity access to BigQuery, MCP tools (for Google APIs), and other required AI platform services. These policies are enforced using IAM at the resource level.
# grant bigquery query execution role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/bigquery.user"
# grant bigquery data viewer role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/bigquery.dataViewer"
# grant mcp tool execution role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/mcp.toolUser"
# 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 ভূমিকা যাচাই করুন
# verify active role bindings for agent identity
gcloud projects get-iam-policy ${PROJ_ID} \
--flatten="bindings[].members" \
--filter="bindings.members:${RE_AGENT_IDENTITY}" \
--format="value(bindings.role)"
এর মাধ্যমেই রানটাইম পর্ব শেষ হলো... এরপর পলিসি অংশে যাওয়া যাক।
৯. নীতিমালা
Agent governance authorization policies permit traffic from an AI agent through Agent Gateway and on to the destination (eg, Google Cloud MCP server endpoint for BigQuery). Once traffic reaches the destination, regular IAM permissions authorize data access (and were enabled in the previous section).
IAM role grants for Agent Gateway egress enables access policies that allow the agent principal identity access to registered destination resources through Agent Gateway. Policies are enforced at the Agent Gateway level and validated using Identity-Aware Proxy (IAP) IAM policies.
এজেন্ট গেটওয়ে বহির্গমনের জন্য এজেন্ট IAM ভূমিকা মঞ্জুর করুন
Agent Gateway checks incoming requests to validate the calling agent identity has the iap.webServiceVersions.egressViaIAP permission (granted by the role roles/iap.egressor ) on the target resource.
Granting roles/iap.egressor to the agent identity or Agent Runtime principal set on the selected destination resource permits this egress traffic. In this codelab, the role is applied to the principal set which grants permission to all Agent Runtime agent identities in the project.
এজেন্ট রেজিস্ট্রি ডেটা মডেলে সংজ্ঞায়িত গন্তব্য রিসোর্সগুলোর সাথে IAM পলিসিগুলো আবদ্ধ থাকে। iap_web/agentRegistry রিসোর্সটি IAM হায়ারার্কিতে একটি " রেজিস্ট্রি-ব্যাপী " স্তরকে প্রতিনিধিত্ব করে। যেখানে agentRegistry agents , mcpServers , এবং endpoints এর মতো স্বতন্ত্র চাইল্ড রিসোর্সগুলোর প্যারেন্ট হিসেবে কাজ করে। এই কোডল্যাবে, IAM পলিসিটি রেজিস্ট্রি স্তরের সাথে আবদ্ধ করা হয়েছে, যা সমস্ত চাইল্ড রিসোর্সের উপর অনুমতি প্রয়োগ করে।
IAP আঞ্চলিক রেজিস্ট্রি IAM নীতি কনফিগার করুন
# show iap iam policy for regional registry
gcloud beta iap web get-iam-policy --resource-type=agent-registry --region=${REGION}
# retrieve active etag on policy for regional registry
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --region=${REGION} --format="value(etag)")
echo ${IAP_ETAG}
# create policy config file
cat > cfg/iap-policy-re-agent-set-to-registry-${REGION}.json << EOF
{
"bindings": [
{
"role": "roles/iap.egressor",
"members": [
"${RE_AGENT_ID_SET}"
]
}
],
"etag": "${IAP_ETAG}"
}
EOF
# import policy file (bind iam policy)
gcloud beta iap web set-iam-policy cfg/iap-policy-re-agent-set-to-registry-${REGION}.json \
--resource-type=agent-registry \
--region=${REGION}
# verify iap iam policy for regional registry
gcloud beta iap web get-iam-policy --resource-type=agent-registry --region=${REGION}
এর মাধ্যমেই নীতিমালা পর্ব শেষ হলো... এরপর নিরীক্ষা অংশে যাওয়া যাক।
১০. নিরীক্ষা
এজেন্ট গেটওয়ে অনুমোদন এক্সটেনশনটি DRY_RUN মোডে কাজ করছে। বহির্গামী অনুরোধগুলো পর্যবেক্ষণ ও লগ করা হচ্ছে, কিন্তু ব্লক করা হচ্ছে না।
টেস্ট এজেন্ট কোয়েরি
একটি ব্রাউজার উইন্ডো খুলে গুগল ক্লাউড কনসোল UI-তে যান এবং এখানে নেভিগেট করুন:
- এজেন্ট প্ল্যাটফর্ম → এজেন্ট → ডেপ্লয়মেন্ট →
agent-dj - প্লেগ্রাউন্ড ট্যাবটি নির্বাচন করুন
অথবা এই টার্মিনাল কমান্ডটি ইকো করুন এবং এজেন্ট প্লেগ্রাউন্ডে যেতে লিঙ্কে ক্লিক করুন:
# playground
echo "https://console.cloud.google.com/agent-platform/runtimes/locations/${REGION}/agent-engines/${RE_ENGINE_ID}/playground?project=${PROJ_ID}"
কিছু পরীক্ষামূলক কোয়েরি জমা দিন...
-
How many DJs do we have on file? -
What is the phone number of DJ Cosmopup?
যাচাই করুন যে কোয়েরিগুলো বৈধ প্রতিক্রিয়া প্রদান করে (যেমন, " ফাইলে ১২ জন ডিজে আছেন ")।
অডিট লগ বিশ্লেষণ করুন
লগগুলো দেখুন এবং পরীক্ষামূলক নীতি মূল্যায়নগুলো খতিয়ে দেখুন।
# query gateway logs for dry run
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
)"
TIMESTAMP METHOD STATUS IAP_AUTHZ MCP_METHOD URL
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://telemetry.googleapis.com/v1/traces
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}/sessions/${RE_SESSION_ID}:appendEvent
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/publishers/google/models/gemini-2.5-flash:generateContent
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}/sessions/${RE_SESSION_ID}:appendEvent
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED tools/call https://bigquery.googleapis.com/mcp
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}/sessions/${RE_SESSION_ID}:appendEvent
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/publishers/google/models/gemini-2.5-flash:generateContent
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED tools/call https://bigquery.googleapis.com/mcp
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/publishers/google/models/gemini-2.5-flash:generateContent
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED tools/call https://bigquery.googleapis.com/mcp
এর মাধ্যমেই নিরীক্ষা পর্ব শেষ হলো... এরপর আমরা প্রয়োগ (Enforce) অংশে যাব।
১১. বলবৎ করুন
The agent was able to make successful requests through the gateway in DRY_RUN mode. Transition the Agent Gateway IAP authorization extension to ENFORCE mode by updating the authorization policy.
অনুমোদন এক্সটেনশন আপডেট করুন
# 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 DJ Fishfry's credit card number?
Observe the agent requests to the Gemini foundation model ( ${REGION}-aiplatform.googleapis.com/... ) and MCP server endpoint ( bigquery.googleapis.com/mcp ) are passed with HTTP 200 OK status codes.
# 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)"
Check there are no requests being blocked. Look for any denied egress attempts with HTTP 403 Forbidden status codes in the gateway audit logs.
# 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
)"
এর মাধ্যমেই প্রয়োগ পর্ব শেষ হলো... এরপর পরিচ্ছন্নতা পর্বে যাওয়া যাক।
১২. পরিচ্ছন্নতা
# delete agent
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
# remove agent resource iam bindings
for ROLE in \
"roles/bigquery.user" \
"roles/bigquery.dataViewer" \
"roles/mcp.toolUser" \
"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 storage bucket
gcloud -q storage rm --recursive gs://${STAGING_BUCKET}
# delete bigquery dataset and contents
bq rm -r -f -d ${PROJ_ID}:dj_ds
# next
# reset/clear iap regional registry iam policy
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --region=${REGION} --format="value(etag)")
cat > cfg/iap-policy-empty.json << EOF
{
"bindings": [],
"etag": "${IAP_ETAG}"
}
EOF
gcloud beta iap web set-iam-policy cfg/iap-policy-empty.json \
--resource-type=agent-registry \
--region=${REGION}
# next
# delete gateway resources
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}
gcloud -q network-services agent-gateways delete ${AGW_NAME} --location=${REGION}
# next
# clean up local working directories and generated configs
rm -rf cfg agent-dj endpoints
# end
এর মাধ্যমেই পরিচ্ছন্নতা পর্ব শেষ হলো... এরপর আসা যাক উপসংহারে !
১৩. উপসংহার
অভিনন্দন! আপনি এজেন্ট গেটওয়ে ব্যবহার করে টুলস অ্যাক্সেসকারী একজন এজেন্টের জন্য বহির্গামী যোগাযোগ সফলভাবে স্থাপন ও পরিচালনা করেছেন!

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