1. Giới thiệu
Proxy web an toàn trên đám mây
Cloud SWP là một dịch vụ dựa trên nền tảng đám mây, cung cấp một proxy web bảo mật để giúp bạn bảo mật lưu lượng truy cập web xuất (HTTP/S). Bạn định cấu hình các ứng dụng để sử dụng Cloud SWP một cách rõ ràng làm proxy. Các yêu cầu trên web có thể xuất phát từ những nguồn sau:
- Các phiên bản máy ảo (VM)
- Vùng chứa
- Một môi trường không máy chủ sử dụng trình kết nối không máy chủ
- Khối lượng công việc trên VPC Peering
- Tải bên ngoài Google Cloud được kết nối bằng Cloud VPN hoặc Cloud Interconnect
SWP trên đám mây cho phép các chính sách linh hoạt và chi tiết dựa trên danh tính và ứng dụng web dựa trên nền tảng đám mây.
Lợi ích
Dưới đây là một số ví dụ về những lợi ích mà Cloud SWP có thể mang lại cho một tổ chức:
Di chuyển sang Google Cloud
Cloud SWP giúp bạn di chuyển sang Google Cloud mà vẫn giữ được các chính sách bảo mật và yêu cầu hiện có đối với lưu lượng truy cập web đi ra. Bạn có thể tránh sử dụng các giải pháp của bên thứ ba yêu cầu một bảng điều khiển quản lý khác hoặc chỉnh sửa tệp cấu hình theo cách thủ công.
Truy cập vào các dịch vụ web bên ngoài đáng tin cậy
Cloud SWP cho phép bạn áp dụng các chính sách truy cập chi tiết cho lưu lượng truy cập web xuất để có thể bảo mật mạng của mình. Bạn tạo và xác định danh tính của tải hoặc ứng dụng, sau đó áp dụng các chính sách.
Giám sát quyền truy cập vào các dịch vụ web không tin cậy
Bạn có thể sử dụng Cloud SWP để cung cấp quyền truy cập được giám sát vào các dịch vụ web không đáng tin cậy. Cloud SWP xác định lưu lượng truy cập không tuân thủ chính sách và ghi lưu lượng truy cập đó vào Cloud Logging (Logging). Sau đó, bạn có thể theo dõi mức sử dụng Internet, phát hiện các mối đe doạ đối với mạng của mình và ứng phó với các mối đe doạ đó.
Chế độ kiểm soát chính sách chi tiết cho các API của Google
Bạn có thể sử dụng Cloud SWP để cung cấp các chính sách chi tiết cho API của Google. Ví dụ: bạn có thể đặt các chính sách ở cấp đối tượng/thùng bằng cách tận dụng Ngôn ngữ diễn đạt thông thường (CEL).
Các tính năng được hỗ trợ
SWP trên đám mây hỗ trợ các tính năng sau:
Dịch vụ proxy tường minh
Bạn phải định cấu hình rõ ràng các ứng dụng để sử dụng máy chủ proxy. Proxy SWP trên đám mây sẽ tách biệt các ứng dụng khách khỏi Internet bằng cách tạo các kết nối TCP mới thay cho ứng dụng khách.
Các proxy Envoy SWP trên đám mây có tính năng tự động mở rộng quy mô
Hỗ trợ tự động điều chỉnh kích thước nhóm proxy Envoy và dung lượng của nhóm trong một khu vực, giúp duy trì hiệu suất ổn định trong thời gian có nhu cầu cao với chi phí thấp nhất.
Chính sách truy cập mô-đun
Cloud SWP hỗ trợ cụ thể các chính sách truyền dữ liệu ra sau đây:
- Danh tính nguồn dựa trên thẻ bảo mật, tài khoản dịch vụ hoặc địa chỉ IP.
- Đích đến dựa trên URL, tên máy chủ.
- Các yêu cầu dựa trên phương thức, tiêu đề hoặc URL. Bạn có thể chỉ định URL bằng cách sử dụng danh sách, ký tự đại diện hoặc mẫu.
- Mã hoá hai đầu: Các đường hầm proxy của máy khách có thể truyền qua TLS. Cloud SWP cũng hỗ trợ HTTP/S CONNECT cho các kết nối TLS từ đầu đến cuối do máy khách khởi tạo đến máy chủ đích.
Tích hợp Cloud NAT đơn giản
Cloud NAT tự động cung cấp thêm địa chỉ IP công khai khi tập hợp các proxy phục vụ lưu lượng truy cập Cloud SWP tăng lên.
Địa chỉ IP tĩnh công khai theo cách thủ công cũng là một lựa chọn cho những người muốn có IP truyền tải đã biết.
Cloud Audit Logs và chế độ tích hợp bộ công cụ vận hành của Google Cloud
Nhật ký kiểm tra trên đám mây và bộ công cụ vận hành của Google Cloud ghi lại các hoạt động quản trị và yêu cầu truy cập đối với các tài nguyên liên quan đến Cloud SWP. Chúng cũng ghi lại các chỉ số và nhật ký giao dịch cho các yêu cầu do proxy xử lý.
Kiểm tra TLS
Secure Web Proxy cung cấp dịch vụ kiểm tra TLS, cho phép bạn chặn lưu lượng truy cập TLS, kiểm tra yêu cầu đã mã hoá và thực thi các chính sách bảo mật.
- Tích hợp chặt chẽ với Dịch vụ tổ chức phát hành chứng chỉ (CAS), đây là một kho lưu trữ có tính sẵn sàng cao và khả năng mở rộng cho các tổ chức phát hành chứng chỉ riêng tư.
- Khả năng sử dụng gốc tin cậy của riêng bạn nếu cần. Bạn cũng có thể sử dụng một CA gốc hiện có để ký cho các CA cấp dưới do CAS nắm giữ. Nếu muốn, bạn có thể tạo một chứng chỉ gốc mới trong CAS.
- Tiêu chí giải mã chi tiết bằng cách sử dụng SessionMatcher và ApplicationMatcher trong các quy tắc chính sách Secure Web Proxy. Tiêu chí này bao gồm các máy chủ khớp có trong danh sách URL, biểu thức chính quy, dải địa chỉ IP và các biểu thức tương tự. Nếu cần, bạn có thể kết hợp các tiêu chí với biểu thức boolean.
- Bạn có thể định cấu hình từng chính sách Secure Web Proxy bằng chính sách kiểm tra TLS và nhóm CA riêng. Ngoài ra, nhiều chính sách Secure Web Proxy có thể dùng chung một chính sách kiểm tra TLS.
Kiến thức bạn sẽ học được
- Cách triển khai và quản lý Cloud SWP.
Bạn cần có
- Kiến thức về việc triển khai các phiên bản và định cấu hình các thành phần mạng
- Kiến thức về cấu hình tường lửa VPC
2. Môi trường thử nghiệm
Lớp học lập trình này sẽ tận dụng một VPC duy nhất. Tài nguyên điện toán trong môi trường này sẽ truyền dữ liệu ra ngoài bằng SWP trên đám mây như trong sơ đồ bên dưới.

