1. Wprowadzenie
Zasady zapory sieciowej
Zapory sieciowe to podstawowe elementy składowe bezpiecznego środowiska chmurowego. Wcześniej wprowadziliśmy zasady zapory sieciowej na poziomie organizacji i folderu, pozostawiając zapory sieciowe VPC bez zmian. W tej wersji rozszerzymy strukturę zasad zapory sieciowej do poziomu sieci VPC i wprowadzimy kilka ulepszeń w obecnej obsłudze zasad zapory sieciowej, aby zapewnić jednolitą obsługę zapory sieciowej w całej hierarchii zasobów Google Cloud oraz spójne wrażenia użytkowników podczas zarządzania kontrolą zasad zapory sieciowej w bezpieczny, elastyczny i skalowalny sposób.
Zasada zapory sieciowej działa jako kontener reguł zapory sieciowej. Reguły zdefiniowane w zasadach zapory sieciowej nie są egzekwowane w żadnym miejscu, dopóki zasady nie zostaną powiązane z siecią VPC. Każda sieć VPC może mieć powiązaną z nią jedną zasadę zapory sieciowej. Zasady zapory sieciowej obsługują tagi zarządzane przez IAM (lub po prostu tagi) w regułach zapory sieciowej, które zastępują bieżące tagi sieci i mogą być używane do przypisywania tożsamości do zbioru zadań.
Udostępnianie zasad zapory sieciowej w różnych sieciach i integracja z tagami zarządzanymi przez uprawnienia znacznie upraszczają konfigurację i zarządzanie zaporami.
Wraz z wprowadzeniem zasady zapory sieciowej zasady zapory sieciowej Google Cloud składają się teraz z tych komponentów:
- Hierarchiczne zasady zapory sieciowej
- Reguły zapory sieciowej VPC
- 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. Istotną różnicą między regułami zapory sieciowej VPC a zasadami zapory sieciowej jest to, że reguły zapory sieciowej VPC można stosować tylko do jednej sieci VPC, natomiast zasady zapory sieciowej można dołączać do jednej sieci VPC lub grupy sieci VPC. Zapewniają one też inne korzyści, takie jak aktualizacja zbiorcza.
Oprócz tego każda sieć VPC ma domyślne reguły zapory sieciowej:
- 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 sekwencja egzekwowania jest wyświetlana na tym diagramie:

Pamiętaj, że kolejność egzekwowania reguł zapory sieciowej VPC i globalnych zasad zapory sieciowej może zostać zamieniona. Klienci mogą w dowolnym momencie określić kolejność egzekwowania zasad za pomocą polecenia gcloud.
Tagi
Nowe tagi zintegrowane z regułami zasad zapory sieciowej to zasoby w postaci par klucz-wartość zdefiniowane na poziomie organizacji w hierarchii zasobów Google Cloud. Taki tag zawiera kontrolę dostępu w uprawnieniach, która określa, kto może wykonywać jakie działania na tagu. Uprawnienia IAM pozwalają na przykład określić, które podmioty zabezpieczeń mogą przypisywać wartości do tagów, a które mogą dołączać tagi do zasobów. Gdy tag zostanie zastosowany do zasobu, reguły zapory sieciowej mogą go używać do zezwalania na ruch i odrzucania go.
Tagi są zgodne z modelem dziedziczenia zasobów Google Cloud, co oznacza, że tagi i ich wartości są przekazywane w hierarchii z elementów nadrzędnych. Dzięki temu tagi można tworzyć w jednym miejscu, a potem używać w innych folderach i projektach w całej hierarchii zasobów. Więcej informacji o tagach i ograniczeniach dostępu znajdziesz na tej stronie.
Nie należy mylić tagów z tagami sieci, które są ciągami znaków, które można dodać do instancji Compute Engine. Są one powiązane z instancją i znikają po jej wycofaniu. Reguły zapory sieciowej VPC mogą zawierać tagi sieci, ale ponieważ nie są traktowane jako zasoby w chmurze, nie podlegają kontroli dostępu IAM.
W tym dokumencie terminy „tagi” i „tagi zarządzane przez IAM” są używane zamiennie.
Co utworzysz
Ten przewodnik zawiera 2 części. Pierwsza z nich pokazuje zasady zapory sieciowej i tagi w jednej sieci VPC, a druga przedstawia, jak używać tagów w równorzędnych sieciach VPC zgodnie z diagramem poniżej. Dlatego ten moduł wymaga jednego projektu i możliwości utworzenia wielu sieci VPC.

