การรับ Agent Gateway ไปยัง Agent Runtime ด้วย Model Armor

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
  • เทมเพลตการคุ้มครองข้อมูลที่ละเอียดอ่อนสำหรับการลบข้อมูลระบุตัวบุคคล

figure1

รูปที่ 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 จะเชื่อมโยงนโยบายการให้สิทธิ์เกตเวย์ขาเข้ากับคำขอของไคลเอ็นต์ขาเข้าที่ขอบของเครือข่ายโดยค่าเริ่มต้น

figure2

รูปที่ 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

roles/serviceusage.serviceUsageAdmin

เปิดใช้บริการ Google Cloud API

เครือข่ายและเกตเวย์

roles/networkservices.admin

จัดสรร Agent Gateway

ส่วนขยายบริการ

roles/serviceextensions.admin

กำหนดค่าส่วนขยายการกำหนดเส้นทาง

การรักษาความปลอดภัยของเครือข่าย

roles/networksecurity.admin

ติดตั้งใช้งานนโยบายการให้สิทธิ์

การคุ้มครองข้อมูลที่ละเอียดอ่อน

roles/dlp.admin

จัดการเทมเพลตการตรวจสอบและลบการระบุตัวตนของ SDP

Model Armor

roles/modelarmor.admin

สร้างและจัดการเทมเพลตความปลอดภัย

Agent Platform

roles/aiplatform.admin

ทำให้ภาระงานรันไทม์ Agent ใช้งานได้

Cloud Storage

roles/storage.admin

จัดการที่เก็บข้อมูลการติดตั้งใช้งานและข้อมูลลูกค้า

การดูแลระบบ IAM

roles/resourcemanager.projectIamAdmin

เชื่อมโยงสิทธิ์ระดับโปรเจ็กต์สำหรับข้อมูลระบุตัวตนของ Agent

บันทึกและการตรวจสอบ

roles/logging.viewer

ตรวจสอบการติดตามและบันทึกการตรวจสอบ

หรือจะใช้บทบาทพื้นฐานแบบกว้าง เช่น roles/admin หรือบทบาทเดิม roles/owner ก็ได้

เข้าถึงโปรเจ็กต์

Codelab นี้ใช้โปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google เดียว ขั้นตอนการกำหนดค่าใช้คำสั่ง CLI ของ gcloud และคำสั่ง Shell ของ Linux

เริ่มต้นด้วยการเข้าถึงบรรทัดคำสั่งของโปรเจ็กต์ Google Cloud โดยทำดังนี้

ตั้งค่ารหัสโปรเจ็กต์

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

หากเรียกใช้การติดตั้ง 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

Cosmopup คิดว่า Codelab นั้นยอดเยี่ยมมาก

ขั้นตอนถัดไป

โปรดแสดงความคิดเห็น ถามคำถาม หรือแก้ไขโดยใช้แบบฟอร์มความคิดเห็นนี้

ขอขอบคุณ