Globale Netzwerk-Firewallrichtlinie mit Tags

1. Einführung

Netzwerk-Firewallrichtlinien

Firewalls sind die Grundbausteine einer sicheren Cloud-Umgebung. Zuvor haben wir Firewallrichtlinien auf Organisations- und Ordnerebene eingeführt, während VPC-Firewalls unverändert gelassen wurden. In dieser Version erweitern wir die Struktur der Firewallrichtlinien bis auf die VPC-Ebene und nehmen verschiedene Verbesserungen an der aktuellen Unterstützung von Firewallrichtlinien vor, um eine einheitliche Unterstützung der Firewall in der Ressourcenhierarchie von Google Cloud zu bieten und Nutzern eine einheitliche Steuerung der Firewallrichtlinien auf sichere, flexible und skalierbare Weise zu bieten.

Die Netzwerk-Firewallrichtlinie fungiert als Container für Firewallregeln. In einer Netzwerk-Firewallrichtlinie definierte Regeln werden erst dann erzwungen, wenn die Richtlinie einem VPC-Netzwerk zugeordnet ist. Jedem VPC-Netzwerk kann eine Netzwerk-Firewallrichtlinie zugeordnet sein. Netzwerk-Firewallrichtlinien unterstützen IAM-gesteuerte Tags (oder nur Tags) in Firewallregeln. Diese ersetzen aktuelle Netzwerk-Tags und können verwendet werden, um Arbeitslasten Identität zu erteilen.

Die gemeinsame Nutzung einer Netzwerk-Firewallrichtlinie für mehrere Netzwerke und die Einbindung von IAM-gesteuerten Tags vereinfacht die Konfiguration und Verwaltung von Firewalls erheblich.

Mit der Einführung der Netzwerk-Firewallrichtlinie bestehen die Firewallrichtlinien von Google Cloud nun aus den folgenden Komponenten:

  1. Hierarchische Firewallrichtlinie
  2. VPC-Firewallregeln
  3. Netzwerk-Firewallrichtlinie ( global und regional)

Hierarchische Firewallrichtlinien werden auf den Organisations- und Ordnerknoten innerhalb 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 neben anderen Vorteilen wie Batch-Updates an eine einzelne VPC oder Gruppe von VPCs angehängt werden können.

Außerdem gibt es noch die impliziten Firewallregeln, die für jedes VPC-Netzwerk gelten:

  • Regel für ausgehenden Traffic mit der Aktion „allow“, Ziel 0.0.0.0/0
  • Eingangsregel mit der Aktion „ablehnen“, Quelle 0.0.0.0/0

Standardmäßig wird die Erzwingungssequenz im folgenden Diagramm dargestellt:

abae4597af782b2b.png

Die Erzwingungsreihenfolge zwischen den VPC-Firewallregeln und der globalen Netzwerk-Firewallrichtlinie kann geändert werden. Kunden können die Erzwingungsreihenfolge jederzeit mit einem gcloud-Befehl festlegen.

Tags

Die neuen in Netzwerk-Firewallrichtlinien-Regeln eingebundenen Tags sind Schlüssel/Wert-Paar-Ressourcen, die auf Organisationsebene der Google Cloud-Ressourcenhierarchie definiert sind. Ein solches Tag enthält, wie der Name schon sagt, eine IAM-Zugriffssteuerung, die angibt, wer was für das Tag tun darf. In IAM-Berechtigungen kann beispielsweise angegeben werden, welche Hauptkonten Tags Werte zuweisen und welche Hauptkonten Tags an Ressourcen anhängen dürfen. Nachdem ein Tag auf eine Ressource angewendet wurde, können Netzwerk-Firewallregeln damit Traffic zulassen oder ablehnen.

Tags entsprechen dem Ressourcenmodell von Google Cloud für die Übernahme. Das bedeutet, dass Tags und ihre Werte innerhalb der Hierarchie von ihren übergeordneten Elementen übernommen werden. So 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 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 gelten, unterliegen sie nicht der IAM-Zugriffssteuerung.

Beachten Sie, dass Tags und von IAM verwaltete Tags in diesem Dokument synonym verwendet werden.

Inhalt

Dieses Codelab besteht aus zwei Teilen. Im ersten werden Netzwerk-Firewallrichtlinien und -Tags mithilfe eines einzelnen VPC-Netzwerks gezeigt. Im zweiten wird gezeigt, wie Tags in Peering-VPC-Netzwerken verwendet werden (siehe Diagramm unten). Daher erfordert dieses Codelab ein einzelnes Projekt und die Möglichkeit, mehrere VPC-Netzwerke zu erstellen.

b9acf9823df8be04.jpeg

