1. Einführung
Netzwerk-Firewallrichtlinien
Firewalls sind die grundlegenden Bausteine für eine sichere Cloud-Umgebung. Bisher haben wir Firewallrichtlinien auf Organisations- und Ordnerebene eingeführt, während VPC-Firewalls unverändert blieben. In dieser Version wird die Firewallrichtlinienstruktur auf VPC-Ebene erweitert und die aktuelle Unterstützung für Firewallrichtlinien wird verbessert, um eine einheitliche Firewallunterstützung in der gesamten Ressourcenhierarchie von Google Cloud und eine konsistente Nutzererfahrung bei der Verwaltung der Firewallrichtlinienkontrolle auf sichere, flexible und skalierbare Weise zu ermöglichen.
Eine Netzwerk-Firewallrichtlinie dient als Container für Firewallregeln. In einer Netzwerk-Firewallrichtlinie definierte Regeln werden nirgendwo erzwungen, bis die Richtlinie mit einem VPC-Netzwerk verknüpft ist. Jedem VPC-Netzwerk kann eine Netzwerk-Firewallrichtlinie zugeordnet sein. Netzwerk-Firewallrichtlinien unterstützen IAM-verwaltete Tags (oder einfach Tags) in Firewallregeln. Diese ersetzen die aktuellen Netzwerktags und können verwendet werden, um Workloads eine Identität zuzuweisen.
Die gemeinsame Nutzung einer Netzwerk-Firewallrichtlinie für mehrere Netzwerke und die Integration mit IAM-verwalteten Tags vereinfachen die Konfiguration und Verwaltung von Firewalls erheblich.
Mit der Einführung von Netzwerk-Firewallrichtlinien bestehen die Firewallrichtlinien von Google Cloud jetzt aus den folgenden Komponenten:
- Hierarchische Firewallrichtlinie
- VPC-Firewallregeln
- Netzwerk-Firewallrichtlinie ( global und regional)
Hierarchische Firewallrichtlinien werden auf den Organisations- und Ordnerknoten in der Ressourcenhierarchie unterstützt, während VPC-Firewallregeln und Netzwerk-Firewallrichtlinien auf VPC-Ebene angewendet werden. Ein großer Unterschied zwischen VPC-Firewallregeln und Netzwerk-Firewallrichtlinien besteht darin, dass VPC-Firewallregeln nur auf ein einzelnes VPC-Netzwerk angewendet werden können, während Netzwerk-Firewallrichtlinien unter anderem an eine einzelne VPC oder eine Gruppe von VPCs angehängt werden können. Außerdem können sie in Batches aktualisiert werden.
Schließlich gibt es auch die implizierten Firewallregeln, die in jedem VPC-Netzwerk enthalten sind:
- Eine Regel für ausgehenden Traffic, deren Aktion „allow“ und deren Ziel „0.0.0.0/0“ ist.
- Eine Regel für eingehenden Traffic mit der Aktion „deny“ und der Quelle „0.0.0.0/0“
Standardmäßig wird die Durchsetzungssequenz im folgenden Diagramm dargestellt:

Die Erzwingungsreihenfolge zwischen den VPC-Firewallregeln und der globalen Netzwerk-Firewallrichtlinie kann getauscht werden. Kunden können die Reihenfolge der Erzwingung jederzeit mit einem gcloud-Befehl angeben.
Tags
Die neuen in Netzwerk-Firewallrichtlinienregeln integrierten Tags sind Schlüssel/Wert-Paar-Ressourcen, die auf der Organisationsebene der Google Cloud-Ressourcenhierarchie definiert sind. Ein solches Tag enthält, wie der Name schon sagt, eine IAM-Zugriffssteuerung, die angibt, wer was mit dem Tag tun kann. Mit IAM-Berechtigungen können Sie zum Beispiel angeben, welche Hauptkonten den Tags Werte zuweisen können und welche Hauptkonten Tags an Ressourcen anhängen können. Nachdem ein Tag auf eine Ressource angewendet wurde, können Netzwerk-Firewallregeln es verwenden, um Traffic zuzulassen oder abzulehnen.
Tags entsprechen dem Übernahmeressourcenmodell von Google Cloud. Das bedeutet, dass Tags und ihre Werte in der Hierarchie von oben nach unten übergeben werden. Daher können Tags an einem Ort erstellt und dann von anderen Ordnern und Projekten in der gesamten Ressourcenhierarchie verwendet werden. Weitere Informationen zu Tags und Zugriffsbeschränkungen
Tags sollten nicht mit Netzwerk-Tags verwechselt werden. Letztere sind Strings, die zu Compute Engine-Instanzen hinzugefügt werden können. Sie sind mit der Instanz verknüpft und verschwinden, wenn die Instanz außer Betrieb genommen wird. VPC-Firewallregeln können Netzwerk-Tags enthalten. Da sie jedoch nicht als Cloud-Ressourcen betrachtet werden, unterliegen sie nicht der IAM-Zugriffssteuerung.
Hinweis: In diesem Dokument werden „Tags“ und „IAM-gesteuerte Tags“ austauschbar verwendet.
Umfang
Dieses Codelab besteht aus zwei Teilen. Im ersten Teil werden Netzwerk-Firewallrichtlinien und Tags in einem einzelnen VPC-Netzwerk demonstriert. Im zweiten Teil wird gezeigt, wie Tags in VPC-Netzwerken mit Peering verwendet werden, wie im Diagramm unten dargestellt. Für dieses Codelab ist daher ein einzelnes Projekt erforderlich, in dem mehrere VPC-Netzwerke erstellt werden können.

