Cloud Güvenli Web Proxy (SWP) Codelab'i

1. Giriş

Cloud Secure Web Proxy

Cloud SWP, çıkış web trafiğini (HTTP/S) güvenli hale getirmenize yardımcı olmak için güvenli bir web proxy'si sağlayan, bulut öncelikli bir hizmettir. İstemcilerinizi, Cloud SWP'yi açıkça proxy olarak kullanacak şekilde yapılandırın. Web istekleri aşağıdaki kaynaklardan gelebilir:

  • Sanal makine (VM) örnekleri
  • Kapsayıcılar
  • Sunucusuz bağlayıcı kullanan sunucusuz ortam
  • VPC eşleme genelindeki iş yükleri
  • Cloud VPN veya Cloud Interconnect ile bağlanan Google Cloud dışındaki iş yükleri

Cloud SWP, bulut öncelikli kimliklere ve web uygulamalarına dayalı esnek ve ayrıntılı politikalar sağlar.

Avantajları

Aşağıda, Cloud SWP'nin bir kuruluşa sağlayabileceği avantajlara dair bazı örnekler verilmiştir:

Google Cloud'a taşıma

Cloud SWP, çıkış web trafiği için mevcut güvenlik politikalarınızı ve gereksinimlerinizi korurken Google Cloud'a geçmenize yardımcı olur. Başka bir yönetim konsolu gerektiren veya yapılandırma dosyalarının manuel olarak düzenlenmesini gerektiren üçüncü taraf çözümlerini kullanmaktan kaçınabilirsiniz.

Güvenilir harici web hizmetlerine erişim

Cloud SWP, ağınızı güvenli hale getirebilmeniz için çıkış web trafiğinize ayrıntılı erişim politikaları uygulamanıza olanak tanır. İş yükü veya uygulama kimlikleri oluşturup tanımlar ve ardından politikalar uygularsınız.

Güvenilmeyen web hizmetlerine erişimi izleme

Güvenilmeyen web hizmetlerine izlenen erişim sağlamak için Cloud SWP'yi kullanabilirsiniz. Cloud SWP, politikaya uymayan trafiği tanımlar ve Cloud Logging'e (Logging) kaydeder. Ardından internet kullanımını izleyebilir, ağınıza yönelik tehditleri keşfedebilir ve tehditlere yanıt verebilirsiniz.

Google API'leri için ayrıntılı politika kontrolleri

Google API'leri için ayrıntılı politikalar sağlamak üzere Cloud SWP'yi kullanabilirsiniz. Örneğin, Common Expression Language (CEL) kullanarak paket/nesne düzeyinde politikalar belirleyebilirsiniz.

Desteklenen Özellikler

Cloud SWP aşağıdaki özellikleri destekler:

Açık proxy hizmeti

İstemciler, proxy sunucuyu kullanacak şekilde açıkça yapılandırılmalıdır. Cloud SWP proxy'si, istemci adına yeni TCP bağlantıları oluşturarak istemcileri internetten yalıtır.

Cloud SWP Envoy proxy'lerini otomatik ölçeklendirme

Bir bölgedeki Envoy proxy havuzu boyutunun ve havuzun kapasitesinin otomatik olarak ayarlanmasını destekler. Bu sayede, yüksek talep dönemlerinde en düşük maliyetle tutarlı performans elde edilebilir.

Modüler çıkış erişim politikaları

Cloud SWP özellikle aşağıdaki çıkış politikalarını destekler:

  • Güvenli etiketlere, hizmet hesaplarına veya IP adreslerine dayalı kaynak kimliği.
  • URL'lere ve ana makine adlarına dayalı hedefler.
  • Yöntemlere, başlıklara veya URL'lere dayalı istekler. URL'ler listeler, joker karakterler veya kalıplar kullanılarak belirtilebilir.
  • Uçtan uca şifreleme: İstemci-proxy tünelleri TLS üzerinden geçebilir. Cloud SWP, istemci tarafından başlatılan ve hedef sunucuya yönelik uçtan uca TLS bağlantıları için HTTP/S CONNECT'i de destekler.

