Política de firewall de red global con etiquetas

1. Introducción

Políticas de firewall de red

Los firewalls son los componentes básicos de un entorno de nube seguro. Anteriormente, presentamos las políticas de firewall a nivel de la organización y de la carpeta, sin modificar los firewalls de VPC. En esta versión, expandiremos la estructura de la política de firewall hasta el nivel de la VPC y realizaremos varias mejoras en la compatibilidad actual con la política de firewall para proporcionar una compatibilidad unificada con el firewall en toda la jerarquía de recursos de Google Cloud y una experiencia del usuario coherente en la administración del control de la política de firewall de una manera segura, flexible y escalable.

La política de firewall de red actúa como un contenedor para las reglas de firewall. Las reglas que se definen en una política de firewall de red no se aplican en ningún lugar hasta que la política esté asociada con una red de VPC. Cada red de VPC puede tener asociada una política de firewall de red. Las políticas de firewall de red admiten etiquetas controladas por IAM (o solo etiquetas) en las reglas de firewall, que reemplazan las etiquetas de red actuales y se pueden usar para proporcionar identidad a la carga de trabajo.

Compartir una política de firewall de red entre redes y la integración con etiquetas controladas por IAM simplifica en gran medida la configuración y administración de los firewalls.

Con la introducción de la política de firewall de red, las políticas de firewall de Google Cloud ahora consisten en los siguientes componentes:

  1. Política de firewall jerárquica
  2. Reglas de firewall de VPC
  3. Política de firewall de red ( global y regional)

Las políticas de firewall jerárquicas son compatibles con los nodos de organización y carpeta dentro de la jerarquía de recursos, mientras que las reglas de firewall de VPC y las políticas de firewall de red se aplican a nivel de VPC. Una gran diferencia entre las reglas de firewall de VPC y las políticas de firewall de red es que las reglas de firewall de VPC solo se pueden aplicar a una sola red de VPC, mientras que las políticas de firewall de red se pueden adjuntar a una sola VPC o a un grupo de VPC, entre otros beneficios, como la actualización por lotes.

Por último, también tenemos las reglas de firewall implícitas que se incluyen en cada red de VPC:

  • Una regla de salida cuya acción es permitir, destino es 0.0.0.0/0
  • Una regla de entrada cuya acción es deny (rechazar), el origen es 0.0.0.0/0

De forma predeterminada, la secuencia de aplicación se muestra en el siguiente diagrama:

abae4597af782b2b.png

Ten en cuenta que se puede intercambiar el orden de aplicación entre las reglas de firewall de VPC y la política de firewall de red global. Los clientes pueden especificar el orden de aplicación en cualquier momento con un comando gcloud.

Etiquetas

Las nuevas etiquetas integradas en las reglas de la política de firewall de red son recursos de par clave-valor definidos a nivel de la organización de la jerarquía de recursos de Google Cloud. Como su nombre lo indica, una etiqueta de este tipo contiene un control de acceso de IAM que especifica quién puede hacer qué en la etiqueta. Por ejemplo, los permisos de IAM permiten especificar qué principales pueden asignar valores a las etiquetas y cuáles pueden adjuntarlas a los recursos. Una vez que se aplica una etiqueta a un recurso, las reglas de firewall de red pueden usarla para permitir y denegar el tráfico.

Las etiquetas se adhieren al modelo de recursos de herencia de Google Cloud, lo que significa que las etiquetas y sus valores se transmiten a través de la jerarquía desde sus elementos superiores. Como resultado, las etiquetas se pueden crear en un lugar y, luego, usarlas en otras carpetas y proyectos en toda la jerarquía de recursos. Visita esta página para obtener más detalles sobre las etiquetas y la restricción de acceso.

No debes confundir las etiquetas con las etiquetas de red, que son cadenas que se pueden agregar a las instancias de Compute Engine. Se asocian con la instancia y desaparecen cuando esta se da de baja. Las reglas de firewall de VPC pueden incluir etiquetas de red, pero, como no se consideran recursos de la nube, no están sujetas al control de acceso de IAM.

Ten en cuenta que las etiquetas y las etiquetas administradas por IAM se usan indistintamente en este documento.

Qué compilarás

