1. Introdução
Cloud Next Generation Firewall (NGFW)
O Cloud Firewall de última geração é um serviço de firewall totalmente distribuído com recursos avançados de proteção, microssegmentação e cobertura abrangente para proteger suas cargas de trabalho do Google Cloud contra ataques internos e externos.
O Cloud NGFW tem os seguintes benefícios:
- Serviço de firewall distribuído:o Cloud NGFW oferece uma aplicação com base em host totalmente distribuída com estado em cada carga de trabalho para ativar a arquitetura de segurança de confiança zero.
- Configuração e implantação simplificadas:o Cloud NGFW implementa políticas de firewall hierárquicas e de rede que podem ser anexadas a um nó de hierarquia de recursos. Essas políticas fornecem uma experiência de firewall consistente em toda a hierarquia de recursos do Google Cloud.
- Controle granular e microssegmentação:a combinação de políticas de firewall e tags gerenciadas pelo Identity and Access Management (IAM) oferece controle preciso para o tráfego norte-sul e leste-oeste até uma única VM em redes de nuvem privada virtual (VPC).
Políticas de firewall de rede
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 a ela. As políticas de firewall de rede são compatíveis com tags controladas pelo IAM (ou apenas tags) nas regras de firewall 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 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:
- Política de firewall hierárquica
- Regras de firewall da VPC
- Política global de firewall de rede e política regional de firewall de rede
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 de 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 só podem ser aplicadas 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 atualizações em lote.
Neste laboratório, vamos testar a política hierárquica de firewall e a política de firewall de rede global.
Por fim, também temos as regras de firewall implícitas que vêm com todas as redes VPC:
- Uma regra de saída cuja ação é permitir e o destino é 0.0.0.0/0
- Uma regra de entrada com a ação negar e a origem 0.0.0.0/0
Por padrão, a sequência de aplicação é mostrada no diagrama a seguir:

Tags gerenciadas pelo IAM
As novas tags integradas às regras da política de firewall são recursos de par de chave-valor definidos no nível da organização ou do projeto da hierarquia de recursos do Google Cloud. Como o nome sugere, essa tag contém um controle de acesso do IAM 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 principais podem anexar tags a recursos. Depois que uma tag é aplicada a um recurso, as regras de política de firewall podem usá-la para permitir e negar o tráfego.
As tags seguem o 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 dos pais. Como resultado, as tags podem ser criadas em um local 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 tags de rede, que são strings 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. Acesse esta página para mais detalhes sobre a diferença.
2. O que você vai aprender
- Como criar tags gerenciadas pelo IAM para usar com o Cloud NGFW e com escopo global.
- Como anexar tags a VMs.
- Como criar uma política hierárquica de firewall e associá-la a uma pasta.
- Como criar uma regra de firewall na política hierárquica de firewall e especificar origem e destino usando tags controladas pelo IAM.
3. Arquitetura geral do laboratório