Lerninhalte
- Netzwerk-Firewallrichtlinie erstellen
- Tags mit Netzwerk-Firewallrichtlinien erstellen und verwenden
- Tags über VPC-Netzwerk-Peering verwenden
Voraussetzungen
- Google Cloud-Projekt
- Kenntnisse in der Bereitstellung von Instanzen und der Konfiguration von Netzwerkkomponenten
- Kenntnisse der VPC-Firewallkonfiguration
2. Hinweis
Variablen erstellen/aktualisieren
In diesem Codelab werden $variables verwendet, um die Implementierung der gcloud-Konfiguration in Cloud Shell zu erleichtern.
Führen Sie in Cloud Shell folgende Schritte aus:
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. VPC-Netzwerk und Subnetz erstellen
VPC-Netzwerk
Erstellen Sie fwpolicy-vpc1:
gcloud compute networks create $prefix-vpc1 --subnet-mode=custom
Subnetze
Erstellen Sie die entsprechenden Subnetze in der ausgewählten Region:
gcloud compute networks subnets create $prefix-vpc1-subnet \ --range=10.0.0.0/24 --network=$prefix-vpc1 --region=$region
Cloud NAT
Erstellen Sie die Cloud Router und Cloud NAT-Gateways für 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. Instanzen erstellen
Erstellen Sie eine Firewallregel, die eingehenden SSH-Traffic aus den IAP-Bereichen zulässt, falls er noch nicht im Rahmen der IAP-Einrichtung definiert wurde:
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
Erstellen Sie die Client- und Webserverinstanzen 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
Da keine VPC-Firewallregeln definiert sind (außer der Regel zum Zulassen von SSH, die beim Konfigurieren von IAP gemäß dem Anfang dieses Abschnitts erstellt werden sollte) und standardmäßig der gesamte eingehende Traffic abgelehnt wird, können die Clientinstanzen nicht auf die jeweiligen Webserver zugreifen. Um zu prüfen, ob für die Anfrage ein Zeitlimit überschritten wird, öffnen Sie ein neues Fenster und starten Sie eine SSH-Sitzung für die Instanz fwpolicy-vpc1-client. Versuchen Sie dann, den Webserver mit „curl“ aufzurufen:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Erwartete Ausgabe:
curl: (28) Connection timed out after 2001 milliseconds
Prüfen Sie optional über Cloud Shell, ob für fwpolicy-vpc1 VPC-Firewallregeln definiert sind:
gcloud compute firewall-rules list --filter="network:$prefix-vpc1"
5. Globale Netzwerk-Firewallrichtlinie
So erstellen Sie eine globale Netzwerk-Firewallrichtlinie:
gcloud compute network-firewall-policies create \ $prefix-example --description \ "firewall-policy-description" --global
Fügen Sie eine Regel hinzu, die Web-Traffic zulässt:
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
Beschreiben Sie die Netzwerk-Firewallrichtlinie und prüfen Sie, ob die Regel erfolgreich added wurde:
gcloud compute network-firewall-policies describe \
$prefix-example --global
Erwartete Ausgabe (scrollen Sie zum Anfang der Ausgabe hoch; beachten Sie, dass auch die impliziten Regeln angezeigt werden):
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
...
Verknüpfen Sie die Netzwerk-Firewallrichtlinie mit fwpolicy-vpc1:
gcloud compute network-firewall-policies associations create \
--firewall-policy $prefix-example \
--network $prefix-vpc1 \
--name $prefix-vpc1-association \
--global-firewall-policy
Prüfen Sie, ob sie erfolgreich auf das Netzwerk fwpolicy-vpc1 angewendet wurde:
gcloud compute networks get-effective-firewalls $prefix-vpc1
Erwartete Ausgabe (wenn hierarchische Firewallrichtlinien Vorrang haben, werden die entsprechenden Regeln oben angezeigt):
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
Prüfen Sie, ob sie auch auf den Webserver fwpolicy-vpc1 angewendet wurde:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
Die erwartete Ausgabe ähnelt der des vorherigen Befehls (fwpolicy-vpc1 effective firewalls):
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
Wechseln Sie zurück zur SSH-Sitzung von vpc1-client und versuchen Sie es noch einmal mit „curl“. Im folgenden Befehl wird davon ausgegangen, dass fwpolicy als Präfix verwendet wurde. Passen Sie den curl-Befehl entsprechend an, wenn ein anderer Name verwendet wurde:
user@vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2 Page on vpc1-www in network vpc1 zone us-central1-a
Prüfen Sie in Cloud Shell, ob die Netzwerk-Firewallrichtlinie auf fwpolicy-vpc1 angewendet wird:
gcloud compute network-firewall-policies describe \ $prefix-example --global
Erwartete Ausgabe (scrollen Sie zum Anfang der Ausgabe):
--- associations: - attachmentTarget: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/fwpolicy-vpc1 name: fwpolicy-vpc1-association ...
6. Von IAM verwaltete Tags
Ein Tag ist ein Schlüssel/Wert-Paar, das an eine Organisation, einen Ordner oder ein Projekt angehängt werden kann. Weitere Informationen finden Sie unter Tags erstellen und verwalten und erforderliche Berechtigungen.
Mit der Rolle „tagAdmin“ können Sie neue Tags erstellen sowie vorhandene Tags aktualisieren und löschen. Ein Organisationsadministrator kann diese Rolle zuweisen. Aktualisieren Sie die IAM-Richtlinie in Cloud Shell, um Ihrem Nutzer die Rolle „Tag-Administrator“ hinzuzufügen. Auf der Seite Berechtigungsreferenz können Sie nachsehen, welche Berechtigungen in den einzelnen vordefinierten Rollen enthalten sind.
gcloud organizations add-iam-policy-binding $org_id \ --member user:[user@example.com] --role roles/resourcemanager.tagAdmin
Führen Sie den folgenden Befehl aus, um zu prüfen, welche Nutzer die Rolle „resourcemanager.tagAdmin“ haben:
gcloud organizations get-iam-policy $org_id --flatten=bindings \ --filter=bindings.role:roles/resourcemanager.tagAdmin
Neuen Tag-Schlüssel erstellen:
gcloud resource-manager tags keys create tags-vpc1 \ --parent organizations/$org_id \ --purpose GCE_FIREWALL \ --purpose-data network=$project_id/$prefix-vpc1
Erwartete Ausgabe:
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'
Neue Tag-Werte erstellen:
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
Prüfen Sie, ob die Tag-Werte erfolgreich erstellt wurden:
gcloud resource-manager tags values list \ --parent=$org_id/tags-vpc1
Erwartete Ausgabe:
NAME SHORT_NAME DESCRIPTION tagValues/349564376683 web-servers tagValues/780363571446 web-clients
Beschreiben Sie in Cloud Shell die vorhandene Netzwerk-Firewallrichtlinienregel, um zu bestätigen, dass keine Tags verwendet werden:
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
Erwartete Ausgabe:
---
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
Aktualisieren Sie die Regel in der Cloud Shell, um nur Traffic vom Tag-Schlüssel vpc1-tags/web-clients zuzulassen, und installieren Sie die Regel auf Instanzen mit dem Tag-Schlüssel 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
Beschreiben Sie in Cloud Shell die vorhandene Netzwerk-Firewallrichtlinienregel, um zu bestätigen, dass die Tags erfolgreich angewendet wurden und als EFFECTIVE (EFFEKTIV) gemeldet werden:
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
Erwartete Ausgabe:
---
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
Prüfen Sie in Cloud Shell, ob die Regel auf vpc1 angewendet wurde:
gcloud compute networks get-effective-firewalls $prefix-vpc1
Erwartete Ausgabe:
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
Prüfen Sie, ob die Regel, die Web-Traffic zulässt, nicht mehr auf den Webserver angewendet wird, obwohl die Netzwerk-Firewallrichtlinie weiterhin dem VPC-Netzwerk zugeordnet ist. Das liegt daran, dass das Tag den Instanzen nicht hinzugefügt wurde:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
Erwartete Ausgabe (die Firewallregel mit Priorität 500 wird nicht angezeigt):
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
Weisen Sie dem jeweiligen Tag und Nutzer die Rolle „Tag-Nutzer“ zu. Auf der Seite Berechtigungsreferenz können Sie nachsehen, welche Berechtigungen in den einzelnen vordefinierten Rollen enthalten sind.
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
Prüfen Sie, ob die Rolle erfolgreich hinzugefügt wurde:
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
Erwartete Ausgabe:
bindings: - members: - user:[user] role: roles/resourcemanager.tagUser ...
Wenden Sie das Tag auf die Instanz fwpolicy-vpc1-www an:
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
Erwartete Ausgabe:
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
Prüfen Sie die Bindungen:
gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www
Erwartete Ausgabe:
namespacedTagKey: ORGANIZATION_ID/tags-vpc1 namespacedTagValue: ORGANIZATION_ID/tags-vpc1/web-servers tagKey: tagKeys/622132302133 tagValue: tagValues/349564376683
Prüfen Sie noch einmal die gültigen Firewallregeln:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
Erwartete Ausgabe:
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
Wechseln Sie zurück zum Tab der SSH-Sitzung fwpolicy-vpc1-client und versuchen Sie, einen curl-Befehl auszuführen:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Konntest du eine Verbindung herstellen?
Aktualisieren Sie die Regel über Cloud Shell, um die Quell-CIDR-Kriterien zu entfernen.
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
Wechseln Sie zurück zum Tab der SSH-Sitzung fwpolicy-vpc1-client und versuchen Sie es noch einmal:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Die Verbindung sollte dieses Mal ein Zeitlimit überschreiten, da das Tag nicht zu fwpolicy-vpc1-client hinzugefügt wurde. Fügen Sie sie in Cloud Shell hinzu und versuchen Sie es noch einmal.
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
Wechseln Sie zurück zum Tab der SSH-Sitzung fwpolicy-vpc1-client und versuchen Sie es noch einmal. Der Vorgang sollte jetzt erfolgreich sein.
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
7. Von IAM verwaltete Tags über VPC-Netzwerk-Peering
Erstellen Sie in Cloud Shell eine neue VPC, ein neues Subnetz und einen neuen Client und richten Sie VPC-Netzwerk-Peering zwischen den Netzwerken ein:
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
Erstellen Sie eine Firewallregel, die eingehenden SSH-Traffic aus den IAP-Bereichen zulässt, falls er noch nicht im Rahmen der IAP-Einrichtung definiert wurde:
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
Auch wenn Tags organisationsweite Objekte sind, sind Tag-Schlüssel mit einer bestimmten VPC verknüpft und können daher nicht auf Instanzen in verschiedenen Netzwerken angewendet werden. Daher ist es erforderlich, einen neuen Tag-Schlüssel und -Wert für vpc2 zu erstellen:
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
Wenden Sie das neue Tag auf die Instanz fwpolicy-vpc2-client an:
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
Optional: Bindungen von fwpolicy-vpc2-client auflisten:
gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client
Erwartete Ausgabe:
namespacedTagKey: ORGANIZATION_ID/tags-vpc2 namespacedTagValue: ORGANIZATION_ID/tags-vpc2/web-clients tagKey: tagKeys/916316350251 tagValue: tagValues/633150043992
Beschreiben Sie in Cloud Shell die vorhandene Netzwerk-Firewallrichtlinienregel, um zu bestätigen, dass die neuen Tags nicht verwendet werden:
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
Erwartete Ausgabe:
---
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
Aktualisieren Sie die vorhandene Firewallregel, um die Tags aus dem VPC-Netzwerk mit Peering zuzulassen:
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
Beschreiben Sie die Firewallregel, um sicherzustellen, dass sie erfolgreich angewendet wurde und als EFFEKTIV gemeldet wird:
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
Erwartete Ausgabe:
---
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
Ermitteln Sie die IP-Adresse von fwpolicy-vpc1-www mit dem folgenden gcloud-Befehl:
gcloud compute instances list --filter=vpc1-www
Stellen Sie über SSH eine Verbindung zu fwpolicy-vpc2-client her und versuchen Sie, die IP-Adresse von fwpolicy-vpc1 zu pingen:
user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2
Sie sollten eine Verbindung zum Server fwpolicy-vpc1-www herstellen können. Fahren Sie mit dem nächsten Abschnitt fort, um die Bereinigungsschritte auszuführen.
8. Bereinigungsschritte
Entfernen Sie in Cloud Shell die Instanzen, Cloud NAT und 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
Globale Netzwerk-Firewallrichtlinie und Tags entfernen:
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
Führen Sie die folgenden Schritte aus, wenn die Rollen „tagAdmin“ und „tagUsers“ geändert wurden:
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
Entfernen Sie schließlich die VPC-Netzwerk-Peerings, Subnetze und VPC-Netzwerke:
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. Glückwunsch!
Sie haben erfolgreich eine globale Netzwerk-Firewallrichtlinie mit Tag-Konfiguration konfiguriert und validiert.