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 VPC i wprowadzimy kilka ulepszeń obecnego wsparcia dla zasad zapory sieciowej, aby zapewnić ujednoliconą obsługę zapory sieciowej w hierarchii zasobów Google Cloud oraz spójne wrażenia użytkowników w zakresie zarządzania kontrolą 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 zasadach zapory sieciowej nie są egzekwowane, dopóki nie zostaną powiązane z siecią VPC. Każda sieć VPC może mieć powiązaną jedną zasadę zapory sieciowej. Zasady zapory sieciowej obsługują w regułach zapory sieciowej tagi zarządzane przez uprawnienia (lub po prostu tagi), które zastępują obecne tagi sieci i mogą służyć do identyfikacji zadań.
Udostępnianie reguł zapory sieciowej w różnych sieciach i integracja z tagami zarządzanymi przez uprawnienia znacznie upraszcza konfigurowanie zapory i zarządzanie nią.
Wraz z wprowadzeniem zasady zapory sieciowej zasady zapory Google Cloud składają się 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 sieci 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 zastosować tylko do jednej sieci VPC, podczas gdy zasady zapory sieciowej można dołączyć do jednej sieci VPC lub grupy sieci VPC, co wiąże się z innymi korzyściami, takimi jak aktualizacja zbiorcza.
Wreszcie mamy też niejawne reguły zapory sieciowej, które są dostępne w każdej sieci VPC:
- Reguła wychodząca, której działanie to zezwalanie, a miejsce docelowe to 0.0.0.0/0
- Reguła ruchu przychodzącego, której działaniem jest odmowa, a źródłem jest 0.0.0.0/0
Domyślna sekwencja egzekwowania zasad wygląda tak:
Pamiętaj, że kolejność stosowania reguł zapory sieciowej VPC i zasad zapory sieciowej sieci globalnej może być odwrotna. Klienci mogą w dowolnym momencie określić kolejność stosowania zasad za pomocą polecenia gcloud.
Tagi
Nowe tagi zintegrowane z regułami zasad zapory sieciowej to zasoby par klucz-wartość zdefiniowane na poziomie organizacji w hierarchii zasobów Google Cloud. Taki tag zawiera kontrolę dostępu w uprawnieniach IAM, która określa, kto może wykonywać określone czynności na tym tagu. Uprawnienia IAM umożliwiają na przykład określenie, które podmioty zabezpieczeń mogą przypisywać wartości do tagów i które podmioty zabezpieczeń mogą dołączać tagi do zasobów. Po zastosowaniu tagu do zasobu reguły zapory sieciowej mogą używać go do zezwalania na ruch i odrzucania go.
Etykiety są zgodne z modelem zasobów dziedziczenia Google Cloud, co oznacza, że etykiety i ich wartości są przekazywane w hierarchii od elementów nadrzędnych. Dzięki temu tagi mogą być tworzone w jednym miejscu, a potem używane przez inne foldery i projekty w hierarchii zasobów. Więcej informacji o tagach i ograniczeniach dostępu znajdziesz na tej stronie.
Nie należy ich mylić 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ą, gdy zostanie ona wycofana. Reguły zapory sieciowej VPC mogą zawierać tagi sieci, ale ponieważ nie są one uważane za zasoby w chmurze, nie podlegają kontroli dostępu IAM.
W tym dokumencie terminy „tagi” i „tagi zarządzane przez usługę IAM” są używane zamiennie.
Co utworzysz
To laboratorium programistyczne składa się z 2 części. Pierwsza z nich demonstruje zasady zapory sieciowej i tagi w ramach jednej sieci VPC, a druga pokazuje, jak używać tagów w równorzędnych sieciach VPC zgodnie z diagramem poniżej. W tym przypadku potrzebujesz jednego projektu i możliwości tworzenia wielu sieci VPC.
Czego się nauczysz
- Tworzenie zasady zapory sieciowej
- Tworzenie i używanie tagów z zasadami zapory sieciowej
- Jak używać tagów w połączeniach równorzędnych sieci VPC
Czego potrzebujesz
- Projekt Google Cloud
- umiejętność wdrażania instancji i konfigurowania elementów sieci;
- Wiedza o konfiguracji zapory sieciowej VPC
2. Zanim zaczniesz
Tworzenie i aktualizowanie zmiennych
Ten projekt kodu wykorzystuje zmienne $variables, aby ułatwić 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. 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 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 ona 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 ma zdefiniowanych żadnych reguł zapory sieciowej VPC (poza regułą zezwalającą na SSH, która powinna zostać utworzona podczas konfigurowania IAP zgodnie z informacjami na początku tej sekcji), a domyślnie cały ruch przychodzący jest odrzucany, instancje klienta nie będą mogły uzyskać dostępu do odpowiednich serwerów WWW. Aby sprawdzić, czy żądanie zostanie anulowane z powodu przekroczenia limitu czasu, otwórz nowe okno i zainicjuj sesję SSH z instancją fwpolicy-vpc1-client, a następnie spróbuj użyć curl do serwera WWW:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Oczekiwany wynik:
curl: (28) Connection timed out after 2001 milliseconds
Opcjonalnie sprawdź, czy w Cloud Shell nie ma zdefiniowanych reguł zapory sieciowej VPC dla fwpolicy-vpc1:
gcloud compute firewall-rules list --filter="network:$prefix-vpc1"
5. Zasady zapory sieciowej sieci globalnej
Aby utworzyć 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 zasady zapory sieciowej i sprawdź, czy reguła została added
:
gcloud compute network-firewall-policies describe \ $prefix-example --global
Oczekiwany wynik (przewiń w górę do początku danych wyjściowych; zwróć uwagę, że wyświetlają się 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 ...
Połącz zasadę zapory sieciowej z 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
Oczekiwany wynik (pamiętaj, że jeśli istnieją hierarchiczne zasady zapory sieciowej, które mają pierwszeństwo, 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 tych z poprzedniego polecenia (efektywne zapory 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 ponownie uruchom curl (pamiętaj, że to polecenie zakłada, ż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 zasada zapory sieciowej jest zastosowana do fwpolicy-vpc1:
gcloud compute network-firewall-policies describe \ $prefix-example --global
Oczekiwany wynik (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 usługę IAM
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 w sekcji Wymagania dotyczące uprawnień.
Dzięki roli tagAdmin możesz tworzyć nowe tagi oraz aktualizować i usuwać istniejące tagi. Tę rolę może przyznać administrator organizacji. W Cloud Shell zaktualizuj zasadę uprawnień, aby dodać do roli użytkownika uprawnienia tagAdmin. Na stronie powołania do uprawnień możesz sprawdzić, które uprawnienia są uwzględnione w każdej z wstępnie zdefiniowanych ról.
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 podane niżej 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
Oczekiwany wynik:
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'
Tworzenie nowych 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
Oczekiwany wynik:
NAME SHORT_NAME DESCRIPTION tagValues/349564376683 web-servers tagValues/780363571446 web-clients
W Cloud Shell opisz istniejącą regułę zasady zapory sieciowej, aby sprawdzić, czy nie są używane tagi:
gcloud compute network-firewall-policies rules describe 500 \ --firewall-policy $prefix-example \ --global-firewall-policy
Oczekiwany wynik:
--- 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 tylko na ruch z klucza tagu vpc1-tags/web-clients, i zainstaluj tę regułę 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ące reguły zasad zapory sieciowej, aby sprawdzić, czy tagi zostały zastosowane i są raportowane jako EFFECTIVE (skuteczne):
gcloud compute network-firewall-policies rules describe 500 \ --firewall-policy $prefix-example \ --global-firewall-policy
Oczekiwany wynik:
--- 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 vpc1:
gcloud compute networks get-effective-firewalls $prefix-vpc1
Oczekiwany wynik:
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 mimo że 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
Oczekiwany wynik (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żytkownik tagu do konkretnego tagu i użytkownika. Na stronie Uprawnienia – informacje możesz sprawdzić, które uprawnienia są uwzględnione w każdej z 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 dodano rolę:
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
Oczekiwany wynik:
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
Oczekiwany wynik:
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
Oczekiwany wynik:
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
Oczekiwany wynik:
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 użyć curl:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Czy udało Ci się połączyć?
Aby to sprawdzić, zaktualizuj regułę, aby usunąć kryteria CIDR źródła 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óć do karty 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 się zakończyć, 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óć do karty 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 usługę IAM w połączeniu z połączeniem równorzędnym sieci VPC
W Cloud Shell utwórz nowe środowisko wirtualne w chmurze, podsieć i klienta, a następnie skonfiguruj połączenie sieci równorzędnych VPC między tymi 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 ona 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 dostępnymi w całej organizacji, 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ą stosowane 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 możesz podać listę połączeń usługi 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
Oczekiwany wynik:
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 sprawdzić, czy nie są używane nowe tagi:
gcloud compute network-firewall-policies rules describe 500 \ --firewall-policy $prefix-example \ --global-firewall-policy
Oczekiwany wynik:
--- 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
Zmień 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 mieć pewność, że została zastosowana i jest raportowana jako SKUTECZNA:
gcloud compute network-firewall-policies rules describe 500 \ --firewall-policy $prefix-example \ --global-firewall-policy
Oczekiwany wynik:
--- 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 poznać adres IP fwpolicy-vpc1-www, użyj polecenia gcloud:
gcloud compute instances list --filter=vpc1-www
Połącz się z fwpolicy-vpc2-client przez SSH i spróbuj użyć curl do adresu IP fwpolicy-vpc1:
user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2
Powinieneś mieć możliwość połączenia się z serwerem fwpolicy-vpc1-www. Aby dowiedzieć się, jak usunąć dane, przejdź do następnej sekcji.
8. Czyszczenie
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ń globalną zasadę 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 za pomocą konfiguracji tagów.