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 seguro na nuvem. Já mostramos as políticas de firewall no nível da organização e da pasta, sem alterar os firewalls da VPC. Nesta versão, vamos expandir a estrutura da política de firewall para o nível da VPC e fazer várias melhorias no suporte atual para oferecer um suporte unificado ao firewall em toda a hierarquia de recursos do Google Cloud e uma experiência de 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 em nenhum lugar até que a política seja associada a uma rede VPC. Cada rede VPC pode ter uma política de firewall de rede associada. As políticas de firewall de rede oferecem suporte a tags controladas pelo IAM (ou apenas tags) em regras de firewall, que substituem as tags de rede atuais e podem ser usadas para fornecer identidade à carga de trabalho.

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

Com a introdução da política 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 de firewall hierárquicas 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 da rede são aplicadas no nível da VPC. Uma grande diferença entre as regras de firewall da VPC e as políticas de firewall de rede é que as regras de firewall da VPC podem ser aplicadas apenas a uma única 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 a atualização em lote.

Por fim, também temos as regras de firewall implícitas que vêm com 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 com a ação negar, a origem é 0.0.0.0/0

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

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 às regras da política de firewall de rede são recursos de par 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 a tags e quais podem anexar tags a recursos. Depois que uma tag é aplicada a um recurso, as regras de firewall de rede podem usá-la para permitir e negar o tráfego.

As tags aderem ao modelo de recursos de herança do Google Cloud, o que significa que as tags e os respectivos valores são transmitidos para baixo na hierarquia a partir dos recursos pais. Como resultado, as tags podem ser criadas em um 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 devem ser confundidas com as tags de rede, que são strings que podem ser adicionadas a instâncias do Compute Engine. Elas são associadas à 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 de nuvem, elas não estão sujeitas ao controle de acesso do IAM.

As tags e as tags governadas pelo IAM são usadas de forma intercambiável neste documento.

O que você vai criar

Este codelab tem duas partes: a primeira demonstra políticas de firewall de rede e tags usando uma única rede VPC, e a segunda mostra como usar tags em redes VPC pareadas, 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 no peering de rede VPC

O que é necessário

  • Projeto do Google Cloud
  • Conhecimento sobre implantação de instâncias e configuração de componentes de rede
  • Conhecimento sobre a configuração do firewall da VPC

2. Antes de começar

Criar/atualizar variáveis

Este codelab usa $variables para ajudar na implementação da configuração do 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 uma rede e uma sub-rede VPC

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 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 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 do cliente e do servidor da 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

Como não há regras de firewall da VPC definidas (exceto a regra de permissão do SSH que deveria ter sido criada ao configurar o 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 o tempo limite da solicitação será atingido, abra uma nova janela e inicie uma sessão SSH na instância fwpolicy-vpc1-client e tente fazer o curl do 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

Como opção, verifique se não há regras de firewall da 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 de 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. Observe 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 mostradas na parte de cima):

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

Valide se ele foi aplicado ao servidor da Web fwpolicy-vpc1:

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

A saída esperada é semelhante ao comando anterior (firewalls fwpolicy-vpc1 ativas):

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

Retorne à sessão SSH do cliente vpc1 e tente fazer o curl novamente. O comando abaixo pressupõe que fwpolicy foi usado como prefixo. Ajuste o comando curl se um nome diferente tiver sido 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 é 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.

A função tagAdmin permite criar, atualizar e excluir tags. Um administrador da organização pode conceder esse papel. No Cloud Shell, atualize a política do IAM para adicionar a função tagAdmin ao usuário. Use a página referência de permissões para conferir 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 a função 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

Valide 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 de 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 o tráfego da chave de tag vpc1-tags/web-clients e instale a regra nas instâncias com a chave 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

No Cloud Shell, descreva a regra de política de firewall de rede atual para confirmar que as tags foram aplicadas e estão sendo informadas como VIGENTES:

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, embora a política de firewall da rede ainda esteja associada à rede VPC, a regra que permite o tráfego da Web não é 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 é mostrada):

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 da tag à tag e ao usuário específicos. Use a página referência de permissões para conferir 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 a função foi adicionada:

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 eficazes 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 fazer o curl:

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

Conseguiu se conectar?

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

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

A conexão deve expirar desta vez, já que a tag não foi adicionada a fwpolicy-vpc1-client. No Cloud Shell, adicione 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.

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

7. Tags gerenciadas pelo IAM no peering de rede VPC

No Cloud Shell, crie uma VPC, uma sub-rede e um 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 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

Embora as tags sejam objetos da organização, as chaves de tag são associadas a uma VPC específica e, portanto, não podem ser aplicadas a instâncias em redes diferentes. Portanto, é necessário criar uma nova chave e um valor de tag aplicáveis ao 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 preferir, 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 de política de firewall de rede atual para confirmar se 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 para permitir as tags da rede VPC pareada:

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 informada como VIGENTE:

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

Encontre o IP de fwpolicy-vpc1-www usando o comando gcloud abaixo:

gcloud compute instances list --filter=vpc1-www

Conecte-se ao fwpolicy-vpc2-client usando SSH e tente fazer o curl do IP do fwpolicy-vpc1:

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

Você poderá se conectar ao servidor fwpolicy-vpc1-www. Siga para a próxima seção para conferir 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 as funções "tagAdmin" e "tagUsers" tiverem sido alteradas:

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.