Aufgaben in diesem Lab

  • Netzwerk-Firewallrichtlinie erstellen
  • Tags mit Netzwerk-Firewallrichtlinie erstellen und verwenden
  • Tags über VPC-Netzwerk-Peering verwenden

Voraussetzungen

  • Google Cloud-Projekt
  • Kenntnisse der Bereitstellung von Instanzen und der Konfiguration von Netzwerkkomponenten
  • Kenntnisse über die Konfiguration von VPC-Firewalls

2. Hinweis

Variablen erstellen/aktualisieren

In diesem Codelab wird $variables verwendet, um die Implementierung der gcloud-Konfiguration in Cloud Shell zu unterstützen.

Führen Sie in Cloud Shell die folgenden 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 sie 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 (mit Ausnahme der SSH-Zulassungsregel, die bei der Konfiguration von IAP wie zu Beginn dieses Abschnitts erstellt worden sein sollte) und standardmäßig der gesamte eingehende Traffic abgelehnt wird, können die Clientinstanzen nicht auf die entsprechenden Webserver zugreifen. Um zu überprüfen, ob bei der Anfrage eine Zeitüberschreitung auftritt, öffnen Sie ein neues Fenster, initiieren eine SSH-Sitzung für die fwpolicy-vpc1-client-Instanz und versuchen Sie, den Webserver mit dem curl-Befehl auszuführen:

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, ob für fwpolicy-vpc1 über Cloud Shell keine VPC-Firewallregeln definiert sind:

gcloud compute firewall-rules list --filter="network:$prefix-vpc1"

5. Globale Netzwerk-Firewallrichtlinie

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 Webtraffic 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; 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 relevanten 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 dem vorherigen Befehl (effektive Firewalls 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

Wechseln Sie zurück zur SSH-Sitzung „vpc1-client“ und versuchen Sie noch einmal, den curl-Befehl auszuführen. Beachten Sie, dass im folgenden Befehl davon ausgegangen wird, dass fwpolicy als Präfix verwendet wurde. Passen Sie den curl-Befehl entsprechend an, wenn stattdessen 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 in Cloud Shell die IAM-Richtlinie, um Ihrem Nutzer die Rolle „tagAdmin“ hinzuzufügen. Auf der Seite Berechtigungsreferenz sehen Sie, welche Berechtigungen in den 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

Erstellen Sie einen neuen Tag-Schlüssel:

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 Regel der Netzwerk-Firewallrichtlinie, 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 in Cloud Shell die Regel so, dass nur Traffic vom Tag-Schlüssel vpc1-tags/web-clients zugelassen wird, und installieren Sie sie 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 Regel der Netzwerk-Firewallrichtlinie, um zu bestätigen, dass die Tags erfolgreich angewendet wurden und als 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

Überprü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 Webtraffic zulässt, auch wenn die Netzwerk-Firewallrichtlinie weiterhin dem VPC-Netzwerk zugeordnet ist, nicht mehr auf den Webserver angewendet wird, da den Instanzen kein Tag hinzugefügt wurde:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

Erwartete Ausgabe (beachten Sie, dass die Firewallregel mit der Priorität 500 nicht angezeigt wird):

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 sehen Sie, welche Berechtigungen in den 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 die geltenden Firewallregeln noch einmal:

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 SSH-Sitzungstab von fwpolicy-vpc1-client und versuchen Sie, den curl-Befehl auszuführen:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

Konnten Sie eine Verbindung herstellen?

Aktualisieren Sie dazu die Regel und entfernen Sie die Quell-CIDR-Kriterien über 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

Wechseln Sie zurück zum SSH-Sitzungstab von 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 eine Zeitüberschreitung verursachen, da das Tag fwpolicy-vpc1-client nicht hinzugefügt wurde. Fügen Sie sie über 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 mit der SSH-Sitzung fwpolicy-vpc1-client und versuchen Sie es noch einmal. Der Vorgang sollte nun 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 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 sie 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

Obwohl Tags organisationsweite Objekte sind, sind Tag-Schlüssel einer bestimmten VPC zugeordnet und können daher nicht auf Instanzen in verschiedenen Netzwerken angewendet werden. Daher müssen Sie einen neuen Tag-Schlüssel und ‐Wert für VPC2 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

Listen Sie optional die Bindungen von fwpolicy-vpc2-client auf:

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 Regel der Netzwerk-Firewallrichtlinie, 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 Peering-VPC-Netzwerk 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. Sie wird als EFFEKTIV gemeldet:

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 mit dem curl-Befehl auszuführen:

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 zur Bereinigung fort.

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

Entfernen Sie die globale Netzwerk-Firewallrichtlinie und die Tags:

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 abschließend 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!

Glückwunsch, Sie haben eine globale Netzwerk-Firewallrichtlinie mit der Tag-Konfiguration konfiguriert und validiert.