1. Wprowadzenie
Zasady zapory sieciowej
Zapory sieciowe to podstawowe elementy składowe bezpiecznego środowiska chmury. Wcześniej wprowadziliśmy zasady zapory sieciowej na poziomie organizacji i folderu, pozostawiając ustawienia zapory sieciowej VPC bez zmian. W tej wersji rozszerzymy strukturę zasad zapory sieciowej do poziomu VPC i wprowadzimy kilka ulepszeń w obecnej obsłudze zasad zapory sieciowej. Chcemy zapewnić jednolitą obsługę zapory sieciowej w całej hierarchii zasobów Google Cloud oraz zapewnić użytkownikom spójny sposób zarządzania ustawieniami zasad zapory sieciowej w bezpieczny, elastyczny i skalowalny sposób.
Zasada zapory sieciowej działa jako kontener dla reguł zapory sieciowej. Reguły zdefiniowane w zasadzie zapory sieciowej nie są nigdzie egzekwowane, dopóki zasada nie zostanie powiązana z siecią VPC. Z każdą siecią VPC może być powiązana 1 zasada zapory sieciowej. Zasady zapory sieciowej obsługują w regułach zapory sieciowej tagi zarządzane przez uprawnienia (lub tylko tagi), które zastępują bieżące tagi sieciowe i mogą być używane do przyznawania tożsamości danym zadaniom.
Udostępnianie zasady zapory sieciowej między sieciami oraz integracja z tagami zarządzanymi uprawnieniami znacznie upraszcza konfigurację zapór sieciowych i zarządzanie nimi.
Dzięki wprowadzeniu zasad zapory sieciowej zasady zapory sieciowej Google Cloud składają się teraz z tych komponentów:
- Hierarchiczna zasada zapory sieciowej
- Reguły zapory sieciowej VPC
- Zasady zapory sieciowej ( globalne i regionalne)
Hierarchiczne zasady zapory sieciowej są obsługiwane na poziomie organizacji i węzłów folderów w hierarchii zasobów, natomiast reguły zapory sieciowej VPC i zasady zapory sieciowej są stosowane na poziomie VPC. Duże różnice między regułami zapory sieciowej VPC a zasadami zapory sieciowej VPC polegają na tym, że reguły zapory sieciowej VPC mogą być stosowane tylko do pojedynczej sieci VPC, natomiast zasady zapory sieciowej można dołączyć do pojedynczej sieci VPC lub grupy VPC i mają inne korzyści, takie jak aktualizacja zbiorcza.
Mamy też domniemane reguły zapory sieciowej, które występują w każdej sieci VPC:
- Reguła ruchu wychodzącego, której działanie jest dozwolone, miejsce docelowe to 0.0.0.0/0
- Reguła dla ruchu przychodzącego, której działaniem jest odrzucenie, źródło to 0.0.0.0/0
Domyślnie sekwencja egzekwowania zasad jest przedstawiona na tym diagramie:
Pamiętaj, że kolejność egzekwowania zasad zapory sieciowej VPC a zasadą zapory sieciowej sieci globalnej można zamienić. Klienci mogą w każdej chwili określić nakaz egzekwowania zasad za pomocą polecenia gcloud.
Tagi
Nowe tagi zintegrowane z regułami zasad zapory sieciowej to zasoby pary klucz-wartość zdefiniowane na poziomie organizacji w hierarchii zasobów Google Cloud. Taki tag zawiera kontrolę dostępu, która, jak wskazuje nazwa, określa, kto może wykonywać działania z tagiem. Uprawnienia pozwalają na przykład określać, 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 lub go odrzucania.
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 efekcie tagi można tworzyć w jednym miejscu, a potem używać ich w innych folderach i projektach w całej hierarchii zasobów. Więcej informacji o tagach i ograniczeniu dostępu znajdziesz na tej stronie.
Tagów nie należy mylić z tagami sieci – to ciągi znaków, które można dodawać do instancji Compute Engine. są powiązane z instancją i znikają po wyłączeniu instancji. Reguły zapory sieciowej VPC mogą obejmować tagi sieciowe, ale nie są one uważane za zasoby w chmurze, więc nie podlegają kontroli dostępu uprawnień.
Pamiętaj, że w tym dokumencie tagi i tagi zarządzane przez uprawnienia są używane wymiennie.
Co utworzysz
To ćwiczenie w Codelabs składa się z 2 części. W pierwszej przedstawiamy zasady zapory sieciowej i tagi korzystające z pojedynczej sieci VPC, a druga pokazuje, jak używać tagów w równorzędnych sieciach VPC zgodnie z poniższym schematem. Z tego powodu to ćwiczenie w Codelabs wymaga 1 projektu i możliwości utworzenia wielu sieci VPC.
Czego się nauczysz
- Jak utworzyć zasadę zapory sieciowej
- Tworzenie i używanie tagów z zasadami zapory sieciowej
- Jak używać tagów przez połączenia równorzędne sieci VPC
Czego potrzebujesz
- Projekt Google Cloud
- Wiedza na temat wdrażania instancji i konfigurowania komponentów sieci
- Wiedza o konfiguracji zapory sieciowej VPC
2. Zanim zaczniesz
Tworzenie i aktualizowanie zmiennych
W tym ćwiczeniu w Codelabs używane są zmienne $variables, które ułatwiają implementację 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. Utwórz sieć i podsieć VPC
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 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 SSH przychodzący z zakresów IAP, jeśli nie został jeszcze zdefiniowany 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 i serwera WWW fwpolicy-vpc1:
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
Nie ma zdefiniowanych żadnych reguł zapory sieciowej VPC (oprócz reguły zezwalającej na SSH, która powinna być utworzona podczas konfigurowania IAP zgodnie z opisem w tym artykule), a domyślnie cały ruch przychodzący jest odrzucany, instancje klienta nie będą miały dostępu do odpowiednich serwerów WWW. Aby sprawdzić, czy żądanie wygaśnie, otwórz nowe okno i zainicjuj sesję SSH dla instancji fwpolicy-vpc1-client, a następnie spróbuj curlać serwer 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 za pomocą Cloud Shell nie zdefiniowano żadnych reguł zapory sieciowej VPC dla fwpolicy-vpc1:
gcloud compute firewall-rules list --filter="network:$prefix-vpc1"
5. Zasady zapory sieciowej sieci globalnej
Utwórz zasadę zapory sieciowej sieci globalnej:
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 udało się jej zastosować added
:
gcloud compute network-firewall-policies describe \ $prefix-example --global
Oczekiwane dane wyjściowe (przewiń do początku danych wyjściowych; widoczne są również reguły niejawne):
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 zasadą 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 udało się zastosować go do sieci fwpolicy-vpc1:
gcloud compute networks get-effective-firewalls $prefix-vpc1
Oczekiwane dane wyjściowe (pamiętaj, że jeśli hierarchiczne zasady zapory sieciowej mają pierwszeństwo, odpowiednie reguły zostaną wyświetlone 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 udało się zastosować ją także 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 poprzedniego polecenia (obowiązujące 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
Przełącz się z powrotem na sesję SSH po stronie klienta vpc1-client i jeszcze raz spróbuj utworzyć curl (pamiętaj, że w poniższym poleceniu założono, że jako prefiks został użyty fwpolicy
; jeśli zamiast tego została użyta inna nazwa), 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 zasada zapory sieciowej jest zastosowana do fwpolicy-vpc1:
gcloud compute network-firewall-policies describe \ $prefix-example --global
Oczekiwane dane wyjściowe (przewiń 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 uprawnienia
Tag to para klucz-wartość, którą można dołączyć do organizacji, folderu lub projektu. Więcej informacji znajdziesz w artykule Tworzenie tagów i zarządzanie nimi oraz wymagane uprawnienia.
Rola administratora tagów umożliwia tworzenie nowych tagów oraz aktualizowanie i usuwanie dotychczasowych. Tę rolę może przypisać administrator organizacji. W Cloud Shell zaktualizuj zasadę uprawnień, aby dodać do użytkownika rolę administratora tagów. Na stronie z informacjami o uprawnieniach możesz sprawdzić, które uprawnienia są dostępne w przypadku poszczególnych wstępnie zdefiniowanych ról.
gcloud organizations add-iam-policy-binding $org_id \ --member user:[user@example.com] --role roles/resourcemanager.tagAdmin
Uruchom poniższe polecenie, aby sprawdzić, którzy użytkownicy mają przypisaną rolę resourcemanager.tagAdmin:
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łę zasady zapory sieciowej, aby upewnić się, ż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łę tak, aby zezwalała wyłącznie na ruch pochodzący z klucza vpc1-tags/web-clients, i zainstaluj ją w 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ą raportowane jako SKUTECZNE:
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
Sprawdźmy w Cloud Shell, czy reguła została zastosowana do 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 chociaż zasada zapory sieciowej jest nadal powiązana z siecią VPC, reguła zezwalająca na ruch internetowy nie jest już stosowana na serwerze WWW, ponieważ tag nie został dodany do instancji:
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
Przypisz rolę użytkownika tagu do konkretnego tagu i użytkownika. Na stronie z informacjami o uprawnieniach możesz sprawdzić, które uprawnienia są dostępne w przypadku poszczególnych wstępnie zdefiniowanych ról.
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 wystąpienia 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óć do karty sesji SSH fwpolicy-vpc1-client i spróbuj wykonać 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 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 powinno nastąpić przekroczenie limitu czasu połączenia, ponieważ tag nie został dodany do fwpolicy-vpc1-client. Dodaj ją w Cloud Shell i spróbuj jeszcze raz.
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. Teraz powinno się udać.
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
7. Tagi zarządzane przez uprawnienia w połączeniu równorzędnym sieci VPC
W Cloud Shell utwórz nową sieć VPC, podsieć i klienta, a następnie skonfiguruj połączenia sieci równorzędnych 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 SSH przychodzący z zakresów IAP, jeśli nie został jeszcze zdefiniowany 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
Mimo że Tagi są obiektami obejmującymi całą organizację, klucze tagów są powiązane z konkretną siecią VPC, więc nie można ich stosować do instancji w różnych sieciach. Dlatego konieczne jest utworzenie nowego klucza tagu i wartości odpowiedniej do 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 wyświetl 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łę zasady zapory sieciowej, aby upewnić się, ż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 zezwolić 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 zostanie zgłoszona 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
Aby sprawdzić adres IP instancji fwpolicy-vpc1-www, użyj tego polecenia gcloud:
gcloud compute instances list --filter=vpc1-www
Połącz się z klientem fwpolicy-vpc2-client przez SSH i spróbuj curlać adres IP instancji fwpolicy-vpc1:
user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2
Połączenie z serwerem fwpolicy-vpc1-www powinno być możliwe. Przejdź do następnej sekcji, w której znajdziesz instrukcje czyszczenia.
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ń zasadę zapory sieciowej i tagi sieci globalnej:
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 uległy zmianie, 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!
Gratulujemy! Udało Ci się skonfigurować i zweryfikować zasadę zapory sieciowej sieci globalnej z konfiguracją tagów.