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

1. ภาพรวม

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

5aed47d10595c878.png

การตั้งค่าขาเข้า

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

นโยบาย IAM

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

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

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

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

31611f6a2f12fd0c.png

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

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

aebf22740c7a84f0.png

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

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 ของ Cloud การทำตาม 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. ติดตั้งใช้งานบริการ

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

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

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

ตั้งค่าบริการให้ยอมรับเฉพาะคำขอภายใน

ตอนนี้คุณจะใช้การตั้งค่าขาเข้าของบริการ 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 ของบริการอีกครั้ง ระบบจะแสดงข้อความ "ข้อผิดพลาด: ห้าม - ห้ามเข้าถึง"

เนื่องจากเบราว์เซอร์ส่งคำขอจากต้นทางเครือข่ายภายนอก ไม่ใช่จากต้นทางภายในของโปรเจ็กต์ 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

บรรทัดแรกๆ ของเอาต์พุตควรมีลักษณะดังนี้

✔ 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 เป็นขั้นตอนแรกที่ดีหากคุณเชื่อมต่อภาระงานในองค์กรกับ Cloud Run

การควบคุมการเข้าถึงที่อิงตาม IAM ต้องใช้ความพยายามในการติดตั้งใช้งานมากขึ้น โดยเฉพาะอย่างยิ่งหากคุณเรียกใช้จากโฮสต์ในองค์กร

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

Google ขอแนะนำแนวทางการควบคุมการเข้าถึงแบบหลายชั้น การใช้การตั้งค่าขาเข้าเพื่อจำกัดการเข้าถึงเฉพาะโฮสต์ภายในถือเป็นขั้นตอนแรกที่ดี แต่ก็อย่าหยุดอยู่แค่นั้น

6. ยินดีด้วย

ยินดีด้วย คุณทำ Codelab เสร็จแล้ว

ขั้นตอนต่อไปที่ทำได้

ดู Codelab อื่นๆ ของ Cymbal Eats

ล้างข้อมูล

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

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

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

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

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