1. บทนำ
Codelab นี้จะสำรวจการกํากับดูแลขาเข้าของ Agent Gateway สําหรับ AI Agent ที่โฮสต์ใน Agent Runtime
Agent Gateway ที่ทํางานในโหมดขาเข้า (ไคลเอ็นต์ไปยังเอเจนต์) รองรับการควบคุมการสื่อสารระหว่างไคลเอ็นต์ ซึ่งได้แก่ ผู้ใช้ปลายทางที่เป็นมนุษย์ เอเจนต์บนเดสก์ท็อป IDE การเขียนโค้ด เอเจนต์เพียร์ ฯลฯ กับเอเจนต์ที่โฮสต์ใน Agent Runtime โหมดนี้ใช้เพื่อปกป้องเอเจนต์จากการโจมตีด้วยการแทรกพรอมต์ขาเข้าหรือเนื้อหาที่เป็นอันตรายที่ไคลเอ็นต์ส่งมา การเข้าชมขาเข้าทั้งหมดจะได้รับการประมวลผลโดยใช้ส่วนขยายการให้สิทธิ์และ Model Armor เพื่อรักษาความปลอดภัยของจุดแรกเข้าของเครือข่ายสำหรับการโต้ตอบของเอเจนต์ทั้งหมด
สิ่งที่คุณสร้าง
- Agent Gateway ในโหมดขาเข้า (ไคลเอ็นต์ไปยัง Agent)
- การขยายเวลาการให้สิทธิ์ Model Armor
- Agent Runtime ADK Agent ที่มีข้อมูลระบุตัวตนของ Agent
- ข้อมูลไฟล์ Cloud Storage ที่ Agent ค้นหาโดยใช้ MCP
- เทมเพลต Model Armor สำหรับการคัดกรองพรอมต์และคำตอบของ LLM
- เทมเพลตการคุ้มครองข้อมูลที่ละเอียดอ่อนสำหรับการลบข้อมูลระบุตัวบุคคล
รูปที่ 1 สถาปัตยกรรม Codelab
สิ่งที่คุณจะได้เรียนรู้
- วิธีติดตั้งใช้งาน Agent Gateway เพื่อคัดกรองการรับส่งข้อมูลขาเข้าไปยัง Agent
- วิธีกำหนดค่าส่วนขยายการให้สิทธิ์และการมอบสิทธิ์ของ Model Armor
- วิธีสร้างและติดตั้งใช้งานเทมเพลต Model Armor ที่กำหนดเอง
- วิธีสร้างและติดตั้งใช้งานเทมเพลตการป้องกันข้อมูลที่ละเอียดอ่อนที่กำหนดเอง
- วิธีทดสอบและตรวจสอบความถูกต้องของนโยบายการคัดกรอง LLM
สิ่งที่ต้องมี
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
- สิทธิ์ IAM ในการจัดสรรบริการเครือข่าย ชุดข้อมูล BigQuery และทรัพยากร Agent Platform
- เชลล์ที่เข้ากันได้กับ POSIX (
bashหรือzsh) ที่ติดตั้ง Google Cloud CLI (คอมโพเนนต์gcloud) - เครื่องมือบรรทัดคำสั่ง:
git,curl,jq(ตัวประมวลผล JSON), Python 3 และuv(ตัวจัดการแพ็กเกจ Python)
2. แนวคิด
ทิศทางการรับส่งข้อมูลและบทบาทของเกตเวย์
Agent Gateway ทำหน้าที่เป็นพร็อกซีเครือข่ายที่รับรู้ถึงเอเจนต์ แต่บทบาทในการปฏิบัติงานจะเปลี่ยนไปตามทิศทางของการรับส่งข้อมูล
- โหมด Agent-to-anywhere (ขาออก): ทำหน้าที่เป็นพร็อกซีขาออก เมื่อ Agent เรียกใช้เครื่องมือฐานข้อมูลภายนอก เซิร์ฟเวอร์ MCP ของบุคคลที่สาม หรือ API เกตเวย์ขาออกจะจัดการการค้นพบบริการ การกำหนดเส้นทาง TLS แบบสองทาง (
mTLS) การแทรกข้อมูลเข้าสู่ระบบ OAuth แบบไดนามิก และการควบคุมการเข้าถึงปลายทาง - โหมดไคลเอ็นต์ไปยังตัวแทน (ขาเข้า): ทำหน้าที่เป็นเกตเวย์ความปลอดภัยส่วนหน้า โดยมีวัตถุประสงค์หลักคือการปกป้องทางเข้าสู่รันไทม์การดำเนินการของเอเจนต์ด้วยการสกัดกั้นและล้างข้อมูลพรอมต์ที่เป็นภาษาธรรมชาติที่เข้ามา ก่อนที่พรอมต์จะไปถึงโค้ดของเอเจนต์หรือโมเดล AI
เส้นทางขาเข้าสู่ Agent Runtime
คำขอของไคลเอ็นต์ที่กำหนดเป้าหมายไปยังเอเจนต์ที่โฮสต์ใน Agent Runtime จะส่งไปยังปลายทาง API ของ aiplatform.googleapis.com
POST https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:query
สตรีมการสื่อสารขาเข้านี้ไปยังปลายทาง API แสดงถึงเส้นทางการรับส่งจากไคลเอ็นต์ไปยังตัวแทน
Agent Gateway ผสานรวมกับ Google Front End (GFE) โดยตรงที่เลเยอร์โครงสร้างพื้นฐานการแสดงผล API เพื่อรักษาเส้นทางการรับส่งข้อมูลขาเข้าที่ Google จัดการนี้ให้ปลอดภัย เมื่อติดตั้งใช้งานเอเจนต์ที่มีการจัดการไปยังรันไทม์ของเอเจนต์ Google จะเชื่อมโยงนโยบายการให้สิทธิ์เกตเวย์ขาเข้ากับคำขอของไคลเอ็นต์ขาเข้าที่ขอบของเครือข่ายโดยค่าเริ่มต้น
รูปที่ 2 การกำกับดูแลขาเข้าด้วย Agent Gateway ไปยัง Agent Runtime
เนื่องจากการตรวจสอบเกิดขึ้นที่ระดับฟรอนท์เอนด์ก่อนที่คำขอจะเข้าสู่ Agent Runtime สถาปัตยกรรมนี้จึงไม่ทำให้เกิดค่าใช้จ่ายเพิ่มเติมในการเชื่อมต่อเครือข่ายหรือเวลาในการตอบสนองภายใน โครงสร้างพื้นฐานส่วนหน้าจะจัดการการปรับขนาดโดยอัตโนมัติ จึงไม่จำเป็นต้องจัดการช่วง IP ภายใน ตัวจัดสรรภาระงาน หรือเส้นทาง DNS ที่กำหนดเอง
การล้างภัยคุกคามแบบอินไลน์ด้วย Model Armor
การประเมินข้อมูลเข้าสู่ระบบของผู้โทรและการบังคับใช้การควบคุมการเข้าถึง IAM (roles/aiplatform.user) จะได้รับการจัดการโดยaiplatformระดับการโฮสต์ API โดยตรง เกตเวย์ขาเข้าเองไม่ได้ดำเนินการให้สิทธิ์ตามข้อมูลระบุตัวตน แต่จะเน้นที่ความปลอดภัยของเนื้อหาโดยใช้ส่วนขยายการให้สิทธิ์ที่กำหนดค่าด้วยโปรไฟล์ CONTENT_AUTHZ เกตเวย์ทำหน้าที่เป็นจุดบังคับใช้นโยบายแบบอินไลน์ โดยจะสกัดกั้นพรอมต์ภาษาธรรมชาติที่อยู่ระหว่างการส่งก่อนที่จะไปถึงลูปการให้เหตุผลของ AI Agent หรือ LLM พื้นฐาน
เมื่อพรอมต์ของผู้ใช้ขาเข้ามาถึงบริการส่วนหน้า เกตเวย์จะเริ่มการเรียก ext_proc (การประมวลผลภายนอก) ไปยังบริการส่วนขยายการให้สิทธิ์ Model Armor ระดับภูมิภาค ซึ่งจะสตรีมการเรียกไปยัง Dataplane ของ Model Armor Model Armor ทำหน้าที่เป็นไฟร์วอลล์ภาษาธรรมชาติ โดยจะประเมินข้อความกับเทมเพลตที่ใช้งานอยู่เพื่อสแกนหาระดับความปลอดภัยและความเสี่ยงด้านความปลอดภัย
- การแทรกพรอมต์โดยอ้อมและการพยายามเจลเบรก
- URL ที่เป็นอันตราย ภาษาที่ทำให้ทุกข์ หรือเนื้อหาที่ไม่ปลอดภัย
- การรั่วไหลของข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (
PII) และข้อมูลที่ละเอียดอ่อน
หากเทมเพลตมีตัวกรองการปกป้องข้อมูลที่ละเอียดอ่อน (SDP) Model Armor จะเรียกใช้ gRPC เพิ่มเติมไปยังบริการ SDP ในระบบคลาวด์ Cloud SDP จะตรวจสอบเพย์โหลดโดยใช้เทมเพลตที่ระบุ ดำเนินการยกเลิกการระบุตัวบุคคลหรือการปกปิดข้อมูลบางส่วนตามที่ขอ และส่งผลลัพธ์ที่ผ่านการล้างข้อมูลกลับขึ้นไปในเชนเพื่อส่งต่ออย่างปลอดภัย
หากตรวจพบการละเมิดนโยบายหรือข้อมูลที่ละเอียดอ่อนซึ่งไม่ได้รับการปกปิดบางส่วนตรงกัน เกตเวย์จะบล็อกหรือปกปิดบางส่วนของเพย์โหลดที่ Edge ก่อนเข้าสู่รันไทม์ ด้วยเหตุนี้ แอปพลิเคชัน AI Agent ที่ทำงานอยู่จึงได้รับการปกป้องและจะไม่ประมวลผลเพย์โหลดที่เป็นอันตรายหรือไม่ได้รับการปกปิด
ส่วนนี้เป็นส่วนของแนวคิด... ต่อไปจะเป็นส่วนการตั้งค่า
3. ตั้งค่า
บทบาท IAM ที่ต้องมี
คุณต้องมีบทบาทต่อไปนี้เพื่อสร้างทรัพยากรใน Codelab นี้
หมวดหมู่ | บทบาท IAM ที่ต้องมี (รหัส) | คำอธิบาย |
การจัดการ API |
| เปิดใช้บริการ Google Cloud API |
เครือข่ายและเกตเวย์ |
| จัดสรร Agent Gateway |
ส่วนขยายบริการ |
| กำหนดค่าส่วนขยายการกำหนดเส้นทาง |
การรักษาความปลอดภัยของเครือข่าย |
| ติดตั้งใช้งานนโยบายการให้สิทธิ์ |
การคุ้มครองข้อมูลที่ละเอียดอ่อน |
| จัดการเทมเพลตการตรวจสอบและลบการระบุตัวตนของ SDP |
Model Armor |
| สร้างและจัดการเทมเพลตความปลอดภัย |
Agent Platform |
| ทำให้ภาระงานรันไทม์ Agent ใช้งานได้ |
Cloud Storage |
| จัดการที่เก็บข้อมูลการติดตั้งใช้งานและข้อมูลลูกค้า |
การดูแลระบบ IAM |
| เชื่อมโยงสิทธิ์ระดับโปรเจ็กต์สำหรับข้อมูลระบุตัวตนของ Agent |
บันทึกและการตรวจสอบ |
| ตรวจสอบการติดตามและบันทึกการตรวจสอบ |
หรือจะใช้บทบาทพื้นฐานแบบกว้าง เช่น roles/admin หรือบทบาทเดิม roles/owner ก็ได้
เข้าถึงโปรเจ็กต์
Codelab นี้ใช้โปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google เดียว ขั้นตอนการกำหนดค่าใช้คำสั่ง CLI ของ gcloud และคำสั่ง Shell ของ Linux
เริ่มต้นด้วยการเข้าถึงบรรทัดคำสั่งของโปรเจ็กต์ Google Cloud โดยทำดังนี้
- 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
ตั้งค่าตัวแปรสภาพแวดล้อมของ Shell
# set custom var for slug (eg, "foo") and region preference
export SLUG="foo"
export REGION="us-central1"
echo ${SLUG}
echo ${REGION}
# 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}-cta"
export AGW_URI="projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
export RE_AGENT_NAME="agent-crm"
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 DATA_BUCKET="customer-data-${PROJ_NO}"
export MCP_URL="https://storage.mtls.googleapis.com/storage/mcp"
echo ${AGW_NAME}
echo ${AGW_URI}
echo ${RE_AGENT_NAME}
echo ${RE_AGENT_ID_SET}
echo ${STAGING_BUCKET}
echo ${DATA_BUCKET}
echo ${MCP_URL}
# create local dir for config files
mkdir -p cfg
อัปเดต gcloud cli (แนะนำ)
หากเรียกใช้การติดตั้ง Google Cloud SDK ที่มีการจัดการด้วยตนเอง (เช่น นอก Cloud Shell) ให้อัปเดตคอมโพเนนต์เป็นเวอร์ชันล่าสุด
# update gcloud cli
gcloud components update
เปิดใช้บริการ 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
# enable google apis (all the rest)
gcloud services enable \
dlp.googleapis.com
ส่วนการตั้งค่าก็มีเพียงเท่านี้... ต่อไปเราจะไปที่ส่วนเกตเวย์
4. เกตเวย์
ติดตั้งใช้งานเกตเวย์ Agent ที่ Google จัดการซึ่งทำงานในโหมดไคลเอ็นต์ต่อ Agent (CLIENT_TO_AGENT) ต่างจากเกตเวย์ขาออกที่ต้องมีการเชื่อมโยงรีจิสทรีของ Agent เพื่อกำหนดเส้นทางการโทรขาออก เกตเวย์ขาเข้าจะเชื่อมโยงโดยตรงที่ระดับส่วนหน้าเพื่อทำหน้าที่เป็นจุดบังคับใช้แบบอินไลน์สำหรับพรอมต์ขาเข้าที่กำหนดเป้าหมายไปยัง Agent Runtime
แม้ว่าโดยทั่วไปนโยบายขาออกจะเริ่มต้นในโหมด DRY_RUN ที่เลเยอร์เกตเวย์ แต่การกํากับดูแลเนื้อหาขาเข้า (CONTENT_AUTHZ) จะได้รับการติดตั้งใช้งานในโหมดบังคับใช้โดยตรง การบันทึกเฉพาะการตรวจสอบแบบละเอียดหรือการบล็อกที่ใช้งานอยู่จะได้รับการควบคุมที่ต้นทางภายในเทมเพลต Model Armor แต่ละรายการแทน
สร้างเกตเวย์
# create agent gateway config file
cat > cfg/${AGW_NAME}.yaml <<EOF
name: ${AGW_NAME}
protocols:
- MCP
googleManaged:
governedAccessPath: CLIENT_TO_AGENT
EOF
# import agent gateway config file (create gateway)
gcloud network-services agent-gateways import ${AGW_NAME} \
--source="cfg/${AGW_NAME}.yaml" \
--location=${REGION}
ยืนยันเกตเวย์
# list agent gateways (in region)
gcloud network-services agent-gateways list --location=${REGION}
# show agent gateway details (verify deployment state)
gcloud network-services agent-gateways describe ${AGW_NAME} --location=${REGION}
ส่วนของเกตเวย์ก็มีเพียงเท่านี้... ต่อไปเราจะไปที่ส่วนModel Armor
5. Model Armor
เทมเพลต SDP
สร้างเทมเพลตการตรวจสอบและยกเลิกการระบุข้อมูล Sensitive Data Protection (SDP) เพื่อใช้ในเทมเพลตการตอบกลับของ Model Armor การกำหนดค่านี้จะแจ้งว่าหมายเลขประกันสังคมของสหรัฐอเมริกา (SSN) ต้องได้รับการปกปิดข้อมูล
สร้างเทมเพลตการตรวจสอบ
เทมเพลตการตรวจสอบจะระบุข้อมูลที่ละเอียดอ่อน (US_SOCIAL_SECURITY_NUMBER) ในข้อมูล
# create inspect template
curl -fsS -X POST "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/inspectTemplates" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "x-goog-user-project: ${PROJ_ID}" \
-d @- << EOF
{
"templateId": "agw-ssn-inspect-template",
"inspectTemplate": {
"displayName": "ssn inspect template",
"inspectConfig": {
"infoTypes": [
{ "name": "US_SOCIAL_SECURITY_NUMBER" }
],
"minLikelihood": "POSSIBLE"
}
}
}
EOF
สร้างเทมเพลตที่ลบการระบุตัวตน
เทมเพลตที่ลบการระบุตัวตนจะระบุการเปลี่ยนรูปแบบที่จะใช้กับหมายเลขประกันสังคมที่เทมเพลตการตรวจสอบพบ ในกรณีนี้ การแปลงคือการแทนที่ SSN ด้วยประเภทข้อมูล
# create de-identify template
curl -fsS -X POST "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/deidentifyTemplates" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "x-goog-user-project: ${PROJ_ID}" \
-d @- << EOF
{
"templateId": "agw-ssn-redaction-template",
"deidentifyTemplate": {
"displayName": "SSN Redaction Template",
"deidentifyConfig": {
"infoTypeTransformations": {
"transformations": [{
"primitiveTransformation": { "replaceWithInfoTypeConfig": {} }
}]
}
}
}
}
EOF
ยืนยันเทมเพลต SDP
# get (describe) inspect template
curl -fsS -X GET "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/inspectTemplates" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "x-goog-user-project: ${PROJ_ID}" | jq
# get (describe) de-identify template
curl -fsS -X GET "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/deidentifyTemplates" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "x-goog-user-project: ${PROJ_ID}" | jq
เทมเพลต Model Armor
ปลายทางเริ่มต้นสำหรับ Model Armor API คือปลายทางส่วนกลาง (modelarmor.googleapis.com) อย่างไรก็ตาม ทรัพยากร Model Armor สำหรับเทมเพลตและเครื่องมือประเมินจะได้รับการแปลเป็นภาษาท้องถิ่นสำหรับภูมิภาคทางภูมิศาสตร์ที่เฉพาะเจาะจง พร็อกซีปลายทางระดับภูมิภาค (REP) ของ Google Cloud หรือปลายทาง API ระดับภูมิภาคสำหรับ Model Armor คือ https://modelarmor.${LOCATION}.rep.googleapis.com/
โดยค่าเริ่มต้น เมื่อเรียกใช้ gcloud model-armor ... CLI จะพยายามส่งคำขอ API ไปยังปลายทางส่วนกลางมาตรฐาน (https://modelarmor.googleapis.com/) การลบล้างปลายทาง API ใช้เพื่อเปลี่ยนเส้นทางคำขอ HTTP ของ SDK/CLI ทั้งหมดสำหรับ Model Armor ไปยังระดับ API ของ rep.googleapis.com ในภูมิภาคโดยตรง ซึ่งเป็นที่ที่สร้าง จัดเก็บ และค้นหาเทมเพลตที่เชื่อมโยงกับสถานที่ตั้งเหล่านั้น
ตั้งค่าการลบล้าง API
# set api endpoint override per location
gcloud config set api_endpoint_overrides/modelarmor "https://modelarmor.${REGION}.rep.googleapis.com/"
ยืนยันการลบล้าง API
# view api overrides on active gcloud config
gcloud config list api_endpoint_overrides/
สร้างเทมเพลตตัวกรองคำขอ
สร้างเทมเพลตตัวกรองคำขอเพื่อบล็อกวาจาสร้างความเกลียดชัง การคุกคาม เนื้อหาเกี่ยวกับเรื่องเพศอย่างโจ่งแจ้ง และการโจมตีแบบ URI Injection ระบบจะเปิดใช้การบันทึกเพื่อบันทึกข้อมูลเหตุการณ์โดยละเอียดเกี่ยวกับการบังคับใช้นโยบาย นอกจากนี้ ยังมีการกำหนดค่ารหัสและข้อความแสดงข้อผิดพลาดที่กำหนดเองไว้ในกรณีที่ระบบบล็อกคำขอด้วย
# create model armor template (request)
gcloud beta model-armor templates create ${AGW_NAME}-modar-req-template \
--project=${PROJ_ID} \
--location=${REGION} \
--rai-settings-filters='[
{ "filterType": "HATE_SPEECH", "confidenceLevel": "MEDIUM_AND_ABOVE" },
{ "filterType": "HARASSMENT", "confidenceLevel": "MEDIUM_AND_ABOVE" },
{ "filterType": "SEXUALLY_EXPLICIT", "confidenceLevel": "MEDIUM_AND_ABOVE" }
]' \
--pi-and-jailbreak-filter-settings-enforcement=enabled \
--pi-and-jailbreak-filter-settings-confidence-level=medium-and-above \
--template-metadata-enforcement-type=INSPECT_AND_BLOCK \
--malicious-uri-filter-settings-enforcement=enabled \
--template-metadata-custom-llm-response-safety-error-code=798 \
--template-metadata-custom-llm-response-safety-error-message="ahoy! model response blocked by content filter :(" \
--template-metadata-custom-prompt-safety-error-code=799 \
--template-metadata-custom-prompt-safety-error-message="ahoy! the request was blocked by ye content filter... so rephrase the prompt and try again!" \
--template-metadata-ignore-partial-invocation-failures \
--template-metadata-log-operations \
--template-metadata-log-sanitize-operations
สร้างเทมเพลตตัวกรองคำตอบ
สร้างเทมเพลตตัวกรองการตอบกลับเพื่อบล็อกเนื้อหาเดียวกันกับเทมเพลตตัวกรองคำขอ DLP ได้รับการกำหนดค่าในขาการตอบกลับเพื่อยกเลิกการระบุ SSN สำหรับข้อความที่ส่งกลับไปยังไคลเอ็นต์จากตัวแทน
# create model armor template (response)
gcloud beta model-armor templates create ${AGW_NAME}-modar-resp-template \
--project=${PROJ_ID} \
--location=${REGION} \
--rai-settings-filters='[
{ "filterType": "HATE_SPEECH", "confidenceLevel": "MEDIUM_AND_ABOVE" },
{ "filterType": "HARASSMENT", "confidenceLevel": "MEDIUM_AND_ABOVE" },
{ "filterType": "SEXUALLY_EXPLICIT", "confidenceLevel": "MEDIUM_AND_ABOVE" }
]' \
--malicious-uri-filter-settings-enforcement=enabled \
--advanced-config-inspect-template=projects/${PROJ_ID}/locations/${REGION}/inspectTemplates/agw-ssn-inspect-template \
--advanced-config-deidentify-template=projects/${PROJ_ID}/locations/${REGION}/deidentifyTemplates/agw-ssn-redaction-template \
--template-metadata-enforcement-type=INSPECT_AND_BLOCK \
--template-metadata-custom-llm-response-safety-error-code=798 \
--template-metadata-custom-llm-response-safety-error-message="ahoy! model response blocked by content filter :(" \
--template-metadata-custom-prompt-safety-error-code=799 \
--template-metadata-custom-prompt-safety-error-message="ahoy! the request was blocked by ye content filter... so rephrase the prompt and try again!" \
--template-metadata-ignore-partial-invocation-failures \
--template-metadata-log-operations \
--template-metadata-log-sanitize-operations
ยืนยันเทมเพลต Model Armor
# list model armor templates
gcloud model-armor templates list --location=${REGION}
# show request filter template details
gcloud model-armor templates describe ${AGW_NAME}-modar-req-template --location=${REGION}
# show response filter template details
gcloud model-armor templates describe ${AGW_NAME}-modar-resp-template --location=${REGION}
สิทธิ์ IAM
Model Armor จะเรียก API เพื่อเรียกใช้บริการการปกป้องข้อมูลที่ละเอียดอ่อน (SDP) ให้สิทธิ์ IAM แก่ข้อมูลประจำตัวของบริการ Model Armor เพื่อใช้เทมเพลตการตรวจสอบและลบการระบุตัวตนของ SDP
เชื่อมโยงนโยบาย IAM สำหรับการคุ้มครองข้อมูลที่ละเอียดอ่อน
# grant dlp (sdp) user role to the model armor service identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-modelarmor.iam.gserviceaccount.com" \
--role="roles/dlp.user"
ยืนยันสิทธิ์ IAM
# show iam policy for all dlp (sdp) roles on project
gcloud projects get-iam-policy ${PROJ_ID} \
--flatten="bindings[].members" \
--filter="bindings.role:roles/dlp" \
--format="table(bindings.role:label=ROLE, bindings.members:label=PRINCIPAL_IDENTITY)"
จบส่วน Model Armor แล้ว... ต่อไปเป็นส่วนการให้สิทธิ์
6. การให้สิทธิ์
สิทธิ์ IAM
หากต้องการตรวจสอบการรับส่งข้อมูลแบบอินไลน์โดยใช้ Model Armor ตัวแทนบริการของส่วนขยายบริการ (DEP) จะต้องมีการเชื่อมโยง IAM ที่ชัดเจน (แม้ในทรัพยากรภายในโปรเจ็กต์เดียวกัน)
roles/modelarmor.calloutUserและroles/serviceusage.serviceUsageConsumer: ได้รับการให้สิทธิ์ในโปรเจ็กต์เกตเวย์เพื่ออนุญาตการเรียกใช้การตรวจสอบแบบอินไลน์roles/modelarmor.user: มอบให้ในโปรเจ็กต์เทมเพลตเพื่อให้สิทธิ์เข้าถึงและประเมินเทมเพลต Model Armor
เชื่อมโยงนโยบาย IAM สำหรับ Model Armor
# grant model armor callout user role to dep (service extension) service agent
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--role="roles/modelarmor.calloutUser"
# grant service usage consumer role to dep (service extension) service agent
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--role="roles/serviceusage.serviceUsageConsumer"
# grant model armor user role to dep (service extension) service agent
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--role="roles/modelarmor.user"
ยืนยันสิทธิ์ IAM
# show iam policy on project for dep (service extension) service agent
gcloud projects get-iam-policy ${PROJ_ID} \
--flatten="bindings[].members" \
--filter="bindings.members:serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--format="table(bindings.members:label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"
ส่วนขยายการให้สิทธิ์
การกำหนดค่าส่วนขยายการให้สิทธิ์สำหรับ Agent Gateway จะกำหนดการตั้งค่าการผสานรวมที่จะใช้กับการรับส่งข้อมูลเพย์โหลดขาเข้าและขาออก การกำหนดค่าจะกำหนดบริการประมวลผลภายนอก (service) ซึ่งอ้างอิงถึง Model Armor API ระดับภูมิภาค และลิงก์ไปยังเทมเพลตคำขอและการตอบกลับที่เฉพาะเจาะจงโดยใช้ฟิลด์ข้อมูลเมตา model_armor_settings
สร้างส่วนขยายการให้สิทธิ์
# create authz extension config file (enforced mode)
cat > cfg/${AGW_NAME}-svc-ext-authz-modar.yaml <<EOF
name: ${AGW_NAME}-svc-ext-authz-modar
service: modelarmor.${REGION}.rep.googleapis.com
metadata:
model_armor_settings: '[
{
"request_template_id": "projects/${PROJ_ID}/locations/${REGION}/templates/${AGW_NAME}-modar-req-template",
"response_template_id": "projects/${PROJ_ID}/locations/${REGION}/templates/${AGW_NAME}-modar-resp-template"
}
]'
failOpen: true
timeout: 5s
EOF
ส่วนขยายการให้สิทธิ์นำเข้า
# import authz extension file
gcloud service-extensions authz-extensions import ${AGW_NAME}-svc-ext-authz-modar \
--source=cfg/${AGW_NAME}-svc-ext-authz-modar.yaml \
--location=${REGION}
ยืนยันส่วนขยาย authz
# list authz extensions
gcloud service-extensions authz-extensions list --location=${REGION}
# show authz extension details
gcloud service-extensions authz-extensions describe ${AGW_NAME}-svc-ext-authz-modar \
--location=${REGION}
นโยบายการให้สิทธิ์
นโยบายการให้สิทธิ์ใช้โปรไฟล์นโยบายเพื่อกำหนดประเภทการประเมินที่ดำเนินการ แม้ว่าโปรไฟล์ที่อิงตามคำขอ (REQUEST_AUTHZ) จะประเมินส่วนหัว HTTP แต่การกำหนดค่านี้จะใช้โปรไฟล์การให้สิทธิ์ที่อิงตามเนื้อหา (CONTENT_AUTHZ) เพื่อเชื่อมโยงส่วนขยาย Model Armor กับเกตเวย์สำหรับการตรวจสอบเพย์โหลดอย่างละเอียด
สร้างนโยบายการให้สิทธิ์
# create authz policy config file (attach dry-run authz extension)
cat > cfg/${AGW_NAME}-authz-policy-modar.yaml <<EOF
name: ${AGW_NAME}-authz-policy-modar
target:
resources:
- "projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
policyProfile: CONTENT_AUTHZ
action: CUSTOM
customProvider:
authzExtension:
resources:
- "projects/${PROJ_ID}/locations/${REGION}/authzExtensions/${AGW_NAME}-svc-ext-authz-modar"
EOF
นำเข้านโยบายการให้สิทธิ์
# import authz policy config file (enable authz policy)
gcloud beta network-security authz-policies import ${AGW_NAME}-authz-policy-modar \
--source=cfg/${AGW_NAME}-authz-policy-modar.yaml \
--location=${REGION}
ยืนยันนโยบายการให้สิทธิ์
# list authz policies
gcloud beta network-security authz-policies list --location=${REGION}
# show authz policy details
gcloud beta network-security authz-policies describe ${AGW_NAME}-authz-policy-modar \
--location=${REGION}
ส่วนการให้สิทธิ์ก็จบลงเพียงเท่านี้... ต่อไปเราจะไปที่ส่วนฐานของโค้ด
7. ฐานของโค้ด
เราจะดูแลโค้ดของ Agent และข้อมูลไฟล์ที่ใช้สำหรับ Codelab นี้ในที่เก็บข้อมูล GitHub ของ Google Cloud จากระยะไกล ขั้นตอนต่อไปนี้จะโคลนที่เก็บในเครื่อง คัดลอกไฟล์ที่จำเป็นไปยังโครงสร้างไดเรกทอรีการทำงานปัจจุบัน แล้วล้างไฟล์ชั่วคราว
ดึงข้อมูลอาร์ติแฟกต์ระยะไกล
# clone remote repository to temp local dir
git clone https://github.com/GoogleCloudPlatform/cloud-networking-solutions.git ./temp_agw_cuj_arun_ingress_modar
# copy agent runtime and endpoint definitions to working project dir
cp -r temp_agw_cuj_arun_ingress_modar/codelabs/agw-cuj-arun-ingress-modar/agent-crm ./agent-crm
# remove temporary directory
rm -rf temp_agw_cuj_arun_ingress_modar
Agent Runtime ใช้ที่เก็บข้อมูลสำหรับการทดสอบเพื่ออัปโหลด สร้าง และติดตั้งใช้งานโค้ดของแอปพลิเคชัน Agent ที่แพ็กเกจแล้ว รวมถึงอาร์ติแฟกต์ทรัพยากร Dependency
สร้างที่เก็บข้อมูลสำหรับการทดสอบ
# create storage bucket
gcloud storage buckets create gs://${STAGING_BUCKET} --location=${REGION}
ยืนยัน Bucket ที่เก็บข้อมูล
# list storage buckets
gcloud storage buckets list --format="value(storage_url)"
ส่วนของโค้ดเบสสิ้นสุดลงแล้ว... ต่อไปคือส่วนข้อมูลลูกค้าของ GCS
ข้อมูลลูกค้า
สร้าง Bucket ของ Cloud Storage เพื่อจัดเก็บข้อมูลลูกค้า Agent จะอ่านโดยตรงโดยใช้ไลบรารีของไคลเอ็นต์ Google Cloud มาตรฐานที่เรียกปลายทาง MCP ของ Cloud Storage
สร้างที่เก็บข้อมูลสำหรับข้อมูลลูกค้า
# create storage bucket
gcloud storage buckets create gs://${DATA_BUCKET} --location=${REGION}
ยืนยัน Bucket ที่เก็บข้อมูล
# list storage buckets
gcloud storage buckets list --format="value(storage_url)"
อัปโหลดข้อมูลลูกค้า
# copy local data to bucket
gcloud storage cp -r ./agent-crm/data/* gs://${DATA_BUCKET}/
ยืนยันข้อมูลลูกค้า
# list bucket objects
gcloud storage ls gs://${DATA_BUCKET}/ --long
ส่วนข้อมูลลูกค้าของ GCS จบลงแล้ว... ต่อไปเป็นส่วนตัวแทน ADK
8. ADK Agent
agent-crm Agent ADK ที่ติดตั้งใช้งานใน Agent Runtime จะได้รับการกำหนดค่าด้วยการตั้งค่าต่อไปนี้ในสคริปต์การติดตั้งใช้งานเพื่อผสานรวมกับ Agent Platform
"identity_type": types.IdentityType.AGENT_IDENTITYเพื่อจัดสรรข้อมูลประจำตัวหลักที่อิงตาม SPIFFE ที่ไม่ซ้ำกันสำหรับตัวแทน"client_to_agent_config": {"agent_gateway": "${AGW_URI}"}เพื่อเปลี่ยนเส้นทางการเข้าชมขาเข้าทั้งหมดสำหรับ Agent ไปยังเส้นทางการประเมินและการบังคับใช้นโยบาย Agent Gateway
นอกจากนี้ ระบบยังส่ง URL ของเซิร์ฟเวอร์ mTLS MCP สำหรับเซิร์ฟเวอร์ Cloud Storage MCP และชื่อ Bucket ข้อมูลไปยัง Agent เพื่อเรียกใช้เครื่องมือ GCS MCP ผ่านการเชื่อมต่อที่ปลอดภัย
ติดตั้งใช้งาน Agent
# deploy agent
uv --directory agent-crm 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 customer data" \
--mcp-server-url="${MCP_URL}" \
--data-bucket=${DATA_BUCKET} \
--enable-telemetry \
--enable-agent-identity \
--agent-gateway-ingress=${AGW_URI} \
--allow-token-sharing
ยืนยันการติดตั้งใช้งาน
ดึงข้อมูล Vitals ของการทำให้ใช้งานได้
# fetch agent runtime (reasoning engine) resource 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 \
--project=${PROJ_ID} --location=${REGION} --filter="displayName=${RE_AGENT_NAME}" \
--format="value(attributes.'agentregistry.googleapis.com/system/RuntimeIdentity'.principal)")
echo ${RE_AGENT_IDENTITY}
ยืนยันการกำหนดค่าเกตเวย์
# show agent runtime 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
เชื่อมโยงนโยบาย IAM สำหรับข้อมูลระบุตัวตนของ Agent
# grant mcp tool user role to agent set (all agent runtime agents in project)
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_ID_SET}" \
--role="roles/mcp.toolUser"
# grant storage object viewer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/storage.objectViewer"
# grant aiplatform user role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/aiplatform.user"
# grant cloudtrace agent role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/cloudtrace.agent"
# grant cloud monitoring metric writer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/monitoring.metricWriter"
# grant cloud logging log writer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/logging.logWriter"
# grant telemetry writer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/telemetry.writer"
# grant service usage consumer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/serviceusage.serviceUsageConsumer"
# grant browser role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/browser"
ยืนยันสิทธิ์ IAM
# show agent identity roles on project
gcloud projects get-iam-policy ${PROJ_ID} \
--flatten="bindings[].members" \
--filter="bindings.members:${RE_AGENT_IDENTITY}" \
--format="table(bindings.members.sub('^.*locations/', 'principal://agents.[...]/locations/'):label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"
# show agent set roles on project
gcloud projects get-iam-policy ${PROJ_ID} \
--flatten="bindings[].members" \
--filter="bindings.members:${RE_AGENT_ID_SET}" \
--format="table(bindings.members.sub('^.*platformContainer/', 'principalSet://agents.[...]/'):label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"
ส่วนของเอเจนต์ ADK ก็มีเพียงเท่านี้... ต่อไปเราจะไปที่ส่วนทดสอบ
9. ทดสอบ
ส่งคำค้นหาจาก CLI
ทดสอบพรอมต์ที่ปลอดภัย
# post query to agent streamQuery
curl --no-buffer -s -X POST "https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:streamQuery" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "X-Goog-User-Project: ${PROJ_ID}" \
-d @- <<EOF | jq -r --unbuffered 'if type == "array" then .[] else . end | select(.content.parts != null) | .content.parts[].text // empty'
{
"input": {
"message": "what are the names of our west customers?",
"user_id": "test-user"
}
}
EOF
ควรเห็นคำตอบดังนี้ "ลูกค้าทางตะวันตกของเราคือ บ็อบ จอห์นสัน และอลิซ บราวน์"
ทดสอบทริกเกอร์การปกปิดข้อมูล
# post query to agent streamQuery
curl --no-buffer -s -X POST "https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:streamQuery" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "X-Goog-User-Project: ${PROJ_ID}" \
-d @- <<EOF | jq -r --unbuffered 'if type == "array" then .[] else . end | select(.content.parts != null) | .content.parts[].text // empty'
{
"input": {
"message": "what are ssn's for bob johnson and alice brown?",
"user_id": "test-user"
}
}
EOF
ทดสอบพรอมต์ที่ปลอดภัยอีกรายการ
# post query to agent streamQuery
curl --no-buffer -s -X POST "https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:streamQuery" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "X-Goog-User-Project: ${PROJ_ID}" \
-d @- <<EOF | jq -r --unbuffered 'if type == "array" then .[] else . end | select(.content.parts != null) | .content.parts[].text // empty'
{
"input": {
"message": "what are bob johnson's and alice brown's email addresses?",
"user_id": "test-user"
}
}
EOF
บันทึกการตรวจสอบ
ดูบันทึกการติดตาม
เมื่อเปิดใช้การวัดและส่งข้อมูลระยะไกลแล้ว Agent Runtime จะสตรีมเหตุการณ์ที่มีโครงสร้างซึ่งแสดงถึงคําค้นหาของผู้ใช้ พารามิเตอร์เครื่องมือ โฟลว์การดำเนินการ และเอาต์พุตการเลือกโมเดล
# show agent runtime (reasoning engine) telemetry and trace logs
gcloud logging read \
"logName:\"projects/${PROJ_ID}/logs/aiplatform.googleapis.com%2Freasoning_engine_stdout\" AND labels.managed-by=\"reasoning-engine\"" \
--project=${PROJ_ID} \
--limit=15 \
--format="table(
timestamp.date(format=\"%I:%M:%S %p\", tz=LOCAL):label=TIME,
trace.basename().sub('^(.{8}).*$', '\\1'):label=TRACE_ID,
labels.\"event.name\".scope(-1):label=EVENT,
jsonPayload.content.role:label=ROLE,
jsonPayload.content.parts[0].text:label=TEXT_CONTENT,
jsonPayload.content.parts[0].function_call.name:label=TOOL_CALL
)"
TRACE_ID จะจัดกลุ่มคำค้นหาของผู้ใช้ การเรียกใช้เครื่องมือระดับกลาง และการตัดสินใจของโมเดลไว้ด้วยกันในไทม์ไลน์เดียว
TIME TRACE_ID EVENT ROLE TEXT_CONTENT TOOL_CALL
HH:MM:SS PM 3070a1fd gen_ai.choice model Bob Johnson's SSN is 219-45-7895.
Alice Brown's SSN is 219-45-7896.
HH:MM:SS PM 3070a1fd gen_ai.user.message user
HH:MM:SS PM 3070a1fd gen_ai.user.message model read_customer_file
HH:MM:SS PM 3070a1fd gen_ai.user.message user
HH:MM:SS PM 3070a1fd gen_ai.user.message model read_customer_file
HH:MM:SS PM 3070a1fd gen_ai.user.message user
HH:MM:SS PM 3070a1fd gen_ai.user.message model list_customer_files
HH:MM:SS PM 3070a1fd gen_ai.user.message user what are ssn's for bob johnson and alice brown?
HH:MM:SS PM 3070a1fd gen_ai.system.message
HH:MM:SS PM 3070a1fd gen_ai.choice model read_customer_file
ดูบันทึกการล้างข้อมูลของ Model Armor
โดยบันทึกเหล่านี้จะแสดงภัยคุกคามแบบเรียลไทม์และแบบ 2 ทาง รวมถึงการล้างข้อมูลที่ Model Armor ดำเนินการเมื่อการรับส่งข้อมูลไหลผ่าน Agent Gateway
# show model armor logs
gcloud logging read \
"logName:\"projects/${PROJ_ID}/logs/modelarmor.googleapis.com%2Fsanitize_operations\"" \
--project=${PROJ_ID} \
--limit=50 \
--format="table(
timestamp.date(format=\"%I:%M:%S %p\", tz=LOCAL):label=TIME,
jsonPayload.sanitizationResult.sanitizationVerdict:label=VERDICT,
jsonPayload.sanitizationInput.byteItem.byteData.decode(base64).decode(utf-8).sub('\n', ' \\\\\\\\n ').trailoff(123):label=INPUT_DATA
)"
สังเกตรายการบันทึกสำหรับคำขอที่ได้รับการล้างข้อมูลและถูกบล็อก
TIME VERDICT INPUT_DATA
HH:MM:SS PM MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW Bob Johnson's email address is bob.j@example.com. \n Alice Brown's email address is alice.b...
HH:MM:SS PM MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW what are bob johnson's and alice brown's email addresses?
HH:MM:SS PM MODEL_ARMOR_SANITIZATION_VERDICT_BLOCK 6��
HH:MM:SS PM MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW what are ssn's for bob johnson and alice brown?
HH:MM:SS PM MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW Our west customers are: Bob Johnson and Alice Brown.
HH:MM:SS PM MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW what are the names of our west customers?
ส่วนการทดสอบก็มีเพียงเท่านี้... ต่อไปจะเป็นส่วนการทำความสะอาดข้อมูล
10. ล้างข้อมูล
# remove agent iam bindings
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/storage.objectViewer"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/aiplatform.user"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/cloudtrace.agent"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/monitoring.metricWriter"
# next
# remove more agent and agent set iam bindings
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/logging.logWriter"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/telemetry.writer"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/serviceusage.serviceUsageConsumer"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/browser"
# next
# remove rest of iam bindings
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_ID_SET}" --role="roles/mcp.toolUser"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="serviceAccount:service-${PROJ_NO}@gcp-sa-modelarmor.iam.gserviceaccount.com" --role="roles/dlp.user"
# next
# delete agent runtime (reasoning engine) 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)" \
-H "Content-Type: application/json"
# next
# delete storage
gcloud -q storage rm --recursive gs://${STAGING_BUCKET}
gcloud -q storage rm --recursive gs://${DATA_BUCKET}
# next
# delete authz resources
gcloud -q beta network-security authz-policies delete ${AGW_NAME}-authz-policy-modar --location=${REGION}
gcloud -q beta service-extensions authz-extensions delete ${AGW_NAME}-svc-ext-authz-modar --location=${REGION} --async
# next
# remove dep (service extensions) service agent iam bindings
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--role="roles/modelarmor.calloutUser"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--role="roles/serviceusage.serviceUsageConsumer"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--role="roles/modelarmor.user"
# next
# delete model armor templates
gcloud -q model-armor templates delete ${AGW_NAME}-modar-resp-template --location=${REGION}
gcloud -q model-armor templates delete ${AGW_NAME}-modar-req-template --location=${REGION}
# unset model armor api endpoint override
gcloud config unset api_endpoint_overrides/modelarmor
# next
# delete sdp (dlp) templates
curl -fsS -X DELETE "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/deidentifyTemplates/agw-ssn-redaction-template" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "x-goog-user-project: ${PROJ_ID}"
curl -fsS -X DELETE "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/inspectTemplates/agw-ssn-inspect-template" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "x-goog-user-project: ${PROJ_ID}"
# next
# delete agent gateway ingress
gcloud -q network-services agent-gateways delete ${AGW_NAME} --location=${REGION} --async
# end
ส่วนการทำความสะอาดข้อมูลก็มีเพียงเท่านี้... ต่อไปเราจะไปที่ส่วนสรุป
11. บทสรุป
ยินดีด้วย คุณทำให้ Agent Gateway ใช้งานได้และควบคุมการรับส่งข้อมูลขาเข้าไปยัง AI Agent เรียบร้อยแล้ว

Cosmopup คิดว่า Codelab นั้นยอดเยี่ยมมาก
ขั้นตอนถัดไป
- ดูฟีเจอร์ขั้นสูงและบทแนะนำได้ในเอกสารประกอบแพลตฟอร์ม Agent ของ Gemini Enterprise
- กำหนดค่าขอบเขตความปลอดภัยของ Model Armor ใน Agent Gateway เพื่อความปลอดภัยเพิ่มเติมของ AI
- ดูนโยบายการกำกับดูแลเชิงความหมายเพื่อบังคับใช้กฎทางธุรกิจและการปฏิบัติตามข้อกำหนดสำหรับคำค้นหาที่เป็นภาษาธรรมชาติ
โปรดแสดงความคิดเห็น ถามคำถาม หรือแก้ไขโดยใช้แบบฟอร์มความคิดเห็นนี้
ขอขอบคุณ