Organização e pastas:
- Você vai criar duas pastas,
folder1efolder2, diretamente na sua organização.
Projetos:
- Em
folder1, crie um projeto host. Esse projeto vai conter a rede VPC compartilhada. - Em
folder2, crie um projeto de serviço. Esse projeto vai conter as VMs que usam a VPC compartilhada.
Networking:
- Uma rede VPC chamada
mynetserá criada no projeto host e configurada como uma VPC compartilhada. Isso permite que os recursos no projeto de serviço usem a rede. - Duas VMs serão criadas no projeto de serviço e conectadas à VPC compartilhada
mynet.
Tags gerenciadas pelo IAM:
- Você vai criar uma tag gerenciada pelo IAM chamada
http_tagscom dois valores,http_serverehttp_client, no nível da organização. Essas tags/valores serão usados para identificar e aplicar regras de firewall às VMs.
Políticas de firewall:
- Uma política hierárquica de firewall será criada e associada a
folder1. Uma regra nessa política usa as tags gerenciadas pelo IAM para permitir o tráfego dehttp-clientparahttp-serverna porta 80. - Uma política de firewall de rede será criada no projeto host e associada à VPC
mynet. Essa política vai incluir uma regra para permitir o acesso SSH do IAP às VMs para fins de teste.
4. Etapas de preparação
Primeiro, configure os papéis do IAM, a infraestrutura de rede e as instâncias necessárias na sua organização do Google Cloud.
Papéis do IAM necessários para trabalhar no laboratório
Começamos atribuindo os papéis do IAM necessários à conta do GCP no nível da organização.
- Administrador da organização (
roles/resourcemanager.organizationAdmin): permite gerenciar políticas do IAM e conferir as políticas da organização, pastas e projetos. - Administrador de tags(
roles/resourcemanager.tagAdmin): permite criar, atualizar e excluir tags seguras. - Usuário de Tags (
roles/resourcemanager.tagUser): permite acessar a lista de tags seguras e gerenciar as associações delas com os recursos. - Papel de administrador da política de firewall da organização do Compute (
roles/compute.orgFirewallPolicyAdmin): esse papel oferece controle total das políticas de firewall da organização do Compute Engine. - Papel de administrador dos recursos da organização no Compute (
roles/compute.orgSecurityResourceAdmin): esse papel oferece controle total das associações de políticas de firewall do Compute Engine à organização ou pasta. - Administrador de rede do Compute (
roles/compute.networkAdmin): esse papel oferece controle total dos recursos de rede do Compute Engine. - Administrador da instância do Compute( Beta) (
roles/compute.instanceAdmin): esse papel oferece controle total dos recursos de instância do Compute Engine. - Administrador do Logging (
roles/logging.admin): esse papel dá acesso a todas as permissões de geração de registros e permissões dependentes. - Administrador da conta de serviço (
roles/iam.serviceAccountAdmin): permite criar e gerenciar contas de serviço. - Administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin): esse papel permite ativar, desativar e inspecionar estados de serviço, inspecionar operações, consumir cota e gerar faturamento para o projeto de um consumidor. - Administrador de VPC compartilhada do Compute (
roles/compute.xpnAdmin): esse papel permite administrar uma rede de VPC compartilhada (XPN).
Criar pastas e projetos
No Cloud Shell, faça o seguinte para criar folder1 e folder2:
gcloud auth login
export org_id=$(gcloud organizations list --format='value(ID)')
export BILLING_ACCOUNT_ID=$(gcloud billing accounts list --format='value(ACCOUNT_ID)')
export folder1=[FOLDER1 NAME]
export folder2=[FOLDER2 NAME]
export hostproject=[HOST PROJECT NAME]
export serviceproject=[SERVICE PROJECT NAME]
export regionname=[REGION NAME]
export zonename=[COMPUTE ZONE NAME]
gcloud resource-manager folders create --display-name=$folder1 --organization=$org_id
export folder1_id=$(gcloud resource-manager folders list --organization=$org_id --filter="displayName=$folder1" --format="value(ID)")
gcloud resource-manager folders create --display-name=$folder2 --organization=$org_id
export folder2_id=$(gcloud resource-manager folders list --organization=$org_id --filter="displayName=$folder2" --format="value(ID)")
No Cloud Shell, faça o seguinte para criar o projeto host em folder1:
gcloud projects create --name=$hostproject --folder=$folder1_id
Você vai ver o seguinte. Pressione Y para criar o projeto com o novo ID do projeto.
No project ID provided.
Use [NEW-PROJECT-ID] as project ID (Y/n)?
Anote o ID do projeto. No Cloud Shell, faça o seguinte para exportar para hostproject_id:
export hostproject_id=[HOSTPROJECT ID]
No Cloud Shell, faça o seguinte para vincular o projeto host à conta de faturamento:
gcloud billing projects link $hostproject_id \
--billing-account=$BILLING_ACCOUNT_ID
No Cloud Shell, faça o seguinte para criar o projeto de serviço em folder2:
gcloud projects create --name=$serviceproject --folder=$folder2_id
Você vai ver o seguinte. Pressione Y para criar o projeto com o novo ID do projeto.
No project ID provided.
Use [NEW-PROJECT-ID] as project ID (Y/n)?
Anote o ID do projeto. No Cloud Shell, faça o seguinte para exportar para serviceproject_id:
export serviceproject_id=[SERVICEPROJECT ID]
No Cloud Shell, faça o seguinte para vincular o projeto de serviço à conta de faturamento:
gcloud billing projects link $serviceproject_id \
--billing-account=$BILLING_ACCOUNT_ID
Criar 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.
Criamos uma tag no nível da organização, http-tags. A finalidade da tag é para uso do Cloud NGFW. Não restringimos o escopo a uma única rede. A tag tem escopo global. Mais tarde, vamos aplicar a tag às VMs criadas no projeto de serviço em folder2.
No Cloud Shell, faça o seguinte:
gcloud resource-manager tags keys create http_tags \
--parent=organizations/$org_id \
--purpose GCE_FIREWALL \
--purpose-data organization=auto
Vamos usar o ID da chave de tag para anotar a VM durante a criação. No Cloud Shell, faça o seguinte para receber o ID da chave de tag:
export http_tags_id=$(gcloud resource-manager tags keys describe $org_id/http_tags --format="value(name)")
echo $http_tags_id
No Cloud Shell, faça o seguinte para criar dois novos valores de tag, http_server e http_client:
gcloud resource-manager tags values create http_server \
--parent $org_id/http_tags
gcloud resource-manager tags values create http_client \
--parent $org_id/http_tags
Vamos usar o ID da tag e o ID do valor da tag para anotar a VM durante a criação. No Cloud Shell, faça o seguinte para receber o ID do valor da tag de http_server e http_client:
export http_tags_http_server_id=$(gcloud resource-manager tags values describe $org_id/http_tags/http_server --format="value(name)")
echo $http_tags_http_server_id
export http_tags_http_client_id=$(gcloud resource-manager tags values describe $org_id/http_tags/http_client --format="value(name)")
echo $http_tags_http_client_id
Ativar APIs nos projetos host e de serviço
No Cloud Shell, faça o seguinte:
gcloud services enable compute.googleapis.com --project=$serviceproject_id
gcloud services enable compute.googleapis.com --project=$hostproject_id
Criar uma VPC no projeto host
No projeto host, crie uma rede VPC com modo de sub-rede personalizado. Para isso, faça o seguinte no Cloud Shell:
gcloud compute networks create mynet \
--subnet-mode=custom \
--project=$hostproject_id
Criar sub-redes no projeto host
No Cloud Shell, faça o seguinte para criar uma sub-rede IPv4:
gcloud compute networks subnets create mysubnet \
--network=mynet \
--range=10.0.0.0/28 \
--region=$regionname \
--project=$hostproject_id
Ativar a VPC compartilhada no projeto host
No Cloud Shell, faça o seguinte para ativar a VPC compartilhada no projeto host:
gcloud compute shared-vpc enable $hostproject_id
Anexar projeto de serviço para VPC compartilhada no projeto host
No Cloud Shell, faça o seguinte para anexar o projeto de serviço à VPC compartilhada no projeto host:
gcloud compute shared-vpc associated-projects add $serviceproject_id --host-project=$hostproject_id
Criar o Cloud Router e o Cloud NAT no projeto host
O Cloud NAT é usado para permitir a saída da Internet para que as VMs façam o download e a instalação de aplicativos.
gcloud compute routers create $regionname-cr \
--network=mynet \
--region=$regionname \
--project=$hostproject_id
gcloud compute routers nats create $regionname-nat \
--router=$regionname-cr \
--region=$regionname \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips \
--project=$hostproject_id
Criar instâncias no projeto de serviço
No projeto de serviço, crie duas instâncias nas sub-redes que você acabou de criar na VPC compartilhada no projeto host. Uma instância é chamada de http-server, e anotamos a tag de http_tags com o valor de http_server. A outra instância é chamada de http-client, e anotamos a tag de http_tags com o valor de http_client. Execute os comandos a seguir no Cloud Shell:
gcloud compute instances create http-client \
--project=$serviceproject_id \
--subnet=projects/$hostproject_id/regions/$regionname/subnetworks/mysubnet \
--zone=$zonename \
--no-address \
--resource-manager-tags=$http_tags_id=$http_tags_http_client_id
gcloud compute instances create http-server \
--project=$serviceproject_id \
--subnet=projects/$hostproject_id/regions/$regionname/subnetworks/mysubnet \
--zone=$zonename \
--no-address \
--resource-manager-tags=$http_tags_id=$http_tags_http_server_id \
--metadata startup-script='#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
a2enmod ssl
sudo a2ensite default-ssl
echo "I am a Http Server." | \
tee /var/www/html/index.html
systemctl restart apache2'
Anote o IP interno de http-server. Vamos usá-lo na etapa de teste da regra de firewall mais adiante.
export http_server_ip=$(gcloud compute instances describe http-server --zone $zonename --format='value(networkInterfaces[0].networkIP)' --project $serviceproject_id)
echo $http_server_ip
5. Criar uma política de firewall de rede global no projeto host
Vamos criar uma política de firewall de rede global no projeto host e associá-la à VPC compartilhada no projeto host.
gcloud config set project $hostproject_id
gcloud compute network-firewall-policies create mynet-fw-policy \
--global \
--project=$hostproject_id
gcloud compute network-firewall-policies associations create \
--firewall-policy=mynet-fw-policy \
--network=mynet \
--name=mynet-fw-policy \
--global-firewall-policy \
--project=$hostproject_id
Para permitir que o IAP se conecte às suas instâncias de VM, crie uma regra de firewall na política de firewall de rede:
- Aplica-se a todas as instâncias de VM que você quer acessar usando o IAP.
- Permite o tráfego de entrada do intervalo de IP 35.235.240.0/20. Esse intervalo contém todos os endereços IP que o IAP usa para o encaminhamento de TCP.
gcloud compute network-firewall-policies rules create 1000 \
--action=ALLOW \
--firewall-policy=mynet-fw-policy \
--description="mynet-allow-iap" \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20 \
--layer4-configs=tcp:22 \
--global-firewall-policy \
--project=$hostproject_id
No console, acesse o projeto host e encontre a política de firewall de rede global recém-criada em "Política de firewall". É possível verificar a regra de firewall recém-criada na política de firewall de rede. Este é o link do console para acessar a página. Mude o seletor de projeto para o projeto host no console.
6. Testar o acesso da VM http-client à VM http-server
Faça SSH na VM chamada http-client e teste se ela pode acessar http-server na porta HTTP 80.
No Cloud Shell, faça o seguinte:
gcloud compute ssh \
--zone=$zonename "http-client" \
--tunnel-through-iap \
--project=$serviceproject_id
Use curl para acessar o servidor da Web.
curl -m 10 [http_server_ip]
Você vai ver o resultado do comando curl. Não há regra de firewall de entrada para permitir a porta 80 para http-server.
A conexão expirou após 10.000 milissegundos.
Saia da sessão SSH para voltar ao Cloud Shell.
exit
7. Criar políticas e regras de firewall hierárquicas
Vamos criar uma política hierárquica de firewall em folder1 e associar a política a folder1. As regras de firewall na política serão aplicadas ao projeto host em folder1.
Criar política de firewall hierárquica
gcloud compute firewall-policies create \
--folder=$folder1_id \
--short-name=my-folder1-fw-policy
Criar regra de firewall na política de firewall hierárquica
A regra permite que VMs com um valor de tag http_tags/http_client acessem VMs com um valor de tag http_tags/http_server na porta TCP 80.
gcloud compute firewall-policies rules create 100 \
--organization=$org_id \
--firewall-policy my-folder1-fw-policy \
--direction=INGRESS \
--layer4-configs=tcp:80 \
--action=allow \
--src-secure-tags=$org_id/http_tags/http_client \
--target-secure-tags=$org_id/http_tags/http_server \
--description=folder1-allow-http
Associe a política de firewall hierárquica à pasta1
gcloud compute firewall-policies associations create \
--firewall-policy=my-folder1-fw-policy \
--folder=$folder1_id \
--name=my-folder1-fw-policy\
--organization=$org_id
No console, acesse o folder1 e encontre a política de firewall hierárquica recém-criada em "Política de firewall". A política de firewall é mostrada em "Políticas de firewall localizadas nesta pasta". É possível verificar a regra de firewall recém-criada na política de firewall hierárquica. Este é o link do console para acessar a página. Mude o seletor de projetos para folder1 no console.
8. Testar o acesso da VM http-client à VM http-server
Verifique as políticas de firewall efetivas aplicadas à VPC compartilhada no projeto host.
No Cloud Shell, faça o seguinte:
gcloud compute networks get-effective-firewalls mynet --project=$hostproject_id
A política hierárquica de firewall herdada vai aparecer assim:
TYPE: org-firewall
FIREWALL_POLICY_NAME: <NUMBER_FOR_YOUR_FW_POLICY>
FIREWALL_POLICY_PRIORITY:
PRIORITY: 100
ACTION: ALLOW
DIRECTION: INGRESS
DISABLED: False
IP_RANGES:
You will see the network firewall policy to the VPC like this:
TYPE: network-firewall-policy
FIREWALL_POLICY_NAME: mynet-fw-policy
FIREWALL_POLICY_PRIORITY: 1000
PRIORITY: 1000
ACTION: ALLOW
DIRECTION: INGRESS
DISABLED: False
IP_RANGES: 35.235.240.0/20
Faça SSH na VM chamada http-client e teste se ela pode acessar http-server na porta HTTP 80.
No Cloud Shell, faça o seguinte:
gcloud compute ssh \
--zone=$zonename "http-client" \
--tunnel-through-iap \
--project=$serviceproject_id
Use curl para acessar o servidor da Web.
curl [http_server_ip]
O comando curl vai retornar uma resposta de http-server.
I am a Http Server.
A regra de firewall de entrada da política de firewall hierárquica permite o acesso de http-client a http-server na porta 80.
Saia da sessão SSH para voltar ao Cloud Shell.
exit
9. Limpar
Limpar as VMs no projeto de serviço
No Cloud Shell, faça o seguinte:
gcloud compute instances delete http-server --zone $zonename --project=$serviceproject_id
gcloud compute instances delete http-client --zone $zonename --project=$serviceproject_id
Limpar a política de firewall hierárquica
No Cloud Shell, faça o seguinte:
gcloud compute firewall-policies associations delete my-folder1-fw-policy \
--firewall-policy=my-folder1-fw-policy \
--organization=$org_id
gcloud compute firewall-policies rules delete 100 \
--organization=$org_id \
--firewall-policy=my-folder1-fw-policy
gcloud compute firewall-policies delete my-folder1-fw-policy \
--organization=$org_id
Limpar tags no nível da organização
No Cloud Shell, faça o seguinte:
gcloud resource-manager tags values delete $http_tags_http_server_id
gcloud resource-manager tags values delete $http_tags_http_client_id
gcloud resource-manager tags keys delete $http_tags_id
Limpar o projeto host
No Cloud Shell, faça o seguinte:
gcloud compute shared-vpc associated-projects remove $serviceproject_id --host-project=$hostproject_id
gcloud compute shared-vpc disable $hostproject_id
gcloud projects delete $hostproject_id
Limpar o projeto de serviço
No Cloud Shell, faça o seguinte:
gcloud projects delete $serviceproject_id
Limpar pastas
No Cloud Shell, faça o seguinte:
gcloud resource-manager folders delete $folder1_id
gcloud resource-manager folders delete $folder2_id
10. Parabéns
Você testou com sucesso a política de firewall hierárquica com tags gerenciadas pelo IAM.