1. บทนำ
ภาพรวม
โค้ดแล็บนี้จะอธิบายวิธีเปิดใช้ 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
คุณต้องเปิดใช้ API ต่อไปนี้โดยเรียกใช้คำสั่งต่อไปนี้ก่อนจึงจะเริ่มใช้ Codelab นี้ได้
gcloud services enable \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
iap.googleapis.com \
run.googleapis.com \
cloudresourcemanager.googleapis.com
3. สร้างตัวแปรสภาพแวดล้อม
ตั้งค่าตัวแปรสภาพแวดล้อมที่จะใช้ใน Codelab นี้
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 จนเสร็จสมบูรณ์
เราขอแนะนำให้อ่านเอกสารประกอบเกี่ยวกับ Cloud Run IAP
สิ่งที่เราได้พูดถึงไปแล้ว
- วิธีเปิดใช้ IAP แบบคลิกเดียวสําหรับ Cloud Run
- วิธีให้สิทธิ์เข้าถึงข้อมูลประจำตัวผู้ใช้ในบริการ Cloud Run ผ่าน IAP
8. ล้างข้อมูล
เพื่อหลีกเลี่ยงการเรียกเก็บเงินโดยไม่ตั้งใจ เช่น หากมีการเรียกใช้บริการ Cloud Run โดยไม่ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Run รายเดือนในแพ็กเกจฟรี คุณสามารถลบบริการ Cloud Run iap-example
ที่สร้างไว้ในขั้นตอนที่ 6
หากต้องการลบบริการ Cloud Run ให้ไปที่คอนโซล Cloud ของ Cloud Run ที่ https://console.cloud.google.com/run แล้วลบบริการ iap-example
หากต้องการลบทั้งโปรเจ็กต์ ให้ไปที่จัดการทรัพยากร เลือกโปรเจ็กต์ แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่ใช้ได้โดยการเรียกใช้ gcloud projects list