Política de firewall de rede global com tags

1. Introdução

Políticas de firewall de rede

Os firewalls são os elementos básicos de um ambiente de nuvem seguro. Já introduzimos políticas de firewall no nível da organização e da pasta sem mudar os firewalls da VPC. Nesta versão, vamos expandir a estrutura das políticas de firewall até o nível da VPC e fazer várias melhorias no suporte às políticas atuais para oferecer um suporte de firewall unificado na hierarquia de recursos do Google Cloud e uma experiência do usuário consistente no gerenciamento do controle de políticas de firewall de forma segura, flexível e escalonável.

A política de firewall de rede atua como um contêiner para regras de firewall. As regras definidas em uma política de firewall de rede não são aplicadas até que a política seja associada a uma rede VPC. Cada rede VPC pode ter uma política de firewall de rede associada a ela. As políticas de firewall de rede oferecem suporte a tags controladas pelo IAM (ou apenas tags) nas regras de firewall, que substituem as tags de rede atuais e podem ser usadas para dar identidade à carga de trabalho.

O compartilhamento de uma política de firewall de rede entre redes e a integração com tags controladas pelo IAM simplificam muito a configuração e o gerenciamento dos firewalls.

Com o lançamento das políticas de firewall de rede, as políticas de firewall do Google Cloud agora consistem nos seguintes componentes:

  1. Política de firewall hierárquica
  2. Regras de firewall da VPC
  3. Política de firewall de rede ( global e regional)

As políticas hierárquicas de firewall são compatíveis com os nós da organização e da pasta na hierarquia de recursos, enquanto as regras de firewall da VPC e as políticas de firewall de rede são aplicadas no nível da VPC. Uma grande diferença entre as regras de firewall de VPC e as políticas de firewall de rede é que as regras de firewall de VPC só podem ser aplicadas a uma rede VPC, enquanto as políticas de firewall de rede podem ser anexadas a uma única VPC ou grupo de VPCs, entre outros benefícios, como atualização em lote.

Por fim, também temos as regras de firewall implícitas que acompanham todas as redes VPC:

  • Uma regra de saída em que a ação é permitir, o destino é 0.0.0.0/0
  • uma regra de entrada em que a ação é negar, a origem é 0.0.0.0/0

Por padrão, a sequência de aplicação é mostrada no diagrama abaixo:

abae4597af782b2b.png

A ordem de aplicação entre as regras de firewall da VPC e a política de firewall de rede global pode ser trocada. Os clientes podem especificar a ordem de aplicação a qualquer momento com um comando gcloud.

Tags

As novas tags integradas nas regras de política de firewall da rede são recursos de pares de chave-valor definidos no nível da organização da hierarquia de recursos do Google Cloud. Essa tag contém um controle de acesso do IAM, como o nome indica, que especifica quem pode fazer o quê na tag. Com as permissões do IAM, por exemplo, é possível especificar quais principais podem atribuir valores às tags e quais podem anexar tags aos recursos. Depois que uma tag é aplicada a um recurso, as regras de firewall de rede podem usá-la para permitir ou negar tráfego.

As tags aderem ao modelo de recurso de herança do Google Cloud. Isso significa que as tags e os valores delas são transmitidos pela hierarquia a partir dos pais. Assim, as tags podem ser criadas em um só lugar e usadas por outras pastas e projetos em toda a hierarquia de recursos. Acesse esta página para mais detalhes sobre tags e restrição de acesso.

As tags não podem ser confundidas com tags de rede, que são strings que podem ser adicionadas às instâncias do Compute Engine. eles são associados à instância e desaparecem quando ela é desativada. As regras de firewall da VPC podem incluir tags de rede, mas como não são consideradas recursos da nuvem, elas não estão sujeitas ao controle de acesso do IAM.

As tags e as tags regidas pelo IAM estão sendo usadas de forma intercambiável neste documento.

O que você vai criar

