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 ของระบบคลาวด์ การใช้งาน 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
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 Serverless ที่มีการจัดสรรภาระงาน 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 แบบ Serverless เป็นแบ็กเอนด์ไปยังบริการแบ็กเอนด์
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) บนตัวจัดสรรภาระงาน
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
การสร้างไคลเอ็นต์ IAP OAuth
- สร้างลูกค้าโดยใช้ชื่อแบรนด์จากขั้นตอนก่อนหน้า
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 ของบริการเพื่อเปิดพอร์ทัลของพนักงาน
ตอนนี้คุณควรมีสิทธิ์เข้าถึงพอร์ทัลของพนักงานแล้ว
(ไม่บังคับ) ทำให้ทรัพยากร Dependency ทั้งหมดใช้งานได้ โดยการทำให้ 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 CloudSQL จาก Cloud Run
- การเชื่อมต่อกับฐานข้อมูลที่มีการจัดการครบวงจรจาก Cloud Run
- การทริกเกอร์งาน Cloud Run ด้วย Cloud Scheduler
- การทำให้ Cloud Run ใช้งานได้อย่างปลอดภัย
- การรักษาความปลอดภัยการรับส่งข้อมูลขาเข้าของ Cloud Run
- การเชื่อมต่อกับ AlloyDB แบบส่วนตัวจาก GKE Autopilot
ล้างข้อมูล
เพื่อหลีกเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้ โปรดลบโปรเจ็กต์ที่มีทรัพยากรดังกล่าวหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการ
กำลังลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างไว้สำหรับบทแนะนำ