ติดตั้งใช้งาน Agent และเกตเวย์ Agent ด้วยการควบคุมบริการ VPC

1. บทนำ

Codelab นี้จะแนะนำวิธีกำหนดค่าสภาพแวดล้อม Google Cloud เพื่อตั้งค่าเอเจนต์และเกตเวย์เอเจนต์ที่มีขอบเขตการควบคุมบริการ VPC คุณสร้างขอบเขตการควบคุมบริการ VPC กำหนดค่าเครือข่ายและ DNS, ปรับใช้ Agent Gateway ด้วยการให้สิทธิ์คำขอ Identity-Aware Proxy (IAP) และทดสอบเอเจนต์อย่างปลอดภัย

สิ่งที่คุณจะสร้าง

ใน Codelab นี้ คุณจะสร้างสถาปัตยกรรม Google Cloud ที่ปลอดภัยสำหรับ Gemini Enterprise Agent Platform และ Agent Gateway ซึ่งจะทำสิ่งต่อไปนี้

  • ใช้การควบคุมบริการ VPC เพื่อช่วยรักษาความปลอดภัยให้กับทรัพยากรของโปรเจ็กต์จากการขโมยข้อมูลที่ไม่ได้รับอนุญาต
  • กำหนดค่าการเข้าถึง Google แบบส่วนตัว, Private Service Connect (PSC) และโซนส่วนตัวของ Cloud DNS สำหรับการกำหนดเส้นทาง API ส่วนตัว
  • จัดสรรเกตเวย์ของ Agent ด้วยการพร็อกซีการรับส่งข้อมูลส่วนกลาง กฎขาออก และการกำหนดค่าโปรโตคอล
  • บังคับใช้นโยบายการให้สิทธิ์คำขอของ Identity-Aware Proxy (IAP)
  • ติดตั้งใช้งานและทดสอบเอเจนต์ Agent Engine อย่างปลอดภัยผ่านการเชื่อมต่อส่วนตัว

สิ่งที่คุณจะได้เรียนรู้

  • วิธีเปิดใช้ Google Cloud API ที่จำเป็นสำหรับแพลตฟอร์มเอเจนต์และความปลอดภัย
  • วิธีกำหนดค่าขอบเขตการควบคุมบริการ VPC และกฎการเข้าถึงขาเข้า
  • วิธีตั้งค่าการเชื่อมต่อเครือข่ายส่วนตัวและระเบียน DNS ส่วนตัว
  • วิธีสร้าง Agent Gateway และเทมเพลตการเชื่อมต่อของตัวแทน
  • วิธีกำหนดค่าส่วนขยายและนโยบายการให้สิทธิ์คำขอ IAP
  • วิธีทำให้ใช้งานได้และทดสอบ Agent ของ Agent Engine อย่างปลอดภัย

สิ่งที่ต้องมี

  • ติดตั้งและอัปเดต Google Cloud CLI เป็นเวอร์ชันล่าสุดแล้ว
  • ติดตั้ง Python 3 ในเวิร์กสเตชัน
  • ติดตั้ง Git ในเวิร์กสเตชัน
  • สิทธิ์ขององค์กร Google Cloud และบัญชีสำหรับการเรียกเก็บเงินที่ใช้งานอยู่

2. ข้อกำหนดเบื้องต้น

ส่วนนี้จะอธิบายข้อกำหนดพื้นฐานของเครื่องมือบรรทัดคำสั่งและการกำหนดค่าสภาพแวดล้อมที่จำเป็นก่อนเรียกใช้สคริปต์การตั้งค่า

  1. ตรวจสอบว่าได้ติดตั้ง Google Cloud CLI และอัปเดตเป็นเวอร์ชันล่าสุดแล้ว จากนั้นให้ตรวจสอบสิทธิ์ด้วยบัญชี Google อัปเดตคอมโพเนนต์ของ Google Cloud CLI เพื่อให้แน่ใจว่าคุณจะได้รับการรองรับฟีเจอร์ล่าสุดสำหรับบริการเครือข่ายและการควบคุมบริการ VPC
