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à dịch vụ ưu tiên nền tảng đám mây, cung cấp proxy web bảo mật nhằm giúp bạn bảo mật lưu lượng truy cập web đầu ra (HTTP/S). Bạn định cấu hình để các ứng dụng của mình sử dụng Cloud SWP làm proxy một cách rõ ràng. Các yêu cầu web có thể bắt nguồn từ các nguồn sau:

  • Phiên bản máy ảo (VM)
  • Vùng chứa
  • 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 kết nối ngang hàng VPC
  • Tải công việc bên ngoài Google Cloud được kết nối bằng Cloud VPN hoặc Cloud Interconnect

Cloud SWP cung cấ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 ưu tiê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 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ữ nguyên các yêu cầu và chính sách bảo mật hiện có đối với lưu lượng truy cập web đầu 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.

Quyền truy cập vào các dịch vụ web bên ngoài đáng tin cậy

Cloud SWP giúp bạn áp dụng các chính sách chi tiết về quyền truy cập đối với lưu lượng truy cập web đầu ra để bạn có thể bảo mật mạng của mình. Bạn sẽ tạo và xác định tải công việc hoặc danh tính của ứng dụng, sau đó áp dụng các chính sách.

Giám sát hoạt động truy cập vào các dịch vụ web không đá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 đối với 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ại lưu lượng đó vào tính năng Ghi nhật ký trên đám mây (Ghi nhật ký). Sau đó, bạn có thể giám sát việ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ạ.

Các chế độ kiểm soát chính sách chi tiết cho 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 các API của Google. Ví dụ: bạn có thể đặt chính sách ở cấp nhóm/đối tượng bằng cách tận dụng Ngôn ngữ diễn đạt thông thường (CEL).

Tính năng được hỗ trợ

Cloud SWP hỗ trợ các tính năng sau:

Dịch vụ proxy tường minh

Ứng dụng phải được định cấu hình rõ ràng để sử dụng máy chủ proxy. Proxy Cloud SWP tách biệt ứng dụng khỏi Internet bằng cách tạo kết nối TCP mới thay mặt máy khách.

Tự động cấp tài nguyên bổ sung cho các proxy của Envoy Cloud SWP

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, từ đó mang lại hiệu suất nhất quán trong thời gian có nhu cầu cao với mức chi phí thấp nhất.

Các chính sách về quyền truy cập vào đầu ra theo mô-đun

Cloud SWP hỗ trợ đặc biệt các chính sách về lượng dữ liệu đầu ra sau đây:

  • Nhận dạng 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ủ.
  • 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 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 đầu cuối do máy khách khởi tạo với máy chủ đích.

Đơn giản hoá việc tích hợp Cloud NAT

Cloud NAT tự động cấp phép địa chỉ IP công khai bổ sung khi nhóm proxy phân phát lưu lượng truy cập Cloud SWP tăng lên.

Địa chỉ IP công khai tĩnh thủ công cũng là một lựa chọn cho những người muốn có IP đầu ra đã biết.

Nhật ký kiểm tra của Cloud và việc tích hợp bộ hoạt động của Google Cloud

Nhật ký kiểm tra của Cloud và bộ hoạt động của Google Cloud ghi lại các hoạt động quản trị và yêu cầu truy cập vào các tài nguyên liên quan đến Cloud SWP. Các báo cáo này cũng ghi lại chỉ số và nhật ký giao dịch cho các yêu cầu do proxy xử lý.

Kiểm tra TLS

Proxy web bảo mật 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 được 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ó khả năng hoạt động cao và có thể mở rộng dành cho các CA riêng tư.
  • Có thể sử dụng nguồn tin cậy của chính bạn nếu cần. Bạn cũng có thể sử dụng một CA gốc hiện có để ký 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 về Proxy web bảo mật. Tiêu chí này bao gồm các máy chủ lưu trữ phù hợp có trong danh sách URL, biểu thức chính quy, dải địa chỉ IP và biểu thức tương tự. Nếu cần, tiêu chí có thể được kết hợp với biểu thức boolean.
  • Bạn có thể định cấu hình mỗi chính sách Proxy web bảo mật 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 Proxy web bảo mật 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ó

  • Có kiến thức về cách triển khai thực thể và định cấu hình 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 kiểm thử

Lớp học lập trình này sẽ tận dụng một đám mây riêng ảo (VPC). Tài nguyên điện toán trong môi trường này sẽ đi ra thông qua Cloud SWP như minh hoạ trong biểu đồ dưới đây.

1264e30caa136365.pngS

Trong phòng thí nghiệm này, chúng ta sẽ có 2 máy ảo cho 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 Cloud SWP.

Ứng dụng B sẽ KHÔNG được định cấu hình để gửi các yêu cầu HTTP/HTTPS đến Cloud SWP một cách rõ ràng, mà thay vào đó sẽ tận dụng Cloud NAT cho lưu lượng truy cập ràng buộc Internet.

3. Trước khi bắt đầu

Lớp học lập trình này chỉ yêu cầu một dự án duy nhất.

Bên 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 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ỉ có proxy

Mạng VPC

Tạo codelab-swp-vpc VPC:

gcloud compute networks create $prefix-vpc --subnet-mode=custom 

Mạng con

Tạo các mạng con tương ứng trong vùng đã 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ùng cho proxy

Tạo mạng con chỉ proxy trong vùng đã 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 về tường lửa