Czego się nauczysz
- Jak utworzyć zasadę zapory sieciowej
- Jak tworzyć i używać tagów w zasadach zapory sieciowej
- Jak używać tagów w połączeniu równorzędnym sieci VPC
Czego potrzebujesz
- Projekt Google Cloud
- umiejętność wdrażania instancji i konfigurowania komponentów sieciowych;
- Znajomość konfiguracji zapory sieciowej VPC
2. Zanim zaczniesz
Tworzenie i aktualizowanie zmiennych
W tym laboratorium wykorzystywane są zmienne, które ułatwiają wdrażanie konfiguracji gcloud w Cloud Shell.
W Cloud Shell wykonaj te czynności:
gcloud config set project [project-id] export project_id=`gcloud config list --format="value(core.project)"` export org_id=[org] export region=us-central1 export zone=us-central1-a export prefix=fwpolicy
3. Tworzenie sieci VPC i podsieci
Sieć VPC
Utwórz fwpolicy-vpc1:
gcloud compute networks create $prefix-vpc1 --subnet-mode=custom
Podsieci
Utwórz odpowiednie podsieci w wybranym regionie:
gcloud compute networks subnets create $prefix-vpc1-subnet \ --range=10.0.0.0/24 --network=$prefix-vpc1 --region=$region
Cloud NAT
Utwórz routery Cloud Router i bramy Cloud NAT dla sieci fwpolicy-pc1:
gcloud compute routers create $prefix-vpc1-cr \ --region=$region --network=$prefix-vpc1 gcloud compute routers nats create $prefix-vpc1-cloudnat \ --router=$prefix-vpc1-cr --router-region=$region \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
4. Tworzenie maszyn wirtualnych
Utwórz regułę zapory sieciowej, która zezwala na ruch przychodzący SSH z zakresów IAP, jeśli nie została jeszcze zdefiniowana w ramach konfiguracji IAP:
gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc1 \ --direction=INGRESS \ --action=allow \ --network=$prefix-vpc1 \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
Utwórz instancje klienta fwpolicy-vpc1 i serwera WWW:
gcloud compute instances create $prefix-vpc1-www \
--subnet=$prefix-vpc1-subnet --no-address --zone $zone \
--metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -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'
gcloud compute instances create $prefix-vpc1-client \
--subnet=$prefix-vpc1-subnet --no-address --zone $zone
Ponieważ nie zdefiniowano żadnych reguł zapory sieciowej VPC (oprócz reguły zezwalającej na SSH, która powinna zostać utworzona podczas konfigurowania IAP zgodnie z początkiem tej sekcji), a domyślnie cały ruch przychodzący jest odrzucany, instancje klientów nie będą mogły uzyskać dostępu do odpowiednich serwerów internetowych. Aby sprawdzić, czy żądanie przekroczy limit czasu, otwórz nowe okno i zainicjuj sesję SSH z instancją fwpolicy-vpc1-client, a następnie spróbuj wysłać żądanie curl do serwera WWW:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Oczekiwane dane wyjściowe:
curl: (28) Connection timed out after 2001 milliseconds
Opcjonalnie sprawdź, czy w przypadku sieci fwpolicy-vpc1 nie zdefiniowano żadnych reguł zapory sieciowej VPC. Możesz to zrobić w Cloud Shell:
gcloud compute firewall-rules list --filter="network:$prefix-vpc1"
5. Zasady zapory sieciowej sieci globalnej
Utwórz globalną zasadę zapory sieciowej:
gcloud compute network-firewall-policies create \ $prefix-example --description \ "firewall-policy-description" --global
Dodaj regułę zezwalającą na ruch internetowy:
gcloud compute network-firewall-policies rules create 500 \
--action allow \
--description "allow-web" \
--layer4-configs tcp:80,tcp:443 \
--firewall-policy $prefix-example \
--src-ip-ranges 10.0.0.0/16 \
--global-firewall-policy --enable-logging
Opisz zasadę zapory sieciowej i sprawdź, czy reguła została added:
gcloud compute network-firewall-policies describe \
$prefix-example --global
Oczekiwane dane wyjściowe (przewiń w górę do początku danych wyjściowych; zwróć uwagę, że wyświetlane są też reguły domyślne):
creationTimestamp: '2022-09-23T12:46:53.677-07:00'
description: "firewall-policy-description"
fingerprint: Np1Rup09Amc=
id: '7021772628738421698'
kind: compute#firewallPolicy
name: fwpolicy-example
ruleTupleCount: 13
rules:
- action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcIpRanges:
- 10.0.0.0/16
priority: 500
ruleTupleCount: 5
...
Powiąż zasadę zapory sieciowej z siecią fwpolicy-vpc1:
gcloud compute network-firewall-policies associations create \
--firewall-policy $prefix-example \
--network $prefix-vpc1 \
--name $prefix-vpc1-association \
--global-firewall-policy
Sprawdź, czy została ona zastosowana w sieci fwpolicy-vpc1:
gcloud compute networks get-effective-firewalls $prefix-vpc1
Oczekiwane dane wyjściowe (pamiętaj, że jeśli istnieją hierarchiczne zasady zapory sieciowej o wyższym priorytecie, odpowiednie reguły będą wyświetlane u góry):
TYPE FIREWALL_POLICY_NAME PRIORITY ACTION DIRECTION IP_RANGES network-firewall-policy fwpolicy-example 500 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
Sprawdź, czy została ona zastosowana również do serwera WWW fwpolicy-vpc1:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
Oczekiwane dane wyjściowe są podobne do danych wyjściowych poprzedniego polecenia (skuteczne zapory sieciowe fwpolicy-vpc1):
TYPE FIREWALL_POLICY_NAME PRIORITY ACTION DIRECTION IP_RANGES network-firewall-policy fwpolicy-example 500 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
Wróć do sesji SSH vpc1-client i spróbuj ponownie użyć polecenia curl (pamiętaj, że w poleceniu poniżej założono, że jako prefiks użyto fwpolicy. Jeśli użyto innej nazwy, odpowiednio dostosuj polecenie curl):
user@vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2 Page on vpc1-www in network vpc1 zone us-central1-a
W Cloud Shell sprawdź, czy zasady zapory sieciowej zostały zastosowane do sieci fwpolicy-vpc1:
gcloud compute network-firewall-policies describe \ $prefix-example --global
Oczekiwane dane wyjściowe (przewiń w górę do początku danych wyjściowych):
--- associations: - attachmentTarget: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/fwpolicy-vpc1 name: fwpolicy-vpc1-association ...
6. Tagi zarządzane przez IAM
Tag to para klucz-wartość, którą można dołączyć do organizacji, folderu lub projektu. Więcej informacji znajdziesz w sekcjach Tworzenie tagów i zarządzanie nimi oraz Wymagane uprawnienia.
Rola tagAdmin umożliwia tworzenie nowych tagów oraz aktualizowanie i usuwanie istniejących. Tę rolę może przyznać administrator organizacji. W Cloud Shell zaktualizuj zasady uprawnień, aby dodać do użytkownika rolę tagAdmin. Na stronie informacji o uprawnieniach możesz sprawdzić, które uprawnienia są uwzględnione w poszczególnych rolach predefiniowanych.
gcloud organizations add-iam-policy-binding $org_id \ --member user:[user@example.com] --role roles/resourcemanager.tagAdmin
Aby sprawdzić, którzy użytkownicy mają rolę resourcemanager.tagAdmin, uruchom to polecenie:
gcloud organizations get-iam-policy $org_id --flatten=bindings \ --filter=bindings.role:roles/resourcemanager.tagAdmin
Utwórz nowy klucz tagu:
gcloud resource-manager tags keys create tags-vpc1 \ --parent organizations/$org_id \ --purpose GCE_FIREWALL \ --purpose-data network=$project_id/$prefix-vpc1
Oczekiwane dane wyjściowe:
Waiting for TagKey [tags-vpc1] to be created...done. createTime: '2022-09-23T20:49:01.162228Z' etag: PwvmFuHO4wK1y6c5Ut2n5w== name: tagKeys/622132302133 namespacedName: ORGANIZATION_ID/tags-vpc1 parent: organizations/ORGANIZATION_ID purpose: GCE_FIREWALL purposeData: network: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/6749205358365096383 shortName: tags-vpc1 updateTime: '2022-09-23T20:49:03.873776Z'
Utwórz nowe wartości tagów:
gcloud resource-manager tags values create web-servers \ --parent=$org_id/tags-vpc1 gcloud resource-manager tags values create web-clients \ --parent=$org_id/tags-vpc1
Sprawdź, czy wartości tagów zostały utworzone:
gcloud resource-manager tags values list \ --parent=$org_id/tags-vpc1
Oczekiwane dane wyjściowe:
NAME SHORT_NAME DESCRIPTION tagValues/349564376683 web-servers tagValues/780363571446 web-clients
W Cloud Shell opisz istniejącą regułę zasad zapory sieciowej, aby potwierdzić, że tagi nie są używane:
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
Oczekiwane dane wyjściowe:
---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcIpRanges:
- 10.0.0.0/16
priority: 500
ruleTupleCount: 5
W Cloud Shell zaktualizuj regułę, aby zezwalała na ruch tylko z klucza tagu vpc1-tags/web-clients, i zainstaluj ją na instancjach z kluczem tagu vpc1-tags/web-servers.
gcloud compute network-firewall-policies rules update 500 \
--firewall-policy $prefix-example \
--src-secure-tags $org_id/tags-vpc1/web-clients \
--target-secure-tags $org_id/tags-vpc1/web-servers \
--global-firewall-policy
W Cloud Shell opisz istniejącą regułę zasad zapory sieciowej, aby potwierdzić, że tagi zostały zastosowane i są zgłaszane jako EFFECTIVE:
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
Oczekiwane dane wyjściowe:
---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcIpRanges:
- 10.0.0.0/16
srcSecureTags:
- name: tagValues/479619031616
state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
state: EFFECTIVE
W Cloud Shell sprawdź, czy reguła została zastosowana do sieci vpc1:
gcloud compute networks get-effective-firewalls $prefix-vpc1
Oczekiwane dane wyjściowe:
network-firewall-policy fwpolicy-example 500 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
Sprawdź, czy pomimo tego, że zasady zapory sieciowej są nadal powiązane z siecią VPC, reguła zezwalająca na ruch w internecie nie jest już stosowana do serwera WWW, ponieważ do instancji nie dodano tagu:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
Oczekiwane dane wyjściowe (zwróć uwagę, że reguła zapory sieciowej o priorytecie 500 nie jest wyświetlana):
network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
Przyznaj rolę Użytkownik tagu konkretnemu tagowi i użytkownikowi. Na stronie informacji o uprawnieniach możesz sprawdzić, które uprawnienia są uwzględnione w poszczególnych rolach predefiniowanych.
gcloud resource-manager tags keys add-iam-policy-binding \ $org_id/tags-vpc1 \ --member user:[email] --role roles/resourcemanager.tagUser gcloud projects add-iam-policy-binding $project_id \ --member user:[email] --role roles/resourcemanager.tagUser
Sprawdź, czy rola została dodana:
gcloud resource-manager tags keys get-iam-policy $org_id/tags-vpc1 gcloud projects get-iam-policy $project_id --flatten=bindings \ --filter=bindings.role:roles/resourcemanager.tagUser
Oczekiwane dane wyjściowe:
bindings: - members: - user:[user] role: roles/resourcemanager.tagUser ...
Zastosuj tag do instancji fwpolicy-vpc1-www:
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $org_id/tags-vpc1/web-servers \ --parent \ //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www
Oczekiwane dane wyjściowe:
Waiting for TagBinding for parent [//compute.googleapis.com/projects/PROJECT_ID/zones/us-central1-a/instances/38369703403698502] and tag value [tagValues/34 9564376683] to be created with [operations/rctb.us-central1-a.6144808968019372877]...done. done: true metadata: '@type': type.googleapis.com/google.cloud.resourcemanager.v3.CreateTagBindingMetadata name: operations/rctb.us-central1-a.6144808968019372877 response: '@type': type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding name: tagBindings/%2F%2Fcompute.googleapis.com%2Fprojects%2FPROJECT_NUMBER%2Fzones%2Fus-central1-a%2Finstances%2F38369703403698502/tagValues/349564376683 parent: //compute.googleapis.com/projects/PROJECT_NUMBER/zones/us-central1-a/instances/38369703403698502 tagValue: tagValues/349564376683
Sprawdź powiązania:
gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www
Oczekiwane dane wyjściowe:
namespacedTagKey: ORGANIZATION_ID/tags-vpc1 namespacedTagValue: ORGANIZATION_ID/tags-vpc1/web-servers tagKey: tagKeys/622132302133 tagValue: tagValues/349564376683
Ponownie sprawdź obowiązujące reguły zapory sieciowej:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
Oczekiwane dane wyjściowe:
network-firewall-policy fwpolicy-example 490 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
Wróć na kartę sesji SSH fwpolicy-vpc1-client i spróbuj użyć polecenia curl:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Czy udało Ci się połączyć?
Aby to sprawdzić, zaktualizuj regułę, usuwając kryteria źródłowego zakresu CIDR za pomocą Cloud Shell.
gcloud compute network-firewall-policies rules update 500 \
--firewall-policy $prefix-example \
--src-ip-ranges "" \
--global-firewall-policy
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcSecureTags:
- name: tagValues/479619031616
state: EFFECTIVE
priority: 490
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
state: EFFECTIVE
Wróć na kartę sesji SSH fwpolicy-vpc1-client i spróbuj ponownie:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Tym razem połączenie powinno przekroczyć limit czasu, ponieważ tag nie został dodany do fwpolicy-vpc1-client. Dodaj go w Cloud Shell i spróbuj ponownie.
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $org_id/tags-vpc1/web-clients \ --parent \ //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-client
Wróć na kartę sesji SSH fwpolicy-vpc1-client i spróbuj ponownie. Tym razem powinno się udać.
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
7. Tagi zarządzane przez IAM w przypadku połączeń równorzędnych sieci VPC
W Cloud Shell utwórz nową sieć VPC, podsieć i klienta oraz skonfiguruj połączenie równorzędne sieci VPC między sieciami:
gcloud compute networks create $prefix-vpc2 --subnet-mode=custom
gcloud compute networks subnets create $prefix-vpc2-subnet \
--range=10.0.1.0/24 --network=$prefix-vpc2 --region=$region
gcloud compute instances create $prefix-vpc2-client \
--subnet=$prefix-vpc2-subnet --no-address --zone $zone
gcloud compute networks peerings create vpc1-to-vpc2 \
--network=$prefix-vpc1 \
--peer-project $project_id \
--peer-network $prefix-vpc2
gcloud compute networks peerings create vpc2-to-vpc1 \
--network=$prefix-vpc2 \
--peer-project $project_id \
--peer-network $prefix-vpc1
Utwórz regułę zapory sieciowej, która zezwala na ruch przychodzący SSH z zakresów IAP, jeśli nie została jeszcze zdefiniowana w ramach konfiguracji IAP:
gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc2 \ --direction=INGRESS \ --action=allow \ --network=$prefix-vpc2 \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
Chociaż tagi są obiektami obejmującymi całą organizację, klucze tagów są powiązane z konkretną siecią VPC i nie można ich stosować do instancji w innych sieciach. Dlatego musisz utworzyć nowy klucz i wartość tagu, które będą miały zastosowanie do sieci VPC2:
gcloud resource-manager tags keys create tags-vpc2 \ --parent organizations/$org_id \ --purpose GCE_FIREWALL \ --purpose-data network=$project_id/$prefix-vpc2 gcloud resource-manager tags values create web-clients \ --parent=$org_id/tags-vpc2
Zastosuj nowy tag do instancji fwpolicy-vpc2-client:
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $org_id/tags-vpc2/web-clients \ --parent \ //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client
Opcjonalnie możesz wyświetlić powiązania fwpolicy-vpc2-client:
gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client
Oczekiwane dane wyjściowe:
namespacedTagKey: ORGANIZATION_ID/tags-vpc2 namespacedTagValue: ORGANIZATION_ID/tags-vpc2/web-clients tagKey: tagKeys/916316350251 tagValue: tagValues/633150043992
W Cloud Shell opisz istniejącą regułę zasad zapory sieciowej, aby potwierdzić, że nowe tagi nie są używane:
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
Oczekiwane dane wyjściowe:
---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcSecureTags:
- name: tagValues/479619031616
state: EFFECTIVE
priority: 500
ruleTupleCount: 6
targetSecureTags:
- name: tagValues/230424970229
state: EFFECTIVE
Zaktualizuj istniejącą regułę zapory sieciowej, aby zezwalała na tagi z równorzędnej sieci VPC:
gcloud compute network-firewall-policies rules update 500 \
--firewall-policy $prefix-example \
--src-secure-tags $org_id/tags-vpc1/web-clients,$org_id/tags-vpc2/web-clients \
--global-firewall-policy
Opisz regułę zapory sieciowej, aby upewnić się, że została zastosowana i jest oznaczona jako SKUTECZNA:
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
Oczekiwane dane wyjściowe:
---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcSecureTags:
- name: tagValues/479619031616
state: EFFECTIVE
- name: tagValues/633150043992
state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
state: EFFECTIVE
Sprawdź adres IP fwpolicy-vpc1-www za pomocą tego polecenia gcloud:
gcloud compute instances list --filter=vpc1-www
Połącz się z instancją fwpolicy-vpc2-client przez SSH i spróbuj wysłać żądanie curl na adres IP instancji fwpolicy-vpc1:
user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2
Powinno być możliwe połączenie z serwerem fwpolicy-vpc1-www. Aby dowiedzieć się, jak usunąć te pliki, przejdź do następnej sekcji.
8. Procedura czyszczenia
W Cloud Shell usuń instancje, Cloud NAT i Cloud Router:
gcloud -q compute instances delete $prefix-vpc2-client --zone=$zone gcloud -q compute instances delete $prefix-vpc1-client --zone=$zone gcloud -q compute instances delete $prefix-vpc1-www --zone=$zone gcloud -q compute routers nats delete $prefix-vpc1-cloudnat \ --router=$prefix-vpc1-cr --router-region=$region gcloud -q compute routers delete $prefix-vpc1-cr --region=$region
Usuń globalne zasady zapory sieciowej i tagi:
gcloud -q resource-manager tags values delete \
$org_id/tags-vpc2/web-clients
gcloud -q resource-manager tags keys delete $org_id/tags-vpc2
gcloud -q resource-manager tags values delete \
$org_id/tags-vpc1/web-servers
gcloud -q resource-manager tags values delete \
$org_id/tags-vpc1/web-clients
gcloud -q resource-manager tags keys delete $org_id/tags-vpc1
gcloud -q compute network-firewall-policies associations delete \
--firewall-policy $prefix-example \
--name $prefix-vpc1-association \
--global-firewall-policy
gcloud -q compute network-firewall-policies delete \
$prefix-example --global
gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc1
gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc2
Jeśli role tagAdmin i tagUsers zostały zmienione, wykonaj te czynności:
gcloud organizations remove-iam-policy-binding $org_id \ --member user:[email] --role roles/resourcemanager.tagAdmin gcloud organizations remove-iam-policy-binding $org_id \ --member user:[email] --role roles/resourcemanager.tagUser
Na koniec usuń połączenia równorzędne sieci VPC, podsieci i sieci VPC:
gcloud -q compute networks peerings delete vpc1-to-vpc2 \
--network $prefix-vpc1
gcloud -q compute networks peerings delete vpc2-to-vpc1 \
--network $prefix-vpc2
gcloud -q compute networks subnets delete $prefix-vpc1-subnet \
--region $region
gcloud -q compute networks subnets delete $prefix-vpc2-subnet \
--region $region
gcloud -q compute networks delete $prefix-vpc1
gcloud -q compute networks delete $prefix-vpc2
9. Gratulacje!
Gratulacje, udało Ci się skonfigurować i zweryfikować globalną zasadę zapory sieciowej z konfiguracją tagów.