1. บทนำ
เว็บพร็อกซีที่ปลอดภัยสำหรับระบบคลาวด์
Cloud SWP เป็นบริการที่เน้นระบบคลาวด์เป็นอันดับแรกซึ่งมีพร็อกซีเว็บที่ปลอดภัยเพื่อช่วยรักษาความปลอดภัยให้กับการรับส่งข้อมูลเว็บขาออก (HTTP/S) คุณกำหนดค่าไคลเอ็นต์ให้ใช้ Cloud SWP เป็นพร็อกซีอย่างชัดเจน คำขอเว็บอาจมาจากแหล่งที่มาต่อไปนี้
- อินสแตนซ์เครื่องเสมือน (VM)
- คอนเทนเนอร์
- สภาพแวดล้อมแบบ Serverless ที่ใช้เครื่องมือเชื่อมต่อแบบ Serverless
- ภาระงานในการเพียร์ VPC
- เวิร์กโหลดภายนอก Google Cloud ที่เชื่อมต่อด้วย Cloud VPN หรือ Cloud Interconnect
Cloud SWP ช่วยให้ใช้นโยบายที่ยืดหยุ่นและละเอียดตามข้อมูลประจำตัวแบบ Cloud-First และเว็บแอปพลิเคชัน
ข้อดี
ตัวอย่างประโยชน์บางส่วนที่ Cloud SWP มอบให้แก่องค์กรมีดังนี้
การย้ายข้อมูลไปยัง Google Cloud
Cloud SWP ช่วยให้คุณย้ายข้อมูลไปยัง Google Cloud ได้ในขณะที่ยังคงใช้นโยบายและข้อกำหนดด้านความปลอดภัยที่มีอยู่สำหรับการรับส่งข้อมูลเว็บขาออก คุณสามารถหลีกเลี่ยงการใช้โซลูชันของบุคคลที่สามที่ต้องใช้คอนโซลการจัดการอื่นหรือการแก้ไขไฟล์กำหนดค่าด้วยตนเองได้
สิทธิ์เข้าถึงบริการเว็บภายนอกที่เชื่อถือได้
Cloud SWP ช่วยให้คุณใช้นโยบายการเข้าถึงแบบละเอียดกับการรับส่งข้อมูลเว็บขาออกเพื่อรักษาความปลอดภัยของเครือข่ายได้ คุณสร้างและระบุข้อมูลประจำตัวของเวิร์กโหลดหรือแอปพลิเคชัน แล้วใช้นโยบาย
การเข้าถึงบริการเว็บที่ไม่น่าเชื่อถือที่ได้รับการตรวจสอบ
คุณสามารถใช้ Cloud SWP เพื่อให้สิทธิ์เข้าถึงบริการเว็บที่ไม่น่าเชื่อถือที่ตรวจสอบแล้ว Cloud SWP จะระบุการรับส่งข้อมูลที่ไม่เป็นไปตามนโยบายและบันทึกไว้ใน Cloud Logging (การบันทึก) จากนั้นคุณจะตรวจสอบการใช้อินเทอร์เน็ต ค้นพบภัยคุกคามต่อเครือข่าย และตอบสนองต่อภัยคุกคามได้
การควบคุมนโยบายแบบละเอียดสำหรับ Google APIs
คุณสามารถใช้ Cloud SWP เพื่อกำหนดนโยบายแบบละเอียดสำหรับ Google API เช่น คุณสามารถตั้งค่านโยบายระดับที่เก็บข้อมูล/ออบเจ็กต์โดยใช้ประโยชน์จาก Common Expression Language (CEL)
ฟีเจอร์ที่รองรับ
Cloud SWP รองรับฟีเจอร์ต่อไปนี้
บริการพร็อกซีที่ชัดเจน
ต้องกำหนดค่าไคลเอ็นต์อย่างชัดแจ้งเพื่อใช้พร็อกซีเซิร์ฟเวอร์ พร็อกซี SWP ของ Cloud จะแยกไคลเอ็นต์ออกจากอินเทอร์เน็ตโดยการสร้างการเชื่อมต่อ TCP ใหม่ในนามของไคลเอ็นต์
การปรับขนาดอัตโนมัติของพร็อกซี Envoy ของ Cloud SWP
รองรับการปรับขนาดพูลพร็อกซี Envoy และความจุของพูลในภูมิภาคโดยอัตโนมัติ ซึ่งช่วยให้มั่นใจได้ถึงประสิทธิภาพที่สม่ำเสมอในช่วงที่มีความต้องการสูงในราคาที่ต่ำที่สุด
นโยบายการเข้าถึงขาออกแบบโมดูล
Cloud SWP รองรับนโยบายขาออกต่อไปนี้โดยเฉพาะ
- ข้อมูลระบุแหล่งที่มาตามแท็กที่ปลอดภัย บัญชีบริการ หรือที่อยู่ IP
- ปลายทางตาม URL, ชื่อโฮสต์
- คำขอตามวิธีการ ส่วนหัว หรือ URL โดยสามารถระบุ URL ได้โดยใช้รายการ ไวลด์การ์ด หรือรูปแบบ
- การเข้ารหัสจากต้นทางถึงปลายทาง: อุโมงค์ไคลเอ็นต์พร็อกซีอาจส่งผ่าน TLS นอกจากนี้ Cloud SWP ยังรองรับ HTTP/S CONNECT สำหรับการเชื่อมต่อ TLS จากต้นทางถึงปลายทางที่ไคลเอ็นต์เริ่มต้นไปยังเซิร์ฟเวอร์ปลายทางด้วย
การผสานรวม Cloud NAT ที่ง่ายขึ้น
Cloud NAT จะจัดสรรที่อยู่ IP สาธารณะเพิ่มเติมโดยอัตโนมัติเมื่อชุดพร็อกซีที่ให้บริการการรับส่งข้อมูล Cloud SWP เพิ่มขึ้น
นอกจากนี้ ที่อยู่ IP สาธารณะแบบคงที่ที่กำหนดเองยังเป็นอีกตัวเลือกหนึ่งสำหรับผู้ที่ต้องการมี IP ขาออกที่ทราบ
การผสานรวมบันทึกการตรวจสอบ Cloud และชุดเครื่องมือการดำเนินการของ Google Cloud
บันทึกการตรวจสอบของ Cloud และชุดเครื่องมือการดำเนินการของ Google Cloud จะบันทึกกิจกรรมการดูแลระบบและคำขอเข้าถึงทรัพยากรที่เกี่ยวข้องกับ Cloud SWP นอกจากนี้ ยังบันทึกเมตริกและบันทึกธุรกรรมสำหรับคำขอที่พร็อกซีจัดการด้วย
การตรวจสอบ TLS
Secure Web Proxy มีบริการตรวจสอบ TLS ที่ช่วยให้คุณสกัดกั้นการรับส่งข้อมูล TLS ตรวจสอบคำขอที่เข้ารหัส และบังคับใช้นโยบายความปลอดภัยได้
- การผสานรวมอย่างใกล้ชิดกับ Certificate Authority Service (CAS) ซึ่งเป็นที่เก็บข้อมูลที่มีความพร้อมใช้งานสูงและปรับขนาดได้สำหรับ CA ส่วนตัว
- ความสามารถในการใช้รูทของความน่าเชื่อถือของคุณเองหากจำเป็น นอกจากนี้ คุณยังใช้ CA ระดับรูทที่มีอยู่เพื่อลงนามสำหรับ CA ระดับรองที่ CAS ถือครองได้ด้วย หรือจะสร้างใบรับรองรูทใหม่ภายใน CAS ก็ได้หากต้องการ
- เกณฑ์การถอดรหัสแบบละเอียดโดยใช้ SessionMatcher และ ApplicationMatcher ภายในกฎนโยบาย Secure Web Proxy เกณฑ์นี้รวมถึงการจับคู่โฮสต์ที่อยู่ในรายการ URL, นิพจน์ทั่วไป, ช่วงที่อยู่ IP และนิพจน์ที่คล้ายกัน หากจำเป็น คุณสามารถรวมเกณฑ์กับนิพจน์บูลีนได้
- นโยบาย Secure Web Proxy แต่ละรายการสามารถกำหนดค่าด้วยนโยบายการตรวจสอบ TLS และพูล CA ของตัวเองได้ หรือนโยบาย Secure Web Proxy หลายรายการจะแชร์นโยบายการตรวจสอบ TLS รายการเดียวก็ได้
สิ่งที่คุณจะได้เรียนรู้
- วิธีติดตั้งใช้งานและจัดการ Cloud SWP
สิ่งที่คุณต้องมี
- ความรู้เกี่ยวกับการติดตั้งใช้งานอินสแตนซ์และการกำหนดค่าคอมโพเนนต์เครือข่าย
- ความรู้เกี่ยวกับการกำหนดค่าไฟร์วอลล์ VPC
2. สภาพแวดล้อมการทดสอบ
Codelab นี้จะใช้ประโยชน์จาก VPC เดียว ทรัพยากรการประมวลผลในสภาพแวดล้อมนี้จะส่งข้อมูลขาออกโดยใช้ Cloud SWP ตามที่แสดงในแผนภาพด้านล่าง

