1. ภาพรวม
ห้องทดลองนี้จะแสดงวิธีจำกัดการเข้าถึงบริการ Cloud Run และอนุญาตเฉพาะคำขอจากภาระงานที่ทำงานภายในองค์กรหรือใน VPC ของโปรเจ็กต์เท่านั้น การควบคุมการเข้าถึงที่คุณใช้ได้มีอยู่ 2 ชั้น ได้แก่ การตั้งค่าข้อมูลขาเข้าและนโยบาย Identity and Access Management (IAM)
การตั้งค่าข้อมูลขาเข้า
การตั้งค่าข้อมูลขาเข้าช่วยให้คุณกรองคำขอตามต้นทางเครือข่าย (ภายในหรือภายนอก) ได้ โดยค่าเริ่มต้น คำขอทั้งหมดจะได้รับอนุญาตให้ส่งผ่านได้ รวมถึงคำขอจากอินเทอร์เน็ตสาธารณะ
นโยบาย IAM
นโยบาย IAM ให้คุณกรองคำขอตามข้อมูลประจำตัวของผู้ส่ง และมักจะใช้เพื่อตรวจสอบสิทธิ์คำขอแบบบริการต่อบริการ
ในห้องทดลองนี้ คุณจะได้ดูวิธีและเวลาในการใช้การตั้งค่าข้อมูลขาเข้า
โฮสต์ภายในองค์กรเชื่อมต่อผ่าน VPC
ในห้องทดลองนี้ เราจะจำลองภาระงานภายในองค์กร หากต้องการเชื่อมต่อโฮสต์ภายในองค์กรกับ Cloud Run คุณจะต้องกำหนดค่า การเข้าถึง Google แบบส่วนตัวสำหรับโฮสต์ภายในองค์กร ซึ่งรวมถึงการตั้งค่าเกตเวย์ Cloud VPN ในเครือข่าย VPC ดังที่แสดงด้านล่าง
การจำลองภาระงานภายในองค์กรโดยใช้เซิร์ฟเวอร์การข้ามใน VPC
ในห้องทดลองนี้ คุณจะได้จำลองการส่งคำขอจากโฮสต์ภายในองค์กรด้วยการส่งคำขอจากเครื่องเสมือน Compute Engine ใน VPC ดังที่แสดงที่นี่
เครื่องเสมือน Compute Engine ที่คุณจะใช้เป็นเซิร์ฟเวอร์ข้ามมีต้นทางเครือข่ายเดียวกับเกตเวย์ VPN ระบบคลาวด์ ซึ่งเป็นเหตุผลที่คุณใช้วิธีนี้เพื่อจำลองคำขอจากภาระงานภายในองค์กรได้
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่อีกครั้ง หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID
) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้บริการหรือไม่ และไม่สามารถเปลี่ยนแปลงได้หลังจากขั้นตอนนี้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าเหล่านี้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ 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. ทำให้บริการใช้งานได้
ขั้นแรกคุณจะต้องทำให้บริการใช้งานได้และเปิดให้บุคคลทั่วไปสามารถเข้าถึงได้ หลังจากที่คุณยืนยันแล้วว่าคุณสามารถส่งคำขอจากเบราว์เซอร์ของคุณ เราจะล็อกบริการและอนุญาตเฉพาะคำขอจากแหล่งที่มาของเครือข่ายภายในเท่านั้น
โดยเมื่อเรียกใช้คำสั่งต่อไปนี้แล้ว ให้ทำตามวิธีการต่อไปนี้
- ตำแหน่งซอร์สโค้ด (...): ยืนยันว่าคุณอยู่ในไดเรกทอรีบริการการลงทะเบียนพาร์ทเนอร์ แล้วกด 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
ตั้งค่าบริการเพื่ออนุญาตเฉพาะคำขอภายใน
ตอนนี้คุณจะใช้การตั้งค่าขาเข้าของบริการ 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 ของบริการอีกครั้ง จะมีข้อความว่า "Error: Forbidden - Access is forbidden"
เนื่องจากเบราว์เซอร์จะส่งคำขอจากต้นทางของเครือข่ายภายนอก ไม่ใช่จากต้นทางภายในไปยังโปรเจ็กต์ Google Cloud ดังนั้นสิ่งนี้จะเกิดขึ้นตามที่คุณคาดหวังไว้ ตอนนี้บริการของคุณมีความปลอดภัยมากขึ้นแล้ว
4. สร้างเครื่องเสมือน Compute Engine เป็นเซิร์ฟเวอร์การข้าม
ขั้นตอนถัดไปคือการจำลองคำขอจากเซิร์ฟเวอร์ภายในองค์กรผ่านเกตเวย์ Cloud VPN ด้วยการสร้างอินสแตนซ์ Compute Engine ใน VPC เพื่อใช้เป็นเซิร์ฟเวอร์ข้าม
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
ผลลัพธ์ 2-3 บรรทัดแรกควรมีลักษณะดังนี้
✔ 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 ล่ะ
ห้องทดลองนี้แสดงวิธีและเวลาในการใช้การตั้งค่าข้อมูลขาเข้า การตั้งค่าข้อมูลขาเข้าเป็นขั้นตอนแรกที่ดีหากคุณกำลังเชื่อมต่อภาระงานภายในองค์กรกับ Cloud Run
การควบคุมการเข้าถึงตาม IAM ต้องใช้ความพยายามมากขึ้น โดยเฉพาะอย่างยิ่งหากคุณเรียกใช้จากโฮสต์ภายในองค์กร
- IAM กำหนดให้คุณต้องจัดการข้อมูลเข้าสู่ระบบของบัญชีบริการที่ใช้ได้นานบนโฮสต์
- IAM กำหนดให้มีการเปลี่ยนแปลงโค้ดในคำขอเซ็นชื่อโดยใช้ข้อมูลเข้าสู่ระบบของบัญชีบริการ
Google ขอแนะนำแนวทางการควบคุมการเข้าถึงแบบหลายชั้น การตั้งค่าข้อมูลขาเข้าเพื่อจำกัดการเข้าถึงเฉพาะโฮสต์ภายในเป็นขั้นตอนแรกที่ควรทำ แต่อย่าเพิ่งหยุด
6. ยินดีด้วย
ยินดีด้วย คุณศึกษา Codelab จบแล้ว
ขั้นตอนต่อไปที่ทำได้
สำรวจ Codelab อื่นๆ ของ Cymbal Eats
- การทริกเกอร์เวิร์กโฟลว์ระบบคลาวด์ด้วย Eventarc
- การทริกเกอร์การประมวลผลเหตุการณ์จาก Cloud Storage
- การเชื่อมต่อกับ Private CloudSQL จาก Cloud Run
- การเชื่อมต่อกับฐานข้อมูลที่มีการจัดการครบวงจรจาก Cloud Run
- แอปพลิเคชัน Serverless ที่ปลอดภัยด้วย Identity Aware Proxy (IAP)
- การทริกเกอร์งาน Cloud Run ด้วย Cloud Scheduler
- การทำให้ Cloud Run ใช้งานได้อย่างปลอดภัย
- การเชื่อมต่อกับ AlloyDB แบบส่วนตัวจาก GKE Autopilot
ล้างข้อมูล
เพื่อหลีกเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้ โปรดลบโปรเจ็กต์ที่มีทรัพยากรดังกล่าวหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการ
กำลังลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างไว้สำหรับบทแนะนำ
ข้อมูลอ้างอิงที่มีประโยชน์
แหล่งข้อมูลเพิ่มเติมที่จะช่วยให้คุณดูข้อมูลเพิ่มเติมเกี่ยวกับการควบคุมการเข้าถึง 2 ชั้นใน Cloud Run มีดังนี้