Stratégie de pare-feu réseau globale avec tags

1. Introduction

Stratégies de pare-feu réseau

Les pare-feu sont les composants de base d'un environnement cloud sécurisé. Nous avons vu comment les stratégies de pare-feu s'appliquent à l'échelle de l'organisation ou des dossiers, sans modifier les pare-feu VPC. Dans cette version, nous allons étendre la structure des stratégies de pare-feu au niveau du VPC et apporter plusieurs améliorations à la prise en charge actuelle des stratégies de pare-feu afin de fournir une prise en charge unifiée des pare-feu dans la hiérarchie des ressources Google Cloud et une expérience utilisateur cohérente pour gérer le contrôle des stratégies de pare-feu de manière sécurisée, flexible et évolutive.

Une stratégie de pare-feu réseau fait office de conteneur pour les règles de pare-feu. Les règles définies dans une stratégie de pare-feu réseau ne sont appliquées nulle part tant que la stratégie n'est pas associée à un réseau VPC. Chaque réseau VPC peut être associé à une stratégie de pare-feu réseau. Les stratégies de pare-feu réseau sont compatibles avec les Tags gérés par IAM (ou simplement "Tags") dans les règles de pare-feu. Ces Tags remplacent les tags réseau actuels et peuvent être utilisés pour fournir une identité à la charge de travail.

Le partage d'une stratégie de pare-feu réseau entre plusieurs réseaux et l'intégration avec les Tags gérés par IAM simplifient considérablement la configuration et la gestion des pare-feu.

Avec l'introduction des stratégies de pare-feu réseau, les stratégies de pare-feu de Google Cloud se composent désormais des éléments suivants :

  1. Stratégie de pare-feu hiérarchique
  2. Règles de pare-feu VPC
  3. Stratégie de pare-feu réseau ( mondiale et régionale)

Les stratégies de pare-feu hiérarchiques sont compatibles avec les nœuds d'organisation et de dossier de la hiérarchie des ressources, tandis que les règles de pare-feu VPC et les stratégies de pare-feu réseau sont appliquées au niveau du VPC. Il existe une différence majeure entre les règles de pare-feu VPC et les stratégies de pare-feu réseau : les règles de pare-feu VPC ne peuvent être appliquées qu'à un seul réseau VPC, tandis que les stratégies de pare-feu réseau peuvent être associées à un seul VPC ou à un groupe de VPC, entre autres avantages comme la mise à jour groupée.

Enfin, nous avons également les règles de pare-feu implicites fournies avec chaque réseau VPC :

  • Une règle de sortie dont l'action est "allow" et dont la destination est 0.0.0.0/0
  • Une règle d'entrée dont l'action est "deny" et la source est 0.0.0.0/0

Par défaut, la séquence d'application est illustrée dans le schéma suivant :

abae4597af782b2b.png

Veuillez noter que l'ordre d'application des règles de pare-feu VPC et de la stratégie de pare-feu réseau mondiale peut être inversé. Les clients peuvent spécifier l'ordre d'application à tout moment avec une commande gcloud.

Tags

Les nouveaux tags intégrés aux règles des stratégies de pare-feu réseau sont des ressources de paires clé-valeur définies au niveau de l'organisation dans la hiérarchie des ressources Google Cloud. Un tel tag contient un contrôle des accès IAM qui, comme son nom l'indique, spécifie qui peut faire quoi sur le tag. Les autorisations IAM, par exemple, permettent de spécifier les comptes principaux qui peuvent attribuer des valeurs aux tags et ceux qui peuvent associer des tags aux ressources. Une fois qu'un Tag a été appliqué à une ressource, les règles de pare-feu réseau peuvent l'utiliser pour autoriser et refuser le trafic.

Les tags respectent le modèle de ressource d'héritage de Google Cloud, ce qui signifie que les tags et leurs valeurs sont transmis dans la hiérarchie depuis leurs parents. Par conséquent, les tags peuvent être créés à un emplacement, puis utilisés par d'autres dossiers et projets dans toute la hiérarchie de ressources. Pour en savoir plus sur les tags et la restriction des accès, consultez cette page.