ใน Lab นี้ เราจะมี VM ภาระงาน 2 รายการ
ไคลเอ็นต์ A จะได้รับการกำหนดค่าให้ส่งคำขอ HTTP/HTTPS ทั้งหมดไปยัง Cloud SWP
ไคลเอ็นต์ B จะไม่ได้รับการกำหนดค่าให้ส่งคำขอ HTTP/HTTPS ไปยัง Cloud SWP อย่างชัดเจน แต่จะใช้ประโยชน์จาก Cloud NAT สำหรับการรับส่งข้อมูลที่มุ่งหน้าไปยังอินเทอร์เน็ตแทน
3. ก่อนเริ่มต้น
Codelab ต้องใช้โปรเจ็กต์เดียว
ตรวจสอบว่าได้ตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว
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. เปิดใช้ API
เปิดใช้ API เพื่อใช้ผลิตภัณฑ์
gcloud services enable networksecurity.googleapis.com gcloud services enable certificatemanager.googleapis.com gcloud services enable networkservices.googleapis.com
5. สร้างเครือข่าย VPC, ซับเน็ต และซับเน็ตเฉพาะพร็อกซี
เครือข่าย VPC
สร้าง codelab-swp-vpc VPC:
gcloud compute networks create $prefix-vpc --subnet-mode=custom
ซับเน็ต
สร้างซับเน็ตที่เกี่ยวข้องในภูมิภาคที่เลือก
gcloud compute networks subnets create $prefix-vpc-subnet \ --range=10.10.10.0/24 --network=$prefix-vpc --region=$region
ซับเน็ตเฉพาะพร็อกซี
สร้างซับเน็ตเฉพาะพร็อกซีในภูมิภาคที่เลือกโดยทำดังนี้
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. สร้างกฎไฟร์วอลล์
หากต้องการอนุญาตให้ IAP เชื่อมต่อกับอินสแตนซ์ VM ให้สร้างกฎไฟร์วอลล์ที่มีลักษณะดังนี้
- มีผลกับอินสแตนซ์ VM ทั้งหมดที่คุณต้องการให้เข้าถึงได้โดยใช้ IAP
- อนุญาตการรับส่งข้อมูลขาเข้าจากช่วง IP 35.235.240.0/20 ช่วงนี้มีที่อยู่ IP ทั้งหมดที่ IAP ใช้สำหรับการส่งต่อ TCP
จาก Cloud Shell
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. สร้าง Cloud Router และ Cloud NAT
สร้าง Cloud Router สำหรับ Cloud NAT
gcloud compute routers create ${prefix}-cr \
--region=$region \
--network=${prefix}-vpc
สร้างเกตเวย์ Cloud NAT สำหรับไคลเอ็นต์ 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. สร้างนโยบายความปลอดภัยของเกตเวย์
สร้างไฟล์ YAML ที่มีข้อมูลที่เกี่ยวข้องกับนโยบาย
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
เรียกใช้คำสั่ง gcloud เพื่อสร้างนโยบายจากไฟล์ yaml
gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}
9. สร้างกฎนโยบายความปลอดภัยของเกตเวย์
สร้างไฟล์ yaml ที่มีกฎ กฎเหล่านี้แสดงใน Common Expression Language (CEL) ใน Lab นี้จะใช้กฎง่ายๆ ที่จะอนุญาตการเข้าชมไปยังโดเมน .com และบล็อกโดเมนอื่นๆ ทั้งหมด
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
ตอนนี้เราสามารถเชื่อมโยงกฎกับนโยบายความปลอดภัยของเกตเวย์ได้แล้ว
gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy
10. สร้างใบรับรองและอัปโหลดไปยัง Cloud Certificate Manager
สร้างใบรับรองเพื่อสิ้นสุดการรับส่งข้อมูลของเวิร์กโหลด
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"
อัปโหลดใบรับรองไปยังตัวจัดการใบรับรองของระบบคลาวด์เพื่อให้ SWP อ้างอิงใบรับรองในนโยบายเกตเวย์ความปลอดภัยได้
gcloud certificate-manager certificates create ${prefix}-cert --location=${region} --private-key-file=/tmp/key.pem --certificate-file=/tmp/cert.pem
11. สร้างเกตเวย์ SWP
สร้างไฟล์ YAML สำหรับเกตเวย์ SWP เพื่ออ้างอิงข้อมูลก่อนหน้า เช่น ใบรับรอง นโยบายความปลอดภัยของเกตเวย์ เครือข่าย และเครือข่ายย่อย
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
สร้างเกตเวย์
gcloud network-services gateways import ${prefix}-swp --source=/tmp/gateway.yaml --location=${region}
ยืนยันว่ามีการสร้างเกตเวย์แล้ว
gcloud network-services gateways describe ${prefix}-swp --location ${region}
12. สร้างอินสแตนซ์ Compute
เนื่องจาก Cloud SWP เป็นพร็อกซีที่ชัดเจน เราจึงต้องระบุ IP พร็อกซีสำหรับการเข้าชมของภาระงานอย่างชัดเจน ไคลเอ็นต์ A ของอินสแตนซ์ Compute จะมีการตั้งค่าตัวแปรสภาพแวดล้อม แต่ ClientB จะไม่ทำ
สร้างอินสแตนซ์การประมวลผล ClientA และ 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. การจับคู่เซสชันการทดสอบ
SSH เข้าสู่ VM การประมวลผล "clienta" ที่สร้างขึ้นเมื่อเร็วๆ นี้ VM นี้มีการตั้งค่าตัวแปรสภาพแวดล้อมให้ใช้ Cloud SWP
จาก Cloud Shell
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
เรียกใช้การค้นหาในเว็บเพื่อตรวจสอบฟังก์ชันการทำงาน เราต้องใช้ -proxy-insecure เนื่องจากเราสร้างใบรับรองที่ลงนามด้วยตนเองสำหรับแล็บนี้
curl https://google.com --proxy-insecure
ผลลัพธ์ที่คาดไว้
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>
ดังที่คุณเห็น คำขอ "สำเร็จ" เราคาดว่าจะเห็นการเปลี่ยนเส้นทาง 301 เนื่องจากเว็บไซต์เปลี่ยนเส้นทางไปยัง https://www.google.com
การเรียกใช้คำสั่งต่อไปนี้จะแสดงบันทึกแบบละเอียดพร้อมรายละเอียดเกี่ยวกับการเชื่อมต่อ
curl https://google.com --proxy-insecure -v
ไฮไลต์เอาต์พุตบางรายการเพื่อแสดงรายละเอียดการเชื่อมต่อพร็อกซี ใบรับรอง และปลายทาง
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! ...
คุณสามารถลองใช้โดเมน .com อื่นๆ เพื่อยืนยันฟังก์ชันการทำงานได้
ตอนนี้มาลองใช้โดเมนอื่นๆ ที่ไม่ใช่ .com เพื่อยืนยันลักษณะการทำงานของการบล็อกเริ่มต้นกัน
curl https://wikipedia.org --proxy-insecure
ผลลัพธ์ที่คาดไว้
curl: (56) Received HTTP code 403 from proxy after CONNECT
ในทำนองเดียวกัน ให้ดูการบันทึกเอาต์พุตแบบละเอียดและยืนยันว่า Cloud SWP บล็อกการเข้าชมนี้
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
คุณลองใช้โดเมนอื่นๆ เพื่อยืนยันลักษณะการทำงานได้เช่นกัน
ออกจากเซสชัน SSH ไปยัง "clienta" แล้วเริ่มการเชื่อมต่อ SSH ใหม่ไปยัง "clientb"
gcloud compute ssh clientb --zone=$zone --tunnel-through-iap
เรียกใช้คำสั่ง curl เพื่อตรวจสอบลักษณะการทำงาน
curl https://google.com
ซึ่งควรทำงานได้ตามที่คาดไว้ใน VM ของไคลเอ็นต์
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>
การทดสอบกับโดเมน org
curl https://wikipedia.org
ซึ่งเป็นไปตามที่คาดไว้เนื่องจาก clientb ไม่ได้ใช้ประโยชน์จาก 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>
ทดสอบการส่งการรับส่งข้อมูลผ่าน Cloud SWP อย่างชัดเจน
curl -x https://10.10.10.50:443/ https://wikipedia.org --proxy-insecure
เราพบว่าการเข้าชมนี้ถูกปฏิเสธผ่านนโยบาย SWP ของ Cloud
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
ดังที่คุณได้ยืนยันแล้ว การเข้าชมที่ใช้ประโยชน์จาก Cloud SWP จะได้รับการบังคับใช้กับนโยบายความปลอดภัยที่กำหนดค่าไว้ ระบบจะอนุญาตการเข้าชมที่มุ่งไปยัง .com และปฏิเสธปลายทางอื่นๆ ทั้งหมด
ออกจากไคลเอ็นต์ B
14. อัปเดตกฎนโยบายความปลอดภัยของเกตเวย์สำหรับ ApplicationMatching
มาอัปเดตกฎให้ตรงกับรายละเอียดระดับแอปพลิเคชันกัน เราจะสร้างกฎเพื่อดูเส้นทางการขอและอนุญาตเฉพาะเมื่อตรงกับ 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
ตอนนี้เราสามารถเชื่อมโยงกฎที่อัปเดตกับนโยบายความปลอดภัยของเกตเวย์ได้แล้ว
gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy
15. การทดสอบกฎ ApplicationMatcher
SSH เข้าสู่ VM ของ Compute สำหรับไคลเอ็นต์ VM นี้มีการตั้งค่าตัวแปรสภาพแวดล้อมให้ใช้ Cloud SWP
จาก Cloud Shell
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
เรียกใช้การค้นหาในเว็บเพื่อตรวจสอบฟังก์ชันการทำงาน เราต้องใช้ -proxy-insecure เนื่องจากเราสร้างใบรับรองที่ลงนามด้วยตนเองสำหรับแล็บนี้
curl http://google.com --proxy-insecure
โปรดทราบว่าคำค้นหานี้จะล้มเหลวเมื่อก่อนหน้านี้ผ่าน
Access denied
เส้นทางคำขออื่นๆ นอกเหนือจาก "index.html" ควรถูกบล็อกด้วยรหัส 403 คุณสามารถทดสอบเพิ่มเติมได้
แก้ไขการค้นหาให้มีเส้นทาง /index.html
curl http://google.com/index.html --proxy-insecure
คำขอนี้ควรสำเร็จ
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>
เราคาดว่าจะเห็นการเปลี่ยนเส้นทาง 301 เนื่องจากเว็บไซต์เปลี่ยนเส้นทางไปยัง http://www.google.com/index.html
โปรดทราบว่านี่คือคำขอ HTTP จากนั้นคุณจะต้องเปิดใช้ SWP เพื่อให้มีความสามารถในการตรวจสอบ TLS
จากนั้นเรียกใช้คำค้นหาเดียวกันผ่าน TLS
curl -k https://google.com/index.html --proxy-insecure
ผลลัพธ์ที่คาดไว้
curl: (56) Received HTTP code 403 from proxy after CONNECT
คำขอนี้ควรล้มเหลวเนื่องจากไม่ได้กำหนดค่า SWP ให้ตรวจสอบ TLS และไม่สามารถประเมินเส้นทางเทียบกับกฎ applicationMatcher ได้
ออกจาก clenta
16. เปิดใช้การตรวจสอบ TLS
หากไม่มีการตรวจสอบ TLS, applicationMatcher จะไม่ตรงกับการเข้าชม HTTPS
"applicationMatcher" อนุญาตให้กรองรายการต่อไปนี้
- แผนที่ส่วนหัวของคำขอ
- เมธอดคำขอ
- ขอโฮสต์
- เส้นทางคำขอ
- คำค้นหาของคำขอ
- รูปแบบคำขอ
- URL คำขอแบบเต็ม
- ขอ User-Agent
สร้างบัญชีบริการ
บัญชีบริการนี้จะมีสิทธิ์สร้างใบรับรองสำหรับการตรวจสอบ TLS ของ SWP
gcloud beta services identity create \
--service=networksecurity.googleapis.com \
--project=$project_id
ตรวจสอบว่าได้เปิดใช้ CAS แล้ว
gcloud services enable privateca.googleapis.com
สร้างพูล CA
gcloud privateca pools create $prefix-ca-pool \
--tier=devops \
--project=$project_id \
--location=$region
สร้าง CA ระดับรูท
CA ที่ใช้สำหรับการลงนามใบรับรอง
gcloud privateca roots create $prefix-root-ca --pool=$prefix-ca-pool \ --location=$region \ --auto-enable \ --subject="CN=my-swp-ca, O=SWP LLC"
สร้างไฟล์นโยบายการออกใบรับรอง
cat > /tmp/tls-issuance-policy.yaml << EOF
maximumLifetime: 1209600s
baselineValues:
caOptions:
isCa: false
keyUsage:
extendedKeyUsage:
serverAuth: true
EOF
สร้างไฟล์ yaml ของการตรวจสอบ 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
สร้างนโยบายการตรวจสอบ TLS
gcloud network-security tls-inspection-policies import $prefix-tls-inspection \
--source=/tmp/tls-inspection-policy.yaml \
--location=$region
อัปเดต CA Pool เพื่อใช้นโยบายการออกใบรับรอง
gcloud privateca pools update $prefix-ca-pool --issuance-policy=/tmp/tls-issuance-policy.yaml --location=$region
ให้สิทธิ์
ซึ่งจะช่วยให้บัญชีบริการใช้พูล CA เพื่อสร้างใบรับรองได้
gcloud privateca pools add-iam-policy-binding $prefix-ca-pool \
--member=$member \
--role='roles/privateca.certificateManager' \
--location=$region
อัปเดตไฟล์ YAML ของนโยบายให้รวมการตรวจสอบ 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
เรียกใช้คำสั่งเพื่อใช้กับนโยบายที่อัปเดต
gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}
อัปเดตกฎให้รวมการตรวจสอบ TLS
จากนั้นระบุกฎที่ควรมีแฟล็กการตรวจสอบ 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
เรียกใช้คำสั่งเพื่อใช้กฎที่อัปเดตแล้ว
gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy
17. ทดสอบการตรวจสอบ TLS
SSH เข้าสู่ VM ของ Compute สำหรับไคลเอ็นต์ VM นี้มีการตั้งค่าตัวแปรสภาพแวดล้อมให้ใช้ Cloud SWP
จาก Cloud Shell
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
เรียกใช้การค้นหาเว็บก่อนหน้าเพื่อยืนยันว่า SWP ทำการตรวจสอบ TLS เพื่อดึงเส้นทางหรือไม่
curl -k https://google.com/index.html --proxy-insecure
คราวนี้ควรจะสำเร็จเนื่องจาก SWP สามารถประเมิน ApplicationMatcher ได้
ผลลัพธ์ที่คาดไว้
<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>
เราตั้งค่า Cloud SWP เพื่อตรวจสอบ TLS และประเมินตรรกะของ ApplicationMatcher เรียบร้อยแล้ว
ออกจาก clienta
18. ขั้นตอนการล้างข้อมูล
จาก Cloud Shell ให้นำเกตเวย์ SWP, นโยบายความปลอดภัย, ใบรับรอง, อินสแตนซ์, Cloud NAT และ 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
นำเครือข่ายย่อย กฎ FW และ 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. ยินดีด้วย
ขอแสดงความยินดีที่ทำ Codelab เสร็จสมบูรณ์ คุณกำหนดค่าและติดตั้งใช้งานเว็บพร็อกซีที่ปลอดภัยสำหรับระบบคลาวด์ใน Google Cloud เรียบร้อยแล้ว
สิ่งที่เราได้พูดถึงไปแล้ว
- Cloud SWP และสิทธิประโยชน์