gcloud components update
gcloud auth login
gcloud config set account USER_EMAIL
  1. ตรวจสอบว่าได้ติดตั้ง Python 3 แล้วเพื่อกำหนดค่าและติดตั้งใช้งานเฟรมเวิร์กของตัวแทนที่กำหนดเอง ดูวิธีการได้ที่การติดตั้งโมดูล Python
python3 --version
  1. ตรวจสอบว่าได้ติดตั้ง Git เพื่อโคลนที่เก็บตัวอย่างที่มีโค้ดการตั้งค่าและเทมเพลตการกำหนดค่า ดูวิธีการได้ที่การติดตั้ง Git

3. กำหนดค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google

การสร้างโปรเจ็กต์ที่แยกต่างหากภายในองค์กรจะช่วยให้มั่นใจได้ว่าทรัพยากร เครือข่าย และสิทธิ์ทั้งหมดที่ใช้ในโค้ดแล็บนี้จะยังคงได้รับการห่อหุ้มและจัดการได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างและการจัดการโปรเจ็กต์

เริ่มต้นโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google ใหม่ภายใต้องค์กรเพื่อโฮสต์ทรัพยากรสำหรับการตั้งค่านี้ คุณยังใช้โปรเจ็กต์ของคุณเองได้ด้วย โดยทำดังนี้

export PROJ_ID="YOUR_PROJECT_ID"
gcloud projects create ${PROJ_ID} --organization=YOUR_ORG_ID
gcloud config set project $PROJ_ID
gcloud auth application-default set-quota-project $PROJ_ID

รับข้อมูลรับรองเริ่มต้นของแอปพลิเคชันโดยการเข้าสู่ระบบ

gcloud auth application-default login

ตรวจสอบการกำหนดค่า

gcloud config list

เปิดใช้การเรียกเก็บเงิน

ลิงก์บัญชีสำหรับการเรียกเก็บเงินที่ใช้งานอยู่กับโปรเจ็กต์ที่สร้างขึ้นใหม่เพื่อเปิดใช้การใช้บริการ

การเปิดใช้การเรียกเก็บเงินเป็นข้อกำหนดเบื้องต้นสำหรับการใช้โควต้า API และการจัดสรรโครงสร้างพื้นฐานของระบบคลาวด์ของ Google เช่น เกตเวย์ของตัวแทน, Virtual Private Cloud และโหนดการประมวลผล โปรดดูรายละเอียดเกี่ยวกับการกำหนดค่าการเรียกเก็บเงินในเอกสารประกอบการเรียกเก็บเงินใน Cloud ของ Google

gcloud billing accounts list
# Copy the billing account to assign to your GCP project
gcloud billing projects link $PROJ_ID --billing-account=BILLING_ACCOUNT_ID

4. เปิดใช้บริการ

เปิดใช้ Google Cloud API ที่จำเป็นทั้งหมดสำหรับฟีเจอร์เอเจนต์ เกตเวย์เอเจนต์ เครือข่าย ความปลอดภัย และการสังเกตการณ์

การเปิดใช้งาน API จะเปิดเผยบริการระบบคลาวด์แบ็กเอนด์สำหรับการจัดการทรัพยากร ความสามารถในการสังเกตการณ์ และความสามารถด้านเครือข่ายที่จำเป็นสำหรับการเชื่อมต่อเอเจนต์ที่ปลอดภัย ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับ Service Usage API

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 \
  iap.googleapis.com \
  logging.googleapis.com \
  modelarmor.googleapis.com \
  monitoring.googleapis.com \
  networksecurity.googleapis.com \
  networkservices.googleapis.com \
  notebooks.googleapis.com \
  observability.googleapis.com \
  securitycenter.googleapis.com
gcloud services enable \
  saasservicemgmt.googleapis.com \
  storage.googleapis.com \
  telemetry.googleapis.com \
  texttospeech.googleapis.com \
  run.googleapis.com \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  dns.googleapis.com \
  accesscontextmanager.googleapis.com \
  discoveryengine.googleapis.com \
  agentidentity.googleapis.com \
  agentidentitycredentials.googleapis.com

