1. บทนำ
ภาพรวม
แล็บนี้แสดงวิธีติดตั้งใช้งานการเรียกใช้ที่ขับเคลื่อนด้วยเหตุการณ์ของเอเจนต์ ADK ที่ทําให้ใช้งานได้ใน Cloud Run อย่างปลอดภัยโดยใช้บริการ Eventarc และ Pub/Sub ส่วนใหญ่แล้วผู้ใช้หรือตัวแทนรายอื่นจะเรียกใช้ตัวแทนโดยตรง อย่างไรก็ตาม เมื่อผสานรวมเอเจนต์เข้ากับเวิร์กโฟลว์ที่อิงตามเหตุการณ์ที่มีอยู่ การโทรโดยตรงจะต้องมีการเปลี่ยนแปลงซอฟต์แวร์ที่มีอยู่ การทริกเกอร์การเรียกใช้เอเจนต์ตามเหตุการณ์ช่วยให้คุณรวมเอเจนต์เข้ากับเวิร์กโฟลว์ที่มีอยู่ได้โดยไม่ต้องเปลี่ยนแปลงเวิร์กโฟลว์
สิ่งที่คุณต้องทำ
ในแล็บนี้ คุณจะได้สร้างแอปพลิเคชันที่ใช้ ZooKeeper ซึ่งมีเอเจนต์ AI และใช้เครื่องมือ 2-3 อย่างเพื่อแสดงข้อมูลเกี่ยวกับสัตว์ในสวนสัตว์สมมติ

คุณจะทำให้แอปพลิเคชัน ZooKeeper ใช้งานได้เป็นบริการใน Cloud Run ซึ่งเป็นแพลตฟอร์มการประมวลผลแบบ Serverless ที่มีการจัดการครบวงจรซึ่งเรียกใช้คอนเทนเนอร์แบบไม่เก็บสถานะในโครงสร้างพื้นฐานของ Google จากนั้นคุณจะตั้งค่าทริกเกอร์ Eventarc ที่จะเรียกใช้ปลายทางของบริการเพื่อจัดการข้อความที่เผยแพร่ไปยังหัวข้อ Pub/Sub แบบไม่พร้อมกัน คุณจะตรวจสอบว่าการติดตั้งใช้งานเป็นไปตามแนวทางปฏิบัติแนะนำ ซึ่งรวมถึงการใช้บัญชีบริการ IAM ที่กำหนด การให้สิทธิ์เข้าถึงที่มีสิทธิ์น้อยที่สุด และการลดพื้นผิวการโจมตีที่อาจเกิดขึ้นโดยการเปิดเผยปลายทางของแอปพลิเคชัน ZooKeeper ให้ Eventarc เท่านั้น คุณจะทำได้โดยใช้ Cloud Shell และ Cloud Console คุณจะใช้ไลบรารี ADK และ Cloud SDK สำหรับ Python หากต้องการตรวจสอบลักษณะการทำงาน คุณจะต้องใช้ gcloud CLI
สิ่งที่คุณจะได้เรียนรู้
- ทำให้เอเจนต์ ADK ใช้งานได้กับ Google Cloud Run
- ผสานรวมทริกเกอร์ Eventarc กับเอเจนต์ ADK ที่ทำงานใน Google Cloud Run
- รักษาความปลอดภัยในการติดตั้งใช้งานและการผสานรวมกับ Eventarc โดยใช้หลักการให้สิทธิ์เข้าถึงน้อยที่สุดด้วยความช่วยเหลือจาก Google Cloud IAM
- เผยแพร่และดึงข้อความไปยังและจาก Pub/Sub
- ลดการเปิดเผยต่อสาธารณะของแอปพลิเคชันที่ติดตั้งใช้งานใน Google Cloud Run
สิ่งที่คุณต้องมี
- เว็บเบราว์เซอร์ Chrome †
- บัญชี Google ส่วนบุคคล ‡
- โปรเจ็กต์ Google Cloud ที่ลิงก์กับบัญชีสำหรับการเรียกเก็บเงินที่ใช้งานอยู่
โปรดทราบว่าบัญชีของคุณต้องมีสิทธิ์เข้าถึง IAM ในโปรเจ็กต์ที่อนุญาตให้คุณจัดสรรทรัพยากรและกำหนดค่าสิทธิ์เข้าถึง IAM สำหรับทรัพยากรเหล่านี้
† ประสบการณ์ของผู้ใช้ที่ใช้เบราว์เซอร์อื่นอาจแตกต่างจากที่อธิบายไว้ในห้องทดลอง
‡ การใช้บัญชีของบริษัทหรือโรงเรียนอาจถูกจำกัดในการดำเนินการบางอย่างที่อธิบายไว้ใน Lab
2. การตั้งค่าสภาพแวดล้อม
เพื่อให้มั่นใจว่าสภาพแวดล้อมการพัฒนาที่ใช้งานได้อย่างเต็มรูปแบบสำหรับแล็บ คุณจะต้องใช้ Google Cloud Shell ซึ่งติดตั้งเครื่องมือที่จำเป็นทั้งหมดไว้ล่วงหน้า ทำตามวิธีการเพื่อตั้งค่าสภาพแวดล้อม
สร้างบัญชี Google หากยังไม่มี
วิธีการตั้งค่า
- ใช้บัญชี Google เพื่อลงชื่อเข้าใช้ Google Cloud Console
- 👉 เปิดเครื่องมือเลือกโปรเจ็กต์ในแถบนำทางด้านบน (อาจระบุว่า "เลือกโปรเจ็กต์" หรือแสดงชื่อโปรเจ็กต์ที่มีอยู่) หรือคลิกแป้นพิมพ์ลัด
Ctrl+Oแล้วเลือกโปรเจ็กต์ที่มีอยู่หรือสร้างโปรเจ็กต์ใหม่ ระบบจะใช้เวลา 2-3 วินาทีในการสร้างโปรเจ็กต์ใหม่ รอจนกว่าจะพร้อม แล้วเลือกโดยใช้เครื่องมือเลือกโปรเจ็กต์
- 👉 คลิกไอคอน Cloud Shell ที่ด้านบนของคอนโซล Google Cloud (ทำเครื่องหมายด้วยสี่เหลี่ยมผืนผ้าสีแดง):