Este codelab tem duas partes: a primeira demonstra tags e políticas de firewall de rede usando uma única rede VPC, e a segunda mostra como usar tags em redes VPC com peering, conforme o diagrama abaixo. Portanto, este codelab requer um único projeto e a capacidade de criar várias redes VPC.

b9acf9823df8be04.jpeg

O que você vai aprender

  • Como criar uma política de firewall de rede
  • Como criar e usar tags com a política de firewall de rede
  • Como usar tags em peering de rede VPC

O que é necessário

  • Projeto do Google Cloud
  • Saber implantar instâncias e configurar componentes de rede.
  • Conhecimento de configuração de firewall de VPC

2. Antes de começar

Criar/atualizar variáveis

Este codelab usa variáveis $variables para ajudar na implementação da configuração da gcloud no Cloud Shell.

No Cloud Shell, faça o seguinte:

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. Criar a rede VPC e a sub-rede

Rede VPC

Crie fwpolicy-vpc1:

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

Sub-redes

Crie as respectivas sub-redes na região selecionada:

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

Cloud NAT

Crie os Cloud Routers e os gateways do 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. Criar instâncias

Crie uma regra de firewall que permita o tráfego SSH de entrada dos intervalos do IAP caso isso ainda não tenha sido definido como parte da configuração do 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

Crie as instâncias de cliente fwpolicy-vpc1 e do web-server:

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

Como não há regras de firewall de VPC definidas (além da regra SSH de permissão, que deveria ter sido criada durante a configuração do IAP, conforme o início desta seção) e, por padrão, todo o tráfego de entrada é negado, as instâncias de cliente não podem acessar os respectivos servidores da Web. Para verificar se a solicitação vai atingir o tempo limite, abra uma nova janela, inicie uma sessão SSH na instância fwpolicy-vpc1-client e tente usar o comando "curl" no servidor da Web:

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

Saída esperada:

curl: (28) Connection timed out after 2001 milliseconds

Se quiser, verifique se não há regras de firewall de VPC definidas para fwpolicy-vpc1 no Cloud Shell:

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

5. Política de firewall de rede global

Crie uma política de firewall de rede global:

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

Adicione uma regra que permita o tráfego da 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

Descreva a política de firewall da rede e verifique se a regra foi added:

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

Saída esperada (role para cima até o início da saída e que as regras implícitas também são exibidas):

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

Associe a política de firewall de rede a fwpolicy-vpc1:

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

Valide se ela foi aplicada à rede fwpolicy-vpc1:

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