Este codelab tiene dos partes: en la primera, se muestran las políticas de firewall de red y las etiquetas con una sola red de VPC, y en la segunda, se muestra cómo usar las etiquetas en redes de VPC vinculadas, según el siguiente diagrama. Por lo tanto, este codelab requiere un solo proyecto y la capacidad de crear varias redes de VPC.

b9acf9823df8be04.jpeg

Qué aprenderás

  • Cómo crear una política de firewall de red
  • Cómo crear y usar etiquetas con la política de firewall de red
  • Cómo usar etiquetas a través del intercambio de tráfico entre redes de VPC

Requisitos

  • Proyecto de Google Cloud
  • Conocimientos para implementar instancias y configurar componentes de red
  • Conocimientos sobre la configuración de firewalls de VPC

2. Antes de comenzar

Cómo crear o actualizar variables

En este codelab, se usan $variables para ayudar a implementar la configuración de gcloud en Cloud Shell.

En Cloud Shell, haz lo siguiente:

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. Crea una red y una subred de VPC

Red de VPC

Crea fwpolicy-vpc1:

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

Subredes

Crea las subredes correspondientes en la región seleccionada:

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

Cloud NAT

Crea los Cloud Routers y las puertas de enlace de Cloud NAT para 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. Crea instancias

Crea una regla de firewall que permita el tráfico SSH de entrada desde los rangos de IAP en caso de que aún no se haya definido como parte de la configuración de 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

Crea las instancias de cliente y servidor 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

Dado que no se definieron reglas de firewall de VPC (a excepción de la regla de permitir SSH que se debería haber creado cuando se configuró el IAP al comienzo de esta sección) y, de forma predeterminada, se rechaza todo el tráfico de entrada, las instancias de cliente no podrán acceder a los servidores web correspondientes. Para verificar que se agote el tiempo de espera de la solicitud, abre una ventana nueva, inicia una sesión de SSH en la instancia fwpolicy-vpc1-client y, luego, intenta usar curl en el servidor web:

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

Resultado esperado:

curl: (28) Connection timed out after 2001 milliseconds

De forma opcional, verifica que no haya reglas de firewall de VPC definidas para fwpolicy-vpc1 a través de Cloud Shell:

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

5. Política de firewall de red global

Crea una política de firewall de red global:

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

Agrega una regla que permita el tráfico 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

Describe la política de firewall de red y verifica que la regla se added correctamente:

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

Resultado esperado (desplázate hacia arriba hasta el principio del resultado; ten en cuenta que también se muestran las reglas implícitas):

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

Asocia la política de firewall de red a fwpolicy-vpc1:

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

Verifica que se haya aplicado correctamente a la red fwpolicy-vpc1:

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

Resultado esperado (ten en cuenta que, si hay políticas de firewall jerárquicas que tienen prioridad, las reglas relevantes se mostrarán en la parte superior):

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

Verifica que también se haya aplicado correctamente al servidor web fwpolicy-vpc1:

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