Vous ne devez pas confondre les tags avec les tags réseau. Ces derniers sont des chaînes pouvant être ajoutées aux instances Compute Engine. Ils sont associés à l'instance et disparaissent lorsque celle-ci est mise hors service. Les règles de pare-feu VPC peuvent inclure des tags réseau, mais comme ils ne sont pas considérés comme des ressources cloud, ils ne sont pas soumis au contrôle des accès IAM.

Notez que les termes "tags" et "tags régis par IAM" sont utilisés de manière interchangeable dans ce document.

Objectifs de l'atelier

Cet atelier de programmation comporte deux parties : la première présente les stratégies de pare-feu réseau et les tags à l'aide d'un seul réseau VPC, et la seconde montre comment utiliser les tags dans les réseaux VPC appairés, comme indiqué dans le schéma ci-dessous. Cet atelier de programmation nécessite donc un seul projet et la possibilité de créer plusieurs réseaux VPC.

b9acf9823df8be04.jpeg

Points abordés

  • Créer une stratégie de pare-feu réseau
  • Créer et utiliser des tags avec une stratégie de pare-feu réseau
  • Utiliser des tags avec l'appairage de réseaux VPC

Prérequis

  • Projet Google Cloud
  • Connaissances sur le déploiement d'instances et la configuration de composants réseau
  • Connaissances sur la configuration des pare-feu VPC

2. Avant de commencer

Créer/Mettre à jour des variables

Cet atelier de programmation utilise des $variables pour faciliter l'implémentation de la configuration gcloud dans Cloud Shell.

Dans Cloud Shell, procédez comme suit :

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. Créer un réseau et un sous-réseau VPC

Réseau VPC

Créez fwpolicy-vpc1 :

gcloud compute networks create $prefix-vpc1 --subnet-mode=custom 

Sous-réseaux

Créez les sous-réseaux respectifs dans la région sélectionnée :

gcloud compute networks subnets create $prefix-vpc1-subnet \
   --range=10.0.0.0/24 --network=$prefix-vpc1 --region=$region

Cloud NAT

Créez les routeurs Cloud et les passerelles Cloud NAT pour 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. Créer des instances

Créez une règle de pare-feu qui autorise le trafic SSH entrant provenant des plages IAP si elle n'a pas encore été définie lors de la configuration d'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

Créez les instances client et de serveur Web 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

Étant donné qu'aucune règle de pare-feu VPC n'est définie (à l'exception de la règle autorisant SSH qui aurait dû être créée lors de la configuration d'IAP, comme indiqué au début de cette section), et que par défaut tout le trafic entrant est refusé, les instances clientes ne pourront pas accéder aux serveurs Web respectifs. Pour vérifier que la requête expirera, ouvrez une nouvelle fenêtre et lancez une session SSH sur l'instance fwpolicy-vpc1-client, puis essayez d'envoyer une requête cURL au serveur Web :

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

Résultat attendu :

curl: (28) Connection timed out after 2001 milliseconds

Vous pouvez également vérifier qu'aucune règle de pare-feu VPC n'est définie pour fwpolicy-vpc1 via Cloud Shell :

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

5. Stratégie de pare-feu de réseau mondial

Créez une stratégie de pare-feu de réseau au niveau mondial :

gcloud compute network-firewall-policies create \
   $prefix-example --description \
   "firewall-policy-description" --global

Ajoutez une règle autorisant le trafic Web :

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

Décrivez la stratégie de pare-feu réseau et vérifiez que la règle a bien été added :

gcloud compute network-firewall-policies describe \
    $prefix-example --global

Résultat attendu (faites défiler l'écran jusqu'au début du résultat ; notez que les règles implicites sont également affichées) :

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
...

Associez la stratégie de pare-feu réseau à fwpolicy-vpc1 :

