1. Introdução
A interface do Private Service Connect é um recurso que permite que uma rede de nuvem privada virtual (VPC) do 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 alocará um endereço IP de uma sub-rede do consumidor especificado 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 há duas diferenças importantes:
- Um anexo de rede permite que uma rede produtora inicie conexões com uma rede consumidora (saída de serviço gerenciada), enquanto um endpoint permite que uma rede consumidora inicie conexões com uma rede produtora (entrada de serviço gerenciada).
- 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 de interface completa do Private Service Connect (PSC) que usa regras do Cloud Firewall para permitir e negar a conectividade do produtor para o computador do consumidor, conforme ilustrado na Figura 1.
Figura 1.
Você vai criar um único psc-network-attachment na VPC do consumidor, resultando nos seguintes casos de uso:
- Criar uma regra do Cloud Firewall para permitir o acesso de "bear" a "lion"
- Criar uma regra de Cloud Firewall para negar o acesso de "bear" a "tiger"
- Criar uma regra de Cloud Firewall para permitir o acesso de cosmo a bear
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 produtora (urso) à VM consumidora (leão)
- Como bloquear o acesso da VM produtora (urso) à VM consumidora (tigre)
- Como permitir o acesso da VM do consumidor (cosmo) à VM do produtor (bear)
O que é necessário
- Projeto do Google Cloud
- Permissões do IAM
- Administrador de rede do Compute (roles/compute.networkAdmin)
- Administrador de instâncias do Compute (roles/compute.instanceAdmin)
- Administrador de segurança do Compute (roles/compute.securityAdmin)
2. Antes de começar
Atualizar o projeto para oferecer suporte ao tutorial
Este tutorial usa $variables para ajudar na implementação da configuração do 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
Criar a VPC do consumidor
No Cloud Shell, faça o seguinte:
gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom
Criar 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
Criar a sub-rede de 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
Cloud Router e configuração NAT
O Cloud NAT é usado no tutorial para a 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 VMs com endereços IP particulares acessem a Internet.
No Cloud Shell, crie o roteador da 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 suas instâncias de VM, crie uma regra de firewall que:
- Aplica-se a todas as instâncias da VM que você quer que sejam acessíveis 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.
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, execute uma descrição das instâncias de VM "leão" 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
Os 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 a partir dessa sub-rede. A sub-rede precisa estar na mesma região do anexo de rede. Um anexo de rede precisa estar na mesma região do 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-attachment 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 produtor
Criar a rede VPC do produtor
No Cloud Shell, faça o seguinte:
gcloud compute networks create producer-vpc --project=$projectid --subnet-mode=custom
Criar 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 suas instâncias de VM, crie uma regra de firewall que:
- Aplica-se a todas as instâncias da VM que você quer que sejam acessíveis 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.
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
A interface do Private Service Connect é um recurso que permite que uma rede de nuvem privada virtual (VPC) do 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 alocará um endereço IP de uma sub-rede do consumidor especificado pelo anexo de rede. As redes de consumidores e produtores estão conectadas e podem se comunicar por endereços IP internos.
Na Cloud Shell, crie a interface do Private Service Connect (bear) e insira o URI psc-network-attachmentI identificado 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ários endereços IP
Valide se a interface PSC está configurada com o endereço IP adequado. A vNIC0 vai usar a sub-rede de produção do produtor (10.20.1.0/28), e a vNIC1 vai usar a sub-rede intf do consumidor (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 Cloud Firewall para permitir o acesso de "bear" a "lion"
No Cloud Shell, crie uma regra de prioridade mais alta que permita a saída do intervalo de endereços IP de attachment-subnet (intf-subnet) para 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 de permissão de entrada implícita para o tráfego da sub-rede psc-network-attachment.
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 de Cloud Firewall para negar o acesso de "bear" a todos os intervalos (incluindo "tiger")
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
Crie uma regra de firewall do Cloud para permitir o acesso de cosmo a bear
No Cloud Shell, crie uma regra de permissão de entrada que substitua a regra de permissão de entrada implícita para o tráfego da sub-rede psc-network-attachment.
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 do 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 interface do Private Service Connect
Para configurar o roteamento, você precisa saber o nome do SO convidado da 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, obtenha 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 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, vamos usar 1, já que 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 gateway 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 de consumidores
É necessário adicionar uma rota ao gateway padrão da interface do Private Service Connect para cada sub-rede do consumidor que se conecta à interface do Private Service Connect. 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 a 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. Validar a conectividade entre o urso e o leão
Vamos confirmar que a instância de VM do produtor, bear, 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 leão identificado anteriormente no tutorial.
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. Validar se a conectividade entre o urso e o tigre está bloqueada
Vamos confirmar se a regra de firewall de saída está bloqueando o acesso do urso ao tigre, conferindo os registros de firewall.
Em uma nova sessão do console do Cloud, navegue até "Logging" > "Logs Explorer" > "Selecionar 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. O curl vai expirar em algum momento.
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
Valide se a Análise de registros capturou os registros de firewall negados. Selecione uma entrada de registro e abra os campos aninhados para conferir os metadados.
14. Validar a conectividade do Cosmo para suportar
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, faça um ping no endereço IP vNIV1 do bear 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
No Cloud Shell, exclua os componentes do tutorial.
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ê configurou e validou uma interface do Private Service Connect e a conectividade do consumidor e do produtor implementando regras de firewall.
Você criou a infraestrutura do consumidor e adicionou um anexo de rede que permitiu ao produtor criar uma VM de várias NICs para conectar a comunicação entre consumidor e produtor. Você aprendeu a criar regras de firewall na rede VPC do consumidor que permitiam a conectividade às instâncias na VPC do consumidor e do produtor.
Cosmopup acha que os tutoriais são 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 on-prem por rede híbrida usando o Private Service Connect e um balanceador de carga do proxy TCP interno
Leituras e vídeos complementares
- Visão geral do Private Service Connect
- O que é o Private Service Connect?
- Tipos de balanceadores de carga compatíveis