5. ส่งออกตัวแปรสภาพแวดล้อม

กำหนดตัวแปรสภาพแวดล้อมที่นำกลับมาใช้ใหม่ได้สำหรับภูมิภาค รหัสโปรเจ็กต์ หมายเลขโปรเจ็กต์ รหัสองค์กร และข้อมูลประจำตัวผู้ใช้ การตั้งค่าตัวแปร Shell จะกำหนดมาตรฐานคำสั่งการกำหนดค่าทรัพยากรในขั้นตอนต่างๆ ซึ่งช่วยลดข้อผิดพลาดในการแทนที่ด้วยตนเองระหว่างการเรียกใช้สคริปต์

export REGION="us-central1"
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)

6. สร้างขอบเขตการควบคุมบริการ VPC

สร้างขอบเขตการควบคุมบริการ VPC เพื่อแยกทรัพยากรของโปรเจ็กต์และช่วยป้องกันการขโมยข้อมูล โปรดดูข้อมูลเพิ่มเติมที่ภาพรวมของการควบคุมบริการ VPC

ดึงนโยบายการเข้าถึง

เรียกข้อมูลรหัสของนโยบายเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบท ที่เชื่อมโยงกับองค์กร นโยบายเครื่องมือจัดการสิทธิ์เข้าถึงตามบริบทจะกำหนดขอบเขตขององค์กรที่มีการแนบและบังคับใช้ขอบเขตการควบคุมบริการ VPC

gcloud access-context-manager policies list --organization=$ORG_ID

ส่งออกนโยบายการเข้าถึง

ตั้งค่านโยบายการเข้าถึงในgcloud CLIการกำหนดค่าและรวบรวมรายการบริการที่จำกัดที่รองรับ การรวบรวมบริการที่รองรับทั้งหมดจะช่วยให้คุณสร้างชุดกฎขอบเขตที่จำกัดซึ่งป้องกันการเข้าถึงที่ไม่ได้รับอนุญาตในอุปกรณ์ปลายทางของ Google Cloud API

export ACCESS_POLICY=ACCESS_POLICY_ID
gcloud config set access_context_manager/policy $ACCESS_POLICY
SUPPORTED_SERVICES=$(gcloud access-context-manager supported-services list --format="value(name)" | paste -sd, -)

สร้างขอบเขต

กำหนดชื่อขอบเขตบริการและบังคับใช้ข้อจำกัดในบริการ Google Cloud ที่รองรับภายในโปรเจ็กต์ ขอบเขตทำหน้าที่เป็นขอบเขตที่ล้อมรอบทรัพยากรของโปรเจ็กต์ โดยจำกัดการรับส่งข้อมูลขาเข้าและขาออกโดยตรง เว้นแต่จะได้รับอนุญาตอย่างชัดเจนจากกฎขาเข้า/ขาออก

export PERIMETER_NAME="perimeter_${PROJ_NO}"
gcloud access-context-manager perimeters create accessPolicies/${ACCESS_POLICY}/servicePerimeters/${PERIMETER_NAME} \
--title="${PERIMETER_NAME}" \
--perimeter-type=regular \
--resources=projects/${PROJ_NO} \
--restricted-services=${SUPPORTED_SERVICES}

สร้างนโยบายขาเข้า

นโยบายขาเข้าจะกำหนดเงื่อนไขที่ชัดเจน เช่น ข้อมูลประจำตัวของผู้ใช้หรือระดับการเข้าถึงที่เฉพาะเจาะจง ซึ่งการเข้าชมจะมาจากภายนอกขอบเขตและได้รับอนุญาตให้เข้าถึงทรัพยากรที่จำกัดภายใน

สร้างไฟล์ YAML ที่อนุญาตการเข้าถึงที่ชัดเจนสำหรับข้อมูลประจำตัวผู้ใช้ในบริการทั้งหมด

cat > ingress-policy.yaml << EOF
- ingressFrom:
    identities:
      - user:${USER_IDENTITY}
    sources:
      - accessLevel: '*'
  ingressTo:
    operations:
      - serviceName: '*'
    resources:
      - '*'