Để cho phép IAP kết nối với các phiên bản máy ảo của bạn, hãy tạo một quy tắc tường lửa:

  • Áp dụng cho tất cả các thực thể máy ảo mà bạn muốn truy cập được bằng cách sử dụ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 & NAT trên đám mây

Tạo Cloud Router cho Cloud NAT.

gcloud compute routers create ${prefix}-cr \
--region=$region \
--network=${prefix}-vpc

Tạo cổng vào Cloud NAT cho Ứng dụng 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 một Chính sách bảo mật cổng vào

Tạo một tệp yaml chứa thông tin liên quan đến 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 một quy tắc chính sách bảo mật cổng vào

Tạo tệp yaml chứa các quy tắc. Các quy tắc này được trình bày 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 đến các miền .com và chặn tất cả những 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ổng vào:

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 một chứng chỉ và tải lên Trình quản lý chứng chỉ trên đám mây

Tạo chứng chỉ để chấm dứt lưu lượng truy cập của khối lượng công việc:

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 Cloud Certificate Manager để SWP có thể tham chiếu chứng chỉ đó trong chính sách về 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 vào, 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 vào:

gcloud network-services gateways import ${prefix}-swp --source=/tmp/gateway.yaml --location=${region}

Xác nhận cổng vào đã được tạo:

gcloud network-services gateways describe ${prefix}-swp --location ${region}

12. Tạo thực thể điện toán

Vì Cloud SWP là một proxy rõ ràng, nên chúng ta cần chỉ định rõ IP proxy cho lưu lượng truy cập của khối lượng công việc. Khách hàngA của thực thể điện toán sẽ được đặt biến môi trường. Ứng dụng B thì không.

Tạo các thực thể đ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 thử tính năng so khớp phiên

SSH thành "clienta" máy tính ảo được tạo gần đây. Máy ảo 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 web để xác thực chức năng. Chúng tôi yêu cầu – không an toàn với proxy vì chúng tôi đã 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 có thể thấy, yêu cầu là "thành công". Theo dự kiến, chúng tôi sẽ thấy lệnh chuyển hướng 301 vì trang web đang chuyển hướng đến https://www.google.com.

Việc chạy lệnh sau sẽ cung cấp nhật ký chi tiết chứa thông tin chi tiết về kết nối:

curl https://google.com --proxy-insecure -v

Đánh dấu một số dữ liệu đầu ra để hiển thị 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ể dùng 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ác không phải là .com để 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 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ể dùng thử các miền khác để xác minh hành vi.

Thoát khỏi phiên SSH sang "clienta" và bắt đầu kết nối SSH mới với "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

Thao tác này sẽ hoạt động như máy ảo khách hàng dự kiến:

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 của tổ chức:

curl https://wikipedia.org

Phương thức này hoạt động như dự kiến vì khách hàng không sử dụng Cloud SWP:

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>

Thử nghiệm gửi lưu lượng truy cập 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 thấy rằng lưu lượng truy cập này bị từ chối thông qua chính sách Cloud SWP:

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 sử dụng Cloud SWP đang được thực thi theo chính sách bảo mật đã thiết lập. Lưu lượng truy cập dành cho .com được cho phép và tất cả các đích đến khác đều bị từ chối.

Thoát khỏi ứng dụng khách

14. Cập nhật Quy tắc chính sách bảo mật cổng vào cho ApplicationMatching

Hãy cập nhật quy tắc này để khớp với thông tin chi tiết về cấp ứng dụng. Chúng ta sẽ xây dựng một quy tắc để xem đường dẫn yêu cầu và chỉ cho phép nếu đường dẫn đó khớp với đường dẫn http://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ổng vào:

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. Máy ảo 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 web để xác thực chức năng. Chúng tôi yêu cầu – không an toàn với proxy vì chúng tôi đã tạo một chứng chỉ tự ký cho phòng thí nghiệm này:

curl http://google.com --proxy-insecure

Lưu ý rằng truy vấn này sẽ không thành công khi đã qua trước đó.

Access denied

Bất kỳ đường dẫn yêu cầu nào ngoài "index.html" sẽ bị chặn bằng lỗi 403. Bạn có thể thử nghiệm thêm.

Sửa đổi truy vấn để bao gồ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>

Theo dự kiến, chúng tôi 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

Lưu ý rằng đây là yêu cầu HTTP. Tiếp theo, bạn cần bật SWP để có các chức 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 theo 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ó quy trình Kiểm tra TLS, applicationMatcher sẽ không so khớp được với lưu lượng truy cập HTTPS.

&quot;applicationMatcher&quot; cho phép lọc những nội dung sau:

  • Liên kết tiêu đề của yêu cầu
  • Phương thức yêu cầu
  • Yêu cầu người tổ chức
  • Đường dẫn yêu cầu
  • Yêu cầu truy vấn
  • Giao thức yêu cầu
  • URL yêu cầu đầy đủ
  • 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ỉ để 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 nhóm CA

gcloud privateca pools create $prefix-ca-pool \
    --tier=devops \
    --project=$project_id \
    --location=$region 

Tạo CA gốc

CA được sử 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 cấp 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 yaml Chính sách để bao gồm hoạt độ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 đã 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 để đưa yêu cầu kiểm tra TLS

Tiếp theo, hãy chỉ định những quy tắc cần kiểm tra TLS "enabtlsInspectionEnabled: true" 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 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 đã 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 kiểm tra TLS (Bảo mật tầng truyền tải)

SSH vào máy ảo điện toán clienta. Máy ảo 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 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, quá trình này 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 ta đã 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á mạng con, quy tắc FW 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. 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à lợi ích!