Lớp học lập trình về Proxy web an toàn trên đám mây (SWP)

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.

1264e30caa136365.png

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!