EOF
gcloud access-context-manager perimeters update $PERIMETER_NAME --set-ingress-policies="ingress-policy.yaml"

Codelab นี้จะกำหนดค่าสภาพแวดล้อมเพื่อหลีกเลี่ยงการปฏิเสธการเข้าถึงการควบคุมบริการ VPC โดยค่าเริ่มต้น อย่างไรก็ตาม การควบคุมบริการ VPC มีบันทึกการปฏิเสธโดยละเอียดและเครื่องมืออัจฉริยะด้านนโยบายเพื่อช่วยคุณแก้ปัญหาในระหว่างการทดสอบ

การแก้ปัญหาการปฏิเสธการควบคุมบริการ VPC

ตลอดการทดสอบ โปรดดูเคล็ดลับการแก้ปัญหาต่อไปนี้

  1. เปิดใช้แดชบอร์ดการละเมิดเพื่อติดตามการละเมิดล่าสุดในสภาพแวดล้อมของคุณ
  2. ตรวจสอบบันทึกการตรวจสอบ Cloud สำหรับบันทึกการปฏิเสธการเข้าถึง (403) การควบคุมบริการ VPC
  3. วินิจฉัยการละเมิดโดยใช้รหัสที่ไม่ซ้ำกันหรือโทเค็นของการละเมิดในเครื่องมือวิเคราะห์การละเมิด
  4. ดูคำแนะนำแบบทีละขั้นตอนโดยละเอียดได้ในวิดีโอการแก้ปัญหาการควบคุมบริการ VPC

7. ตั้งค่าเครือข่าย

กำหนดค่าการตั้งค่าเครือข่าย VPC เพื่อรองรับการสื่อสารส่วนตัวกับ Google API และบริการ การกำหนดค่าเครือข่ายที่เหมาะสมช่วยให้มั่นใจได้ว่าการจราจรของข้อมูลในเครือข่ายระหว่าง Agent, เกตเวย์ และ Google Cloud API จะยังคงอยู่ในเครือข่ายภายในส่วนตัว ดูรูปแบบเครือข่ายโดยละเอียดได้ในเอกสารประกอบเกี่ยวกับ VPC ของ Google Cloud

เปิดใช้การเข้าถึง Google แบบส่วนตัว

เปิดใช้การเข้าถึง Google แบบส่วนตัวในเครือข่ายย่อยเริ่มต้นเพื่อให้อินสแตนซ์ VM และภาระงานภายในเข้าถึง Google APIs ได้โดยใช้ที่อยู่ IP ภายในแทนที่อยู่ IP สาธารณะ

export NETWORK_NAME="default"
export SUBNET_NAME="default"
gcloud compute networks subnets update $SUBNET_NAME --region=$REGION --enable-private-ip-google-access

สร้างการแนบเครือข่าย PSC

สร้างไฟล์แนบเครือข่าย Private Service Connect (PSC) สำหรับการเชื่อมต่อ Agent Gateway การเชื่อมต่อเครือข่ายมีอินเทอร์เฟซ Private Service Connect (PSC) ซึ่งช่วยให้การสื่อสารข้าม VPC ระหว่างบริการ Agent Gateway และเครือข่ายย่อยภายในของคุณเป็นไปอย่างปลอดภัย

gcloud compute network-attachments create psc-agw-${REGION} \
  --region=${REGION} \
  --subnets=${SUBNET_NAME} \
  --connection-preference=ACCEPT_AUTOMATIC

ยืนยัน

เรียกข้อมูลและตรวจสอบ URI ของทรัพยากรลิงก์ด้วยตนเองของการเชื่อมต่อเครือข่ายที่สร้างขึ้นใหม่ การตรวจสอบ URI ของทรัพยากรช่วยให้มั่นใจได้ว่าการแนบเครือข่ายได้รับการสร้างอินสแตนซ์เรียบร้อยแล้ว และสามารถอ้างอิงในเทมเพลตการเชื่อมต่อได้