Basitleştirilmiş Cloud NAT Entegrasyonu

Cloud NAT, Cloud SWP trafiğine hizmet veren proxy'lerin sayısı arttığında otomatik olarak ek herkese açık IP adresleri sağlar.

Bilinen çıkış IP'lerine sahip olmak isteyenler için manuel statik genel IP adresleri de bir seçenektir.

Cloud Denetleme Günlükleri ve Google Cloud'un işlem paketi entegrasyonu

Cloud Audit Logs ve Google Cloud'un işlem paketi, Cloud SWP ile ilgili kaynaklar için yönetim etkinliklerini ve erişim isteklerini kaydeder. Ayrıca, proxy tarafından işlenen isteklerle ilgili metrikleri ve işlem günlüklerini de kaydederler.

TLS Denetimi

Güvenli Web Proxy, TLS trafiğini yakalamanıza, şifrelenmiş isteği incelemenize ve güvenlik politikalarını zorunlu kılmanıza olanak tanıyan bir TLS denetim hizmeti sunar.

  • Özel CA'lar için yüksek düzeyde kullanılabilir ve ölçeklenebilir bir depo olan Certificate Authority Service (CAS) ile sıkı entegrasyon.
  • Gerekirse kendi güven kökünüzü kullanabilme CAS'ler tarafından tutulan alt CA'lar için imza oluşturmak üzere mevcut bir kök CA'yı da kullanabilirsiniz. İsterseniz CAS'te yeni bir kök sertifika oluşturabilirsiniz.
  • Güvenli Web Proxy politika kurallarında SessionMatcher ve ApplicationMatcher'ı kullanarak ayrıntılı şifre çözme ölçütleri. Bu ölçüt, URL listelerinde, normal ifadelerde, IP adresi aralıklarında ve benzer ifadelerde bulunan eşleşen ana makineleri içerir. Gerekirse ölçütler Boole ifadeleriyle birleştirilebilir.
  • Her güvenli web proxy'si politikası, kendi TLS inceleme politikası ve CA havuzuyla yapılandırılabilir. Alternatif olarak, birden fazla güvenli web proxy'si politikası tek bir TLS denetimi politikasını paylaşabilir.

Neler öğreneceksiniz?

  • Cloud SWP'yi dağıtma ve yönetme

İhtiyacınız olanlar

  • Örnekleri dağıtma ve ağ bileşenlerini yapılandırma bilgisi
  • VPC Güvenlik Duvarı Yapılandırması Bilgisi

2. Test Ortamı

Bu codelab'de tek bir VPC kullanılacak. Bu ortamdaki bir bilgi işlem kaynağı, aşağıdaki şemada gösterildiği gibi Cloud SWP'yi kullanarak çıkış yapar.

1264e30caa136365.png

Bu laboratuvarda 2 iş yükü VM'si olacak.

A istemcisi, tüm HTTP/HTTPS isteklerini Cloud SWP'ye gönderecek şekilde yapılandırılır.

B istemcisi, HTTP/HTTPS isteklerini Cloud SWP'ye açıkça gönderecek şekilde yapılandırılmaz. Bunun yerine, internete yönelik trafik için Cloud NAT'den yararlanır.

3. Başlamadan önce

Codelab için tek bir proje gerekir.

Cloud Shell'de proje kimliğinizin ayarlandığından emin olun.

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'leri etkinleştir

Ürünleri kullanmak için API'leri etkinleştirin.

gcloud services enable networksecurity.googleapis.com
gcloud services enable certificatemanager.googleapis.com
gcloud services enable networkservices.googleapis.com

5. VPC ağı, alt ağ ve yalnızca proxy alt ağı oluşturma

VPC Ağı

codelab-swp-vpc VPC'sini oluşturun.

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

Alt ağ

Seçilen bölgede ilgili alt ağları oluşturun:

gcloud compute networks subnets create $prefix-vpc-subnet \
   --range=10.10.10.0/24 --network=$prefix-vpc --region=$region

Yalnızca proxy alt ağı

Seçili bölgede yalnızca proxy alt ağı oluşturun:

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. Güvenlik Duvarı Kuralları Oluşturma

IAP'nin sanal makine örneklerinize bağlanmasına izin vermek için aşağıdaki özellikleri içeren bir güvenlik duvarı kuralı oluşturun:

  • IAP kullanarak erişmek istediğiniz tüm sanal makine örnekleri için geçerlidir.
  • 35.235.240.0/20 IP aralığından gelen giriş trafiğine izin verir. Bu aralık, IAP'nin TCP yönlendirme için kullandığı tüm IP adreslerini içerir.

Cloud Shell'den:

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 ve Cloud NAT oluşturma

Cloud NAT için Cloud Router oluşturun.

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

B istemcisi için Cloud NAT ağ geçidi oluşturun.

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. Ağ Geçidi Güvenlik Politikası Oluşturma

Politikayla ilgili bilgileri içeren bir YAML dosyası oluşturun:

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

YAML dosyasından politikayı oluşturmak için gcloud komutunu çalıştırın:

gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}

9. Ağ Geçidi Güvenlik Politikası Kuralı Oluşturma

Kuralları içeren bir YAML dosyası oluşturun. Bu kurallar, Common Expression Language (CEL) ile gösterilir. Bu laboratuvarda, .com alan adlarına trafiğe izin veren ve diğer tüm alan adlarını engelleyen basit bir kural kullanılacaktır:

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

Şimdi kuralı ağ geçidi güvenlik politikasına bağlayabiliriz:

gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy

10. Sertifika oluşturma ve Cloud Certificate Manager'a yükleme

İş yükü trafiğini sonlandırmak için sertifika oluşturma:

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'nin güvenlik ağ geçidi politikasında referans verebilmesi için sertifikayı Cloud Certificate Manager'a yükleyin.

gcloud certificate-manager certificates create ${prefix}-cert --location=${region} --private-key-file=/tmp/key.pem --certificate-file=/tmp/cert.pem

11. SWP ağ geçidini oluşturma

SWP ağ geçidi için sertifika, ağ geçidi güvenlik politikası, ağ ve alt ağ gibi önceki bilgilere referans veren bir YAML dosyası oluşturun.

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

Ağ geçidini oluşturun:

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

Ağ geçidinin oluşturulduğunu onaylayın:

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

12. İşlem örnekleri oluşturma

Cloud SWP açık bir proxy olduğundan iş yükü trafiği için proxy IP'sini açıkça belirtmemiz gerekir. Compute örneği clientA'da ortam değişkeni ayarlanır. ClientB ise bunu yapmaz.

ClientA ve ClientB adlı işlem örneklerini oluşturun:

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. Oturum Eşleme Testi

Yakın zamanda oluşturulan "clienta" adlı Compute Engine sanal makinesine SSH üzerinden bağlanın. Bu sanal makinede, Cloud SWP'nin kullanılmasını sağlayacak ortam değişkeni ayarlanmıştır.

Cloud Shell'den:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

İşlevselliği doğrulamak için bazı web sorguları çalıştırın. Bu laboratuvar için kendinden imzalı bir sertifika oluşturduğumuzdan -proxy-insecure parametresini kullanmamız gerekir:

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

Beklenen çıktı:

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>

Gördüğünüz gibi, istek "başarılı" oldu. Web sitesi https://www.google.com adresine yönlendirdiği için 301 yönlendirmesi görmemiz beklenir.

Aşağıdaki komutun çalıştırılması, bağlantıyla ilgili ayrıntıları içeren ayrıntılı günlükler sağlar:

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

Proxy bağlantı ayrıntılarını, sertifikaları ve hedefi göstermek için bazı çıkışları vurgulama.

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!
...