Trong phòng thí nghiệm này, chúng ta sẽ có 2 VM tải công việc.
Ứng dụng A sẽ được định cấu hình để gửi tất cả các yêu cầu HTTP/HTTPS đến SWP trên đám mây.
Máy khách B KHÔNG được định cấu hình để gửi rõ ràng các yêu cầu HTTP/HTTPS đến Cloud SWP, mà thay vào đó tận dụng Cloud NAT cho lưu lượng truy cập liên kết với Internet.
3. Trước khi bắt đầu
Lớp học lập trình yêu cầu một dự án duy nhất.
Trong Cloud Shell, hãy đảm bảo rằng bạn đã thiết lập mã dự án
export project_id=`gcloud config list --format="value(core.project)"` export project_number=`gcloud projects describe $project_id --format="value(projectNumber)"` export region=us-west1 export zone=us-west1-a export prefix=codelab-swp export member="serviceAccount:service-$project_number@gcp-sa-networksecurity.iam.gserviceaccount.com"
4. Bật API
Bật các API để sử dụng sản phẩm
gcloud services enable networksecurity.googleapis.com gcloud services enable certificatemanager.googleapis.com gcloud services enable networkservices.googleapis.com
5. Tạo mạng VPC, mạng con và mạng con chỉ dành cho proxy
Mạng VPC
Tạo VPC codelab-swp-vpc:
gcloud compute networks create $prefix-vpc --subnet-mode=custom
Mạng con
Tạo các mạng con tương ứng trong khu vực đã chọn:
gcloud compute networks subnets create $prefix-vpc-subnet \ --range=10.10.10.0/24 --network=$prefix-vpc --region=$region
Mạng con chỉ dành cho proxy
Tạo một mạng con chỉ dành cho proxy trong khu vực đã chọn:
gcloud compute networks subnets create $prefix-proxy-only-subnet --purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE --region=$region --network=$prefix-vpc --range=172.16.0.0/23
6. Tạo quy tắc tường lửa
Để cho phép IAP kết nối với các phiên bản máy ảo, hãy tạo một quy tắc tường lửa có:
- Áp dụng cho tất cả các phiên bản máy ảo mà bạn muốn có thể truy cập bằng IAP.
- Cho phép lưu lượng truy cập vào từ dải IP 35.235.240.0/20. Dải này chứa tất cả địa chỉ IP mà IAP sử dụng để chuyển tiếp TCP.
Từ cloudshell:
gcloud compute firewall-rules create $prefix-allow-iap-proxy \ --direction=INGRESS \ --priority=1000 \ --network=$prefix-vpc \ --action=ALLOW \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
7. Tạo Cloud Router và Cloud NAT
Tạo Cloud Router cho Cloud NAT.
gcloud compute routers create ${prefix}-cr \
--region=$region \
--network=${prefix}-vpc
Tạo Cổng NAT trên đám mây cho Máy khách B.
gcloud compute routers nats create $prefix-nat-gw-$region \ --router=$prefix-cr \ --router-region=$region \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
8. Tạo Chính sách bảo mật cổng
Tạo một tệp yaml chứa thông tin liên quan cho chính sách:
cat > /tmp/policy.yaml << EOF
description: Policy to allow .com traffic, then (/index.html), and finally TLS.
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy
EOF
Chạy lệnh gcloud để tạo chính sách từ tệp yaml:
gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}
9. Tạo quy tắc chính sách bảo mật của cổng
Tạo một tệp yaml chứa các quy tắc. Các quy tắc này được biểu thị bằng Ngôn ngữ diễn đạt thông thường (CEL). Phòng thí nghiệm này sẽ sử dụng một quy tắc đơn giản cho phép lưu lượng truy cập vào các miền .com và chặn tất cả các miền khác:
cat > /tmp/rule-com.yaml << EOF
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy/rules/rule-com
enabled: true
priority: 1
description: Allow .com traffic
basicProfile: ALLOW
sessionMatcher: host().endsWith('com')
EOF
Bây giờ, chúng ta có thể liên kết quy tắc này với chính sách bảo mật của cổng:
gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy
10. Tạo chứng chỉ và tải lên Cloud Certificate Manager
Tạo chứng chỉ để chấm dứt lưu lượng truy cập tải:
openssl req -x509 -newkey rsa:2048 -keyout /tmp/key.pem -out /tmp/cert.pem -days 365 -subj '/CN=www.codelab-swp.com' -nodes -addext \ "subjectAltName = DNS:www.codelab-swp.com"
Tải chứng chỉ lên Trình quản lý chứng chỉ trên đám mây để SWP có thể tham chiếu chứng chỉ đó trong chính sách cổng bảo mật.
gcloud certificate-manager certificates create ${prefix}-cert --location=${region} --private-key-file=/tmp/key.pem --certificate-file=/tmp/cert.pem
11. Tạo Cổng SWP
Tạo tệp yaml cho Cổng SWP để tham chiếu thông tin trước đó, chẳng hạn như chứng chỉ, chính sách bảo mật cổng, mạng và mạng con.
cat > /tmp/gateway.yaml << EOF
name: projects/${project_id}/locations/${region}/gateways/${prefix}-gateway
type: SECURE_WEB_GATEWAY
addresses: [10.10.10.50]
ports: [443]
certificateUrls: [projects/${project_id}/locations/${region}/certificates/${prefix}-cert]
gatewaySecurityPolicy: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy
network: projects/${project_id}/global/networks/${prefix}-vpc
subnetwork: projects/${project_id}/regions/${region}/subnetworks/${prefix}-vpc-subnet
EOF
Tạo cổng:
gcloud network-services gateways import ${prefix}-swp --source=/tmp/gateway.yaml --location=${region}
Xác nhận rằng cổng đã được tạo:
gcloud network-services gateways describe ${prefix}-swp --location ${region}
12. Tạo phiên bản máy tính
Vì Cloud SWP là một proxy rõ ràng, nên chúng ta cần chỉ định rõ ràng IP proxy cho lưu lượng truy cập của khối lượng công việc. Compute instance clientA sẽ có biến môi trường được thiết lập. ClientB sẽ không.
Tạo các phiên bản điện toán ClientA và ClientB:
gcloud compute instances create clienta \ --subnet=$prefix-vpc-subnet \ --no-address \ --private-network-ip=10.10.10.10 \ --zone $zone \ --metadata startup-script='#! /bin/bash apt-get update sudo echo http_proxy=https://10.10.10.50:443/ >> /etc/environment sudo echo https_proxy=https://10.10.10.50:443/ >> /etc/environment '
gcloud compute instances create clientb \ --subnet=$prefix-vpc-subnet \ --no-address \ --private-network-ip=10.10.10.200 \ --zone $zone \ --metadata startup-script='#! /bin/bash apt-get update '
13. Kiểm tra tính năng so khớp phiên
SSH vào máy ảo điện toán "clienta" vừa tạo. VM này đã đặt biến môi trường để sử dụng Cloud SWP.
Từ cloudshell:
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
Chạy một số truy vấn trên web để xác thực chức năng. Chúng ta cần có –proxy-insecure vì chúng ta đã tạo một chứng chỉ tự ký cho phòng thí nghiệm này:
curl https://google.com --proxy-insecure
Kết quả đầu ra dự kiến:
davidtu@clienta:~$ curl https://google.com --proxy-insecure <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="https://www.google.com/">here</A>. </BODY></HTML>
Như bạn thấy, yêu cầu đã "thành công". Chúng ta sẽ thấy một lệnh chuyển hướng 301 vì trang web đang chuyển hướng đến https://www.google.com.
Khi chạy lệnh sau, bạn sẽ nhận được nhật ký chi tiết có thông tin về kết nối:
curl https://google.com --proxy-insecure -v
Làm nổi bật một số đầu ra để cho thấy thông tin chi tiết về kết nối proxy, chứng chỉ và đích đến.
davidtu@clienta:~$ curl https://google.com --proxy-insecure -v * Uses proxy env variable https_proxy == 'https://10.10.10.50:443/' * Trying 10.10.10.50:443... * Connected to 10.10.10.50 (10.10.10.50) port 443 (#0) * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use http/1.1 * Proxy certificate: * subject: CN=www.codelab-swp.com * start date: Dec 12 17:16:35 2022 GMT * expire date: Dec 12 17:16:35 2023 GMT * issuer: CN=www.codelab-swp.com * SSL certificate verify result: self signed certificate (18), continuing anyway. * allocate connect buffer! * Establish HTTP proxy tunnel to google.com:443 > CONNECT google.com:443 HTTP/1.1 > Host: google.com:443 > User-Agent: curl/7.74.0 > Proxy-Connection: Keep-Alive > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): < HTTP/1.1 200 OK < date: Mon, 12 Dec 2022 19:22:04 GMT < * Proxy replied 200 to CONNECT request * CONNECT phase completed! ...
Bạn có thể thử các miền .com khác để xác minh chức năng.
Bây giờ, hãy thử một số miền không phải .com khác để xác minh hành vi chặn mặc định:
curl https://wikipedia.org --proxy-insecure
Kết quả đầu ra dự kiến:
curl: (56) Received HTTP code 403 from proxy after CONNECT
Tương tự, hãy xem nhật ký đầu ra chi tiết và xác nhận rằng Cloud SWP đang chặn lưu lượng truy cập này:
curl https://wikipedia.org --proxy-insecure -v
davidtu@clienta:~$ curl https://wikipedia.org --proxy-insecure -v * Uses proxy env variable https_proxy == 'https://10.10.10.50:443/' * Trying 10.10.10.50:443... * Connected to 10.10.10.50 (10.10.10.50) port 443 (#0) * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use http/1.1 * Proxy certificate: * subject: CN=www.codelab-swp.com * start date: Dec 12 17:16:35 2022 GMT * expire date: Dec 12 17:16:35 2023 GMT * issuer: CN=www.codelab-swp.com * SSL certificate verify result: self signed certificate (18), continuing anyway. * allocate connect buffer! * Establish HTTP proxy tunnel to wikipedia.org:443 > CONNECT wikipedia.org:443 HTTP/1.1 > Host: wikipedia.org:443 > User-Agent: curl/7.74.0 > Proxy-Connection: Keep-Alive > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): < HTTP/1.1 403 Forbidden < content-length: 13 < content-type: text/plain < date: Mon, 12 Dec 2022 19:35:09 GMT < connection: close < * Received HTTP code 403 from proxy after CONNECT * CONNECT phase completed! * Closing connection 0 curl: (56) Received HTTP code 403 from proxy after CONNECT
Bạn cũng có thể thử các miền khác để xác minh hành vi.
Thoát phiên SSH đến "clienta" và bắt đầu một kết nối SSH mới đến "clientb".
gcloud compute ssh clientb --zone=$zone --tunnel-through-iap
Chạy một số lệnh curl để kiểm tra hành vi:
curl https://google.com
Điều này sẽ hoạt động như dự kiến đối với VM clientb:
davidtu@clientb:~$ curl https://google.com <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="https://www.google.com/">here</A>. </BODY></HTML>
Kiểm thử trên miền org:
curl https://wikipedia.org
Điều này hoạt động như mong đợi vì clientb không tận dụng SWP trên đám mây:
davidtu@clientb:~$ curl https://wikipedia.org <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="https://www.wikipedia.org/">here</a>.</p> </body></html>
Kiểm thử việc gửi lưu lượng truy cập một cách rõ ràng thông qua Cloud SWP:
curl -x https://10.10.10.50:443/ https://wikipedia.org --proxy-insecure
Chúng tôi nhận thấy lưu lượng truy cập này bị từ chối thông qua chính sách SWP trên đám mây:
davidtu@clientb:~$ curl -x https://10.10.10.50:443/ https://wikipedia.org --proxy-insecure curl: (56) Received HTTP code 403 from proxy after CONNECT
Như bạn đã xác minh, lưu lượng truy cập tận dụng Cloud SWP đang được thực thi theo chính sách bảo mật đã định cấu hình. Lưu lượng truy cập đến .com được cho phép và tất cả các đích đến khác đều bị từ chối.
Thoát khỏi clientb.
14. Cập nhật quy tắc Chính sách bảo mật của Cổng cho ApplicationMatching
Hãy cập nhật quy tắc để so khớp với thông tin chi tiết ở cấp ứng dụng. Chúng ta sẽ tạo một quy tắc để xem xét đường dẫn yêu cầu và chỉ cho phép nếu đường dẫn đó khớp với index.html.
cat > /tmp/rule-com.yaml << EOF
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy/rules/rule-com
enabled: true
priority: 1
description: Allow .com traffic with path index.html
basicProfile: ALLOW
sessionMatcher: host().endsWith('com')
applicationMatcher: request.path.matches('index.html')
EOF
Bây giờ, chúng ta có thể liên kết quy tắc đã cập nhật với chính sách bảo mật của cổng:
gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy
15. Kiểm thử quy tắc ApplicationMatcher
SSH vào máy ảo điện toán clienta. VM này đã đặt biến môi trường để sử dụng Cloud SWP.
Từ cloudshell:
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
Chạy một số truy vấn trên web để xác thực chức năng. Chúng ta cần có –proxy-insecure vì chúng ta đã tạo một chứng chỉ tự ký cho phòng thí nghiệm này:
curl http://google.com --proxy-insecure
Xin lưu ý rằng truy vấn này sẽ không thành công khi trước đó truy vấn này đã thành công.
Access denied
Mọi đường dẫn yêu cầu ngoài "index.html" đều sẽ bị chặn bằng mã lỗi 403. Bạn có thể thử nghiệm thêm về vấn đề này.
Sửa đổi truy vấn để thêm đường dẫn /index.html
curl http://google.com/index.html --proxy-insecure
Yêu cầu này sẽ thành công:
davidtu@clienta:~$ curl http://google.com/index.html --proxy-insecure <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="https://www.google.com/index.html">here</A>. </BODY></HTML>
Chúng tôi dự kiến sẽ thấy lệnh chuyển hướng 301 vì trang web đang chuyển hướng đến http://www.google.com/index.html
Xin lưu ý rằng đây là một yêu cầu HTTP. Tiếp theo, bạn cần bật SWP để có khả năng kiểm tra TLS.
Tiếp theo, hãy chạy cùng một truy vấn nhưng qua TLS:
curl -k https://google.com/index.html --proxy-insecure
Kết quả đầu ra dự kiến:
curl: (56) Received HTTP code 403 from proxy after CONNECT
Yêu cầu này sẽ không thành công vì SWP không được định cấu hình để kiểm tra TLS và không thể đánh giá đường dẫn dựa trên quy tắc applicationMatcher.
Thoát khỏi clenta.
16. Bật tính năng Kiểm tra TLS
Nếu không có tính năng Kiểm tra TLS, applicationMatcher sẽ không so khớp với lưu lượng truy cập HTTPS.
"applicationMatcher" cho phép lọc theo các tiêu chí sau:
- Bản đồ tiêu đề của yêu cầu
- Phương thức yêu cầu
- Máy chủ yêu cầu
- Đường dẫn yêu cầu
- Truy vấn yêu cầu
- Lược đồ yêu cầu
- URL đầy đủ của yêu cầu
- Yêu cầu tác nhân người dùng
Tạo tài khoản dịch vụ
Tài khoản dịch vụ này sẽ có quyền tạo chứng chỉ cho hoạt động kiểm tra TLS SWP.
gcloud beta services identity create \
--service=networksecurity.googleapis.com \
--project=$project_id
Đảm bảo bạn đã bật CAS
gcloud services enable privateca.googleapis.com
Tạo một nhóm CA
gcloud privateca pools create $prefix-ca-pool \
--tier=devops \
--project=$project_id \
--location=$region
Tạo CA gốc
CA dùng để ký chứng chỉ.
gcloud privateca roots create $prefix-root-ca --pool=$prefix-ca-pool \ --location=$region \ --auto-enable \ --subject="CN=my-swp-ca, O=SWP LLC"
Tạo tệp chính sách phát hành chứng chỉ
cat > /tmp/tls-issuance-policy.yaml << EOF
maximumLifetime: 1209600s
baselineValues:
caOptions:
isCa: false
keyUsage:
extendedKeyUsage:
serverAuth: true
EOF
Tạo tệp yaml Kiểm tra TLS
cat > /tmp/tls-inspection-policy.yaml << EOF caPool: projects/$project_id/locations/$region/caPools/$prefix-ca-pool name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-inspection EOF
Tạo chính sách kiểm tra TLS
gcloud network-security tls-inspection-policies import $prefix-tls-inspection \
--source=/tmp/tls-inspection-policy.yaml \
--location=$region
Cập nhật Nhóm CA để sử dụng chính sách cấp chứng chỉ
gcloud privateca pools update $prefix-ca-pool --issuance-policy=/tmp/tls-issuance-policy.yaml --location=$region
Cấp quyền
Việc này cho phép tài khoản dịch vụ của bạn sử dụng nhóm CA để tạo chứng chỉ.
gcloud privateca pools add-iam-policy-binding $prefix-ca-pool \
--member=$member \
--role='roles/privateca.certificateManager' \
--location=$region
Cập nhật Policy yaml để thêm tính năng kiểm tra TLS
cat > /tmp/policy.yaml << EOF
description: some policy description
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy
tlsInspectionPolicy: projects/${project_id}/locations/${region}/tlsInspectionPolicies/${prefix}-tls-inspection
EOF
Chạy lệnh áp dụng chính sách mới cập nhật
gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}
Cập nhật các quy tắc để thêm tính năng kiểm tra TLS
Tiếp theo, hãy chỉ định những quy tắc nào phải có cờ kiểm tra TLS "enabtlsInspectionEnabled: true".
cat > /tmp/rule-com.yaml << EOF
name: projects/${project_id}/locations/${region}/gatewaySecurityPolicies/${prefix}-policy/rules/rule-com
enabled: true
priority: 1
description: Allow .com traffic with path index.html
basicProfile: ALLOW
sessionMatcher: host().endsWith('com')
applicationMatcher: request.path.matches('index.html')
tlsInspectionEnabled: true
EOF
Chạy lệnh để áp dụng quy tắc mới cập nhật
gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy
17. Kiểm tra TLS
SSH vào máy ảo điện toán clienta. VM này đã đặt biến môi trường để sử dụng Cloud SWP.
Từ cloudshell:
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
Chạy truy vấn web trước đó để xác minh xem SWP có đang thực hiện quy trình kiểm tra TLS để truy xuất đường dẫn hay không
curl -k https://google.com/index.html --proxy-insecure
Lần này, yêu cầu sẽ thành công vì SWP có thể đánh giá ApplicationMatcher.
Kết quả đầu ra dự kiến:
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="https://www.google.com/index.html">here</A>. </BODY></HTML>
Chúng tôi đã thiết lập thành công Cloud SWP để kiểm tra TLS và đánh giá logic applicationMatcher!
Thoát khỏi clienta.
18. Các bước dọn dẹp
Trong Cloud Shell, hãy xoá cổng SWP, chính sách bảo mật, chứng chỉ, phiên bản, Cloud NAT và Cloud Router:
gcloud -q network-services gateways delete ${prefix}-swp --location=${region}
gcloud -q network-security gateway-security-policies rules delete rule-com --location=${region} --gateway-security-policy=${prefix}-policy
gcloud -q network-security gateway-security-policies delete ${prefix}-policy --location=${region}
gcloud -q certificate-manager certificates delete ${prefix}-cert --location=${region}
gcloud -q network-security tls-inspection-policies delete $prefix-tls-inspection --location=$region
gcloud -q privateca roots disable $prefix-root-ca --pool=$prefix-ca-pool --location=$region
gcloud -q privateca roots delete $prefix-root-ca --pool=$prefix-ca-pool --location=$region --ignore-active-certificates --skip-grace-period
gcloud -q privateca pools delete $prefix-ca-pool --location=$region
gcloud -q compute instances delete clienta --zone=$zone
gcloud -q compute instances delete clientb --zone=$zone
gcloud -q compute routers nats delete ${prefix}-nat-gw-${region} \
--router=$prefix-cr --router-region=$region
gcloud -q compute routers delete `gcloud compute routers list --regions=$region --format="value(NAME)" | grep -e swg-autogen -e codelab-swp` --region=$region
Xoá các mạng con, quy tắc tường lửa và VPC:
gcloud -q compute networks subnets delete $prefix-vpc-subnet \
--region $region
gcloud -q compute networks subnets delete $prefix-proxy-only-subnet \
--region=$region
gcloud -q compute firewall-rules delete $prefix-allow-iap-proxy
gcloud -q compute networks delete $prefix-vpc
19. Xin chúc mừng!
Chúc mừng bạn đã hoàn thành lớp học lập trình này. Bạn đã định cấu hình và triển khai thành công Cloud Secure Web Proxy trên Google Cloud.
Nội dung đã đề cập
- Cloud SWP và những lợi ích!