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

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