Saída esperada (se houver políticas hierárquicas de firewall com precedência, as regras relevantes serão exibidas na 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

Confira se ela também foi aplicada ao servidor da Web fwpolicy-vpc1:

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

A resposta esperada é semelhante ao comando anterior (firewalls eficazes 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

Volte para a sessão SSH vpc1-client e tente usar o curl novamente. O comando abaixo pressupõe que fwpolicy foi usado como prefixo. Ajuste o comando curl de acordo se um nome diferente for usado:

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

No Cloud Shell, valide se a política de firewall de rede foi aplicada a fwpolicy-vpc1:

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

Saída esperada (role para cima até o início da saída):

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

6. Tags gerenciadas pelo IAM

Uma tag é um par de chave-valor que pode ser anexado a uma organização, pasta ou projeto. Consulte Como criar e gerenciar tags e as permissões necessárias para mais detalhes.

O papel tagAdmin permite criar, atualizar e excluir tags novas. Um administrador da organização pode conceder esse papel. No Cloud Shell, atualize a política do IAM para adicionar o papel "tagAdmin" ao seu usuário. Use a página de referência de permissões para ver quais permissões estão incluídas em cada papel predefinido.

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

Execute o comando abaixo para verificar quais usuários têm o papel resourcemanager.tagAdmin:

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

Crie uma nova chave de tag:

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

Saída esperada:

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'

Crie novos valores 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

Confira se os valores das tags foram criados:

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

Saída esperada:

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

No Cloud Shell, descreva a regra da política de firewall de rede atual para confirmar que as tags não estão sendo usadas:

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

Saída esperada:

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

No Cloud Shell, atualize a regra para permitir apenas tráfego da chave de tag vpc1-tags/web-clients e instale a regra em instâncias com a chave 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

No Cloud Shell, descreva a regra da política de firewall de rede atual para confirmar que as tags foram aplicadas e relatadas como EFICAZ:

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

Saída esperada:

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

No Cloud Shell, vamos verificar se a regra foi aplicada à vpc1:

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

Saída esperada:

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

Verifique se a política de firewall de rede ainda está associada à rede VPC, mas a regra que permite o tráfego da Web não está mais aplicada ao servidor da Web porque a tag não foi adicionada às instâncias:

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

Saída esperada (a regra de firewall com prioridade 500 não é exibida):

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

Conceda o papel de usuário de tag à tag e ao usuário específicos. Use a página de referência de permissões para ver quais permissões estão incluídas em cada papel 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

Verifique se o papel foi adicionado:

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

Saída esperada:

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

Aplique a tag à instância 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

Saída esperada:

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

Verifique as vinculações:

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

Saída esperada:

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

Verifique as regras de firewall em vigor novamente:

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

Saída esperada:

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

Volte para a guia da sessão SSH fwpolicy-vpc1-client e tente usar o comando "curl":

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

Você conseguiu se conectar?

Para verificar isso, atualize a regra para remover os critérios de CIDR de origem pelo 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

Volte para a guia da sessão SSH fwpolicy-vpc1-client e tente de novo:

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

A conexão deve atingir o tempo limite desta vez, já que a tag não foi adicionada a fwpolicy-vpc1-client. No Cloud Shell, adicione-o e tente novamente.

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

Volte para a guia da sessão SSH fwpolicy-vpc1-client e tente novamente. Isso deve funcionar.

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

7. Tags controladas pelo IAM sobre peering de rede VPC

No Cloud Shell, crie uma nova VPC, sub-rede e cliente e configure o peering de rede VPC entre as 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

Crie uma regra de firewall que permita o tráfego SSH de entrada dos intervalos do IAP caso isso ainda não tenha sido definido como parte da configuração do 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

As tags são objetos de toda a organização, mas as chaves de tag são associadas a uma VPC específica e, por isso, não podem ser aplicadas a instâncias em redes diferentes. Portanto, é necessário criar uma nova chave de tag e um valor aplicável à 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

Aplique a nova tag à instância 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

Se quiser, liste as vinculações 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

Saída esperada:

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

No Cloud Shell, descreva a regra da política de firewall de rede atual para confirmar que as novas tags não estão sendo usadas:

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

Saída esperada:

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

Atualize a regra de firewall atual para permitir as tags da rede VPC com peering:

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

Descreva a regra de firewall para garantir que ela foi aplicada e relatada como EFICAZ:

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

Saída esperada:

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

Descubra o IP de fwpolicy-vpc1-www pelo comando gcloud abaixo:

gcloud compute instances list --filter=vpc1-www

Conecte-se a fwpolicy-vpc2-client pelo SSH e tente usar o comando "curl" do IP de fwpolicy-vpc1:

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

Você deve conseguir se conectar ao servidor fwpolicy-vpc1-www. Prossiga para a próxima seção para ver as etapas de limpeza.

8. Etapas de limpeza

No Cloud Shell, remova as instâncias, o Cloud NAT e o 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

Remova a política de firewall de rede global e as 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

Siga as etapas abaixo se os papéis "tagAdmin" e "TagUsers" tiverem sido alterados:

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 fim, remova os peerings de rede VPC, as sub-redes e as redes 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. Parabéns!

Parabéns! Você configurou e validou uma política de firewall de rede global com a configuração de tags.