1. Tổng quan
Trong phòng thí nghiệm này, bạn sẽ triển khai cổng thông tin cho nhân viên để cho phép nhân viên xem, cập nhật và xoá đơn đặt hàng khỏi ứng dụng Cymbal Eats. Bạn sẽ sử dụng Proxy nhận dạng nhận dạng (IAP) để bảo mật truy cập cổng mà không cần sử dụng Mạng riêng ảo (VPN). IAP giúp đơn giản hoá việc triển khai mô hình truy cập theo nguyên tắc không tin tưởng bất cứ điều gì (zero-trust) và mất ít thời gian hơn so với VPN dành cho nhân viên làm việc từ xa cả tại cơ sở hạ tầng riêng và môi trường đám mây thông qua một điểm kiểm soát duy nhất để quản lý quyền truy cập vào ứng dụng.
Proxy nhận dạng là gì?
Proxy nhận biết danh tính (IAP) là một dịch vụ của Google Cloud giúp chặn các yêu cầu được gửi đến ứng dụng của bạn, xác thực người dùng đưa ra yêu cầu bằng Dịch vụ nhận dạng của Google và chỉ cho phép các yêu cầu đó nếu yêu cầu đến từ người dùng được ủy quyền truy cập vào ứng dụng. Ngoài ra, chương trình này có thể sửa đổi tiêu đề của yêu cầu để bao gồm thông tin về người dùng đã xác thực.
Kiến thức bạn sẽ học được
- Cách định cấu hình Nhóm thiết bị đầu cuối mạng không máy chủ (NEG)
- Cách định cấu hình trình cân bằng tải
- Cách bật IAP để hạn chế quyền truy cập
- Cách hạn chế quyền truy cập bằng giao dịch mua hàng trong ứng dụng
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tiến độ riêng
- Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
- Mã dự án là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (mã này thường được xác định là
PROJECT_ID
). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử phương pháp của riêng mình và xem có được cung cấp hay không. Bạn không thể thay đổi thông tin này sau bước này và thông báo đó sẽ vẫn tồn tại trong thời gian của dự án. - Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số dự án) mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
- Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạn đã tạo hoặc xoá toàn bộ dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Thiết lập môi trường
- Tạo các biến môi trường liên quan đến dự án và tài nguyên
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
- Bật API dịch vụ Trình quản lý tài nguyên trên đám mây và IAP
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- Sao chép kho lưu trữ ứng dụng mẫu và chuyển đến thư mục đó
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- Triển khai cổng thông tin Nhân viên bằng cách sử dụng tập lệnh thiết lập. Hãy đợi tập lệnh hoàn tất trước khi chuyển sang bước tiếp theo
./setup.sh
Kết quả ví dụ
... 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
- Nhấp vào đường liên kết URL dịch vụ
3. Định cấu hình Nhóm thiết bị đầu cuối mạng không máy chủ (NEG)
Bạn sẽ tạo một Nhóm thiết bị đầu cuối mạng không máy chủ( Serverless NEG) cho dịch vụ UI Cloud Run của nhân viên. Các NEG không máy chủ cho phép bạn sử dụng các ứng dụng Google Cloud không máy chủ bằng Cân bằng tải HTTP(S) bên ngoài.
- Tạo một nhóm thiết bị đầu cuối mạng cho dịch vụ giao diện người dùng của nhân viên.
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
Kết quả ví dụ
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].
Tạo dịch vụ phụ trợ và thêm NEG không máy chủ
Dịch vụ phụ trợ xác định cách Cloud Load Balancing phân phối lưu lượng truy cập. Cấu hình dịch vụ phụ trợ chứa một tập hợp các giá trị, chẳng hạn như giao thức dùng để kết nối với phần phụ trợ, nhiều chế độ cài đặt phân phối và phiên, kiểm tra tình trạng và thời gian chờ. Các chế độ cài đặt này giúp bạn kiểm soát chi tiết cách hoạt động của trình cân bằng tải.
- Tạo dịch vụ phụ trợ
gcloud compute backend-services create employee-ui-iap-backend \
--global
Kết quả ví dụ
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
- Thêm NEG không máy chủ làm phần phụ trợ cho dịch vụ phụ trợ
gcloud compute backend-services add-backend employee-ui-iap-backend \
--global \
--network-endpoint-group=employee-ui-iap-neg \
--network-endpoint-group-region=$REGION
Kết quả ví dụ
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- Tạo một bản đồ URL để định tuyến các yêu cầu đến đến dịch vụ phụ trợ
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. Định cấu hình các thành phần trình cân bằng tải
Sơ đồ dưới đây cho thấy trình cân bằng tải sử dụng phần phụ trợ NEG không máy chủ để chuyển yêu cầu đến một dịch vụ Cloud Run không máy chủ.
Dành riêng một địa chỉ IP tĩnh
- Đặt trước một địa chỉ IPv4 tĩnh và lưu trữ miền
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
Kết quả ví dụ
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- Lưu trữ miền nip.io
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
Tạo tài nguyên chứng chỉ SSL do Google quản lý
- Tạo tài nguyên chứng chỉ SSL do Google quản lý
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
Kết quả ví dụ
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
Tạo proxy HTTPS mục tiêu
- Tạo proxy HTTPS mục tiêu để định tuyến các yêu cầu đến bản đồ URL của bạn
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
--ssl-certificates employee-ui-iap-cert \
--url-map employee-ui-iap-url-map
Kết quả ví dụ
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:
Định cấu hình quy tắc chuyển tiếp
- Tạo quy tắc chuyển tiếp để định tuyến các yêu cầu đến đến proxy
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
Kết quả ví dụ
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
Hạn chế lưu lượng vào dịch vụ Cloud Run
Hạn chế lưu lượng truy cập vào để chỉ chấp nhận các yêu cầu nội bộ và yêu cầu đến thông qua Cân bằng tải HTTP(S).
- Cập nhật dịch vụ để chỉ cho phép lưu lượng truy cập vào từ các yêu cầu nội bộ và yêu cầu thông qua Trình cân bằng tải HTTP(S)
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
Kết quả ví dụ
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
- Nhấp vào đường liên kết URL dịch vụ
Giờ đây, quyền truy cập vào URL dịch vụ Cloud Run sẽ bị cấm.
5. Bật Cloud Identity-Aware Proxy (IAP) trên Trình cân bằng tải
IAP cho phép bạn thiết lập một lớp uỷ quyền trung tâm cho các ứng dụng được truy cập qua HTTPS. Bạn có thể sử dụng mô hình kiểm soát quyền truy cập cấp ứng dụng thay vì tường lửa cấp mạng.
Định cấu hình màn hình xin phép bằng OAuth
Thương hiệu là màn hình xin phép bằng OAuth chứa thông tin thương hiệu cho người dùng. Chỉ người dùng nội bộ hoặc người dùng công khai mới có thể sử dụng thương hiệu. Thương hiệu nội bộ cho phép thành viên thuộc cùng tổ chức Google Workspace với dự án truy cập vào quy trình OAuth. Thương hiệu công khai giúp bất kỳ ai có quyền truy cập Internet đều có thể truy cập vào quy trình OAuth.
- Tạo thương hiệu
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
Kết quả ví dụ
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
Tạo ứng dụng OAuth của IAP
- Tạo một khách hàng bằng tên thương hiệu từ bước trước đó
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
Kết quả ví dụ
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]
- Lưu trữ tên, mã và mã bí mật của ứng dụng khách
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)')
- Trong Cloud Console, hãy chọn dự án trong trình đơn chọn dự án thả xuống
- Chuyển đến màn hình xin phép bằng OAuth trong Cloud Console
- Nhấp vào TẠO BÊN NGOÀI trong phần User Type (Loại người dùng)
- Chọn trạng thái Xuất bản là Kiểm thử
- Nhấp vào XÁC NHẬN
6. Hạn chế quyền truy cập với IAP
Hạn chế quyền truy cập vào dịch vụ phụ trợ bằng cách sử dụng IAP rồi xác minh rằng ứng dụng không thể truy cập được.
- Bật IAP trên dịch vụ phụ trợ
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
Xác minh cấu hình IAP
- Xác minh rằng chứng chỉ SSL đang HOẠT ĐỘNG
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- Nhận URL dịch vụ
echo https://$DOMAIN
Kết quả ví dụ
https://34.102.234.98.nip.io
- Nhấp vào URL dịch vụ để mở cổng thông tin cho nhân viên.
- Đăng nhập bằng thông tin đăng nhập phòng thí nghiệm của bạn.
- Đóng trình duyệt
Cấp cho người dùng quyền truy cập vào cổng thông tin của nhân viên
- Thêm một liên kết chính sách IAM cho vai trò của
'roles/iap.httpsResourceAccessor'
đối với người dùng đã tạo ở bước trước
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
Kết quả ví dụ
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
Kiểm thử quyền truy cập vào dịch vụ
Xác nhận đã cấp quyền truy cập vào cổng thông tin cho nhân viên
- Nhận URL dịch vụ
echo https://$DOMAIN
Kết quả ví dụ
https://34.102.234.98.nip.io
- Nhấp vào URL dịch vụ để mở cổng thông tin cho nhân viên.
Bây giờ, bạn sẽ có quyền truy cập vào cổng thông tin cho nhân viên.
(Không bắt buộc) Triển khai tất cả các phần phụ thuộc. Việc triển khai các dịch vụ vi mô này có thể mất khoảng 20 phút.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. Xin chúc mừng!
Xin chúc mừng, bạn đã hoàn thành lớp học lập trình!
Bước tiếp theo:
Khám phá các lớp học lập trình khác về Cymbal Eats:
- Kích hoạt quy trình công việc trên đám mây bằng Eventarc
- Kích hoạt quá trình xử lý sự kiện từ Cloud Storage
- Kết nối với CloudSQL riêng tư qua Cloud Run
- Kết nối với các cơ sở dữ liệu được quản lý toàn diện qua Cloud Run
- Kích hoạt công việc trong Cloud Run bằng Cloud Scheduler
- Triển khai an toàn cho Cloud Run
- Bảo mật lưu lượng truy cập vào Cloud Run
- Kết nối với AlloyDB riêng tư từ GKE Autopilot
Dọn dẹp
Để tránh làm phát sinh chi phí cho các tài nguyên được sử dụng trong hướng dẫn này trong tài khoản Google Cloud của bạn, hãy xoá dự án chứa các tài nguyên đó, hoặc giữ lại dự án và xoá từng tài nguyên riêng lẻ.
Xoá dự án
Cách dễ nhất để loại bỏ việc thanh toán là xoá dự án bạn đã tạo cho phần hướng dẫn.