export PSC_NA_URI=$(gcloud compute network-attachments describe psc-agw-${REGION} \
  --region=${REGION} \
  --format="value(selfLink.scope(v1))")
echo ${PSC_NA_URI}

สร้างโซนส่วนตัวของ Cloud DNS

กำหนดค่าโซนส่วนตัวของ Cloud DNS เพื่อกำหนดเส้นทางการรับส่งข้อมูล googleapis.com ผ่านช่วง IP ส่วนตัว โซน DNS ส่วนตัวจะลบล้างการค้นหาโดเมนสาธารณะสำหรับ googleapis.com โดยจะนำการรับส่งข้อมูลขาออกทั้งหมดไปยัง IP เสมือน (VIP) ภายในส่วนตัวภายในเครือข่าย VPC ดูรายละเอียดเพิ่มเติมได้ที่โซนส่วนตัวของ Cloud DNS

export ZONE_NAME="gapis"
gcloud dns managed-zones create ${ZONE_NAME} \
--visibility=private \
--networks=https://www.googleapis.com/compute/v1/projects/${PROJ_ID}/global/networks/${NETWORK_NAME} \
  --description="Privately reach Google APIs" \
  --dns-name=googleapis.com
gcloud dns record-sets transaction start --zone=${ZONE_NAME}

เลือกตัวเลือกโดเมนต่อไปนี้สำหรับ Private Routing (เรียกใช้เฉพาะคำสั่งในตัวเลือกที่ 1 หรือตัวเลือกที่ 2 ก่อนที่จะดำเนินการธุรกรรม) อ่านเพิ่มเติมได้ในตัวเลือกการกำหนดค่าการเข้าถึงแบบส่วนตัวของ Google

ตัวเลือกที่ 1: VIP ส่วนตัว [แนะนำ]

gcloud dns record-sets transaction add --name="*.googleapis.com." \
    --type=CNAME private.googleapis.com. \
    --zone=${ZONE_NAME} \
    --ttl=300
gcloud dns record-sets transaction add --name=private.googleapis.com. \
    --type=A 199.36.153.8 199.36.153.9 199.36.153.10 199.36.153.11 \
    --zone=${ZONE_NAME} \
    --ttl=300

ตัวเลือกที่ 2: VIP ที่ถูกจำกัด

gcloud dns record-sets transaction add --name="*.googleapis.com." \
    --type=CNAME restricted.googleapis.com. \
    --zone=${ZONE_NAME} \
    --ttl=300
gcloud dns record-sets transaction add --name=restricted.googleapis.com. \
    --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
    --zone=${ZONE_NAME} \
    --ttl=300

ยืนยันธุรกรรม DNS

gcloud dns record-sets transaction execute --zone=${ZONE_NAME}

8. สร้าง Agent Gateway

จัดสรรเกตเวย์ของ Agent และกำหนดเทมเพลตการเชื่อมต่อและกฎการกำหนดเส้นทาง Agent Gateway ทำหน้าที่เป็นพร็อกซีส่วนกลางสำหรับการจัดการการรับส่งข้อมูลของเอเจนต์ นโยบายขาออก การจัดการโปรโตคอล และ Service Discovery ที่ปลอดภัย ดูข้อมูลอ้างอิงด้านสถาปัตยกรรมได้ที่ภาพรวมของ Agent Gateway

แผนภาพสถาปัตยกรรมที่แสดงคำขอการกำหนดเส้นทางของ Agent ผ่าน Agent Gateway, การให้สิทธิ์คำขอ IAP และการแนบเครือข่าย PSC ภายในขอบเขตการควบคุมบริการ VPC

export AGW_NAME="gateway-${USER_IDENTITY}"
export AGW_CONNECTIVITY_TEMPLATE="agw-connectivity-template-${USER_IDENTITY}"

สร้างเทมเพลตการเชื่อมต่อของเอเจนต์

เทมเพลตการเชื่อมต่อจะระบุการกำหนดค่าเครือข่าย นโยบายการกำหนดเส้นทางการออก การตั้งค่าการเพียร์ DNS และ URI การแนบเครือข่ายที่เกตเวย์ต้องใช้เพื่อจัดการคำขอขาออก