หากระบบขอ ให้คลิก **ให้สิทธิ์** ในกล่องโต้ตอบป๊อปอัปเพื่ออนุมัติให้ Cloud Shell ใช้ข้อมูลเข้าสู่ระบบของบัญชี
- 👉💻 ตรวจสอบว่าได้กำหนดค่า gcloud CLI ให้ใช้โปรเจ็กต์ที่คุณเลือก (หรือสร้าง) แล้ว เรียกใช้คำสั่งต่อไปนี้เพื่อตรวจสอบรหัสโปรเจ็กต์ที่กำหนดค่าไว้
คุณควรเห็นเอาต์พุตที่คล้ายกับต่อไปนี้gcloud config get-value project โดยที่Your active configuration is: [cloudshell-19597] [PROJECT_ID]
[PROJECT_ID]จะเป็นรหัสของโปรเจ็กต์ที่คุณเลือกหรือสร้าง👉💻 หากเห็นค่าอื่น ให้เรียกใช้คำสั่งต่อไปนี้เพื่อกำหนดค่ารหัสโปรเจ็กต์เป็นรหัสโปรเจ็กต์เริ่มต้นสำหรับคำสั่ง gcloud CLI เช่น หากรหัสโปรเจ็กต์คือ lab-project-id-example-123 คำสั่งควรเป็นดังนี้gcloud config set project [YOUR_PROJECT_ID] 🤔💻 หากจำรหัสโปรเจ็กต์ไม่ได้ ให้ใช้คำสั่งต่อไปนี้เพื่อแสดงรหัสโปรเจ็กต์ทั้งหมดที่คุณมีสิทธิ์เข้าถึง โดยเริ่มจากรหัสล่าสุดgcloud config set project lab-project-id-example-123
gcloud projects list \ --format='value(projectId)' \ --sort-by='~createTime'
- 👉💻 ตั้งค่าสถานที่สำหรับการจัดสรรทรัพยากร รวมถึงรหัสและหมายเลขของโปรเจ็กต์ในตัวแปรสภาพแวดล้อม
export LOCATION="us-central1" export PROJECT_ID=$(gcloud config get-value project) export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)") - 👉💻 เปิดใช้ Google API ที่จำเป็นสำหรับแล็บนี้
โปรดอดใจรอ คำสั่งนี้อาจใช้เวลาสักครู่ เมื่อเรียกใช้คำสั่งสำเร็จ คุณจะเห็นข้อความคล้ายกับข้อความต่อไปนี้gcloud services enable \ aiplatform.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ pubsub.googleapis.comOperation "operations/ab12345c-6e7f-8ghi-jkl9-m0e1d23456f7" finished successfully.
3. ทําให้แอปพลิเคชันสาธิต ZooKeeper ใช้งานได้
ขั้นตอนต่อไปนี้จะจัดสรรและกำหนดค่าทรัพยากร รวมถึงการติดตั้งใช้งานแอปพลิเคชัน AI ที่มีเอเจนต์
การตั้งค่าทรัพยากร Pub/Sub
คุณจะสร้างหัวข้อ Pub/Sub 2 หัวข้อ โดยบริการของบุคคลที่สามจะใช้หมายเลขหนึ่งเพื่อส่งเหตุการณ์ไปยังแอปพลิเคชัน AI แบบเอเจนต์ อีกรายการหนึ่งสำหรับแอปพลิเคชันในการเผยแพร่ผลลัพธ์ของการประมวลผลเหตุการณ์
- 👉💻 สร้างหัวข้อ Pub/Sub ที่ใช้เพื่อทริกเกอร์แอปพลิเคชัน AI แบบเอเจนต์
gcloud pubsub topics create invoke_agent export INVOKE_TOPIC_ID=$(gcloud pubsub topics describe invoke_agent --format="value(name)") - 👉💻 สร้างหัวข้อ Pub/Sub ที่แอปพลิเคชันสามารถโพสต์การตอบกลับได้
คำสั่งเหล่านี้จะสร้างการสมัครใช้บริการสำหรับหัวข้อ Pub/Sub ที่สร้างขึ้นด้วย ระบบจะใช้การสมัครใช้บริการเมื่อคุณเรียกใช้เดโมเพื่อดูผลลัพธ์gcloud pubsub topics create agent_responses export RESPONSE_TOPIC_ID=$(gcloud pubsub topics describe agent_responses --format="value(name)") gcloud pubsub subscriptions create agent_responses \ --topic=agent_responses
การตั้งค่าบัญชีบริการและนโยบาย IAM ระดับโปรเจ็กต์
คุณจะสร้างบัญชีบริการ 2 บัญชีเพื่อจำกัดขอบเขตการเข้าถึงของบริการ Cloud Run และทริกเกอร์ Eventarc ให้อยู่ในระดับต่ำสุดตามหลักการให้สิทธิ์ขั้นต่ำที่สุด บริการ Cloud Run ต้องมีสิทธิ์ในการเขียนบันทึกและร่องรอย เพื่อเรียกใช้ Gemini LLM ใน Google Vertex AI และโพสต์ผลลัพธ์ไปยังหัวข้อ Pub/Sub สิทธิ์เข้าถึงขั้นต่ำของทริกเกอร์ Eventarc ต้องมีสิทธิ์ในการเรียกใช้บริการ ZooKeeper ของ Cloud Run และเข้าถึง Pub/Sub เพื่ออ่านเหตุการณ์ที่โพสต์ วิธีการเหล่านี้จะแนะนำให้คุณให้สิทธิ์ที่จำเป็นแก่บัญชีบริการของทริกเกอร์เพื่อแอบอ้างบริการของระบบ Pub/Sub หลังจากสร้างทรัพยากรทริกเกอร์ Eventarc แล้ว คุณจะเรียกใช้คำสั่งที่ให้บทบาท roles/run.invoker เพื่อเปิดใช้บัญชีบริการของทริกเกอร์ให้เรียกใช้บริการ Cloud Run ได้
- 👉💻 สร้างบัญชีบริการสำหรับบริการ Cloud Run โดยทำดังนี้
gcloud iam service-accounts create zookeeper-cloudrun-sa export ZOOKEEPER_SA="zookeeper-cloudrun-sa@${PROJECT_ID}.iam.gserviceaccount.com" - 👉💻 ให้สิทธิ์บัญชีบริการในการเขียนบันทึกและ Trace รวมถึงใช้โมเดล Gemini ใน Vertex AI โดยทำดังนี้
gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member="serviceAccount:${ZOOKEEPER_SA}" \ --role="roles/logging.logWriter" \ --condition=None gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member="serviceAccount:${ZOOKEEPER_SA}" \ --role="roles/cloudtrace.agent" \ --condition=None gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member="serviceAccount:${ZOOKEEPER_SA}" \ --role="roles/aiplatform.user" \ --condition=None - 👉💻 ให้สิทธิ์บัญชีบริการในการโพสต์ข้อความไปยังหัวข้อ "agent_responses" โดยทำดังนี้
gcloud pubsub topics add-iam-policy-binding agent_responses \ --member="serviceAccount:${ZOOKEEPER_SA}" \ --role="roles/pubsub.publisher" - 👉💻 สร้างบัญชีบริการสำหรับทริกเกอร์ Eventarc โดยทำดังนี้
gcloud iam service-accounts create zookeeper-trigger-sa export TRIGGER_SA="zookeeper-trigger-sa@${PROJECT_ID}.iam.gserviceaccount.com" - 👉💻 มอบสิทธิ์ให้บัญชีบริการของระบบ Pub/Sub เพื่อส่งคำขอแบบพุชที่ผ่านการตรวจสอบสิทธิ์
คำสั่งนี้ไม่บังคับหากสร้างโปรเจ็กต์หลังจากวันที่ 8 เมษายน 2021gcloud iam service-accounts add-iam-policy-binding "${TRIGGER_SA}" \ --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountTokenCreator"
การทำให้แอป ZooKeeper ใช้งานได้กับ Cloud Run
คุณจะดาวน์โหลดโค้ดของแอปพลิเคชันเดโมจาก GitHub และทำให้โค้ดใช้งานได้กับ Cloud Run
- 👉💻 ดาวน์โหลดแอปพลิเคชัน Agentic AI
คำสั่งเหล่านี้ใช้การชำระเงินแบบ Sparse ของ Git สำหรับโฟลเดอร์ที่มีแอปเดโมเพื่อลดเวลาในการดาวน์โหลดmkdir zoo-keeper-lab && cd zoo-keeper-lab git init git remote add origin https://github.com/GoogleCloudPlatform/devrel-demos git config set core.sparseCheckout true echo "ai-ml/agent-labs/adk_invoke_with_pubsub/" >> .git/info/sparse-checkout git pull origin main --depth 1 cd ai-ml/agent-labs/adk_invoke_with_pubsub/ - 👉💻 ทำให้แอปพลิเคชัน AI ที่มีเอเจนต์ใช้งานได้ใน Cloud Run
gcloud run deploy zookeeper-agent \ --region="${LOCATION}" \ --source="." \ --no-allow-unauthenticated \ --quiet \ --service-account="${ZOOKEEPER_SA}" \ --set-env-vars="REPLY_TOPIC_ID=${RESPONSE_TOPIC_ID}"
กำหนดค่าทริกเกอร์ Eventarc
หลังจากเตรียมทรัพยากรทั้งหมด (หัวข้อ Pub/Sub, บัญชีบริการ IAM และบริการ Cloud Run) แล้ว ก็ถึงเวลาตั้งค่าทรัพยากรทริกเกอร์ Eventarc คุณจะสร้างทรัพยากรทริกเกอร์ Eventarc และให้สิทธิ์ในการเรียกใช้บริการ Cloud Run แก่บัญชีบริการของทริกเกอร์
- 👉💻 สร้างทริกเกอร์ Eventarc
gcloud eventarc triggers create invoke-agent \ --location="${LOCATION}" \ --destination-run-service="zookeeper-agent" \ --destination-run-path="/zookeeper" \ --destination-run-region="${LOCATION}" \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic="${INVOKE_TOPIC_ID}" \ --service-account="${TRIGGER_SA}" - 👉💻 ให้สิทธิ์แก่บัญชีบริการของทริกเกอร์เพื่อเรียกใช้บริการ Cloud Run โดยทำดังนี้
gcloud run services add-iam-policy-binding zookeeper-agent \ --region="${LOCATION}" \ --member="serviceAccount:${TRIGGER_SA}" \ --role="roles/run.invoker"
4. ตรวจสอบวิธีการทำงานของโซลูชัน
ตอนนี้ให้ตรวจสอบสิ่งที่คุณเพิ่งติดตั้งใช้งาน แผนภาพต่อไปนี้แสดงทรัพยากรทั้งหมดและวิธีที่ทรัพยากรเหล่านั้นโต้ตอบกัน คุณจะใช้ gcloud CLI เพื่อเผยแพร่ข้อความไปยังหัวข้อ "invoke_agent" ซึ่งจะจำลองเหตุการณ์ที่บริการของบุคคลที่สามบันทึกลงในบริการรับส่งข้อความเพื่อเรียกใช้แอปพลิเคชัน Agentic AI

