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

1. ภาพรวม

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

5aed47d10595c878.png

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

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

นโยบาย IAM

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

ในบทแนะนำนี้ คุณจะได้เรียนรู้วิธีและกรณีที่ควรใช้การตั้งค่า Ingress

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

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

31611f6a2f12fd0c.png

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

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

aebf22740c7a84f0.png

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

เมื่อเรียกใช้คําสั่งต่อไปนี้ ให้ทําตามวิธีการต่อไปนี้

  • ตำแหน่งซอร์สโค้ด (...): ยืนยันว่าคุณอยู่ในไดเรกทอรี 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

ล้างข้อมูล

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

การลบโปรเจ็กต์

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

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

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