1. บทนำ
ภาพรวม
Codelab นี้จะแนะนำวิธีเปิดใช้ Identity-Aware Proxy จาก Cloud Run และรักษาความปลอดภัยให้กับการรับส่งข้อมูลที่มุ่งไปยังบริการ Cloud Run โดยกำหนดเส้นทางการรับส่งข้อมูลไปยัง IAP เพื่อการตรวจสอบสิทธิ์ การเปิดใช้ IAP จาก Cloud Run จะช่วยให้คุณกำหนดเส้นทางการรับส่งข้อมูลได้ด้วยคลิกเดียวจากเส้นทางการรับส่งข้อมูลขาเข้าทั้งหมด ซึ่งรวมถึง URL run.app เริ่มต้นและตัวจัดสรรภาระงาน
ในโค้ดแล็บนี้ คุณจะได้ติดตั้งใช้งานบริการคอนเทนเนอร์ hello เฉพาะผู้ใช้ที่ได้รับอนุญาตให้ใช้ IAP เท่านั้นที่จะมีสิทธิ์เข้าถึงบริการ
ดูข้อจำกัดอื่นๆ ที่ทราบได้ในเอกสารประกอบ IAP ใน Cloud Run
สิ่งที่คุณจะได้เรียนรู้
- วิธีเปิดใช้ IAP แบบคลิกเดียวสำหรับ Cloud Run
- วิธีให้สิทธิ์เข้าถึงข้อมูลประจำตัวผู้ใช้แก่บริการ Cloud Run ผ่าน IAP
2. ก่อนเริ่มต้น
เปิดใช้ API
ก่อนจะเริ่มใช้ Codelab นี้ได้ ให้เปิดใช้ API ต่อไปนี้โดยเรียกใช้คำสั่ง
gcloud services enable \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
iap.googleapis.com \
run.googleapis.com \
cloudresourcemanager.googleapis.com
3. สร้างตัวแปรสภาพแวดล้อม
ตั้งค่าตัวแปรสภาพแวดล้อมที่จะใช้ตลอดทั้งโค้ดแล็บนี้
export PROJECT_ID=<YOUR_PROJECT_ID>
export REGION=<YOUR_REGION>
export SERVICE_NAME=iap-example
export SERVICE_ACCOUNT_NAME=iap-example-sa
export PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" --format="value(projectNumber)")
4. ทำให้บริการใช้งานได้โดยเปิดใช้ IAP
สร้างบัญชีบริการ (ใช้เป็นข้อมูลประจำตัวของบริการ Cloud Run) โดยเรียกใช้คำสั่งนี้
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
--display-name="IAP codelab CR identity"
ทําให้อิมเมจคอนเทนเนอร์ hello ใช้งานได้โดยเปิดใช้ IAP
gcloud beta run deploy ${SERVICE_NAME} \
--image=us-docker.pkg.dev/cloudrun/container/hello \
--region=${REGION} \
--service-account $SERVICE_ACCOUNT_NAME@${PROJECT_ID}.iam.gserviceaccount.com \
--no-allow-unauthenticated \
--iap
หมายเหตุ: หากพยายามเข้าถึงแอปพลิเคชันตอนนี้ คุณจะเห็นYou don't have accessหน้าแสดงข้อผิดพลาด ในขั้นตอนถัดไป คุณจะให้สิทธิ์เข้าถึงแก่ผู้ใช้ผ่าน IAP
5. กำหนดค่าการควบคุมการเข้าถึง IAP
สร้างตัวแทนบริการ IAP
gcloud beta services identity create --service=iap.googleapis.com --project=${PROJECT_ID}
มอบหมายบทบาทผู้เรียกใช้ Cloud Run ให้กับบัญชีบริการ IAP
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-iap.iam.gserviceaccount.com" \
--role="roles/run.invoker"
ให้สิทธิ์เข้าถึงแก่ผู้ใช้โดยอนุญาตผู้ใช้หรือกลุ่มที่เฉพาะเจาะจงผ่าน IAP
EMAIL_ADDRESS=<YOUR_EMAIL>
gcloud beta iap web add-iam-policy-binding \
--resource-type=cloud-run \
--service=${SERVICE_NAME} \
--region=${REGION} \
--member=user:${EMAIL_ADDRESS} \
--role=roles/iap.httpsResourceAccessor \
--condition=None
หมายเหตุ: คุณยังใช้ group:your-group@example.com ในพารามิเตอร์สมาชิกได้หากต้องการ
6. ทดสอบแอปพลิเคชัน
ยืนยันสิทธิ์เข้าถึงแอป
รับ URL สำหรับบริการ Cloud Run ตัวอย่าง
gcloud run services describe ${SERVICE_NAME} --region ${REGION} --format 'value(status.url)'
เปิด URL ในเบราว์เซอร์ แล้วคุณจะเห็นข้อความ "ทำงานแล้ว! ขอแสดงความยินดี คุณทำให้คอนเทนเนอร์อิมเมจใช้งานได้กับ Cloud Run เรียบร้อยแล้ว"
ยืนยันการนำสิทธิ์เข้าถึงแอปออก
คุณนำสิทธิ์เข้าถึงแอปออกได้โดยเรียกใช้คำสั่งต่อไปนี้
gcloud beta iap web remove-iam-policy-binding \
--resource-type=cloud-run \
--service=${SERVICE_NAME} \
--region=${REGION} \
--member=user:${EMAIL_ADDRESS} \
--role=roles/iap.httpsResourceAccessor
รอสักครู่ให้นโยบาย IAM มีผล ตอนนี้ลองเปิด URL ในเบราว์เซอร์ แล้วคุณจะเห็นYou don't have accessหน้าข้อผิดพลาด
7. ยินดีด้วย
ขอแสดงความยินดีที่ทำ Codelab นี้เสร็จสมบูรณ์
เราขอแนะนำให้อ่านเอกสารประกอบของ IAP ของ Cloud Run
สิ่งที่เราได้พูดถึงไปแล้ว
- วิธีเปิดใช้ IAP แบบคลิกเดียวสำหรับ Cloud Run
- วิธีให้สิทธิ์เข้าถึงข้อมูลประจำตัวผู้ใช้แก่บริการ Cloud Run ผ่าน IAP
8. ล้างข้อมูล
หากต้องการหลีกเลี่ยงการเรียกเก็บเงินโดยไม่ตั้งใจ เช่น หากบริการ Cloud Run ถูกเรียกใช้โดยไม่ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Run รายเดือนในระดับฟรี คุณสามารถลบบริการ Cloud Run iap-example ที่สร้างไว้ในขั้นตอนที่ 6 ได้
หากต้องการลบบริการ Cloud Run ให้ไปที่ Cloud Console ของ Cloud Run ที่ https://console.cloud.google.com/run แล้วลบiap-exampleบริการ
หากต้องการลบทั้งโปรเจ็กต์ ให้ไปที่จัดการทรัพยากร เลือกโปรเจ็กต์ แล้วเลือกลบ หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่พร้อมใช้งานได้โดยเรียกใช้ gcloud projects list