1. Wprowadzenie
Cloud Secure Web Proxy
Cloud SWP to usługa działająca głównie w chmurze, która udostępnia bezpieczny internetowy serwer proxy, który pomaga zabezpieczyć wychodzący ruch internetowy (HTTP/S). Klienty konfiguruje się w taki sposób, aby jawnie używały Cloud SWP jako serwera proxy. Żądania sieciowe mogą pochodzić z tych źródeł:
- Instancje maszyn wirtualnych
- Kontenery
- Bezserwerowe środowisko korzystające z bezserwerowego oprogramowania sprzęgającego
- Zadania w połączeniu równorzędnym VPC
- Zadania spoza Google Cloud połączone przez Cloud VPN lub Cloud Interconnect
Cloud SWP umożliwia elastyczne i szczegółowe zasady oparte na tożsamościach i aplikacjach internetowych działających głównie w chmurze.
Zalety
Poniżej znajdziesz kilka przykładów korzyści, które Cloud SWP może zapewnić organizacji:
Migracja do Google Cloud
Cloud SWP ułatwia migrację do Google Cloud przy zachowaniu dotychczasowych zasad zabezpieczeń i wymagań dotyczących wychodzącego ruchu internetowego. W ten sposób możesz uniknąć używania rozwiązań innych firm, które wymagają innej konsoli zarządzania, lub ręcznego edytowania plików konfiguracji.
Dostęp do zaufanych zewnętrznych usług internetowych
Cloud SWP umożliwia stosowanie szczegółowych zasad dostępu do wychodzącego ruchu internetowego, dzięki czemu możesz zabezpieczyć sieć. Możesz tworzyć i identyfikować tożsamości zadań lub aplikacji, a następnie stosować zasady.
Monitorowanie dostępu do niezaufanych usług internetowych
Cloud SWP umożliwia monitorowanie dostępu do niezaufanych usług internetowych. Cloud SWP identyfikuje ruch, który jest niezgodny z zasadami, i loguje go w usłudze Cloud Logging (Logging). Dzięki temu możesz monitorować korzystanie z internetu, wykrywać zagrożenia w sieci i reagować na nie.
Szczegółowe ustawienia zasad dla interfejsów API Google
Za pomocą Cloud SWP możesz określić szczegółowe zasady dla interfejsów API Google. Możesz na przykład skonfigurować zasady na poziomie zasobnika/obiektu za pomocą języka CEL (Common Expression Language).
Obsługiwane funkcje
Cloud SWP obsługuje te funkcje:
Bezpośrednia usługa pośrednicząca
Klienty muszą być jawnie skonfigurowane pod kątem używania serwera proxy. Serwer proxy Cloud SWP izoluje klienty od internetu, tworząc nowe połączenia TCP w imieniu klienta.
Autoskalowanie serwerów proxy Cloud SWP Envoy
Obsługuje automatyczne dostosowywanie rozmiaru puli serwera proxy Envoy i rozmiaru puli w regionie, co umożliwia stałą wydajność w okresach dużego zapotrzebowania przy najniższym koszcie.
Modułowe zasady dostępu wychodzącego
Cloud SWP obsługuje w szczególności te zasady ruchu wychodzącego:
- Tożsamość źródłowa oparta na bezpiecznych tagach, kontach usługi lub adresach IP.
- Miejsca docelowe oparte na adresach URL i nazwach hostów.
- Żądania zależne od metod, nagłówków lub adresów URL. Adresy URL można określać za pomocą list, symboli wieloznacznych lub wzorców.
- Pełne szyfrowanie: tunele klienta proxy mogą być przesyłane przez TLS. Cloud SWP obsługuje również połączenie HTTP/S w przypadku inicjowanych przez klienta, kompleksowych połączeń TLS z serwerem docelowym.
Uproszczona integracja Cloud NAT
Cloud NAT automatycznie udostępnia dodatkowe publiczne adresy IP, gdy rośnie liczba serwerów proxy, które obsługują ruch Cloud SWP.
Ręcznie statyczne publiczne adresy IP są również opcją dla osób, które chcą mieć znane adresy IP ruchu wychodzącego.
Logi kontrolne Cloud i integracja z pakietem operacyjnym Google Cloud
Logi kontrolne Cloud i pakiet operacyjny Google Cloud rejestrują działania administracyjne i żądania dostępu do zasobów związanych z Cloud SWP. Rejestrują także wskaźniki i logi transakcji dotyczące żądań obsługiwanych przez serwer proxy.
Inspekcja TLS
Bezpieczny internetowy serwer proxy oferuje usługę kontroli TLS, która umożliwia przechwytywanie ruchu TLS, sprawdzanie zaszyfrowanego żądania i egzekwowanie zasad bezpieczeństwa.
- Ścisła integracja z usługą Certificate Authority Service (CAS), która zapewnia wysoką dostępność i skalowalne repozytorium prywatnych urzędów certyfikacji.
- Możliwość wykorzystania własnego źródła zaufania w razie potrzeby. Możesz też użyć istniejącego głównego urzędu certyfikacji do podpisywania podrzędnych urzędów certyfikacji przechowywanych przez CAS. Jeśli wolisz, możesz wygenerować nowy certyfikat główny w CAS.
- Szczegółowe kryteria odszyfrowywania przy użyciu elementów SessionMatcher i ApplicationMatcher w regułach zasad bezpiecznego internetowego serwera proxy. Te kryteria obejmują pasujące hosty obecne na listach adresów URL, wyrażeniach regularnych, zakresach adresów IP i podobnych wyrażeniach. W razie potrzeby kryteria można łączyć z wyrażeniami logicznymi.
- Każda zasada bezpiecznego internetowego serwera proxy można skonfigurować za pomocą własnej zasady kontroli TLS i puli urzędów certyfikacji. Z kolei kilka zasad bezpiecznego internetowego serwera proxy może współdzielić jedną zasadę kontroli TLS.
Czego się nauczysz
- Jak wdrożyć Cloud SWP i nim zarządzać.
Czego potrzebujesz
- Wiedza na temat wdrażania instancji i konfigurowania komponentów sieci
- Wiedza o konfiguracji zapory sieciowej VPC
2. Środowisko testowe
To ćwiczenie w Codelabs będzie wykorzystywać jedną sieć VPC. Zasób obliczeniowy w tym środowisku będzie wychodzący za pomocą Cloud SWP, jak widać na schemacie poniżej.
W tym module będziemy mieć 2 maszyny wirtualne zadań.
Klient A zostanie skonfigurowany tak, aby wysyłać do Cloud SWP wszystkie żądania HTTP/HTTPS.
Klient B NIE zostanie skonfigurowany tak, aby jawnie wysyłał żądania HTTP/HTTPS do Cloud SWP, ale będzie wykorzystywać Cloud NAT do obsługi ruchu związanego z internetem.
3. Zanim zaczniesz
Ćwiczenia z programowania wymagają 1 projektu.
Sprawdź w Cloud Shell, czy identyfikator projektu jest skonfigurowany
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. Włącz interfejsy API
Włącz interfejsy API, aby korzystać z usług
gcloud services enable networksecurity.googleapis.com gcloud services enable certificatemanager.googleapis.com gcloud services enable networkservices.googleapis.com
5. Utwórz sieć VPC, podsieć i podsieć tylko-proxy
Sieć VPC
Utwórz sieć VPC codelab-swp-vpc:
gcloud compute networks create $prefix-vpc --subnet-mode=custom
Podsieć
Utwórz odpowiednie podsieci w wybranym regionie:
gcloud compute networks subnets create $prefix-vpc-subnet \ --range=10.10.10.0/24 --network=$prefix-vpc --region=$region
Podsieć tylko-proxy
Utwórz podsieć tylko-proxy w wybranym regionie:
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. Utwórz reguły zapory sieciowej
Aby umożliwić IAP nawiązywanie połączeń z maszynami wirtualnymi, utwórz regułę zapory sieciowej, która:
- Dotyczy wszystkich instancji maszyn wirtualnych, które mają być dostępne za pomocą IAP.
- Zezwala na ruch przychodzący z zakresu adresów IP 35.235.240.0/20. Ten zakres zawiera wszystkie adresy IP używane przez IAP do przekierowywania TCP.
W 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. Utwórz router Cloud Router Cloud NAT
Utwórz router Cloud Router dla Cloud NAT.
gcloud compute routers create ${prefix}-cr \ --region=$region \ --network=${prefix}-vpc
Utwórz bramę Cloud NAT dla klienta 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. Tworzenie zasady zabezpieczeń bramy
Utwórz plik yaml, który zawiera istotne informacje o zasadzie:
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
Uruchom polecenie gcloud, aby utworzyć zasadę na podstawie pliku yaml:
gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}
9. Tworzenie reguły zasady zabezpieczeń bramy
utworzyć plik yaml zawierający reguły; Reguły te są zapisane w języku CEL (Common Expression Language). W tym module użyjesz prostej reguły, która będzie zezwalać na ruch w domenach .com i blokować wszystkie inne:
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
Teraz możemy powiązać regułę z zasadą zabezpieczeń bramy:
gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy
10. Utwórz certyfikat i prześlij go do menedżera certyfikatów Google Cloud
Utwórz certyfikat, aby zakończyć ruch związany z zadaniami:
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"
Prześlij certyfikat do menedżera certyfikatów Google Cloud, aby narzędzie SWP mogło odwoływać się do niego w zasadzie bramy zabezpieczeń.
gcloud certificate-manager certificates create ${prefix}-cert --location=${region} --private-key-file=/tmp/key.pem --certificate-file=/tmp/cert.pem
11. Tworzenie bramy SWP
Utwórz plik yaml bramy SWP, aby odwoływać się do poprzednich informacji, takich jak certyfikat, zasady zabezpieczeń bramy, sieć i podsieć.
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
Utwórz bramę:
gcloud network-services gateways import ${prefix}-swp --source=/tmp/gateway.yaml --location=${region}
Sprawdź, czy brama została utworzona:
gcloud network-services gateways describe ${prefix}-swp --location ${region}
12. Tworzenie instancji Compute
Ponieważ Cloud SWP jest jawnym serwerem proxy, musimy jawnie określić adres IP serwera proxy dla ruchu związanego z zadaniami. Instancja Compute clientA będzie miała ustawioną zmienną środowiskową. Klient B tego nie zrobi.
Utwórz instancje obliczeniowe ClientA i Klient B:
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. Testowanie dopasowania sesji
Łączenie się z „klientem” przez SSH Niedawno utworzono maszynę wirtualną Compute. Ta maszyna wirtualna ma zmienną środowiskową ustawioną na korzystanie z Cloud SWP.
W Cloud Shell:
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
Uruchom kwerendy sieci Web, aby sprawdzić działanie funkcji. Wymagamy ustawienia –proxy-insecure, ponieważ utworzyliśmy samodzielnie podpisany certyfikat na potrzeby tego modułu:
curl https://google.com --proxy-insecure
Oczekiwane dane wyjściowe:
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>
Jak widać, żądanie zostało zrealizowane. Spodziewamy się przekierowania 301, ponieważ witryna przekierowuje na https://www.google.com.
Uruchomienie następującego polecenia spowoduje wyświetlenie szczegółowych logów ze szczegółami połączenia:
curl https://google.com --proxy-insecure -v
Wyróżnij niektóre dane wyjściowe, aby wyświetlić szczegóły połączenia z serwerem proxy, certyfikaty i miejsce docelowe.
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! ...
Możesz wypróbować inne domeny .com, aby sprawdzić działanie usługi.
Teraz wypróbujmy kilka innych domen spoza domeny .com, aby sprawdzić domyślne działanie blokujące:
curl https://wikipedia.org --proxy-insecure
Oczekiwane dane wyjściowe:
curl: (56) Received HTTP code 403 from proxy after CONNECT
Sprawdź też szczegółowe logowanie danych wyjściowych i upewnij się, że Cloud SWP blokuje ten ruch:
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
Możesz wypróbować także inne domeny, aby sprawdzić działanie usługi.
Wyjdź z sesji SSH dla klienta „clienta” i zainicjuj nowe połączenie SSH z klientem.
gcloud compute ssh clientb --zone=$zone --tunnel-through-iap
Uruchom polecenia curl, by sprawdzić działanie:
curl https://google.com
To powinno działać zgodnie z oczekiwaniami maszyny wirtualnej klienta:
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>
Testowanie w domenie organizacji:
curl https://wikipedia.org
Działa to zgodnie z oczekiwaniami, ponieważ klient nie korzysta z 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>
Przetestuj wysyłanie ruchu bezpośrednio za pomocą Cloud SWP:
curl -x https://10.10.10.50:443/ https://wikipedia.org --proxy-insecure
Widzimy, że ten ruch jest odrzucany przez zasadę 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
Zgodnie z Twoimi ustaleniami ruch wykorzystujący Cloud SWP jest egzekwowany zgodnie ze skonfigurowaną zasadą zabezpieczeń. Ruch kierowany do domeny .com jest dozwolony, a wszystkie inne miejsca docelowe są zabronione.
Wyjdź z klienta.
14. Aktualizowanie reguły zasady zabezpieczeń bramy na potrzeby dopasowywania aplikacji
Zaktualizujmy regułę tak, aby pasowała do szczegółów na poziomie aplikacji. Stworzymy regułę sprawdzającą ścieżkę żądania i zezwalając na nią tylko wtedy, gdy pasuje ona do pliku 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
Teraz możemy powiązać zaktualizowaną regułę z zasadą zabezpieczeń bramy:
gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy
15. Testowanie reguły ApplicationMatcher
Połącz się z maszyną wirtualną Clienta Compute przez SSH. Ta maszyna wirtualna ma zmienną środowiskową ustawioną na korzystanie z Cloud SWP.
W Cloud Shell:
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
Uruchom kwerendy sieci Web, aby sprawdzić działanie funkcji. Wymagamy ustawienia –proxy-insecure, ponieważ utworzyliśmy samodzielnie podpisany certyfikat na potrzeby tego modułu:
curl http://google.com --proxy-insecure
Zwróć uwagę, że to zapytanie zakończy się niepowodzeniem, jeśli zostało przekazane wcześniej.
Access denied
Każda ścieżka żądania oprócz „index.html” powinien zostać zablokowany po wystąpieniu błędu 403. Zachęcamy do dalszego testowania.
Zmodyfikuj zapytanie, tak aby zawierało ścieżkę /index.html
curl http://google.com/index.html --proxy-insecure
To żądanie powinno zostać zrealizowane:
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>
Spodziewane jest przekierowanie 301, bo witryna przekierowuje na stronę http://www.google.com/index.html.
Zwróć uwagę, że jest to żądanie HTTP. Następnie musisz włączyć funkcję SWP, aby uzyskać dostęp do funkcji inspekcji TLS.
Następnie uruchom to samo zapytanie, ale z użyciem TLS:
curl -k https://google.com/index.html --proxy-insecure
Oczekiwane dane wyjściowe:
curl: (56) Received HTTP code 403 from proxy after CONNECT
To żądanie powinno zakończyć się niepowodzeniem, ponieważ narzędzie SWP nie zostało skonfigurowane do badania TLS i nie może ocenić ścieżki w odniesieniu do reguły applicationMatcher.
Wyjdź z programu Centa.
16. Włącz inspekcję TLS
Bez inspekcji TLS funkcja applicationMatcher nie będzie dopasowywać aplikacji pod kątem ruchu HTTPS.
"applicationMatcher" pozwala filtrować następujące elementy:
- Mapa nagłówków żądań
- Metoda żądania
- Host żądania
- Ścieżka żądania
- Zapytanie wysłane
- Schemat żądania
- URL pełnego żądania
- Poproś o klienta użytkownika
Utwórz konto usługi
To konto usługi będzie mieć uprawnienia do generowania certyfikatów na potrzeby kontroli TLS przy użyciu protokołu SWP.
gcloud beta services identity create \ --service=networksecurity.googleapis.com \ --project=$project_id
Sprawdź, czy włączono CAS
gcloud services enable privateca.googleapis.com
Utwórz pulę urzędów certyfikacji
gcloud privateca pools create $prefix-ca-pool \ --tier=devops \ --project=$project_id \ --location=$region
Utwórz główny urząd certyfikacji
Urząd certyfikacji używany do podpisywania certyfikatów.
gcloud privateca roots create $prefix-root-ca --pool=$prefix-ca-pool \ --location=$region \ --auto-enable \ --subject="CN=my-swp-ca, O=SWP LLC"
Tworzenie pliku zasady wystawiania certyfikatów
cat > /tmp/tls-issuance-policy.yaml << EOF maximumLifetime: 1209600s baselineValues: caOptions: isCa: false keyUsage: extendedKeyUsage: serverAuth: true EOF
Utwórz plik yaml inspekcji 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
Utwórz zasadę inspekcji TLS
gcloud network-security tls-inspection-policies import $prefix-tls-inspection \ --source=/tmp/tls-inspection-policy.yaml \ --location=$region
Zaktualizuj pulę urzędów certyfikacji, aby używać zasady wystawiania certyfikatów
gcloud privateca pools update $prefix-ca-pool --issuance-policy=/tmp/tls-issuance-policy.yaml --location=$region
Przyznaj uprawnienia
Dzięki temu Twoje konto usługi będzie mogło używać puli urzędów certyfikacji do generowania certyfikatów.
gcloud privateca pools add-iam-policy-binding $prefix-ca-pool \ --member=$member \ --role='roles/privateca.certificateManager' \ --location=$region
Zaktualizuj plik yaml zasad, aby uwzględnić kontrolę 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
Uruchom polecenie zastosuj zaktualizowaną zasadę
gcloud network-security gateway-security-policies import ${prefix}-policy --source=/tmp/policy.yaml --location=${region}
Zaktualizuj reguły, aby uwzględnić kontrolę TLS
Następnie określ, które reguły powinny mieć kontrolę TLS „enabtlsInspectionEnabled: true” flaga.
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
Uruchom polecenie, aby zastosować zaktualizowaną regułę
gcloud network-security gateway-security-policies rules import rule-com --source=/tmp/rule-com.yaml --location=${region} --gateway-security-policy=${prefix}-policy
17. Testowanie inspekcji TLS
Połącz się z maszyną wirtualną Clienta Compute przez SSH. Ta maszyna wirtualna ma zmienną środowiskową ustawioną na korzystanie z Cloud SWP.
W Cloud Shell:
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
Uruchom poprzednią kwerendę sieci Web, aby sprawdzić, czy program SWP przeprowadza kontrolę TLS w celu pobrania ścieżki
curl -k https://google.com/index.html --proxy-insecure
Tym razem powinno się udać, ponieważ SWP może ocenić atrybut ApplicationMatcher.
Oczekiwane dane wyjściowe:
<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>
Udało nam się skonfigurować Cloud SWP, aby zbadać TLS i ocenić logikę applicationMatcher.
Wyjście z klienta.
18. Procedura czyszczenia
W Cloud Shell usuń bramę SWP, zasadę zabezpieczeń, certyfikaty, instancje, Cloud NAT i 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
Usuń podsieci, reguły FW i sieci 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. Gratulacje!
Gratulujemy ukończenia ćwiczeń z programowania. Udało Ci się skonfigurować i wdrożyć Cloud Secure Web Proxy w Google Cloud.
Omówione zagadnienia
- Cloud SWP i korzyści