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 จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นจะเป็นอะไร ในโค้ดแล็บส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID
) หากไม่ชอบรหัสที่สร้างขึ้น คุณก็สร้างรหัสอื่นแบบสุ่มได้ หรือจะลองใช้อุปกรณ์ของคุณเองเพื่อดูว่าฟีเจอร์นี้พร้อมใช้งานหรือไม่ก็ได้ คุณจะเปลี่ยนแปลงชื่อหลังจากขั้นตอนนี้ไม่ได้ และชื่อจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - โปรดทราบว่ามีค่าที่ 3 ซึ่งเป็นหมายเลขโปรเจ็กต์ที่ API บางรายการใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 รายการนี้ได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตามโค้ดแล็บนี้ไม่น่าจะเสียค่าใช้จ่ายมากนัก หากต้องการปิดใช้ทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินหลังจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างไว้หรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ 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
- เปิดใช้ IAP และ Cloud Resource Manager Service API
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 ช่วยให้คุณใช้แอป 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 แบบ 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) ใน 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 ของบริการเพื่อเปิดพอร์ทัลพนักงาน
ตอนนี้คุณควรมีสิทธิ์เข้าถึงพอร์ทัลพนักงานแล้ว
(ไม่บังคับ) ติดตั้งใช้งาน 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 สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้
การลบโปรเจ็กต์
วิธีที่ง่ายที่สุดในการหยุดการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างสำหรับบทแนะนำ