cat > ${AGW_CONNECTIVITY_TEMPLATE}.yaml << EOF
name: projects/${PROJ_NO}/locations/${REGION}/agentConnectivityTemplates/${AGW_CONNECTIVITY_TEMPLATE}
accessPath: AGENT_TO_ANYWHERE
deploymentModel: CENTRALIZED
egressNetworkConfig:
  networkAttachment: ${PSC_NA_URI}
  dnsPeeringConfig:
    domain: googleapis.com.
    targetNetwork: projects/${PROJ_ID}/global/networks/${NETWORK_NAME}
  vpcEgress: ALL_TRAFFIC
EOF
gcloud network-services agent-connectivity-templates import ${AGW_CONNECTIVITY_TEMPLATE} \
    --source="${AGW_CONNECTIVITY_TEMPLATE}.yaml" \
    --location=${REGION}

สร้าง Agent Gateway

cat > ${AGW_NAME}-config.yaml << EOF
name: ${AGW_NAME}
protocols:
  - MCP
googleManaged:
  governedAccessPath: AGENT_TO_ANYWHERE
agentConnectivityTemplate: projects/${PROJ_NO}/locations/${REGION}/agentConnectivityTemplates/${AGW_CONNECTIVITY_TEMPLATE}
registries:
  - //agentregistry.googleapis.com/projects/${PROJ_NO}/locations/global
EOF
gcloud network-services agent-gateways import ${AGW_NAME} \
    --source="${AGW_NAME}-config.yaml" \
    --location=${REGION}

ยืนยันผลงาน

ตรวจสอบว่าได้ติดตั้งใช้งานและกำหนดค่าทรัพยากร Agent Gateway เรียบร้อยแล้ว การอธิบายเกตเวย์ของเอเจนต์ที่ติดตั้งใช้งานจะยืนยันว่าสถานะการทำงานของเกตเวย์นั้นใช้งานอยู่ และตรวจสอบว่าเทมเพลตการเชื่อมต่อและรีจิสทรีที่เชื่อมโยงนั้นแนบมาอย่างถูกต้อง

gcloud network-services agent-gateways describe ${AGW_NAME} \
  --location=${REGION}

9. สร้างการให้สิทธิ์ผ่าน IAP

กำหนดค่านโยบายการให้สิทธิ์คำขอของ Identity-Aware Proxy (IAP) และส่วนขยายบริการเพื่อยืนยันข้อมูลเข้าสู่ระบบของคำขอก่อนให้สิทธิ์เข้าถึง Agent Gateway ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับ IAP

แผนภาพโฟลว์ที่แสดงวิธีที่ Agent Gateway มอบสิทธิ์การให้สิทธิ์คำขอไปยัง Identity-Aware Proxy (IAP) โดยใช้นโยบาย Authz ความปลอดภัยของเครือข่ายและส่วนขยายบริการ Authz

export AUTHZ_EXT="iap-authz-extension-${USER_IDENTITY}"
export AUTHZ_POLICY="iap-authz-policy-${USER_IDENTITY}"

สร้างส่วนขยาย AuthZ

cat > ${AUTHZ_EXT}.yaml << EOF
name: ${AUTHZ_EXT}
service: iap.googleapis.com
failOpen: false
timeout: 1s
metadata:
  iapPolicyVersion: "V2"
EOF
gcloud service-extensions authz-extensions import ${AUTHZ_EXT} \
    --source=${AUTHZ_EXT}.yaml \
    --location=${REGION}

สร้างนโยบาย AuthZ และเชื่อมโยงกับ Agent Gateway

cat > ${AUTHZ_POLICY}.yaml << EOF
name: ${AUTHZ_POLICY}
target:
  resources:
    - "projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
policyProfile: REQUEST_AUTHZ
action: CUSTOM
customProvider:
  authzExtension:
    resources:
      - "projects/${PROJ_ID}/locations/${REGION}/authzExtensions/${AUTHZ_EXT}"
