1. ภาพรวม
ในแล็บนี้ คุณจะติดตั้งใช้งานพอร์ทัลสำหรับพนักงานที่ช่วยให้พนักงานดู อัปเดต และลบคำสั่งซื้อจากแอป Cymbal Eats ได้ โดยคุณจะใช้ Identity Aware Proxy (IAP) เพื่อรักษาความปลอดภัยในการเข้าถึงพอร์ทัลโดยไม่ต้องใช้เครือข่ายส่วนตัวเสมือน (VPN) IAP ช่วยให้การใช้โมเดลการเข้าถึงแบบ Zero Trust เป็นเรื่องง่ายและใช้เวลาน้อยกว่า VPN สำหรับผู้ปฏิบัติงานระยะไกลทั้งในสภาพแวดล้อมภายในองค์กรและในสภาพแวดล้อมระบบคลาวด์ โดยมีจุดควบคุมเดียวสำหรับการจัดการการเข้าถึงแอป

Identity-Aware Proxy คืออะไร
Identity-Aware Proxy (IAP) เป็นบริการของ Google Cloud ที่สกัดกั้นคำขอที่ส่งไปยังแอปพลิเคชันของคุณ โดยจะตรวจสอบสิทธิ์ผู้ใช้ที่ส่งคำขอโดยใช้บริการข้อมูลประจำตัวของ Google และอนุญาตให้คำขอผ่านได้ก็ต่อเมื่อมาจากผู้ใช้ที่มีสิทธิ์เข้าถึงแอปพลิเคชันเท่านั้น นอกจากนี้ ยังสามารถแก้ไขส่วนหัวของคำขอให้มีข้อมูลเกี่ยวกับผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์ได้ด้วย
สิ่งที่คุณจะได้เรียนรู้
- วิธีกำหนดค่ากลุ่มปลายทางเครือข่ายแบบ Serverless (NEG)
- วิธีกำหนดค่าตัวจัดสรรภาระงาน
- วิธีเปิดใช้ IAP เพื่อจำกัดการเข้าถึง
- วิธีจำกัดการเข้าถึงโดยใช้ IAP
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณก็สร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณจะลองใช้ชื่อของคุณเองเพื่อดูว่าพร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
การตั้งค่าสภาพแวดล้อม
- สร้างตัวแปรสภาพแวดล้อมที่เกี่ยวข้องกับโปรเจ็กต์และทรัพยากร
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export ORDER_SERVICE_URL=order-service
export INVENTORY_SERVICE_URL=inventory-service
export MENU_SERVICE_URL=menu-service
- เปิดใช้ API ของบริการ IAP และ Cloud Resource Manager
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- โคลนที่เก็บแอปตัวอย่างแล้วไปที่ไดเรกทอรี
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- ทำให้พอร์ทัลพนักงานใช้งานได้โดยใช้สคริปต์การตั้งค่า รอให้สคริปต์ทำงานเสร็จก่อนทำขั้นตอนถัดไป
./setup.sh
ตัวอย่างเอาต์พุต
... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- คลิกลิงก์ URL ของบริการ

3. การกำหนดค่ากลุ่มปลายทางเครือข่ายแบบ Serverless (NEG)
คุณจะสร้างกลุ่มปลายทางของเครือข่ายแบบ Serverless( NEG แบบ Serverless) สำหรับบริการ Cloud Run ของ UI สำหรับพนักงาน NEG แบบ Serverless ช่วยให้คุณใช้แอป Google Cloud แบบไร้เซิร์ฟเวอร์กับการจัดสรรภาระงาน HTTP(S) ภายนอกได้

- สร้างกลุ่มปลายทางของเครือข่ายสำหรับบริการ UI ของพนักงาน
gcloud compute network-endpoint-groups create employee-ui-iap-neg \
--project $PROJECT_ID \
--region=$REGION \
--network-endpoint-type=serverless \
--cloud-run-service=employee-ui-service
ตัวอย่างเอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/regions/us-east1/networkEndpointGroups/employee-ui-iap-neg]. Created network endpoint group [employee-ui-iap-neg].
สร้างบริการแบ็กเอนด์และเพิ่ม NEG แบบ Serverless
บริการแบ็กเอนด์จะกำหนดวิธีที่ Cloud Load Balancing กระจายการรับส่งข้อมูล การกำหนดค่าบริการแบ็กเอนด์ประกอบด้วยชุดค่าต่างๆ เช่น โปรโตคอลที่ใช้ในการเชื่อมต่อกับแบ็กเอนด์ การตั้งค่าการกระจายและเซสชันต่างๆ การตรวจสอบประสิทธิภาพการทำงาน และการหมดเวลา การตั้งค่าเหล่านี้ช่วยให้คุณควบคุมลักษณะการทำงานของตัวจัดสรรภาระงานได้อย่างละเอียด
- สร้างบริการแบ็กเอนด์
gcloud compute backend-services create employee-ui-iap-backend \
--global
ตัวอย่างเอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend]. NAME: employee-ui-iap-backend BACKENDS: PROTOCOL: HTTP
- เพิ่ม NEG แบบไร้เซิร์ฟเวอร์เป็นแบ็กเอนด์ให้กับบริการแบ็กเอนด์
gcloud compute backend-services add-backend employee-ui-iap-backend \
--global \
--network-endpoint-group=employee-ui-iap-neg \
--network-endpoint-group-region=$REGION
ตัวอย่างเอาต์พุต
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- สร้างแผนที่ URL เพื่อกำหนดเส้นทางคำขอขาเข้าไปยังบริการแบ็กเอนด์
gcloud compute url-maps create employee-ui-iap-url-map \
--default-service employee-ui-iap-backend
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/urlMaps/employee-ui-iap-url-map]. NAME: employee-ui-iap-url-map DEFAULT_SERVICE: backendServices/employee-ui-iap-backend
4. การกำหนดค่าคอมโพเนนต์ของตัวจัดสรรภาระงาน
แผนภาพต่อไปนี้แสดงให้เห็นว่าตัวจัดสรรภาระงานใช้แบ็กเอนด์ NEG แบบ Serverless เพื่อนำคำขอไปยังบริการ Cloud Run แบบ Serverless