İşlevselliği doğrulamak için diğer .com alanlarını deneyebilirsiniz.

Şimdi de varsayılan engelleme davranışını doğrulamak için .com dışındaki bazı alanları deneyelim:

curl https://wikipedia.org --proxy-insecure

Beklenen çıktı:

curl: (56) Received HTTP code 403 from proxy after CONNECT

Benzer şekilde, ayrıntılı çıkış günlüğüne bakarak Cloud SWP'nin bu trafiği engellediğini doğrulayın:

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

Davranışı doğrulamak için diğer alanları da deneyebilirsiniz.

"clienta" için SSH oturumundan çıkın ve "clientb" için yeni bir SSH bağlantısı başlatın.

gcloud compute ssh clientb --zone=$zone --tunnel-through-iap

Davranışı kontrol etmek için bazı curl komutlarını çalıştırın:

curl https://google.com

Bu, istemci VM'sinde beklendiği gibi çalışmalıdır:

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>

Kuruluş alanına karşı test etme:

curl https://wikipedia.org

Bu durum, clientb Cloud SWP'den yararlanmadığı için beklendiği gibi çalışır:

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>

Trafiği açıkça Cloud SWP üzerinden göndermeyi test etme:

curl -x https://10.10.10.50:443/ https://wikipedia.org --proxy-insecure 

Bu trafiğin Cloud SWP politikası aracılığıyla reddedildiğini görüyoruz:

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

Doğruladığınız gibi, Cloud SWP'den yararlanan trafik, yapılandırılan güvenlik politikasına göre zorunlu kılınıyor. .com'a yönelik trafiğe izin verilir ve diğer tüm hedefler reddedilir.

clientb'den çıkın.

14. ApplicationMatching için bir ağ geçidi güvenlik politikası kuralını güncelleme

Kuralı, uygulama düzeyindeki ayrıntılarla eşleşecek şekilde güncelleyelim. İstek yolunu inceleyecek ve yalnızca index.html ile eşleşirse isteğe izin verecek bir kural oluşturacağız.

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

Şimdi güncellenen kuralı ağ geçidi güvenlik politikasına bağlayabiliriz:

gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy

15. ApplicationMatcher kuralını test etme

clienta adlı Compute Engine sanal makinesine SSH üzerinden bağlanın. Bu sanal makinede, Cloud SWP'nin kullanılmasını sağlayacak ortam değişkeni ayarlanmıştır.

Cloud Shell'den:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

İşlevselliği doğrulamak için bazı web sorguları çalıştırın. Bu laboratuvar için kendinden imzalı bir sertifika oluşturduğumuzdan -proxy-insecure parametresini kullanmamız gerekir:

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

Bu sorgunun daha önce başarılı olmasına rağmen artık başarısız olduğunu fark edin.

Access denied

"index.html" dışındaki tüm istek yolları 403 ile engellenmelidir. Bu özelliği daha ayrıntılı test edebilirsiniz.

Sorguyu /index.html yolunu içerecek şekilde değiştirin.

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

Bu istek başarılı olmalıdır:

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>

Web sitesi http://www.google.com/index.html adresine yönlendirme yaptığından 301 yönlendirmesi görmemiz beklenir.

Bunun bir HTTP isteği olduğunu unutmayın. Ardından, TLS denetimi özelliklerine sahip olmak için SWP'yi etkinleştirmeniz gerekir.

Ardından aynı sorguyu TLS üzerinden çalıştırın:

curl -k https://google.com/index.html --proxy-insecure

Beklenen çıktı:

curl: (56) Received HTTP code 403 from proxy after CONNECT

SWP, TLS'yi inceleyecek şekilde yapılandırılmadığından ve yolu applicationMatcher kuralına göre değerlendiremediğinden bu istek başarısız olmalıdır.

clenta'dan çıkış yapın.

16. TLS denetimini etkinleştirme

TLS incelemesi olmadan applicationMatcher, HTTPS trafiğiyle eşleşmez.