gcloud compute network-firewall-policies associations create \
     --firewall-policy $prefix-example \
     --network $prefix-vpc1 \
     --name $prefix-vpc1-association \
     --global-firewall-policy

Vérifiez qu'elle a bien été appliquée au réseau fwpolicy-vpc1 :

gcloud compute networks get-effective-firewalls $prefix-vpc1

Résultat attendu (notez que si des stratégies de pare-feu hiérarchiques sont prioritaires, les règles concernées s'affichent en haut) :

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

Vérifiez qu'il a bien été appliqué au serveur Web fwpolicy-vpc1 :

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

Le résultat attendu est semblable à celui de la commande précédente (pare-feu effectifs 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

Revenez à la session SSH vpc1-client et essayez à nouveau d'utiliser curl (notez que la commande ci-dessous suppose que fwpolicy a été utilisé comme préfixe. Veuillez ajuster la commande curl en conséquence si un autre nom a été utilisé) :

user@vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Page on vpc1-www in network vpc1 zone us-central1-a

Dans Cloud Shell, vérifiez que la stratégie de pare-feu réseau est appliquée à fwpolicy-vpc1 :

gcloud compute network-firewall-policies describe \
   $prefix-example --global

Résultat attendu (faites défiler l'écran vers le haut pour atteindre le début du résultat) :

---
associations:
- attachmentTarget: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/fwpolicy-vpc1
  name: fwpolicy-vpc1-association
...

6. Tags gérés par IAM

Un tag est une paire clé-valeur pouvant être associée à une organisation, un dossier ou un projet. Pour en savoir plus, consultez Créer et gérer des tags et les autorisations requises.

Le rôle tagAdmin vous permet de créer, de mettre à jour et de supprimer des tags existants. Un administrateur de l'organisation peut attribuer ce rôle. Dans Cloud Shell, mettez à jour la stratégie IAM pour ajouter le rôle tagAdmin à votre utilisateur. Consultez la page de documentation de référence sur les autorisations pour voir les autorisations incluses dans chaque rôle prédéfini.

gcloud organizations add-iam-policy-binding $org_id \
  --member user:[user@example.com] --role roles/resourcemanager.tagAdmin

Exécutez la commande ci-dessous pour vérifier quels utilisateurs disposent du rôle resourcemanager.tagAdmin :

gcloud organizations get-iam-policy $org_id --flatten=bindings \
  --filter=bindings.role:roles/resourcemanager.tagAdmin

Créez une clé de tag :

gcloud resource-manager tags keys create tags-vpc1 \
   --parent organizations/$org_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc1

Résultat attendu :

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'

Créez des valeurs de tag :

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

Vérifiez que les valeurs des tags ont bien été créées :

gcloud resource-manager tags values list \
   --parent=$org_id/tags-vpc1

Résultat attendu :

NAME                    SHORT_NAME   DESCRIPTION
tagValues/349564376683  web-servers
tagValues/780363571446  web-clients

Dans Cloud Shell, décrivez la règle de stratégie de pare-feu réseau existante pour confirmer que les tags ne sont pas utilisés :

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Résultat attendu :

---
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

Dans Cloud Shell, mettez à jour la règle pour n'autoriser que le trafic provenant de la clé de tag vpc1-tags/web-clients, puis installez la règle sur les instances avec la clé de tag 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

Dans Cloud Shell, décrivez la règle de stratégie de pare-feu réseau existante pour confirmer que les tags ont bien été appliqués et qu'ils sont signalés comme EFFECTIFS :

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Résultat attendu :

---
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

Dans Cloud Shell, vérifions que la règle a été appliquée à vpc1 :

gcloud compute networks get-effective-firewalls $prefix-vpc1

Résultat attendu :

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

Vérifiez que, même si la stratégie de pare-feu réseau est toujours associée au réseau VPC, la règle qui autorise le trafic Web n'est plus appliquée au serveur Web, car le tag n'a pas été ajouté aux instances :

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

Résultat attendu (notez que la règle de pare-feu de priorité 500 n'est pas affichée) :

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

Accordez le rôle "Utilisateur de tags" au tag et à l'utilisateur spécifiques. Consultez la page de documentation de référence sur les autorisations pour voir les autorisations incluses dans chaque rôle prédéfini.

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

Vérifiez que le rôle a bien été ajouté :

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

Résultat attendu :

bindings:
- members:
  - user:[user]
  role: roles/resourcemanager.tagUser
...

Appliquez le tag à l'instance 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

Résultat attendu :

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

Validez les liaisons :

gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www 

Résultat attendu :

namespacedTagKey: ORGANIZATION_ID/tags-vpc1
namespacedTagValue: ORGANIZATION_ID/tags-vpc1/web-servers
tagKey: tagKeys/622132302133
tagValue: tagValues/349564376683

Vérifiez à nouveau les règles de pare-feu efficaces :

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

Résultat attendu :

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

Revenez à l'onglet de la session SSH fwpolicy-vpc1-client et essayez d'exécuter curl :

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

Avez-vous pu vous connecter ?

Pour vérifier cela, mettez à jour la règle afin de supprimer les critères CIDR source via 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

Revenez à l'onglet de session SSH fwpolicy-vpc1-client et réessayez :

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

La connexion devrait cette fois expirer, car le tag n'a pas été ajouté à fwpolicy-vpc1-client. Ajoutez-le depuis Cloud Shell et réessayez.

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

Revenez à l'onglet de la session SSH fwpolicy-vpc1-client et réessayez. L'opération devrait maintenant réussir.

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

7. Tags gérés par IAM sur l'appairage de réseaux VPC

Dans Cloud Shell, créez un réseau VPC, un sous-réseau et un client, puis configurez l'appairage de réseaux VPC entre les réseaux :

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

Créez une règle de pare-feu qui autorise le trafic SSH entrant provenant des plages IAP si elle n'a pas encore été définie lors de la configuration d'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

Même si les tags sont des objets à l'échelle de l'organisation, les clés de tag sont associées à un VPC spécifique et ne peuvent donc pas être appliquées à des instances de différents réseaux. Il est donc nécessaire de créer une clé et une valeur de tag applicables à 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

Appliquez le nouveau tag à l'instance 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

Vous pouvez également lister les liaisons de 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

Résultat attendu :

namespacedTagKey: ORGANIZATION_ID/tags-vpc2
namespacedTagValue: ORGANIZATION_ID/tags-vpc2/web-clients
tagKey: tagKeys/916316350251
tagValue: tagValues/633150043992

Dans Cloud Shell, décrivez la règle de stratégie de pare-feu réseau existante pour confirmer que les nouveaux tags ne sont pas utilisés :

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Résultat attendu :

---
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

Mettez à jour la règle de pare-feu existante pour autoriser les tags du réseau VPC appairé :

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

Décrivez la règle de pare-feu pour vous assurer qu'elle a bien été appliquée et qu'elle est signalée comme EFFICACE :

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

Résultat attendu :

---
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

Découvrez l'adresse IP de fwpolicy-vpc1-www à l'aide de la commande gcloud ci-dessous :

gcloud compute instances list --filter=vpc1-www

Connectez-vous à fwpolicy-vpc2-client via SSH et essayez d'envoyer une requête curl à l'adresse IP de fwpolicy-vpc1 :

user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2

Vous devriez pouvoir vous connecter au serveur fwpolicy-vpc1-www. Passez à la section suivante pour connaître les étapes de nettoyage.

8. Étapes de nettoyage

Dans Cloud Shell, supprimez les instances, Cloud NAT et 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

Supprimez la stratégie de pare-feu de réseau au niveau mondial et les 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

Suivez les étapes ci-dessous si les rôles tagAdmin et tagUsers ont été modifiés :

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

Enfin, supprimez les appairages de réseaux VPC, les sous-réseaux et les réseaux 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. Félicitations !

Félicitations, vous avez correctement configuré et validé une stratégie de pare-feu de réseau au niveau mondial avec des tags.