1. Giới thiệu
Lớp học lập trình này khám phá hoạt động quản trị lưu lượng truy cập đi ra của Cổng tác nhân cho các tác nhân AI truy cập vào các máy chủ Giao thức ngữ cảnh mô hình (MCP) bên ngoài được lưu trữ bên ngoài Google Cloud.
Các ứng dụng AI, từ chatbot độc lập đến các hệ thống tự động có quy trình công việc nhiều tác nhân, có thể linh hoạt gọi các công cụ bên ngoài. Việc cung cấp cho các tác nhân quyền truy cập có kiểm soát để truy vấn cơ sở dữ liệu, tìm nạp nội dung trên web và thực hiện các hành động là điều cần thiết để đảm bảo các tác nhân hoạt động an toàn và hiệu quả. Tuy nhiên, trong môi trường doanh nghiệp, việc bảo mật quá trình thực thi công cụ của tác nhân là một thách thức. Nếu có quyền truy cập trực tiếp vào mạng, các cuộc tấn công tiêm câu lệnh hoặc ảo giác của mô hình có thể khiến tác nhân đánh cắp dữ liệu nhạy cảm hoặc chạy các lệnh phá hoại.
Để quản lý các tác nhân tự trị ở quy mô lớn, Agent Gateway cung cấp một điểm thực thi tập trung, không tin tưởng bất cứ điều gì được tích hợp trực tiếp vào cấu trúc Agent Platform. Thay vì dựa vào các phương thức triển khai tuỳ chỉnh riêng cho từng ứng dụng hoặc mã tác nhân, Agent Gateway cung cấp tính năng định tuyến mạng, quản trị tác nhân và bảo mật thời gian chạy được thực thi ở cấp nền tảng.
Khi hoạt động ở chế độ truyền dữ liệu ra (agent-to-anywhere), Agent Gateway sẽ uỷ quyền tất cả các yêu cầu gửi đi từ những tác nhân được định cấu hình để sử dụng cổng này. Mỗi yêu cầu về khối lượng công việc của tác nhân đều được xác thực bằng Danh tính tác nhân duy nhất và được uỷ quyền bằng các chính sách Uỷ quyền truy cập dựa trên danh tính (IAP). Các lệnh gọi công cụ MCP được giải mã và kiểm tra một cách linh động để thực thi chính sách. Quản trị viên bảo mật có thể thực thi các quyền chi tiết một cách tập trung để đảm bảo các tác nhân chỉ có thể gọi các phương thức và điểm cuối đã được phê duyệt.
Sản phẩm bạn sẽ tạo ra
- Agent Gateway ở chế độ truyền dữ liệu ra (agent-to-anywhere)
- Tiện ích uỷ quyền Identity-Aware Proxy (IAP)
- Tác nhân ADK Thời gian chạy của tác nhân có danh tính của tác nhân
- Sổ đăng ký tác nhân có API của Google và các điểm cuối MCP
- Khả năng kết nối công cụ MCP bên ngoài với tập dữ liệu công khai Data Commons
- Chính sách uỷ quyền có tính năng kiểm soát quyền truy cập IAM
Hình 1. Cấu trúc lớp học lập trình
Kiến thức bạn sẽ học được
- Cách triển khai Agent Gateway theo một trình tự cấu hình có cấu trúc
- Cách chuyển đổi chính sách uỷ quyền từ chế độ chạy thử sang chế độ thực thi
- Cách đăng ký các điểm cuối Google API và máy chủ MCP trong Agent Registry
- Cách sử dụng chính sách uỷ quyền có điều kiện dựa trên các thuộc tính giao thức MCP
- Cách kiểm tra nhật ký Cổng tác nhân để xác thực hoạt động quản trị dữ liệu đầu ra
Bạn cần có
- Một dự án trên Google Cloud đã bật tính năng thanh toán
- Quyền IAM để cung cấp các dịch vụ mạng và tài nguyên Nền tảng tác nhân
- Một trình bao tương thích với POSIX (
bashhoặczsh) đã cài đặt Google Cloud CLI (các thành phầngcloudvàbq) - Công cụ dòng lệnh:
git,curl,jq(trình xử lý JSON), Python 3 vàuv(trình quản lý gói Python) - Khoá Data Commons API miễn phí để truy cập vào các tập dữ liệu kiểm thử truy vấn
2. Khái niệm
Trình tự triển khai
Lớp học lập trình này tuân theo một trình tự cấu hình có cấu trúc để các tác nhân có quyền truy cập vào các tài nguyên cần thiết khi khởi tạo và có thể xác nhận khả năng kết nối trước khi áp dụng các chính sách truy cập bắt buộc.
Lớp học lập trình này sử dụng trình tự triển khai sau:
- Bắt đầu ở chế độ
DRY_RUN: Đảm bảo rằng các yêu cầu của tác nhân đang đến được cổng và đi qua (chỉ ở chế độ kiểm tra). - Đăng ký tất cả các dịch vụ: Đăng ký tất cả thành phần dựa trên tác nhân trong Sổ đăng ký tác nhân và xác nhận quyền truy cập vào công cụ của tác nhân.
- Tạo chính sách uỷ quyền: Tạo và áp dụng chính sách uỷ quyền để cho phép lưu lượng truy cập truyền dữ liệu ra bên ngoài từ các tác nhân đến máy chủ và điểm cuối MCP.
- Chuyển sang chế độ
ENFORCED: Cập nhật chính sách về tiện ích uỷ quyền để thực thi các chính sách và chặn lưu lượng truy cập đi ra trái phép.
Hình 2. Trình tự triển khai
Cấu trúc liên kết định tuyến xuất dữ liệu
Cổng Agent Gateway (agent-to-anywhere) đóng vai trò là một proxy đi ra tập trung, không tin cậy cho các khối lượng công việc có tác nhân. Khi một tác nhân đưa ra yêu cầu đối với một công cụ hoặc API bên ngoài, yêu cầu gửi đi sẽ bị Agent Gateway chặn và đánh giá dựa trên các chính sách quản trị trước khi được định tuyến đến đích đến. Trong cấu trúc Nền tảng tác nhân của Google Cloud, Cổng tác nhân cung cấp khả năng kết nối lớp dữ liệu với:
- Mạng riêng (VPC): Lưu lượng truy cập đi nhắm đến các API nội bộ của doanh nghiệp, các vi dịch vụ, cơ sở dữ liệu được lưu trữ trong các VPC riêng tư và các mạng tại chỗ hoặc trên nhiều đám mây có thể truy cập thông qua kết nối kết hợp.
- Mạng bên ngoài (Internet): Lưu lượng truy cập đi nhắm đến các dịch vụ web, API SaaS hoặc điểm cuối công khai của bên thứ ba.
- Dịch vụ AI và Nền tảng tác nhân: Lưu lượng truy cập đi nhắm đến các API được quản lý của Google Cloud, các mô hình cơ sở, các điểm cuối Google MCP (chẳng hạn như BigQuery) và các dịch vụ quản trị nền tảng (Agent Registry và các chính sách IAP).
Hình 3. Cấu trúc liên kết định tuyến truyền dữ liệu ra bên ngoài của Agent Gateway
Lớp học lập trình này tập trung vào lưu lượng truy cập đi từ một tác nhân tuỳ chỉnh trên Agent Runtime nhắm đến một điểm cuối máy chủ MCP bên ngoài của bên thứ ba có thể truy cập qua Internet.
Kiểm tra giao thức MCP
Cổng ra của Agent Gateway (agent-to-anywhere) có thể phân tích nội dung của các yêu cầu MCP và đánh giá các chính sách truy cập dựa trên các thuộc tính giao thức chi tiết. Các chính sách gửi dữ liệu từ máy chủ đến MCP có thể bao gồm các điều kiện (được thể hiện bằng Ngôn ngữ diễn đạt thông thường (CEL)) được thực thi trong thời gian chạy trên mọi yêu cầu.
Các lệnh gọi MCP thường sử dụng định dạng giao thức truyền JSON-RPC và phương thức truyền HTTP. Thông tin chi tiết về phương thức MCP đang được gọi (ví dụ: tools/call), tên công cụ mục tiêu và mọi đối số đều nằm trong tải trọng JSON trong phần nội dung HTTP.
Thuộc tính iap.googleapis.com/mcp.toolName được Agent Gateway trích xuất bằng cách phân tích cú pháp nội dung JSON để tìm giá trị nhận dạng công cụ được chỉ định trong yêu cầu.
Các thuộc tính như iap.googleapis.com/mcp.tool.isReadOnly và mcp.tool.isDestructive thường không được gửi trong mỗi nội dung yêu cầu. Thay vào đó, đây là chú thích (siêu dữ liệu) được liên kết với công cụ. Vì vậy, khi Agent Gateway trích xuất toolName từ nội dung, hệ thống sẽ tra cứu định nghĩa công cụ và các thuộc tính được liên kết từ Agent Registry, nơi nội dung toolspec.json đã được đăng ký.
Hình 4. Kiểm tra MCP của Agent Gateway
Biểu thức CEL được dùng trong các điều kiện IAM của IAP sử dụng định dạng tiêu chuẩn api.getAttribute('iap.googleapis.com/ATTRIBUTE_NAME', 'DEFAULT_VALUE')== 'DESIRED_VALUE'.
Bảng này mô tả các thuộc tính quản trị lưu lượng truy cập đi của Cổng tác nhân có thể được áp dụng cho các yêu cầu của máy chủ MCP:
Thuộc tính | Phương thức / Vị trí MCP | Mô tả |
|
| Giá trị nhận dạng công cụ mục tiêu được yêu cầu trong tải trọng RPC (ví dụ: |
| Sổ đăng ký tác nhân ( | Cho biết liệu công cụ có ở chế độ chỉ đọc hay không (không sửa đổi môi trường của công cụ) |
| Sổ đăng ký tác nhân ( | Cho biết liệu việc gọi công cụ có thể dẫn đến các sửa đổi không thể đảo ngược hoặc mất dữ liệu hay không |
| Sổ đăng ký tác nhân ( | Cho biết liệu việc thực thi công cụ nhiều lần với các đối số giống hệt nhau có tạo ra trạng thái giống hệt nhau hay không |
| Sổ đăng ký tác nhân ( | Cho biết liệu công cụ có vượt ra ngoài các hệ thống nội bộ có giới hạn để truy cập vào Internet công cộng không giới hạn hay không |
Đến đây là kết thúc phần khái niệm... tiếp theo là phần Thiết lập.
3. Thiết lập
Các vai trò IAM bắt buộc
Bạn cần có các vai trò sau đây để tạo tài nguyên trong Lớp học lập trình này:
Danh mục | Vai trò IAM bắt buộc (ID) | Mô tả |
Quản lý API |
| Bật các dịch vụ Google Cloud API |
Kết nối mạng và cổng |
| Cấp phép Agent Gateway |
Tiện ích dịch vụ |
| Định cấu hình tiện ích định tuyến |
Bảo mật mạng |
| Triển khai chính sách uỷ quyền |
Sổ đăng ký tác nhân |
| Máy chủ được phép trong danh mục |
Vertex AI và các tác nhân |
| Triển khai khối lượng công việc Thời gian chạy tác nhân |
Chính sách xuất dữ liệu |
| Áp dụng chính sách của |
Cloud Storage |
| Quản lý các vùng lưu trữ dàn dựng việc triển khai |
Nhật ký và kiểm tra |
| Kiểm tra dấu vết và nhật ký kiểm tra |
Ngoài ra, hãy sử dụng một vai trò cơ bản rộng như roles/admin hoặc vai trò cũ roles/owner.
Truy cập vào dự án của bạn
Lớp học lập trình này sử dụng một dự án trên đám mây duy nhất trên Google Cloud. Các bước định cấu hình sử dụng CLI gcloud và các lệnh shell Linux.
Bắt đầu bằng cách truy cập vào dòng lệnh của dự án trên Google Cloud:
- Cloud Shell tại
shell.cloud.google.com, hoặc - Một dòng lệnh cục bộ đã cài đặt
gcloudCLI
Đặt mã dự án
gcloud config set project SET_YOUR_PROJECT_ID_HERE
Xác thực phiên
# login to gcloud cli
gcloud auth login
# login for gcloud api
gcloud auth application-default login
Đặt các biến môi trường của trình bao
# 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-datacommons"
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_DISPLAY_NAME="api.datacommons.org"
export MCP_RESOURCE_NAME="${REGION}-datacommons-mcp"
export MCP_URL="https://api.datacommons.org/mcp"
echo ${AGW_NAME}
echo ${AGW_URI}
echo ${RE_AGENT_NAME}
echo ${RE_AGENT_ID_SET}
echo ${STAGING_BUCKET}
echo ${MCP_DISPLAY_NAME}
echo ${MCP_RESOURCE_NAME}
echo ${MCP_URL}
# create local dir for config files
mkdir -p cfg
Cập nhật vào gcloud cli (nên làm)
Nếu bạn đang chạy bản cài đặt do chính mình quản lý của Google Cloud SDK (tức là bên ngoài Cloud Shell), hãy cập nhật các thành phần lên phiên bản mới nhất.
# update gcloud cli
gcloud components update
Bật dịch vụ API
# 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
Đến đây là kết thúc phần thiết lập... tiếp theo là phần Cổng.
4. Cổng
Trước khi thực thi các chế độ kiểm soát quyền truy cập, hãy triển khai Agent Gateway và định cấu hình tiện ích uỷ quyền của tiện ích này ở chế độ DRY_RUN. Điều này cho phép các lệnh gọi công cụ gửi đi thành công trong khi ghi nhật ký kết quả đánh giá cho mục đích kiểm tra.
Ở đây, Agent Gateway sử dụng một sổ đăng ký theo khu vực để hỗ trợ các tài nguyên Agent Runtime theo khu vực.
Tạo cổng
# 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}
Đến đây là kết thúc phần cổng... tiếp theo là phần Uỷ quyền.
5. Ủy quyền
Tiện ích uỷ quyền Agent Gateway cho Identity-Aware Proxy (IAP) là một loại Tiện ích dịch vụ dùng để uỷ quyền quyết định uỷ quyền cho tất cả thông tin liên lạc của Nền tảng Agent.
- Quy trình uỷ quyền: Khi một tác nhân cố gắng gọi một điểm cuối bên ngoài hoặc máy chủ MCP, tác nhân đó sẽ định tuyến yêu cầu đến Cổng tác nhân. Thay vì đánh giá quyền truy cập cục bộ, cổng sẽ sử dụng tiện ích uỷ quyền để gửi một lệnh gọi đến dịch vụ đánh giá IAP. IAP đánh giá danh tính của tác nhân (dựa trên SPIFFE) dựa trên chính sách IAM của tài nguyên đích trong Sổ đăng ký tác nhân. IAP trả về quyết định
ALLOWhoặcDENYcho cổng, cổng này sẽ chuyển tiếp lưu lượng truy cập hoặc chặn lưu lượng truy cập bằng mã trạng thái HTTP403 Forbidden. - Chế độ thực thi: Ở chế độ
DRY_RUN, IAP đánh giá các yêu cầu và ghi lại các quyết định trong Cloud Logging mà không chặn lưu lượng truy cập. Ở chế độENFORCE, mọi yêu cầu từ một tác nhân không được uỷ quyền hoặc đến một mục tiêu chưa đăng ký đều bị chặn ngay lập tức. - Lớp liên kết: Tiện ích dịch vụ được kết nối với Agent Gateway bằng một chính sách uỷ quyền được định cấu hình bằng hồ sơ
REQUEST_AUTHZ.
Tiện ích uỷ quyền
Tạo tiện ích uỷ quyền
# 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}
Chính sách ủy quyền
Chính sách uỷ quyền liên kết nhà cung cấp dịch vụ bảo mật (IAP) với tài nguyên cổng mục tiêu và chỉ định hồ sơ chặn (REQUEST_AUTHZ).
Tạo chính sách uỷ quyền
# 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}
Đến đây là kết thúc phần uỷ quyền... tiếp theo là phần toàn bộ mã nguồn.
6. Toàn bộ mã nguồn
Mã tác nhân và tập lệnh đăng ký điểm cuối được dùng cho Lớp học lập trình này được duy trì trong một kho lưu trữ Google Cloud GitHub từ xa. Các bước sau đây sẽ sao chép kho lưu trữ trên máy, sao chép các tệp cần thiết vào cấu trúc thư mục đang hoạt động hiện tại, sau đó dọn dẹp các tệp tạm thời.
Một vùng lưu trữ tạm thời sẽ được tạo cho Thời gian chạy của tác nhân để tải lên, tạo và triển khai mã ứng dụng tác nhân được đóng gói và các cấu phần phần mềm phụ thuộc của mã đó.
Tìm nạp cấu phần phần mềm từ xa
# clone remote repository to temp local dir
git clone https://github.com/GoogleCloudPlatform/cloud-networking-solutions.git ./temp_agw_cuj_arun_egress_emcp
# copy agent runtime and endpoint definitions to working project dir
cp -r temp_agw_cuj_arun_egress_emcp/codelabs/agw-cuj-arun-egress-emcp/agent-datacommons ./agent-datacommons
cp -r temp_agw_cuj_arun_egress_emcp/codelabs/agw-cuj-arun-egress-emcp/endpoints ./endpoints
# remove temporary directory
rm -rf temp_agw_cuj_arun_egress_emcp
Tạo vùng lưu trữ tạm thời
# 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)"
Đến đây là kết thúc phần toàn bộ mã nguồn... tiếp theo là phần Registry (Sổ đăng ký).
7. Đăng ký
Agent Registry là một kho lưu trữ tập trung của tất cả các tác nhân, máy chủ MCP và điểm cuối (API) trong hệ sinh thái AI. Đây cũng là một danh mục mà các ứng dụng AI có thể dùng để liệt kê, tìm kiếm và khám phá các công cụ và dịch vụ đã đăng ký khác. Chế độ truyền dữ liệu ra ngoài của Cổng tác nhân (agent-to-anywhere) sử dụng mô hình dữ liệu của sổ đăng ký làm khung quản trị để thực thi quyền kiểm soát truy cập truyền dữ liệu ra ngoài. Các quyền cấp vai trò IAM cho các tác nhân gọi chính được kiểm tra dựa trên chính sách được liên kết với tài nguyên sổ đăng ký.
Để khởi động môi trường và hỗ trợ các tác nhân bằng nhiều API và Dịch vụ của Google, một tập lệnh được dùng để nhanh chóng đăng ký một nhóm điểm cuối API chung bằng cách sử dụng tên máy chủ và vị trí từ endpoints/googleapis.txt.
Đăng ký điểm cuối
# run python script to register google api endpoints
python3 endpoints/register_endpoints.py \
--multi-region=${MREGION} \
--region=${REGION} \
--mtls-endpoints=include
Xác minh điểm cuối
# list registry regional endpoints (verify registration)
gcloud agent-registry endpoints list --location=${REGION} \
--format="table(displayName, name.basename():label=ENDPOINT_ID, interfaces[0].url:label=URL)"
Đến đây là kết thúc phần đăng ký... tiếp theo là phần Data Commons.
8. Data Commons
Data Commons là một sáng kiến của Google nhằm hệ thống hoá các tập dữ liệu công khai và cung cấp cho mọi người. Đây là một dịch vụ miễn phí và bạn có thể truy cập bằng khoá API sau khi tạo tài khoản.
Tạo khoá API
Sau khi bạn tạo tài khoản, hãy làm theo các bước sau để lấy khoá API:
- Đăng nhập vào Cổng API của Data Commons
- Nhấp vào nút "Ứng dụng của tôi" ở góc trên bên phải
- Nhấp vào nút "+ ỨNG DỤNG MỚI" ở góc trên bên phải bên dưới tên người dùng của bạn
- Đặt tên cho ứng dụng của bạn (ví dụ: "Codelab Agent MCP")
- Nhấp vào nút "BẬT" cho Data Commons API
api.datacommons.org - Nhấp vào nút "LƯU" ở góc dưới cùng bên phải
Thao tác này sẽ tạo một khoá API và khoá bí mật. Nhấp vào biểu tượng "sao chép" bên cạnh giá trị khoá để "Sao chép khoá API". Dán giá trị vào lệnh trên thiết bị đầu cuối để đặt biến môi trường DC_API_KEY.
# set api key env var
export DC_API_KEY="YOUR_API_KEY_HERE"
Tạo máy chủ MCP toolspec
Khi đăng ký máy chủ MCP theo cách thủ công, bạn phải thêm một tệp chỉ định công cụ trong quá trình đăng ký. Việc tải tệp toolspec.json lên sẽ liệt kê tất cả các công cụ do điểm cuối cung cấp và cho phép người dùng khác khám phá các công cụ đó.
Tập lệnh test_mcp.py (có trong cơ sở mã agent-datacommons/) sẽ tạo tệp toolspec.json bằng cách kết nối với máy chủ MCP mục tiêu (qua SSE hoặc HTTP) và gọi list_tools() để truy xuất tất cả các công cụ có sẵn do máy chủ cung cấp.
# generate toolspec for registry ingestion
uv --directory agent-datacommons run python3 test_mcp.py --toolspec=include --token="${DC_API_KEY}"
Khi xem xét đầu ra toolspec đã tạo, bạn sẽ thấy các thuộc tính MCP mà Agent Gateway có thể dùng để đánh giá và thực thi chính sách xuất cảnh.
# show toolspec mcp attributes
jq '.tools[] | {name, isReadOnly, isDestructive, isIdempotent, isOpenWorld}' agent-datacommons/toolspec.json
Đăng ký máy chủ MCP
# register mcp server
gcloud agent-registry services create ${MCP_RESOURCE_NAME} \
--location=${REGION} \
--display-name="${MCP_DISPLAY_NAME}" \
--description="mcp server for data commons" \
--mcp-server-spec-type=tool-spec \
--mcp-server-spec-content=agent-datacommons/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_RESOURCE_NAME} --location=${REGION}
# fetch mcp server registry id
export MCP_REGISTRY_ID=$(gcloud agent-registry services describe ${MCP_RESOURCE_NAME} \
--location=${REGION} \
--format="value(registryResource.basename())")
echo ${MCP_REGISTRY_ID}
Đến đây là kết thúc phần Data Commons... tiếp theo là phần Thời gian chạy.
9. Thời gian chạy
agent-datacommons ADK Agent được triển khai cho Agent Runtime được định cấu hình bằng các chế độ cài đặt sau trong tập lệnh triển khai để tích hợp với Agent Platform:
"identity_type": types.IdentityType.AGENT_IDENTITYđể cung cấp một danh tính chính dựa trên SPIFFE riêng biệt cho tác nhân"agent_gateway_config": { "agent_to_anywhere_config": {"agent_gateway": } }để chuyển hướng tất cả lưu lượng truy cập đi do nhân viên hỗ trợ bắt đầu đến Cổng nhân viên hỗ trợ để đánh giá và thực thi chính sách
Triển khai tác nhân
# deploy agent runtime workload
uv --directory agent-datacommons 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 data commons stats" \
--enable-telemetry \
--enable-agent-identity \
--agent-gateway-egress=${AGW_URI} \
--env-var="DC_API_KEY=${DC_API_KEY}"
Tìm nạp chỉ số quan trọng về việc triển khai
# 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}
Xác minh mục đăng ký
# show agent resource registry details
gcloud agent-registry agents describe ${RE_AGENT_REGISTRY_ID} --location=${REGION}
10. Chính sách
Chính sách uỷ quyền quản trị tác nhân cho phép lưu lượng truy cập từ một tác nhân AI thông qua Agent Gateway và đến đích đến (ví dụ: điểm cuối máy chủ MCP của bên thứ ba cho một ứng dụng SaaS). Sau khi lưu lượng truy cập đến đích đến, các quyền thông thường ở cấp dịch vụ hoặc cấp ứng dụng sẽ cho phép truy cập vào dữ liệu.
Quyền truy cập vào vai trò IAM cho lưu lượng truy cập đi của Cổng kết nối tác nhân cho phép các chính sách truy cập cho phép quyền truy cập danh tính chính của tác nhân vào các tài nguyên đích đã đăng ký thông qua Cổng kết nối tác nhân. Các chính sách được thực thi ở cấp Cổng đại lý và được xác thực bằng các chính sách IAM của Identity-Aware Proxy (IAP).
Cấp vai trò IAM cho tác nhân để truyền dữ liệu ra khỏi Agent Gateway
Agent Gateway kiểm tra các yêu cầu đến để xác thực danh tính của tác nhân gọi có quyền iap.webServiceVersions.egressViaIAP (do vai trò roles/iap.egressor cấp) đối với tài nguyên đích.
Việc cấp roles/iap.egressor cho danh tính tác nhân hoặc nhóm thực thể Agent Runtime trên tài nguyên đích đến đã chọn sẽ cho phép lưu lượng truy cập đi ra này. Trong lớp học lập trình này, vai trò được áp dụng cho tác nhân chính, cấp quyền cho danh tính tác nhân cụ thể của Agent Runtime.
Các chính sách IAM được liên kết với các tài nguyên đích như được xác định trong mô hình dữ liệu của Sổ đăng ký tác nhân. Tài nguyên iap_web/agentRegistry đại diện cho cấp "trên toàn bộ sổ đăng ký" trong hệ thống phân cấp IAM. Trong đó agentRegistry đóng vai trò là phần tử mẹ của từng tài nguyên con cho agents, mcpServers và endpoints. Trong lớp học lập trình này, chính sách IAM được liên kết với các cấp mcpServer và endpoint. Chính sách này áp dụng quyền cho các tài nguyên con cụ thể.
Giới thiệu về tính năng lọc MCP có điều kiện
Máy chủ Data Commons MCP có 2 công cụ:
search_indicators: cho các truy vấn về việc khám phá dữ liệu có sẵn, tìm kiếm các biến hoặc tìm hiểu phạm vi bao phủ dữ liệuget_observations: cho các truy vấn để truy xuất các điểm dữ liệu hoặc chuỗi thời gian cụ thể
Bạn cần lưu ý một số thao tác MCP tiêu chuẩn khi định cấu hình các chính sách quản trị có điều kiện trên máy chủ MCP. Trước khi có thể tạo tools/call cho search_indicators hoặc get_observations, trước tiên, ứng dụng MCP phải gửi yêu cầu bắt tay và khám phá giao thức:
initializenotifications/initializedtools/list
Để minh hoạ tính năng lọc chính sách có điều kiện, chính sách sẽ được định cấu hình cho các điều kiện sau:
Bảng. Đánh giá chính sách đối với các yêu cầu MCP
Yêu cầu / Phương thức | Giá trị | Đánh giá CEL | Kết quả |
|
|
| ✅ ĐƯỢC PHÉP (200) |
|
|
| ✅ ĐƯỢC PHÉP (200) |
|
|
| ✅ ĐƯỢC PHÉP (200) |
|
|
| ❌ DENIED (403) |
Để cho phép các bắt tay giao thức và lệnh gọi công cụ search_indicators, quy tắc chính sách có điều kiện bao gồm một lệnh cho phép đối với "search_indicators" hoặc "" (chuỗi trống).
Định cấu hình chính sách IAM của máy chủ MCP IAP trong sổ đăng ký
# show iap iam policy for mcp server
gcloud beta iap web get-iam-policy \
--region=${REGION} \
--resource-type=agent-registry \
--mcp-server=${MCP_REGISTRY_ID}
LƯU Ý: etag: sẽ trả về ACAB mặc định vì chưa có chính sách nào được xác định.
# 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}
# create policy config file
cat > cfg/iap-policy-dc-agent-to-dc-mcp-tool-1.json << EOF
{
"bindings": [
{
"role": "roles/iap.egressor",
"members": [
"${RE_AGENT_IDENTITY}"
],
"condition": {
"title": "allow ${RE_AGENT_NAME} to use search_indicators tool for ${MCP_DISPLAY_NAME}",
"expression": "api.getAttribute('iap.googleapis.com/mcp.toolName', '') in ['search_indicators', '']"
}
}
],
"etag": "${IAP_ETAG}",
"version": 3
}
EOF
# import policy file (bind iam policy)
gcloud beta iap web set-iam-policy cfg/iap-policy-dc-agent-to-dc-mcp-tool-1.json \
--resource-type=agent-registry \
--mcp-server=${MCP_REGISTRY_ID} \
--region=${REGION}
# verify iap iam policy for mcp server
gcloud beta iap web get-iam-policy \
--region=${REGION} \
--resource-type=agent-registry \
--mcp-server=${MCP_REGISTRY_ID}
Đến đây là kết thúc phần chính sách... tiếp theo là phần Kiểm tra.
11. Kiểm tra
Tiện ích uỷ quyền Agent Gateway đang hoạt động ở chế độ DRY_RUN. Các yêu cầu gửi đi sẽ được theo dõi và ghi nhật ký nhưng không bị chặn.
Kiểm thử các câu hỏi cho nhân viên hỗ trợ
Mở cửa sổ trình duyệt đến giao diện người dùng bảng điều khiển Cloud rồi chuyển đến:
- Agent Platform → Agents → Deployments →
agent-datacommons - Chọn thẻ Playground (Sân chơi)
Hoặc lặp lại lệnh này trên thiết bị đầu cuối rồi nhấp vào đường liên kết để chuyển đến sân chơi của tác nhân:
# playground
echo "https://console.cloud.google.com/agent-platform/runtimes/locations/${REGION}/agent-engines/${RE_ENGINE_ID}/playground?project=${PROJ_ID}"
Gửi một số truy vấn thử nghiệm....
What data do you have on water quality in Zimbabwe?Compare the life expectancy, economic inequality, and GDP growth for BRICS nations
Xác minh rằng các truy vấn trả về phản hồi hợp lệ.
Phân tích nhật ký kiểm tra
Xem nhật ký và kiểm tra các hoạt động đánh giá chính sách chạy thử.
# list unique urls with http status and iap authorization result
gcloud logging read \
"resource.type=\"networkservices.googleapis.com/Gateway\" \
AND httpRequest.requestUrl:*" \
--project=${PROJ_ID} \
--limit=200 \
--format="value(httpRequest.status, jsonPayload.authzPolicyInfo.result, httpRequest.requestUrl)" | sort -u
200 ALLOWED https://api.datacommons.org/mcp
200 ALLOWED https://cloudresourcemanager.googleapis.com:443/google.cloud.resourcemanager.v3.Projects/GetProject
200 ALLOWED https://telemetry.googleapis.com/v1/traces
200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/publishers/google/models/gemini-2.5-flash:generateContent
200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}/sessions/${RE_SESSION_ID}
200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}/sessions/${RE_SESSION_ID}:appendEvent
200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}/sessions/${RE_SESSION_ID}/events
202 ALLOWED https://api.datacommons.org/mcp
Cập nhật chính sách IAM cho điểm cuối IAP của sổ đăng ký
Cấp quyền truy cập cho tác nhân vào điểm cuối đo từ xa
# set var for endpoint display name
export ENDPOINT_1_DISPLAY_NAME="telemetry.googleapis.com"
echo ${ENDPOINT_1_DISPLAY_NAME}
# fetch endpoint registry id
export ENDPOINT_1_REGISTRY_ID=$(gcloud agent-registry services list \
--location=${REGION} \
--filter="displayName=${ENDPOINT_1_DISPLAY_NAME}" \
--format="value(registryResource.basename())")
echo ${ENDPOINT_1_REGISTRY_ID}
# create policy config file
cat > cfg/iap-policy-re-agent-to-ep-1.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-re-agent-to-ep-1.json \
--resource-type=agent-registry \
--endpoint=${ENDPOINT_1_REGISTRY_ID} \
--region=${REGION}
# verify iap iam policy for telemetry endpoint
gcloud beta iap web get-iam-policy \
--region=${REGION} \
--resource-type=agent-registry \
--endpoint=${ENDPOINT_1_REGISTRY_ID}
Cấp quyền truy cập cho tác nhân đối với điểm cuối aiplatform
# set var for endpoint display name
export ENDPOINT_2_DISPLAY_NAME="${REGION}-aiplatform.googleapis.com"
echo ${ENDPOINT_2_DISPLAY_NAME}
# fetch endpoint registry id
export ENDPOINT_2_REGISTRY_ID=$(gcloud agent-registry services list \
--location=${REGION} \
--filter="displayName=${ENDPOINT_2_DISPLAY_NAME}" \
--format="value(registryResource.basename())")
echo ${ENDPOINT_2_REGISTRY_ID}
# create policy config file
cat > cfg/iap-policy-re-agent-to-ep-2.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-re-agent-to-ep-2.json \
--resource-type=agent-registry \
--endpoint=${ENDPOINT_2_REGISTRY_ID} \
--region=${REGION}
# verify iap iam policy for aiplatform endpoint
gcloud beta iap web get-iam-policy \
--region=${REGION} \
--resource-type=agent-registry \
--endpoint=${ENDPOINT_2_REGISTRY_ID}
Cấp quyền truy cập cho tác nhân đối với điểm cuối cloudresourcemanager
# set var for endpoint display name
export ENDPOINT_3_DISPLAY_NAME="cloudresourcemanager.googleapis.com"
echo ${ENDPOINT_3_DISPLAY_NAME}
# fetch endpoint registry id
export ENDPOINT_3_REGISTRY_ID=$(gcloud agent-registry services list \
--location=${REGION} \
--filter="displayName=${ENDPOINT_3_DISPLAY_NAME}" \
--format="value(registryResource.basename())")
echo ${ENDPOINT_3_REGISTRY_ID}
# create policy config file
cat > cfg/iap-policy-re-agent-to-ep-3.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-re-agent-to-ep-3.json \
--resource-type=agent-registry \
--endpoint=${ENDPOINT_3_REGISTRY_ID} \
--region=${REGION}
# verify iap iam policy for cloudresourcemanager endpoint
gcloud beta iap web get-iam-policy \
--region=${REGION} \
--resource-type=agent-registry \
--endpoint=${ENDPOINT_3_REGISTRY_ID}
Đến đây là kết thúc phần kiểm tra... tiếp theo là phần Thực thi.
12. Thi hành
Tác nhân đã có thể thực hiện các yêu cầu thành công thông qua cổng ở chế độ DRY_RUN. Chuyển tiện ích uỷ quyền IAP của Agent Gateway sang chế độ ENFORCE bằng cách cập nhật chính sách uỷ quyền.
Cập nhật tiện ích uỷ quyền
# 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}
Cập nhật chính sách uỷ quyền
# 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}
Xác minh điều kiện cho phép
Quay lại Playground của tác nhân trong giao diện người dùng bảng điều khiển.
Gửi một truy vấn kiểm thử bổ sung (cố gắng gọi công cụ được phépsearch_indicators)...
What data topics do you have for Peru?
Quan sát các yêu cầu của tác nhân đối với mô hình cơ sở Gemini (${REGION}-aiplatform.googleapis.com/...), API đo từ xa (telemetry.googleapis.com/...) và điểm cuối của máy chủ MCP Data Commons (api.datacommons.org/mcp) được truyền bằng mã trạng thái 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)"
Kiểm tra để đảm bảo không có yêu cầu nào bị chặn. Tìm mọi nỗ lực truy cập bị từ chối có mã trạng thái HTTP 403 Forbidden trong nhật ký kiểm tra cổng.
# 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
)"
# 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
)"
Xác minh điều kiện từ chối
Gửi một truy vấn kiểm thử khác (cố gắng gọi công cụ bị từ chốiget_observations)...
What are the diabetes levels in Peru compared to Slovakia?
Trước tiên, tác nhân sẽ xem xét search_indicators, sau đó cố gắng sử dụng get_observations nhưng không thành công và phản hồi của tác nhân sẽ không hoàn chỉnh.
# 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
)"
TIMESTAMP STATUS IAP_AUTHZ MCP_METHOD TOOL_NAME URL
YYYY-MM-DDTHH:MM:SS 403 DENIED tools/call get_observations https://api.datacommons.org/mcp
YYYY-MM-DDTHH:MM:SS ALLOWED tools/call get_observations https://api.datacommons.org/mcp
YYYY-MM-DDTHH:MM:SS 403 DENIED tools/call get_observations https://api.datacommons.org/mcp
YYYY-MM-DDTHH:MM:SS 200 ALLOWED tools/call search_indicators https://api.datacommons.org/mcp
YYYY-MM-DDTHH:MM:SS 200 ALLOWED tools/list https://api.datacommons.org/mcp
YYYY-MM-DDTHH:MM:SS 202 ALLOWED notifications/initialized https://api.datacommons.org/mcp
Điều này xác thực rằng chính sách quản trị đang hoạt động như dự kiến!
Xin lưu ý rằng hàng thứ hai cho biết trạng thái trống và ALLOWED là sự kiện nhật ký ngắt kết nối thứ cấp do Agent Gateway phát ra khi đóng ổ cắm sau khi gửi phản hồi 403 (vì các sự kiện connection-close không có mã trạng thái phản hồi, httpRequest.status là trống).
Đến đây là kết thúc phần thực thi... tiếp theo là phần Dọn dẹp.
13. Dọn dẹp
# 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
# delete storage bucket
gcloud -q storage rm --recursive gs://${STAGING_BUCKET}
# next
# clear policy on mcp server
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --mcp-server=${MCP_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 \
--mcp-server=${MCP_REGISTRY_ID} \
--region=${REGION}
# next
# clear policy on endpoint 1
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --endpoint=${ENDPOINT_1_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_1_REGISTRY_ID} \
--region=${REGION}
# next
# clear policy on endpoint 2
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --endpoint=${ENDPOINT_2_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_2_REGISTRY_ID} \
--region=${REGION}
# next
# clear policy on endpoint 3
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --endpoint=${ENDPOINT_3_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_3_REGISTRY_ID} \
--region=${REGION}
# next
# remove manual registry entry
gcloud -q agent-registry services delete ${MCP_RESOURCE_NAME} --location=${REGION}
# 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 beta service-extensions authz-extensions delete ${AGW_NAME}-svc-ext-authz-iap-enforced --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-datacommons endpoints
# end
Đến đây là kết thúc phần dọn dẹp... tiếp theo là phần Kết luận!
14. Kết luận
Xin chúc mừng! Bạn đã triển khai và quản lý thành công thông tin liên lạc gửi đi cho một nhân viên hỗ trợ truy cập vào các công cụ bằng Cổng nhân viên hỗ trợ!

Cosmopup cho rằng Codelabs là một nền tảng tuyệt vời!
Bước tiếp theo là gì?
- Hãy xem tài liệu về Nền tảng tác nhân Gemini Enterprise để biết các tính năng nâng cao và hướng dẫn
- Định cấu hình các biện pháp bảo vệ Model Armor trên Agent Gateway để tăng cường độ an toàn và bảo mật cho AI
- Khám phá Chính sách quản trị ngữ nghĩa để thực thi các quy tắc kinh doanh và việc tuân thủ đối với các cụm từ tìm kiếm bằng ngôn ngữ tự nhiên
Bạn có thể thoải mái đưa ra ý kiến nhận xét, câu hỏi hoặc nội dung chỉnh sửa bằng cách sử dụng biểu mẫu phản hồi này
Cảm ơn bạn!