วิธีใช้ Identity-Aware Proxy (IAP) แบบคลิกเดียวกับ Cloud Run

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