"applicationMatcher" aşağıdaki öğelere göre filtrelemeye olanak tanır:

  • İstek başlıkları haritası
  • İstek yöntemi
  • İsteği gönderen ana makine
  • Yol iste
  • İstek sorgusu
  • İstek şeması
  • Tam istek URL'si
  • Kullanıcı aracısı isteği

Hizmet hesabı oluşturma

Bu hizmet hesabı, SWP TLS incelemesi için sertifika oluşturma iznine sahip olur.

gcloud beta services identity create \
    --service=networksecurity.googleapis.com \
    --project=$project_id

CAS'nin etkin olduğundan emin olun

gcloud services enable privateca.googleapis.com

CA havuzu oluşturma

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

Kök CA oluşturma

Sertifika imzalamak için kullanılan CA.

gcloud privateca roots create $prefix-root-ca --pool=$prefix-ca-pool \
  --location=$region \
  --auto-enable \
  --subject="CN=my-swp-ca, O=SWP LLC"

Sertifika verme politikası dosyası oluşturma

cat > /tmp/tls-issuance-policy.yaml << EOF
maximumLifetime: 1209600s
baselineValues:
  caOptions:
    isCa: false
  keyUsage:
    extendedKeyUsage:
      serverAuth: true
EOF

TLS denetimi için YAML dosyası oluşturma

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 denetim politikası oluşturma

gcloud network-security tls-inspection-policies import $prefix-tls-inspection \
    --source=/tmp/tls-inspection-policy.yaml \
    --location=$region

Sertifika verme politikasını kullanmak için CA havuzunu güncelleyin.

gcloud privateca pools update $prefix-ca-pool    --issuance-policy=/tmp/tls-issuance-policy.yaml --location=$region

İzin Ver

Bu, hizmet hesabınızın sertifika oluşturmak için CA havuzunu kullanmasına olanak tanır.

gcloud privateca pools add-iam-policy-binding $prefix-ca-pool \
    --member=$member \
    --role='roles/privateca.certificateManager' \
    --location=$region

TLS denetimini içerecek şekilde politika YAML'sini güncelleyin.

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

Güncellenen politikayı uygulamak için komutu çalıştırın.

gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}

TLS denetimini içerecek şekilde kuralları güncelleme

Ardından, hangi kuralların TLS denetimi "enabtlsInspectionEnabled: true" işaretine sahip olması gerektiğini belirtin.

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

Güncellenen kuralı uygulamak için komutu çalıştırın.

gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy

17. TLS denetimini test etme

clienta adlı Compute Engine sanal makinesine SSH üzerinden bağlanın. Bu sanal makinede, Cloud SWP'nin kullanılmasını sağlayacak ortam değişkeni ayarlanmıştır.

Cloud Shell'den:

gcloud compute ssh clienta --zone=$zone --tunnel-through-iap

Yolu almak için SWP'nin TLS denetimi gerçekleştirip gerçekleştirmediğini doğrulamak üzere önceki web sorgusunu çalıştırın.

curl -k https://google.com/index.html --proxy-insecure

Bu kez, SWP, ApplicationMatcher'ı değerlendirebileceği için başarılı olmalıdır.

Beklenen çıktı:

<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>

TLS'yi incelemek ve applicationMatcher mantığını değerlendirmek için Cloud SWP'yi başarıyla ayarladık.

Exit from clienta.

18. Temizleme adımları

Cloud Shell'den SWP ağ geçidini, güvenlik politikasını, sertifikaları, örnekleri, Cloud NAT'yi ve Cloud Router'ı kaldırın:

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

Alt ağları, güvenlik duvarı kurallarını ve VPC'leri kaldırın:

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. Tebrikler!

Codelab'i tamamladığınız için tebrik ederiz. Cloud Secure Web Proxy'yi Google Cloud'da başarıyla yapılandırıp dağıttınız.

İşlediğimiz konular

  • Cloud SWP ve avantajları