Interface do Private Service Connect

Sobre este codelab
schedule66 minutos
subjectÚltimo 9 de junho de 2023 atualizado
account_circleEscrito por Deepak Michael

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.

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.

d39bf35e55bdf9e6.png

Você criará um único psc-network-attach na VPC do consumidor, resultando nos seguintes casos de uso:

  1. Criar uma regra de firewall de nuvem para permitir o acesso de urso a leão
  2. Crie uma regra do Cloud Firewall que negue o acesso de um urso a um tigre
  3. Criar uma regra de firewall do Cloud para permitir o acesso do cosmo ao urso
  • 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

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

2ae597e6d970cddf.png

Cole a string de consulta abaixo no campo de pesquisa e selecione stream.

jsonPayload.rule_details.reference=&quot;network:consumer-vpc/firewall:deny-all-egress&quot;

30d7bfae315f2ee3.png

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.

5c42a6587300be55.png

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

e6d3675ca7c6911f.jpeg

Qual é a próxima etapa?

Confira alguns desses tutoriais...

Leia mais e Vídeos

Documentos de referência