การติดตั้งใช้งานมีความปลอดภัยตามการเข้าถึงที่มีสิทธิ์ขั้นต่ำที่สุด บริการ Cloud Run บังคับใช้การตรวจสอบสิทธิ์ (ดูอาร์กิวเมนต์ --no-allow-unauthenticated ในขั้นตอนที่ 9 ในส่วนก่อนหน้า) มีเพียงข้อมูลประจำตัวที่มีบทบาท roles/run.invoker หรือสิทธิ์ที่คล้ายกันเท่านั้นที่เรียกใช้บริการได้ และจะมอบบทบาทนี้ให้กับบัญชีบริการของทริกเกอร์ Eventarc เท่านั้น ในทำนองเดียวกัน การเข้าถึงหัวข้อ "invoke_agent" จะได้รับการจำกัดเพื่อไม่อนุญาตให้เผยแพร่เหตุการณ์โดยไม่ได้รับอนุญาต คุณยังคงเรียกใช้ Agent ของ ZooKeeper ได้โดยตรงโดยข้ามการโพสต์ไปยังหัวข้อ Pub/Sub ดูส่วนที่ 6 เพื่อดูวิธีซ่อนปลายทางของแอปพลิเคชันจากการเข้าถึงแบบสาธารณะ
เรียกใช้เวิร์กโฟลว์
คุณจะจำลองเหตุการณ์ภายนอกโดยการเผยแพร่คำถามในภาษามนุษย์ไปยัง ZooKeeper
👉💻 ใช้คำสั่งต่อไปนี้เพื่อโพสต์ข้อความไปยังหัวข้อ Pub/Sub
gcloud pubsub topics publish invoke_agent \
--message='{"user_id": "important_app", "prompt": "How many animals are in the zoo?"}'
ในความเป็นจริงแล้ว ข้อมูลกิจกรรมอาจอยู่ในรูปแบบที่อ่านยากกว่า แอปพลิเคชัน AI ที่มีเอเจนต์จะต้องมีวิธีการโดยละเอียดเกี่ยวกับรูปแบบของเหตุการณ์ ข้อมูล และสิ่งที่เอเจนต์ควรทำกับข้อมูลเหตุการณ์ เพื่อประมวลผล
คุณสามารถตรวจสอบว่าตัวแทนได้รับเหตุการณ์ ประมวลผลคำขอ และโพสต์การตอบกลับไปยังหัวข้อ "agent_responses" แล้ว หากต้องการอ่านคำตอบ คุณจะต้องใช้การสมัครใช้บริการ "agent_responses" (Codelab ใช้รหัสเดียวกันสำหรับทั้งหัวข้อและการสมัครใช้บริการสำหรับคำตอบ)
👉💻 ใช้คำสั่งต่อไปนี้เพื่ออ่านคำตอบของตัวแทนจากการสมัครใช้บริการ Pub/Sub
gcloud pubsub subscriptions pull agent_responses --auto-ack
เอาต์พุตจะพิมพ์ตารางที่มีข้อมูลเมตาของข้อความและเพย์โหลดที่มีคำตอบว่ามีสัตว์ 33 สายพันธุ์ในสวนสัตว์ ธง --auto-ack จะรับทราบข้อความโดยอัตโนมัติหลังจากที่ดึงข้อความแล้ว จึงจะไม่มีการส่งข้อความอีก
วิธีการทำงาน
ดูซอร์สโค้ดของแอปพลิเคชัน AI ที่มีเอเจนต์ได้โดยเปิด Cloud Shell Editor แล้วดูไฟล์ในโฟลเดอร์ ~/zoo-keeper-lab นอกจากนี้ คุณยังดูซอร์สโค้ดได้ใน GitHub
- main.py จะติดตั้งใช้งานเว็บแอปพลิเคชัน FastAPI พื้นฐานที่มีตัวแฮนเดิลเดียวซึ่งประมวลผลเหตุการณ์ Eventarc
- processor.py จะแยกวิเคราะห์ข้อความของเหตุการณ์เพื่อดึงรหัสผู้ใช้และคำขอ จากนั้นจะสร้างเซสชันใหม่ใน ADK Runner และเรียกใช้ตัวแทน Zookeeper เพื่อประมวลผลคำขอ ระบบจะโพสต์คำตอบจากตัวแทนไปยังหัวข้อ Pub/Sub ของ "agent_responses"
- โฟลเดอร์ย่อย zookeeper_agent จะโฮสต์ซอร์สโค้ดของตัวแทน ADK คุณเรียกใช้คำสั่ง
adk run zookeeper_agentจากโฟลเดอร์รูทของแอปพลิเคชันเพื่อโต้ตอบกับเอเจนต์โดยใช้ adk CLI ได้
วิธีแก้ปัญหา
หากคำสั่งก่อนหน้าไม่สำเร็จ โปรดอ่านข้อความแสดงข้อผิดพลาดอย่างละเอียด หากการติดตั้งใช้งานใน Cloud Run ไม่สำเร็จ ขั้นตอนแรกคือการพิจารณาว่ากระบวนการล้มเหลวในขั้นตอนใด
- หากเอาต์พุตของคำสั่ง "gcloud run deploy..." รายงานว่าการสร้างล้มเหลว ให้ดู URL ของบันทึกการสร้างในเอาต์พุตและเปิดในหน้าต่างแยกต่างหาก
- หากเอาต์พุตระบุว่า "service failed to start" หรือคล้ายกัน แสดงว่าบริการได้รับการติดตั้งใช้งาน แต่การดำเนินการไม่ผ่านการตรวจสอบสถานะ ในกรณีนี้ ให้เปิดตัวสํารวจบันทึกหรือดูย่อหน้าต่อไปนี้สําหรับคําสั่ง gcloud CLI อ่านบันทึกเพื่อหาสาเหตุหลักของความล้มเหลว
จะเกิดอะไรขึ้นหากคุณโพสต์ข้อความไปยัง Pub/Sub แต่เอเจนต์ไม่ตอบกลับหรือการตอบกลับดูแปลก
👉💻 ใช้คำสั่งต่อไปนี้เพื่ออ่านบันทึกของแอปพลิเคชันที่โพสต์จากการดำเนินการล่าสุด
gcloud logging read \
'resource.type = "cloud_run_revision" AND \
resource.labels.service_name = "zookeeper-agent" AND \
resource.labels.location = "us-central1"'
บันทึกจะติดตามการดำเนินการและรายงานข้อผิดพลาด เช่น เพย์โหลดของข้อความที่ไม่ถูกต้องหรือไม่สามารถแยกวิเคราะห์ได้ การตอบกลับที่ไม่ถูกต้องจากโมเดล Gemini การตั้งค่าสภาพแวดล้อมที่ไม่ถูกต้อง และปัญหาอื่นๆ ที่อาจเกิดขึ้น
5. เพิ่มความปลอดภัยในการติดตั้งใช้งาน
บริการ Cloud Run ที่คุณติดตั้งใช้งานจะแสดงปลายทางสาธารณะที่ทุกคนบนอินเทอร์เน็ตเรียกใช้ได้ แม้ว่าปลายทางจะได้รับการปกป้องจากการเรียกใช้ที่ไม่ได้รับอนุญาตและตรวจสอบโครงสร้างของคำขออย่างเข้มงวด แต่ก็ยังคงมีเวกเตอร์การโจมตีนี้ซึ่งอนุญาตการโจมตีแบบปฏิเสธการให้บริการและการโจมตีแบบปฏิเสธการกระเป๋าเงิน เนื่องจากเส้นทางการเรียกใช้บริการเดียวในการออกแบบปัจจุบันคือผ่านทริกเกอร์ Eventarc บริการจึงไม่จำเป็นต้องแสดงปลายทางต่ออินเทอร์เน็ต
👉💻 ปิดเวกเตอร์การโจมตีนี้โดยจำกัดการเรียกใช้บริการให้มาจากแหล่งที่มาที่จำกัดเท่านั้น ซึ่งรวมถึงทริกเกอร์ Eventarc ดังนี้
gcloud run services update zookeeper-agent --region=${LOCATION} --ingress=internal
ตอนนี้หากคุณพยายามเรียกใช้ URL ของบริการจากเครื่องในพื้นที่ คุณจะได้รับข้อผิดพลาด "404 ไม่พบหน้าเว็บ"
👉💻 ใช้ curl เพื่อส่งคำขอไปยังปลายทางของบริการ
URL=$(gcloud run services describe zookeeper-agent --region=${LOCATION} --format='value(status.url)')
curl -X POST -d '{}' "${URL}/zookeeper"
คุณจะเห็นเอาต์พุตในลักษณะนี้
<html><head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>404 Page not found</title> </head> <body text=#000000 bgcolor=#ffffff> <h1>Error: Page not found</h1> <h2>The requested URL was not found on this server.</h2> <h2></h2> </body></html>
หลังจากทำการเปลี่ยนแปลงนี้แล้ว คุณจะเรียกใช้ ZooKeeper โดยตรงโดยการเรียกใช้ปลายทางของบริการ Cloud Run ไม่ได้อีกต่อไป เว้นแต่คุณจะทำการเรียกจาก VPC ในโปรเจ็กต์เดียวกัน เครือข่าย VPC ที่ใช้ร่วมกันที่กำหนดค่าให้รีวิชันส่งการรับส่งข้อมูลไป หรือโฮสต์ที่เป็นส่วนหนึ่งของขอบเขตการควบคุมบริการ VPC
6. สรุป
ยินดีด้วย คุณตั้งค่าสภาพแวดล้อมเพื่อเรียกใช้แอปพลิเคชัน AI ที่มีเอเจนต์แบบไม่พร้อมกันซึ่งทริกเกอร์โดยเหตุการณ์ขาเข้าเรียบร้อยแล้ว
ล้างข้อมูล
โปรดทราบว่าการเก็บทรัพยากรที่คุณจัดสรรไว้จะทำให้มีการเรียกเก็บเงินในบัญชีสำหรับการเรียกเก็บเงิน หากคุณไม่มีแผนที่จะใช้สภาพแวดล้อมนี้สำหรับการทดสอบเพิ่มเติมและเพื่อหลีกเลี่ยงการเรียกเก็บเงินในอนาคต เราขอแนะนำให้คุณลบทรัพยากรที่สร้างขึ้นระหว่างการทำโค้ดแล็บนี้
ซึ่งทำได้ 2 วิธีดังนี้
วิธีที่ 1: ปิดโปรเจ็กต์
การปิด (ลบ) โปรเจ็กต์จะปล่อยทรัพยากรและข้อมูลทั้งหมดของโปรเจ็กต์ และยกเลิกการลิงก์บัญชีสำหรับการเรียกเก็บเงิน การใช้วิธีนี้จะป้องกันไม่ให้มีการเรียกเก็บเงินเพิ่มเติมสำหรับทรัพยากรหรือข้อมูลที่ใช้ในโค้ดแล็บนี้ ใช้คำสั่งต่อไปนี้เพื่อปิดโปรเจ็กต์
gcloud projects delete $(gcloud config get-value project) --quiet
วิธีที่ 2: การลบทรัพยากรในโปรเจ็กต์
การลบบริการ Cloud Run จะช่วยป้องกันการเรียกเก็บเงินเพิ่มเติมสำหรับการใช้แพลตฟอร์มแบบไร้เซิร์ฟเวอร์ โปรดทราบว่าวิธีนี้ไม่ได้นำข้อมูลทั้งหมดที่สร้างขึ้นระหว่างการทำโค้ดแล็บออกโดยสมบูรณ์ เช่น บันทึกของ Cloud Build และแอปพลิเคชัน อิมเมจคอนเทนเนอร์ ฯลฯ ให้เรียกใช้คำสั่งต่อไปนี้เพื่อลบบริการ
gcloud run services delete zookeeper-agent --region=${LOCATION}
คำจำกัดความทริกเกอร์ Eventarc และหัวข้อ Pub/Sub ไม่ก่อให้เกิดค่าใช้จ่ายในการจัดการ (ดูรายละเอียดเพิ่มเติมได้ที่ราคาของ Eventarc และราคาของ Pub/Sub)
ดูข้อมูลเพิ่มเติมเกี่ยวกับการปิดโปรเจ็กต์
ขั้นตอนถัดไป
- ดูข้อมูลเพิ่มเติมเกี่ยวกับโค้ดได้โดยดูการสาธิตที่ GitHub
- ตรวจสอบสถาปัตยกรรมที่ประสานการเข้าถึงระบบขององค์กรที่แตกต่างกัน
- ดูวิธีทริกเกอร์ Cloud Run โดยใช้ทริกเกอร์ Eventarc
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ ADK