EOF
gcloud network-security authz-policies import ${AUTHZ_POLICY} \
    --source=${AUTHZ_POLICY}.yaml \
    --location=${REGION}

Codelab นี้จะช่วยให้คุณไม่ถูกปฏิเสธการเข้าถึง IAP โดยค่าเริ่มต้น อย่างไรก็ตาม Agent Gateway มีความสามารถในการสังเกตโดยละเอียดสำหรับการปฏิเสธการเข้าถึงเพื่อช่วยในการทดสอบ

แก้ปัญหาและตรวจสอบการปฏิเสธการให้สิทธิ์ IAP

  1. เปิดใช้ Log Analytics ใน _Default logging bucket โดยทำดังนี้
gcloud logging buckets update _Default --location=global --enable-analytics --async
  1. เปิดแดชบอร์ดการสังเกตการณ์เกตเวย์ของตัวแทนโดยทำดังนี้
  2. ในคอนโซล Google Cloud ให้ไปที่หน้า Agent Gateway
  3. คลิกชื่อเกตเวย์ (เช่น gateway-xyz)
  4. คลิกแท็บObservability
  5. ตรวจสอบแดชบอร์ดการให้สิทธิ์ล้มเหลวและการปฏิเสธ 403

10. สร้าง Agent เครื่องมือ Agent

สร้างที่เก็บข้อมูล Staging

สร้าง Bucket ของ Cloud Storage ในภูมิภาคเป้าหมายเพื่อจัดเก็บอาร์ติแฟกต์การจัดเตรียมชั่วคราว การอ้างอิง และการกำหนดค่าการติดตั้งใช้งานในระหว่างการเริ่มต้นรันไทม์

#Staging bucket name needs to be globally unique
export STAGING_BUCKET="agent-temp-bucket-${PROJ_NO}-${USER_IDENTITY}"
gcloud storage buckets create gs://${STAGING_BUCKET} --location=${REGION}

เปิดใช้งานสภาพแวดล้อมเสมือนของ Python

python3 -m venv .venv
source .venv/bin/activate

ดาวน์โหลดรหัสเอเจนต์

git clone https://github.com/gpratikab/gcp-vpcsc-agent.git
cd gcp-vpcsc-agent

ติดตั้งการอ้างอิง

python3 -m pip install --upgrade -r requirements.txt

มอบบทบาท IAM ให้กับตัวแทนบริการ Agent Platform

gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="serviceAccount:service-${PROJ_NO}@gcp-sa-aiplatform.iam.gserviceaccount.com" \
  --role="roles/agentgateway.serviceAgent"
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="serviceAccount:service-${PROJ_NO}@gcp-sa-aiplatform.iam.gserviceaccount.com" \
  --role="roles/ml.serviceAgent"
gcloud projects add-iam-policy-binding ${PROJ_ID} \
  --member="serviceAccount:service-${PROJ_NO}@gcp-sa-aiplatform.iam.gserviceaccount.com" \
  --role="roles/networkservices.viewer"

ติดตั้งใช้งาน Agent

python3 deploy_gcp_agent.py create

ส่งออกข้อมูลประจำตัวของ Agent ที่พิมพ์ในเอาต์พุตของคำสั่งก่อนหน้าเป็นตัวแปรสภาพแวดล้อม

#Paste identity of your Agent, it will be printed as the output of the previous command
export AGENT_IDENTITY="principal://PRINCIPAL_ID"
echo $AGENT_IDENTITY

11. อนุญาตการออกของ Agent ผ่านเกตเวย์

อนุญาตให้เอเจนต์ที่สร้างขึ้นใหม่ส่งการรับส่งข้อมูลขาออกจาก googleapis.com

หมายเหตุ: คุณสามารถเพิ่มอุปกรณ์ปลายทางในรายการที่อนุญาตได้โดยใช้ความสามารถในการสังเกตเกตเวย์ของเอเจนต์ Codelab นี้อนุญาตให้เข้าถึง API ทั้งหมดเพื่อความสะดวก

