1. ภาพรวม
ห้องทดลองนี้จะแสดงวิธีจํากัดการเข้าถึงบริการ Cloud Run และอนุญาตเฉพาะคําขอจากภาระงานที่ทํางานในองค์กรหรือใน VPC ของโปรเจ็กต์ การควบคุมการเข้าถึงมี 2 ชั้นที่คุณใช้ได้ ได้แก่ การตั้งค่า Ingress และนโยบาย Identity and Access Management (IAM)
การตั้งค่าข้อมูลขาเข้า
การตั้งค่า Ingress ช่วยให้คุณกรองคำขอตามต้นทางเครือข่าย (ภายในหรือภายนอก) ได้ โดยค่าเริ่มต้น ระบบจะอนุญาตให้คำขอทั้งหมดผ่านได้ รวมถึงคำขอจากอินเทอร์เน็ตสาธารณะ
นโยบาย IAM
นโยบาย IAM ช่วยให้คุณกรองคำขอตามข้อมูลระบุตัวตนของผู้ส่งได้ และมักใช้เพื่อตรวจสอบสิทธิ์คำขอแบบบริการต่อบริการ
ในบทแนะนำนี้ คุณจะได้เรียนรู้วิธีและกรณีที่ควรใช้การตั้งค่า Ingress
โฮสต์ในองค์กรเชื่อมต่อผ่าน VPC
ในบทแนะนำนี้ เราจะจําลองเวิร์กโหลดในระบบขององค์กร หากต้องการเชื่อมต่อโฮสต์ในองค์กรกับ Cloud Run คุณจะต้องกำหนดค่า การเข้าถึง Google แบบส่วนตัวสำหรับโฮสต์ในองค์กร ซึ่งรวมถึงการตั้งค่าเกตเวย์ Cloud VPN ในเครือข่าย VPC ดังที่แสดงด้านล่าง
การจําลองภาระงานในองค์กรโดยใช้เซิร์ฟเวอร์การข้ามใน VPC
ในบทแนะนำนี้ คุณจะได้จำลองการส่งคำขอจากโฮสต์ในองค์กรโดยส่งคำขอจากเครื่องเสมือน Compute Engine ใน VPC ดังที่แสดงที่นี่
เครื่องเสมือน Compute Engine ที่คุณจะใช้เป็นเซิร์ฟเวอร์การข้ามเครือข่ายมีต้นทางเครือข่ายเดียวกับเกตเวย์ Cloud VPN คุณจึงใช้เซิร์ฟเวอร์นี้เพื่อจำลองการส่งคำขอจากเวิร์กโหลดในสถานที่ได้
2. การตั้งค่าและข้อกําหนด
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะต้องไม่ซ้ำกันสำหรับโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) คอนโซล Cloud จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นจะเป็นอะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID
) หากไม่ชอบรหัสที่สร้างขึ้น คุณก็สร้างรหัสอื่นแบบสุ่มได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าฟีเจอร์นี้พร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงชื่อหลังจากขั้นตอนนี้ไม่ได้ และชื่อดังกล่าวจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้ไม่น่าจะเสียค่าใช้จ่ายมากนัก หากต้องการปิดใช้ทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินหลังจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างไว้หรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
การตั้งค่าสภาพแวดล้อม
- ตั้งค่าตัวแปรสภาพแวดล้อมเป็นรหัสโปรเจ็กต์เพื่อใช้ในคําสั่งภายหลัง
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
- เปิดใช้ API ที่จําเป็นต่อการดำเนินการในแล็บนี้
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
compute.googleapis.com \
artifactregistry.googleapis.com
- โคลนที่เก็บแอปตัวอย่างและไปที่ไดเรกทอรี
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
cd cymbal-eats/partner-registration-service
- ตั้งค่าภูมิภาคและโซนเริ่มต้นสำหรับ Compute Engine และ Cloud Run
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}
3. ติดตั้งใช้งานบริการ
ก่อนอื่น คุณจะติดตั้งใช้งานบริการและปล่อยให้เข้าถึงแบบสาธารณะ หลังจากยืนยันแล้วว่าคุณสามารถส่งคำขอจากเบราว์เซอร์ได้ เราจะล็อกบริการและอนุญาตเฉพาะคำขอจากแหล่งที่มาของเครือข่ายภายในเท่านั้น
เมื่อเรียกใช้คําสั่งต่อไปนี้ ให้ทําตามวิธีการต่อไปนี้
- ตำแหน่งซอร์สโค้ด (...): ยืนยันว่าคุณอยู่ในไดเรกทอรี partner-registration-service แล้วกด Enter เพื่อยอมรับค่าเริ่มต้น
- ชื่อบริการ (partner-registration-service): กด Enter เพื่อยอมรับค่าเริ่มต้น
- อนุญาตการเรียกใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์ไปยัง [partner-registration-service] (y/n) Y
gcloud run deploy
เมื่อคำสั่งนี้เสร็จสมบูรณ์ ระบบจะแสดง URL ของบริการ Cloud Run เอาต์พุตจะมีลักษณะคล้ายกับข้อมูลต่อไปนี้
Service [partner-registration-service] revision [partner-registration-service-00001-haz] has been deployed and is serving 100 percent of traffic. Service URL: https://partner-registration-service-ssssssssss-uc.a.run.app
เปิด URL ของบริการในเบราว์เซอร์ คุณควรเห็นเอาต์พุตนี้
Partner registration service: RUNNING
ตั้งค่าบริการให้อนุญาตเฉพาะคำขอภายใน
ตอนนี้คุณจะใช้การตั้งค่า Ingress ของบริการ Cloud Run เพื่ออนุญาตเฉพาะคำขอจากแหล่งที่มาภายในเท่านั้น แหล่งที่มาภายในรวมถึงทรัพยากรในเครือข่าย VPC ที่อยู่ในโปรเจ็กต์เดียวกัน (หรือขอบเขตการควบคุมบริการ VPC) กับบริการ Cloud Run ซึ่งเหมาะอย่างยิ่งสำหรับกรณีการใช้งานของเรา
นอกจากนี้ คำขอจากผลิตภัณฑ์อื่นๆ ของ Google Cloud จะถือว่าเป็นคำขอภายใน แม้ว่าจะไม่ได้อยู่ใน VPC ก็ตาม ผลิตภัณฑ์ดังกล่าวรวมถึง Pub/Sub และเวิร์กโฟลว์
คำขอจากแหล่งที่มาเหล่านี้จะอยู่ในเครือข่ายของ Google แม้ว่าจะเข้าถึงบริการของคุณที่ URL run.app และมีการห้ามการเข้าถึงแบบสาธารณะก็ตาม
อัปเดตบริการให้อนุญาตเฉพาะคำขอภายใน โดยทำดังนี้
gcloud run services update partner-registration-service --ingress=internal
หากเปิด URL ของบริการอีกครั้ง ระบบจะแสดงข้อความว่า "ข้อผิดพลาด: Forbidden - Access is forbidden"
เนื่องจากเบราว์เซอร์ส่งคำขอจากต้นทางเครือข่ายภายนอก ไม่ใช่จากต้นทางภายในไปยังโปรเจ็กต์ Google Cloud เหตุการณ์นี้จึงเกิดขึ้น บริการของคุณจึงปลอดภัยยิ่งขึ้น
4. สร้างเครื่องเสมือน Compute Engine เป็นเซิร์ฟเวอร์การข้าม
ขั้นตอนถัดไปคือการจําลองคําขอจากเซิร์ฟเวอร์ในสถานที่ผ่านเกตเวย์ Cloud VPN โดยสร้างอินสแตนซ์ Compute Engine ใน VPC เพื่อใช้เป็นเซิร์ฟเวอร์ Jump ดังนี้
gcloud compute instances create jump-server --scopes=https://www.googleapis.com/auth/cloud-platform
เอาต์พุตของคําสั่งนี้ควรมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS jump-server us-central1-a n1-standard-1 10.128.0.10 34.170.108.8 RUNNING
ส่งคําขอจากอินสแตนซ์ Compute Engine ไปยังบริการ
ตอนนี้คุณเปิดเทอร์มินัลบนเครื่องเสมือนและส่งคำขอจากเครื่องในเครือข่าย VPC ได้โดยตรง
หากคำสั่งต่อไปนี้แจ้งให้คุณตั้งค่า SSH ใน Cloud Shell ให้ทำตามวิธีการ
gcloud compute ssh jump-server
รับ URL ของบริการ Cloud Run ด้วยคำสั่งนี้
gcloud run services describe partner-registration-service --region us-central1
บรรทัดแรกๆ ของเอาต์พุตควรมีลักษณะดังนี้
✔ Service partner-registration-service in region us-central1 URL: https://partner-registration-service-ssssssssss-uc.a.run.app Ingress: internal
จากนั้นให้คัดลอก URL และส่งคำขอจากอินสแตนซ์ Compute Engine โดยใช้ curl คำขอนี้ควรสำเร็จ เนื่องจากอินสแตนซ์ VM ทำงานในเครือข่าย VPC ของโปรเจ็กต์ ซึ่งเป็นแหล่งที่มาภายใน
export SERVICE_URL=https://
curl ${SERVICE_URL}
เอาต์พุตควรระบุว่า
Partner registration service: RUNNING
5. แล้วการควบคุมการเข้าถึงตาม IAM ล่ะ
ห้องทดลองนี้แสดงวิธีและกรณีที่ควรใช้การตั้งค่า Ingress การตั้งค่า Ingress เป็นขั้นตอนแรกที่ดีหากคุณเชื่อมต่อภาระงานในระบบกับ Cloud Run
การควบคุมการเข้าถึงที่อิงตาม IAM ต้องใช้ความพยายามมากกว่าในการทำให้ใช้งานได้ โดยเฉพาะอย่างยิ่งหากคุณเรียกใช้จากโฮสต์ในองค์กร
- IAM กําหนดให้คุณจัดการข้อมูลเข้าสู่ระบบของบัญชีบริการที่มีอายุการใช้งานยาวนานในโฮสต์
- IAM กำหนดให้ต้องเปลี่ยนแปลงโค้ดเพื่อลงนามในคำขอโดยใช้ข้อมูลเข้าสู่ระบบบัญชีบริการ
Google ขอแนะนำให้ใช้แนวทางแบบหลายชั้นในการควบคุมการเข้าถึง การใช้การตั้งค่า Ingress เพื่อจำกัดการเข้าถึงเฉพาะโฮสต์ภายในถือเป็นก้าวแรกที่ดี แต่อย่าหยุดแค่นั้น
6. ยินดีด้วย
ยินดีด้วย คุณทำ Codelab เสร็จแล้ว
ขั้นตอนต่อไปที่ทำได้
สำรวจ Codelab อื่นๆ ของ Cymbal Eats
- การทริกเกอร์เวิร์กโฟลว์ระบบคลาวด์ด้วย Eventarc
- การเรียกให้ประมวลผลเหตุการณ์จาก Cloud Storage
- การเชื่อมต่อกับ Private CloudSQL จาก Cloud Run
- การเชื่อมต่อกับฐานข้อมูลที่จัดการครบวงจรจาก Cloud Run
- แอปพลิเคชันแบบเซิร์ฟเวอร์เสมือนที่ปลอดภัยด้วย Identity-Aware Proxy (IAP)
- การเรียกใช้งาน Cloud Run ด้วย Cloud Scheduler
- ทำให้ใช้งานได้กับ Cloud Run อย่างปลอดภัย
- การเชื่อมต่อกับ AlloyDB ส่วนตัวจาก GKE Autopilot
ล้างข้อมูล
โปรดลบโปรเจ็กต์ที่มีทรัพยากรดังกล่าวหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการเพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้
การลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการหยุดการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างสำหรับบทแนะนำ
ข้อมูลอ้างอิงที่เป็นประโยชน์
ต่อไปนี้คือแหล่งข้อมูลเพิ่มเติมที่จะช่วยให้คุณทราบข้อมูลเพิ่มเติมเกี่ยวกับการควบคุมการเข้าถึง 2 ชั้นใน Cloud Run