สำรองที่อยู่ IP แบบคงที่
- สำรองที่อยู่ IPv4 แบบคงที่และจัดเก็บโดเมน
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
ตัวอย่างเอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- จัดเก็บโดเมน nip.io
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
สร้างทรัพยากรใบรับรอง SSL ที่จัดการโดย Google
- สร้างทรัพยากรใบรับรอง SSL ที่จัดการโดย Google
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
ตัวอย่างเอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/sslCertificates/employee-ui-iap-cert]. NAME: employee-ui-iap-cert TYPE: MANAGED CREATION_TIMESTAMP: 2022-04-18T06:39:37.474-07:00 EXPIRE_TIME: MANAGED_STATUS: PROVISIONING 34.102.234.98.nip.io: PROVISIONING
สร้างพร็อกซี HTTPS เป้าหมาย
- สร้างพร็อกซี HTTPS เป้าหมายเพื่อกำหนดเส้นทางคำขอไปยังแผนที่ URL
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
--ssl-certificates employee-ui-iap-cert \
--url-map employee-ui-iap-url-map
ตัวอย่างเอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/targetHttpsProxies/employee-ui-iap-http-proxy]. NAME: employee-ui-iap-http-proxy SSL_CERTIFICATES: employee-ui-iap-cert URL_MAP: employee-ui-iap-url-map CERTIFICATE_MAP:
กำหนดค่ากฎการส่งต่อ
- สร้างกฎการส่งต่อเพื่อกำหนดเส้นทางคำขอขาเข้าไปยังพร็อกซี
gcloud compute forwarding-rules create employee-ui-iap-forwarding-rule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=employee-ui-iap-ip \
--global \
--ports=443 \
--target-https-proxy employee-ui-iap-http-proxy
ตัวอย่างเอาต์พุต
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
การจำกัดการรับส่งข้อมูลขาเข้าไปยังบริการ Cloud Run
จำกัดการรับส่งข้อมูลขาเข้าให้ยอมรับเฉพาะคำขอภายในและคำขอที่มาจากการจัดสรรภาระงาน HTTP(S)

- อัปเดตบริการเพื่ออนุญาตการรับส่งข้อมูลขาเข้าจากคำขอภายในและคำขอผ่านตัวจัดสรรภาระงาน HTTP(S) เท่านั้น
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
ตัวอย่างเอาต์พุต
OK Deploying... Done. OK Creating Revision... OK Routing traffic... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- คลิกลิงก์ URL ของบริการ

ตอนนี้สิทธิ์เข้าถึง URL ของบริการ Cloud Run จะแสดงเป็น "ห้าม"
5. การเปิดใช้ Cloud Identity-Aware Proxy (IAP) ใน Load Balancer
IAP ช่วยให้คุณสร้างเลเยอร์การให้สิทธิ์ส่วนกลางสำหรับแอปพลิเคชันที่เข้าถึงผ่าน HTTPS คุณสามารถใช้โมเดลการควบคุมการเข้าถึงระดับแอปพลิเคชันแทนไฟร์วอลล์ระดับเครือข่ายได้

