การรักษาความปลอดภัยการรับส่งข้อมูลขาเข้าของ Cloud Run

1. ภาพรวม

ห้องทดลองนี้จะแสดงวิธีจำกัดการเข้าถึงบริการ Cloud Run และอนุญาตเฉพาะคำขอจากภาระงานที่ทำงานภายในองค์กรหรือใน VPC ของโปรเจ็กต์เท่านั้น การควบคุมการเข้าถึงที่คุณใช้ได้มีอยู่ 2 ชั้น ได้แก่ การตั้งค่าข้อมูลขาเข้าและนโยบาย Identity and Access Management (IAM)

5aed47d10595c878.png

การตั้งค่าข้อมูลขาเข้า

การตั้งค่าข้อมูลขาเข้าช่วยให้คุณกรองคำขอตามต้นทางเครือข่าย (ภายในหรือภายนอก) ได้ โดยค่าเริ่มต้น คำขอทั้งหมดจะได้รับอนุญาตให้ส่งผ่านได้ รวมถึงคำขอจากอินเทอร์เน็ตสาธารณะ

นโยบาย IAM

นโยบาย IAM ให้คุณกรองคำขอตามข้อมูลประจำตัวของผู้ส่ง และมักจะใช้เพื่อตรวจสอบสิทธิ์คำขอแบบบริการต่อบริการ

ในห้องทดลองนี้ คุณจะได้ดูวิธีและเวลาในการใช้การตั้งค่าข้อมูลขาเข้า

โฮสต์ภายในองค์กรเชื่อมต่อผ่าน VPC

ในห้องทดลองนี้ เราจะจำลองภาระงานภายในองค์กร หากต้องการเชื่อมต่อโฮสต์ภายในองค์กรกับ Cloud Run คุณจะต้องกำหนดค่า การเข้าถึง Google แบบส่วนตัวสำหรับโฮสต์ภายในองค์กร ซึ่งรวมถึงการตั้งค่าเกตเวย์ Cloud VPN ในเครือข่าย VPC ดังที่แสดงด้านล่าง

31611f6a2f12fd0c.png

การจำลองภาระงานภายในองค์กรโดยใช้เซิร์ฟเวอร์การข้ามใน VPC

ในห้องทดลองนี้ คุณจะได้จำลองการส่งคำขอจากโฮสต์ภายในองค์กรด้วยการส่งคำขอจากเครื่องเสมือน Compute Engine ใน VPC ดังที่แสดงที่นี่

aebf22740c7a84f0.png

เครื่องเสมือน Compute Engine ที่คุณจะใช้เป็นเซิร์ฟเวอร์ข้ามมีต้นทางเครือข่ายเดียวกับเกตเวย์ VPN ระบบคลาวด์ ซึ่งเป็นเหตุผลที่คุณใช้วิธีนี้เพื่อจำลองคำขอจากภาระงานภายในองค์กรได้

2. การตั้งค่าและข้อกำหนด

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

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่อีกครั้ง หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น PROJECT_ID) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้บริการหรือไม่ และไม่สามารถเปลี่ยนแปลงได้หลังจากขั้นตอนนี้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าเหล่านี้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

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

  1. ตั้งค่าตัวแปรสภาพแวดล้อมเป็นรหัสโปรเจ็กต์เพื่อใช้ในคำสั่งในภายหลัง ดังนี้
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
  1. เปิดใช้ API ที่ต้องใช้เพื่อเรียกใช้ห้องทดลองนี้
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. โคลนที่เก็บแอปตัวอย่างและไปยังไดเรกทอรี
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service
  1. ตั้งค่าภูมิภาคและโซนเริ่มต้นสำหรับ 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

ล้างข้อมูล

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

กำลังลบโปรเจ็กต์

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

ข้อมูลอ้างอิงที่มีประโยชน์

แหล่งข้อมูลเพิ่มเติมที่จะช่วยให้คุณดูข้อมูลเพิ่มเติมเกี่ยวกับการควบคุมการเข้าถึง 2 ชั้นใน Cloud Run มีดังนี้