El resultado esperado es similar al comando anterior (firewalls efectivos de 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

Regresa a la sesión de SSH de vpc1-client y vuelve a intentar curl (ten en cuenta que, en el siguiente comando, se supone que se usó fwpolicy como prefijo; ajusta el comando curl según corresponda si se usó otro nombre):

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

En Cloud Shell, valida que la política de firewall de red se aplique a fwpolicy-vpc1:

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

Resultado esperado (desplázate hacia arriba hasta el principio del resultado):

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

6. Etiquetas administradas por IAM

Una etiqueta es un par clave-valor que se puede adjuntar a una organización, una carpeta o un proyecto. Consulta Cómo crear y administrar etiquetas y los permisos necesarios para obtener más detalles.

El rol tagAdmin te permite crear etiquetas nuevas, actualizar y borrar etiquetas existentes. Un administrador de la organización puede otorgar este rol. En Cloud Shell, actualiza la política de IAM para agregar el rol tagAdmin a tu usuario. Usa la página Referencia de permisos para ver qué permisos se incluyen en cada rol predefinido.

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

Ejecuta el siguiente comando para verificar qué usuarios tienen el rol resourcemanager.tagAdmin:

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

Crea una nueva clave de etiqueta:

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

Resultado esperado:

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'

Crea valores de etiqueta nuevos:

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

Valida que los valores de las etiquetas se hayan creado correctamente:

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

Resultado esperado:

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

En Cloud Shell, describe la regla de política de firewall de red existente para confirmar que no se estén usando etiquetas:

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

Resultado esperado:

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

En Cloud Shell, actualiza la regla para permitir solo el tráfico de la clave de etiqueta vpc1-tags/web-clients y, luego, instálala en las instancias con la clave de etiqueta 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

En Cloud Shell, describe la regla de política de firewall de red existente para confirmar que las etiquetas se aplicaron correctamente y se informan como EFECTIVAS:

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

Resultado esperado:

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

Desde Cloud Shell, verifiquemos que la regla se haya aplicado a vpc1:

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

Resultado esperado:

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

Verifica que, aunque la política de firewall de red siga asociada a la red de VPC, la regla que permite el tráfico web ya no se aplique al servidor web, ya que la etiqueta no se agregó a las instancias:

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

Resultado esperado (ten en cuenta que no se muestra la regla de firewall con prioridad 500):

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

Otorga el rol de usuario de etiquetas a la etiqueta y al usuario específicos. Usa la página Referencia de permisos para ver qué permisos se incluyen en cada rol predefinido.

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

Verifica que el rol se haya agregado correctamente:

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

Resultado esperado:

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

Aplica la etiqueta a la instancia 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

Resultado esperado:

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

Verifica las vinculaciones:

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

Resultado esperado:

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

Vuelve a verificar las reglas de firewall vigentes:

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

Resultado esperado:

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

Regresa a la pestaña de sesión SSH de fwpolicy-vpc1-client y prueba curl:

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

¿Pudiste conectarte?

Para verificarlo, actualiza la regla para quitar los criterios de CIDR de origen a través de 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

Regresa a la pestaña de sesión SSH de fwpolicy-vpc1-client y vuelve a intentarlo:

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

Esta vez, la conexión debería agotar el tiempo de espera, ya que no se agregó la etiqueta a fwpolicy-vpc1-client. Desde Cloud Shell, agrégala y vuelve a intentarlo.

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

Regresa a la pestaña de sesión de SSH fwpolicy-vpc1-client y vuelve a intentarlo. Ahora debería tener éxito.

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

7. Etiquetas administradas por IAM a través del intercambio de tráfico entre redes de VPC

En Cloud Shell, crea una VPC, una subred y un cliente nuevos, y configura el intercambio de tráfico entre redes de VPC entre las redes:

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

Crea una regla de firewall que permita el tráfico SSH de entrada desde los rangos de IAP en caso de que aún no se haya definido como parte de la configuración de 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

Si bien las etiquetas son objetos de toda la organización, las claves de etiqueta están asociadas a una VPC específica y, por lo tanto, no se pueden aplicar a instancias de diferentes redes. Por lo tanto, es necesario crear una clave y un valor de etiqueta nuevos que se apliquen a 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

Aplica la etiqueta nueva a la instancia 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

De manera opcional, muestra las vinculaciones 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

Resultado esperado:

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

En Cloud Shell, describe la regla de política de firewall de red existente para confirmar que no se estén usando las etiquetas nuevas:

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

Resultado esperado:

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

Actualiza la regla de firewall existente para permitir las etiquetas de la red de VPC de intercambio de tráfico:

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

Describe la regla de firewall para asegurarte de que se haya aplicado correctamente y se informe como EFECTIVA:

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

Resultado esperado:

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

Obtén la IP de fwpolicy-vpc1-www con el siguiente comando de gcloud:

gcloud compute instances list --filter=vpc1-www

Conéctate a fwpolicy-vpc2-client a través de SSH y prueba curl la IP de fwpolicy-vpc1:

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

Deberías poder conectarte al servidor fwpolicy-vpc1-www. Continúa con la siguiente sección para conocer los pasos de limpieza.

8. Pasos de limpieza

Desde Cloud Shell, quita las instancias, Cloud NAT y 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

Quita la política de firewall de red global y las etiquetas:

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

Sigue los pasos que se indican a continuación si se cambiaron los roles de tagAdmin y tagUsers:

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

Por último, quita los intercambios de tráfico entre redes de VPC, las subredes y las redes de 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. ¡Felicitaciones!

Felicitaciones, configuraste y validaste correctamente una política de firewall de red global con la configuración de etiquetas.