การกำหนดค่ากฎนโยบายขาออก IAM ที่ชัดเจนจะให้สิทธิ์แก่ Agent ในการกำหนดเส้นทางการเรียก API ผ่าน Agent Gateway และพร็อกซี IAP เพื่อเข้าถึงบริการ Google Cloud ภายนอก

สร้างนโยบาย IAM

cat > agent-access-rules.json << EOF
{
  "conditions": {
    "iap.googleapis.com": {
      "description": "Allow access to agent",
      "expression": "(destination.agent_registry.location == 'global') || (destination.unregistered.host.endsWith('googleapis.com'))",
      "title": "agenttogapis"
    }
  },
  "description": "agenttogapis",
  "effect": "ALLOW",
  "excludedPrincipals": [],
  "operation": {
    "excludedPermissions": [],
    "permissions": [
      "iap.googleapis.com/resources.egressViaIAP"
    ]
  },
  "principals": [
    "${AGENT_IDENTITY}"
  ]
}
EOF

อัปเดตนโยบายการเข้าถึง

ตรวจสอบว่าคุณมีนโยบายการเข้าถึงอยู่แล้วหรือไม่ โดยทำดังนี้

gcloud iam access-policies list --project=${PROJ_ID} --location=global

ตั้งชื่อนโยบายการเข้าถึง

export IAM_ACCESS_POLICY="agent-access-policy"

วิธีสร้างนโยบายใหม่

gcloud iam access-policies create ${IAM_ACCESS_POLICY} \
  --details-rules=agent-access-rules.json \
  --project=${PROJ_ID} \
  --location=global

หรือจะอัปเดตนโยบายที่มีอยู่ก็ได้ โดยทำดังนี้

gcloud iam access-policies update ${IAM_ACCESS_POLICY} \
  --add-details-rules=agent-access-rules.json \
  --project=${PROJ_ID} \
  --location=global

12. ทดสอบ Agent

การตรวจสอบการทำงานของเอเจนต์ในคอนโซล Google Cloud จะยืนยันว่าการสื่อสารแบบครบวงจร นโยบาย IAM และขอบเขตการควบคุมบริการ VPC ทำงานได้อย่างถูกต้อง ตอนนี้คุณพร้อมที่จะทดสอบเอเจนต์แล้ว โดยทำดังนี้

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าการติดตั้งใช้งานเอเจนต์
  2. เลือกเอเจนต์ที่ติดตั้งใช้งาน (gcp_agent_...)
  3. เปิดแท็บสนามเด็กเล่น
  4. ในช่องพรอมต์ ให้ป้อน List storage buckets in the current project.
  5. ยืนยันว่า Agent แสดงรายการที่เก็บข้อมูลผ่านเกตเวย์ Agent ส่วนตัวได้สำเร็จ
  6. ตรวจสอบว่า Agent ไม่สามารถดึงข้อมูลที่เก็บข้อมูลจากโปรเจ็กต์อื่นได้เนื่องจากถูกปฏิเสธการเข้าถึง คุณสามารถตรวจสอบการปฏิเสธได้ในบันทึกการตรวจสอบระบบคลาวด์หรือแดชบอร์ดการละเมิดการควบคุมบริการ VPC

13. ล้างข้อมูล

หากไม่ต้องการให้ระบบเรียกเก็บเงินจากบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ใน Codelab นี้ ให้ลบโปรเจ็กต์ที่คุณสร้างขึ้นโดยทำดังนี้

gcloud projects delete ${PROJ_ID}

14. ขอแสดงความยินดี

ยินดีด้วย คุณกำหนดค่า Agent และ Agent Gateway ภายในขอบเขตการควบคุมบริการ VPC ที่ปลอดภัยใน Google Cloud เรียบร้อยแล้ว

สิ่งต่อไปที่ควรทำ

  • สำรวจกฎขาเข้าและขาออกแบบละเอียดในการควบคุมบริการ VPC
  • กำหนดค่าการเข้าถึงและนโยบายเชิงความหมายโดยใช้ Agent Gateway
  • ผสานรวม Model Armor เพื่อการกรองความปลอดภัยขั้นสูง

เอกสารอ้างอิง