การกำหนดค่าหน้าจอขอความยินยอม OAuth
แบรนด์คือหน้าจอคำยินยอม OAuth ที่มีข้อมูลการสร้างแบรนด์สำหรับผู้ใช้ แบรนด์อาจจำกัดไว้สำหรับผู้ใช้ภายในหรือผู้ใช้สาธารณะ แบรนด์ภายในช่วยให้สมาชิกในองค์กร Google Workspace เดียวกันกับโปรเจ็กต์เข้าถึงโฟลว์ OAuth ได้ แบรนด์สาธารณะทำให้ทุกคนที่มีสิทธิ์เข้าถึงอินเทอร์เน็ตเข้าถึงขั้นตอน OAuth ได้
- สร้างแบรนด์
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
gcloud alpha iap oauth-brands create \
--application_title="Cymbal Eats" \
--support_email=$USER_EMAIL
ตัวอย่างเอาต์พุต
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
การสร้างไคลเอ็นต์ OAuth ของ IAP
- สร้างไคลเอ็นต์โดยใช้ชื่อแบรนด์จากขั้นตอนก่อนหน้า
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
ตัวอย่างเอาต์พุต
Created [462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com]. displayName: cymbal-eats-employee-ui name: projects/462858740426/brands/462858740426/identityAwareProxyClients/462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com secret: [secret-removed]
- จัดเก็บชื่อ รหัส และรหัสลับของไคลเอ็นต์
export CLIENT_NAME=$(gcloud alpha iap oauth-clients list \
projects/$PROJECT_NUMBER/brands/$PROJECT_NUMBER --format='value(name)' \
--filter="displayName:cymbal-eats-employee-ui")
export CLIENT_ID=${CLIENT_NAME##*/}
export CLIENT_SECRET=$(gcloud alpha iap oauth-clients describe $CLIENT_NAME --format='value(secret)')
- ใน Cloud Console ให้เลือกโปรเจ็กต์จากเมนูแบบเลื่อนลงเพื่อเลือกโปรเจ็กต์
- ไปที่หน้าจอขอความยินยอม OAuth ใน Cloud Console

- คลิก "ทําให้เป็นภายนอก" ในส่วนประเภทผู้ใช้
- เลือก "การทดสอบ" เป็นสถานะการเผยแพร่

- คลิกยืนยัน
6. การจำกัดการเข้าถึงด้วย IAP
จำกัดการเข้าถึงบริการแบ็กเอนด์โดยใช้ IAP จากนั้นยืนยันว่าแอปพลิเคชันเข้าถึงไม่ได้
- เปิดใช้ IAP ในบริการแบ็กเอนด์
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
ยืนยันการกำหนดค่า IAP
- ตรวจสอบว่าใบรับรอง SSL ใช้งานได้
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- รับ URL ของบริการ
echo https://$DOMAIN
ตัวอย่างเอาต์พุต
https://34.102.234.98.nip.io
- คลิก URL ของบริการเพื่อเปิดพอร์ทัลพนักงาน

- เข้าสู่ระบบโดยใช้ข้อมูลเข้าสู่ระบบของห้องทดลอง

- ปิดเบราว์เซอร์
ให้สิทธิ์ผู้ใช้เข้าถึงพอร์ทัลพนักงาน
- เพิ่มการเชื่อมโยงนโยบาย IAM สำหรับบทบาทของ
'roles/iap.httpsResourceAccessor'สำหรับผู้ใช้ที่สร้างไว้ในขั้นตอนก่อนหน้า
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
ตัวอย่างเอาต์พุต
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
การทดสอบการเข้าถึงบริการ
ยืนยันว่าได้รับสิทธิ์เข้าถึงพอร์ทัลพนักงานแล้ว
- รับ URL ของบริการ
echo https://$DOMAIN
ตัวอย่างเอาต์พุต
https://34.102.234.98.nip.io
- คลิก URL ของบริการเพื่อเปิดพอร์ทัลพนักงาน

ตอนนี้คุณควรมีสิทธิ์เข้าถึงพอร์ทัลพนักงานแล้ว
(ไม่บังคับ) ทำให้การขึ้นต่อกันทั้งหมดใช้งานได้ การทำให้ Microservice เหล่านี้ใช้งานได้อาจใช้เวลาประมาณ 20 นาที
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. ยินดีด้วย
ยินดีด้วย คุณทำ Codelab เสร็จแล้ว
ขั้นตอนต่อไปที่ทำได้
ดู Codelab อื่นๆ ของ Cymbal Eats
- ทริกเกอร์เวิร์กโฟลว์ระบบคลาวด์ด้วย Eventarc
- การทริกเกอร์การประมวลผลเหตุการณ์จาก Cloud Storage
- การเชื่อมต่อกับ Private Cloud SQL จาก Cloud Run
- การเชื่อมต่อกับฐานข้อมูลที่มีการจัดการครบวงจรจาก Cloud Run
- ทริกเกอร์งาน Cloud Run ด้วย Cloud Scheduler
- การทำให้ใช้งานได้กับ Cloud Run อย่างปลอดภัย
- การรักษาความปลอดภัยให้การรับส่งข้อมูลขาเข้าของ Cloud Run
- การเชื่อมต่อกับ AlloyDB ส่วนตัวจาก GKE Autopilot
ล้างข้อมูล
โปรดลบโปรเจ็กต์ที่มีทรัพยากรหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการเพื่อหลีกเลี่ยงการเรียกเก็บเงินจากบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้
การลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างขึ้นสำหรับบทแนะนำ