1. Introdução
Uma interface do Private Service Connect é um recurso que permite que uma rede de nuvem privada virtual (VPC) de um produtor inicie conexões com vários destinos em uma rede VPC do consumidor. As redes de produtores e consumidores podem estar em diferentes projetos e organizações.
Se um anexo de rede aceitar uma conexão de uma interface do Private Service Connect, o Google Cloud vai alocar à interface um endereço IP de uma sub-rede do consumidor especificada pelo anexo de rede. As redes de consumidores e produtores estão conectadas e podem se comunicar por endereços IP internos.
Uma conexão entre um anexo de rede e uma interface do Private Service Connect é semelhante à conexão entre um endpoint do Private Service Connect e um anexo de serviço, mas tem duas diferenças principais:
- Um anexo de rede permite que uma rede do produtor inicie conexões com uma rede do consumidor (saída do serviço gerenciado), enquanto um endpoint permite que uma rede do consumidor inicie conexões com uma rede do produtor (entrada do serviço gerenciado).
- Uma conexão de interface do Private Service Connect é transitiva. Isso significa que uma rede do produtor pode se comunicar com outras que estão conectadas à rede do consumidor.
O que você vai criar
Neste tutorial, você vai criar uma arquitetura abrangente de interface do Private Service Connect (PSC) que usa regras de firewall do Cloud para permitir e negar a conectividade do produtor à computação do consumidor, conforme ilustrado na Figura 1.
Figura 1.
Você criará um único psc-network-attach na VPC do consumidor, resultando nos seguintes casos de uso:
- Criar uma regra de firewall de nuvem para permitir o acesso de urso a leão
- Crie uma regra do Cloud Firewall que negue o acesso de um urso a um tigre
- Criar uma regra de firewall do Cloud para permitir o acesso do cosmo ao urso
O que você vai aprender
- Como criar um anexo de rede
- Como um produtor pode usar um anexo de rede para criar uma interface PSC
- Como estabelecer a comunicação do produtor com o consumidor
- Como permitir o acesso da VM do produtor (urso) à VM do consumidor (leão)
- Como bloquear o acesso da VM do produtor (urso) à VM do consumidor (tigre)
- Como permitir o acesso da VM do consumidor (cosmo) à VM do produtor (urso)
O que é necessário
- Projeto do Google Cloud
- Permissões do IAM
- Administrador de rede do Compute (roles/compute.networkAdmin)
- Administrador da instância do Compute (roles/compute.instanceAdmin)
- Administrador de segurança do Compute (roles/compute.securityAdmin)
2. Antes de começar
Atualizar o projeto para ser compatível com o tutorial
Neste tutorial, usamos as 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 list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. Configuração do consumidor
Crie a VPC do consumidor
No Cloud Shell, faça o seguinte:
gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom
Crie as sub-redes do consumidor
No Cloud Shell, faça o seguinte:
gcloud compute networks subnets create lion-subnet-1 --project=$projectid --range=192.168.20.0/28 --network=consumer-vpc --region=us-central1
No Cloud Shell, faça o seguinte:
gcloud compute networks subnets create tiger-subnet-1 --project=$projectid --range=192.168.30.0/28 --network=consumer-vpc --region=us-central1
No Cloud Shell, faça o seguinte:
gcloud compute networks subnets create cosmo-subnet-1 --project=$projectid --range=192.168.40.0/28 --network=consumer-vpc --region=us-central1
Crie a sub-rede do anexo de rede do Private Service Connect
No Cloud Shell, faça o seguinte:
gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1
Configuração do Cloud Router e do NAT
O Cloud NAT é usado no tutorial de instalação do pacote de software porque a instância de VM não tem um endereço IP público. O Cloud NAT permite que as VMs com endereços IP particulares acessem a Internet.
No Cloud Shell, crie o roteador de nuvem.
gcloud compute routers create cloud-router-for-nat --network consumer-vpc --region us-central1
No Cloud Shell, crie o gateway NAT.
gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
4. Ativar o IAP
Para permitir que o IAP se conecte às instâncias de VM, crie uma regra de firewall que:
- Aplica-se a todas as instâncias de VM que você quer disponibilizar usando o IAP.
- Permite tráfego de entrada no intervalo de IP 35.235.240.0/20. Esse intervalo contém todos os endereços IP que o IAP usa para encaminhamento de TCP.
No Cloud Shell, crie a regra de firewall do IAP.
gcloud compute firewall-rules create ssh-iap-consumer \
--network consumer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
5. Criar instâncias de VM do consumidor
No Cloud Shell, crie a instância de VM do consumidor, lion.
gcloud compute instances create lion \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=lion-subnet-1 \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to the lion app server !!' | tee /var/www/html/index.html
EOF"
No Cloud Shell, crie a instância de VM do consumidor, tiger.
gcloud compute instances create tiger \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=tiger-subnet-1 \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to the tiger app server !!' | tee /var/www/html/index.html
EOF"
No Cloud Shell, crie a instância de VM do consumidor, cosmo.
gcloud compute instances create cosmo \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=cosmo-subnet-1 \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install tcpdump
sudo apt-get install apache2 -y
sudo service apache2 restart
echo 'Welcome to the cosmo app server !!' | tee /var/www/html/index.html
EOF"
Consiga e armazene os endereços IP das instâncias:
No Cloud Shell, faça uma descrição das instâncias de VM leon e tigre.
gcloud compute instances describe lion --zone=us-central1-a | grep networkIP:
gcloud compute instances describe tiger --zone=us-central1-a | grep networkIP:
gcloud compute instances describe cosmo --zone=us-central1-a | grep networkIP:
6. Anexo de rede do Private Service Connect
Anexos de rede são recursos regionais que representam o lado do consumidor de uma interface do Private Service Connect. Você associa uma única sub-rede a um anexo de rede, e o produtor atribui IPs à interface do Private Service Connect dessa sub-rede. A sub-rede precisa estar na mesma região que o anexo de rede. Um anexo de rede precisa estar na mesma região que o serviço do produtor.
Criar o anexo de rede
No Cloud Shell, crie o anexo de rede.
gcloud compute network-attachments create psc-network-attachment \
--region=us-central1 \
--connection-preference=ACCEPT_MANUAL \
--producer-accept-list=$projectid \
--subnets=intf-subnet
Listar os anexos de rede
No Cloud Shell, liste o anexo de rede.
gcloud compute network-attachments list
Descrever os anexos de rede
No Cloud Shell, descreva o anexo de rede.
gcloud compute network-attachments describe psc-network-attachment --region=us-central1
Anote o URI psc-network-attach que será usado pelo produtor ao criar a interface do Private Service Connect. Veja um exemplo a seguir:
user@cloudshell$ gcloud compute network-attachments describe psc-network-attachment --region=us-central1
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2023-06-06T20:57:12.623-07:00'
fingerprint: 4Yq6xAfaRO0=
id: '3235195049527328503'
kind: compute#networkAttachment
name: psc-network-attachment
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
producerAcceptLists:
- $projectid
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment
subnetworks:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/subnetworks/intf-subnet
7. Configuração do Producer
Crie a rede VPC do produtor
No Cloud Shell, faça o seguinte:
gcloud compute networks create producer-vpc --project=$projectid --subnet-mode=custom
Crie as sub-redes do produtor
No Cloud Shell, crie a sub-rede usada para a vNIC0 da interface psc.
gcloud compute networks subnets create prod-subnet --project=$projectid --range=10.20.1.0/28 --network=producer-vpc --region=us-central1
8. Ativar o IAP
Para permitir que o IAP se conecte às instâncias de VM, crie uma regra de firewall que:
- Aplica-se a todas as instâncias de VM que você quer disponibilizar usando o IAP.
- Permite tráfego de entrada no intervalo de IP 35.235.240.0/20. Esse intervalo contém todos os endereços IP que o IAP usa para encaminhamento de TCP.
No Cloud Shell, crie a regra de firewall do IAP.
gcloud compute firewall-rules create ssh-iap-producer \
--network producer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
9. Criar a interface do Private Service Connect
Uma interface do Private Service Connect é um recurso que permite que uma rede de nuvem privada virtual (VPC) de um produtor inicie conexões com vários destinos em uma rede VPC do consumidor. As redes de produtores e consumidores podem estar em diferentes projetos e organizações.
Se um anexo de rede aceitar uma conexão de uma interface do Private Service Connect, o Google Cloud vai alocar à interface um endereço IP de uma sub-rede do consumidor especificada pelo anexo de rede. As redes de consumidores e produtores estão conectadas e podem se comunicar por endereços IP internos.
No Cloud Shell, crie a interface do Private Service Connect (urso) e insira a URI psc-network-attach UR identificada anteriormente na saída de descrição do anexo de rede.
gcloud compute instances create bear --zone us-central1-a --machine-type=f1-micro --can-ip-forward --network-interface subnet=prod-subnet,network=producer-vpc,no-address --network-interface network-attachment=https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment
Validação de várias NICs
Confira se a interface do PSC está configurada com o endereço IP apropriado. A vNIC0 usará a sub-rede de produção do produtor (10.20.1.0/28) e a vNIC1 usará o consumidor intf-subnet (192.168.10.0/28).
gcloud compute instances describe bear --zone=us-central1-a | grep networkIP:
Exemplo:
user$ gcloud compute instances describe bear --zone=us-central1-a | grep networkIP:
networkIP: 10.20.1.2
networkIP: 192.168.10.2
10. Atualizar regras de firewall do consumidor
Criar uma regra de firewall do Cloud para permitir o acesso de urso a leão
No Cloud Shell, crie uma regra de prioridade mais alta que permita a saída do intervalo de endereços IP da sub-rede de anexo (intf-subnet) para os destinos no intervalo de endereços de lion-subnet-1.
gcloud compute firewall-rules create allow-limited-egress-to-lion \
--network=consumer-vpc \
--action=ALLOW \
--rules=ALL \
--direction=EGRESS \
--priority=1000 \
--source-ranges="192.168.10.0/28" \
--destination-ranges="192.168.20.0/28" \
--enable-logging
No Cloud Shell, crie uma regra de permissão de entrada que substitua a regra implícita "negar entrada" para o tráfego da sub-rede psc-network-nex.
gcloud compute firewall-rules create allow-ingress \
--network=consumer-vpc \
--action=ALLOW \
--rules=ALL \
--direction=INGRESS \
--priority=1000 \
--source-ranges="192.168.10.0/28" \
--enable-logging
Criar uma regra do Cloud Firewall que negue o acesso de ursos a todos os intervalos (inclusive o tigre)
No Cloud Shell, crie uma regra de baixa prioridade que negue todo o tráfego de saída do intervalo de endereços IP da sub-rede do anexo de rede, intf-subnet.
gcloud compute firewall-rules create deny-all-egress \
--network=consumer-vpc \
--action=DENY \
--rules=ALL \
--direction=EGRESS \
--priority=65534 \
--source-ranges="192.168.10.0/28" \
--destination-ranges="0.0.0.0/0" \
--enable-logging
Criar uma regra de firewall do Cloud para permitir o acesso do cosmo ao urso
No Cloud Shell, crie uma regra de permissão de entrada que substitua a regra implícita "negar entrada" para o tráfego da sub-rede psc-network-nex.
gcloud compute firewall-rules create vm-subnet-allow-ingress \
--network=consumer-vpc \
--action=ALLOW \
--rules=ALL \
--direction=INGRESS \
--priority=1000 \
--source-ranges="192.168.40.0/28" \
--destination-ranges="192.168.10.0/28" \
--enable-logging
11. Criar rotas do Linux para a interface PSC
Na instância da interface PSC, configure as rotas do Linux para permitir a comunicação do produtor com as sub-redes do consumidor.
Encontrar o nome do SO convidado da sua interface do Private Service Connect
Para configurar o roteamento, você precisa saber o nome do SO convidado da sua interface do Private Service Connect, que é diferente do nome da interface no Google Cloud.
No Cloud Shell, abra uma nova guia e faça o seguinte:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Faça login na VM psc-interface, bear, usando o IAP no Cloud Shell.
gcloud compute ssh bear --project=$projectid --zone=us-central1-a --tunnel-through-iap
No Cloud Shell, veja o endereço IP da instância "psc-interface"
ip a
Exemplo:
user@bear:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
link/ether 42:01:0a:14:01:02 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 10.20.1.2/32 brd 10.20.1.2 scope global dynamic ens4
valid_lft 85991sec preferred_lft 85991sec
inet6 fe80::4001:aff:fe14:102/64 scope link
valid_lft forever preferred_lft forever
3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
link/ether 42:01:c0:a8:0a:02 brd ff:ff:ff:ff:ff:ff
altname enp0s5
inet 192.168.10.2/32 brd 192.168.10.2 scope global dynamic ens5
valid_lft 85991sec preferred_lft 85991sec
inet6 fe80::4001:c0ff:fea8:a02/64 scope link
valid_lft forever preferred_lft forever
Encontrar o IP do gateway da sua interface do PSC
Na lista de interfaces de rede, encontre e armazene o nome da interface associada ao endereço IP da interface do Private Service Connect, por exemplo, ens5 (vNIC1)
Para configurar o roteamento, você precisa saber o endereço IP do gateway padrão da interface do Private Service Connect
No Cloud Shell, usaremos 1 porque a interface PSC está associada à vNIC1.
curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
O exemplo produz o gw padrão 192.168.10.1
user@bear:~$ curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
192.168.10.1
Adicionar rotas para sub-redes do consumidor
Você precisa adicionar uma rota ao gateway padrão da interface do Private Service Connect para cada sub-rede do consumidor que se conecta a ela. Isso garante que o tráfego vinculado à rede do consumidor saia da interface do Private Service Connect.
Na instância do urso, adicione as rotas às sub-redes do consumidor.
sudo ip route add 192.168.20.0/28 via 192.168.10.1 dev ens5
sudo ip route add 192.168.30.0/28 via 192.168.10.1 dev ens5
sudo ip route add 192.168.40.0/28 via 192.168.10.1 dev ens5
Validar tabela de rotas
No Cloud Shell, valide as rotas recém-adicionadas.
ip route show
Exemplo:
user@bear:~$ ip route show
default via 10.20.1.1 dev ens4
10.20.1.0/28 via 10.20.1.1 dev ens4
10.20.1.1 dev ens4 scope link
192.168.10.0/28 via 192.168.10.1 dev ens5
192.168.10.1 dev ens5 scope link
192.168.20.0/28 via 192.168.10.1 dev ens5
192.168.30.0/28 via 192.168.10.1 dev ens5
192.168.40.0/28 via 192.168.10.1 dev ens5
12. Valide a conectividade urso-leão bem-sucedida
Vamos confirmar se a instância de VM do produtor, urso, pode se comunicar com a instância do consumidor, lion, executando um curl.
Na instância do urso, execute um curl no endereço IP do lion identificado anteriormente no tutorial da instância do urso.
curl -v <lions IP Address>
Exemplo:
user@bear:~$ curl -v 192.168.20.2
* Trying 192.168.20.2:80...
* Connected to 192.168.20.2 (192.168.20.2) port 80 (#0)
> GET / HTTP/1.1
> Host: 192.168.20.2
> User-Agent: curl/7.74.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Tue, 06 Jun 2023 03:53:08 GMT
< Server: Apache/2.4.56 (Debian)
< Last-Modified: Mon, 05 Jun 2023 19:41:26 GMT
< ETag: "1e-5fd6716a1e11b"
< Accept-Ranges: bytes
< Content-Length: 30
< Content-Type: text/html
<
Welcome to lion app server !!
* Connection #0 to host 192.168.20.2 left intact
13. Confirmar que a conectividade urso-tigre está bloqueada
Vamos confirmar se a regra de firewall de saída está bloqueando o acesso do urso ao tigre visualizando os registros do firewall.
Em uma nova sessão do console do Cloud, acesse Logging → Análise de registros → selecione Mostrar consulta
Cole a string de consulta abaixo no campo de pesquisa e selecione stream.
jsonPayload.rule_details.reference="network:consumer-vpc/firewall:deny-all-egress"
Na instância do urso, execute um curl no endereço IP do tigre identificado anteriormente no tutorial da instância do urso. Em algum momento, o curl vai expirar.
curl -v <tiger's IP Address>
Exemplo:
user@bear:~$ curl -v 192.168.30.2
* Trying 192.168.30.2:80...
* connect to 192.168.30.2 port 80 failed: Connection timed out
* Failed to connect to 192.168.30.2 port 80: Connection timed out
* Closing connection 0
curl: (28) Failed to connect to 192.168.30.2 port 80: Connection timed out
Confira se a Análise de registros capturou registros de firewall negados. Selecione uma entrada de registro e expanda os campos aninhados para mostrar os metadados.
14. A validação do cosmo para a conectividade do urso foi concluída
Abra uma nova guia do Cloud Shell e atualize as configurações do projeto.
No Cloud Shell, faça o seguinte:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Faça login na instância do cosmo usando o IAP no Cloud Shell.
gcloud compute ssh cosmo --project=$projectid --zone=us-central1-a --tunnel-through-iap
No Cloud Shell, execute um ping no endereço IP vNIV1 do urso, identificado anteriormente no tutorial
ping <bears vNIC1 IP Address>
Exemplo:
user@cosmo:~$ ping 192.168.10.2 -c 5
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=0.277 ms
64 bytes from 192.168.10.2: icmp_seq=2 ttl=64 time=0.288 ms
64 bytes from 192.168.10.2: icmp_seq=3 ttl=64 time=0.265 ms
64 bytes from 192.168.10.2: icmp_seq=4 ttl=64 time=0.264 ms
64 bytes from 192.168.10.2: icmp_seq=5 ttl=64 time=0.366 ms
15. Limpar
Exclua os componentes do tutorial no Cloud Shell.
gcloud compute instances delete bear --zone=us-central1-a --quiet
gcloud compute instances delete lion --zone=us-central1-a --quiet
gcloud compute instances delete tiger --zone=us-central1-a --quiet
gcloud compute instances delete cosmo --zone=us-central1-a --quiet
gcloud compute network-attachments delete psc-network-attachment --region=us-central1 --quiet
gcloud compute firewall-rules delete allow-ingress allow-limited-egress-to-lion deny-all-egress ssh-iap-consumer ssh-iap-producer vm-subnet-allow-ingress --quiet
gcloud compute networks subnets delete cosmo-subnet-1 intf-subnet lion-subnet-1 prod-subnet tiger-subnet-1 --region=us-central1 --quiet
gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet
gcloud compute networks delete consumer-vpc --quiet
gcloud compute networks delete producer-vpc --quiet
16. Parabéns
Parabéns! Você implementou regras de firewall para configurar e validar uma interface do Private Service Connect e a conectividade do consumidor e do produtor.
Você criou a infraestrutura do consumidor e adicionou um anexo de rede que permitiu ao produtor criar uma VM multinic para conectar a comunicação entre consumidor e produtor. Você aprendeu a criar regras de firewall na rede VPC do consumidor que permitem a conectividade com as instâncias nas VPCs de consumidor e produtor.
Cosmopup acha os tutoriais incríveis!!
Qual é a próxima etapa?
Confira alguns desses tutoriais...
- Como usar o Private Service Connect para publicar e consumir serviços com o GKE
- Como usar o Private Service Connect para publicar e consumir serviços
- Conectar-se a serviços no local por uma rede híbrida usando o Private Service Connect e um balanceador de carga de proxy TCP interno
Leia mais e Vídeos
- Visão geral do Private Service Connect
- O que é o Private Service Connect?
- Tipos de balanceador de carga compatíveis