1. Introdução
Private Service Connect
O Private Service Connect é um recurso da rede do Google Cloud que permite que consumidores acessem serviços gerenciados de maneira particular na rede VPC deles. Da mesma forma, ele permite que produtores de serviços gerenciados hospedem esses serviços em redes VPC separadas e ofereçam uma conexão particular aos consumidores.

Controle de acesso do produtor do Private Service Connect
Em vez de aceitar automaticamente todas as conexões de qualquer consumidor, os produtores só podem aceitar solicitações de conexão de entrada se o consumidor estiver na lista de aceitação. É possível especificar consumidores por projeto, rede VPC ou endpoint individual do PSC. Não é possível incluir diferentes tipos de consumidores na mesma lista de aceitação ou rejeição.
Para qualquer preferência de conexão, as conexões aceitas podem ser substituídas e rejeitadas por uma política da organização (compute.restrictPrivateServiceConnectConsumer) que bloqueia as conexões de entrada.
A política da organização (compute.restrictPrivateServiceConnectConsumer) se aplica à organização,pasta ou projeto. Se quiser um controle de acesso refinado ao endpoint do PSC, use a lista de aceitação do consumidor de endpoints individuais do PSC.
Controle de acesso baseado em endpoints
O controle de acesso baseado em endpoints do PSC é a capacidade de um produtor autorizar consumidores por endpoints individuais do PSC nas políticas de anexo de serviço.
Essa abordagem, recomendada para serviços multitenant, oferece o controle mais granular para gerenciar conexões.
Este codelab é focado em aprender a configurar esse recurso.
Esse método não se aplica a back-ends do Private Service Connect.
2. O que você vai aprender
- Como um produtor publica um serviço usando o PSC.
- Como um produtor pode criar um controle de acesso baseado em endpoint do PSC.
- Como um consumidor, como acessar o serviço do PSC.
3. Arquitetura geral do laboratório

4. Etapas de preparação
Papéis do IAM necessários para trabalhar no laboratório
Comece atribuindo os papéis necessários do IAM à conta do GCP no nível do projeto.
- Administrador de rede do Compute (
roles/compute.networkAdmin): esse papel oferece controle total dos recursos de rede 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 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 da instância do Compute (
roles/compute.instanceAdmin.v1): esse papel oferece controle total de instâncias, grupos de instâncias, discos, snapshots e imagens do Compute Engine. Acesso de leitura a todos os recursos de rede do Compute Engine. - Administrador de segurança do Compute (
roles/compute.securityAdmin): esse papel concede permissões para criar, modificar e excluir regras de firewall e certificados SSL, além de configurar as definições de VM protegida.
Ativar APIs
No Cloud Shell, verifique se o projeto está configurado corretamente e defina as variáveis de ambiente.
No Cloud Shell, faça o seguinte:
gcloud auth login
gcloud config set project <your project id>
export project_id=$(gcloud config get-value project)
export region=us-central1
export zone=$region-a
echo $project_id
echo $region
echo $zone
Ative todas as APIs do Google necessárias no projeto. No Cloud Shell, faça o seguinte:
gcloud services enable \
compute.googleapis.com
Criar VPC do produtor
No projeto, crie uma rede VPC com modo de sub-rede personalizado. Faça o seguinte no Cloud Shell:
gcloud compute networks create producer-net \
--subnet-mode=custom
Criar sub-redes na VPC do produtor
Você vai precisar de três sub-redes: producer-subnet para seu serviço, proxy-only-subnet para o balanceador de carga publicar seu serviço e psc-subnet para o PSC publicar o serviço.
No Cloud Shell, faça o seguinte para criar sub-redes IPv4:
gcloud compute networks subnets create producer-subnet \
--network=producer-net \
--range=10.10.0.0/24 \
--region=$region
gcloud compute networks subnets create proxy-only-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$region \
--network=producer-net \
--range=10.30.0.0/24
gcloud compute networks subnets create psc-subnet \
--network=producer-net \
--region=$region \
--range=192.168.0.0/16 \
--purpose=PRIVATE_SERVICE_CONNECT
Criar o Cloud NAT e o Cloud Router para a VPC do produtor
O Cloud NAT é usado para permitir que a VM faça o download e instale aplicativos.
gcloud compute routers create $region-cr \
--network=producer-net \
--region=$region
gcloud compute routers nats create $region-nat \
--router=$region-cr \
--region=$region \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips
Criar VPC do consumidor
No projeto, crie uma rede VPC com modo de sub-rede personalizado. Faça o seguinte no Cloud Shell:
gcloud compute networks create consumer-net \
--subnet-mode=custom
Criar sub-rede na VPC do consumidor
No Cloud Shell, faça o seguinte para criar uma sub-rede IPv4:
gcloud compute networks subnets create consumer-subnet \
--network=consumer-net \
--range=10.20.0.0/24 \
--region=$region
Criar uma política de firewall global para a VPC do produtor e do consumidor
Você vai criar uma política de firewall de rede global e associá-la à VPC do produtor e à VPC do consumidor.
gcloud compute network-firewall-policies create global-fw-policy \
--global
gcloud compute network-firewall-policies associations create \
--firewall-policy=global-fw-policy \
--name=producer-fw-policy \
--network=producer-net \
--global-firewall-policy
gcloud compute network-firewall-policies associations create \
--firewall-policy=global-fw-policy \
--name=consumer-fw-policy \
--network=consumer-net \
--global-firewall-policy
Permitir SSH
Para permitir que o Identity-Aware Proxy (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 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 100 \
--action=ALLOW \
--firewall-policy=global-fw-policy \
--description="producer-allow-iap" \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20 \
--layer4-configs=tcp:22 \
--global-firewall-policy
Adicionar regras de firewall de entrada ao serviço
Você vai usar o balanceador de carga de aplicativo interno regional para publicar o serviço.A regra de firewall de entrada y precisa permitir que a sub-rede somente proxy acesse o serviço. Para informações detalhadas, consulte este documento.
gcloud compute network-firewall-policies rules create 200 \
--action=ALLOW \
--firewall-policy=global-fw-policy \
--description="producer-allow-access-service" \
--direction=INGRESS \
--src-ip-ranges=10.30.0.0/24 \
--layer4-configs=tcp:80 \
--global-firewall-policy
Permitir a verificação de integridade do balanceador de carga para seu serviço
As sondagens de verificação de integridade do balanceador de carga de aplicativo interno regional usam os intervalos 35.191.0.0/16 e 130.211.0.0/22. Você vai criar uma regra de firewall de entrada para permitir verificações de integridade das sondagens. Para mais detalhes, consulte este documento.
gcloud compute network-firewall-policies rules create 300 \
--action=ALLOW \
--firewall-policy=global-fw-policy \
--description="producer-allow-health-check" \
--direction=INGRESS \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22\
--layer4-configs=tcp:80 \
--global-firewall-policy
Criar uma VM como um cliente HTTP na VPC do consumidor
No Cloud Shell, faça o seguinte para criar uma instância de VM como cliente de teste:
gcloud compute instances create myclient \
--zone=$zone \
--subnet=consumer-subnet \
--shielded-secure-boot \
--no-address
Criar uma VM como um servidor HTTP na VPC do produtor
No Cloud Shell, faça o seguinte para criar uma instância de VM como servidor HTTP:
gcloud compute instances create myserver \
--subnet=producer-subnet \
--zone=$zone \
--no-address \
--shielded-secure-boot \
--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'
5. Produtor publica serviço do PSC
Criar um balanceador de carga de aplicativo interno regional
Você vai criar um balanceador de carga de aplicativo interno regional como front-end do serviço, e o back-end será o grupo de instâncias não gerenciadas cujo endpoint é o servidor HTTP que criamos anteriormente.
Reserve o endereço IP do balanceador de carga
gcloud compute addresses create l7-ilb-ip-address \
--region=$region \
--subnet=producer-subnet
Criar um grupo de instâncias
Você vai criar um grupo de instâncias não gerenciadas e adicionar a instância de VM, myserver, ao grupo.
gcloud compute instance-groups unmanaged create my-service-ig \
--zone=$zone
gcloud compute instance-groups unmanaged add-instances my-service-ig \
--zone=$zone \
--instances=myserver
Criar uma verificação de integridade HTTP
gcloud compute health-checks create http l7-ilb-basic-check \
--region=$region \
--use-serving-port
Crie o serviço de back-end
gcloud compute backend-services create l7-ilb-backend-service \
--load-balancing-scheme=INTERNAL_MANAGED \
--protocol=HTTP \
--health-checks=l7-ilb-basic-check \
--health-checks-region=$region \
--region=$region
Adicionar back-end ao serviço de back-end
gcloud compute backend-services add-backend l7-ilb-backend-service \
--balancing-mode=UTILIZATION \
--instance-group=my-service-ig \
--instance-group-zone=$zone \
--region=$region
Criar o mapa de URL
gcloud compute url-maps create l7-ilb-map \
--default-service=l7-ilb-backend-service \
--region=$region
Criar o proxy de destino
gcloud compute target-http-proxies create l7-ilb-proxy \
--url-map=l7-ilb-map \
--url-map-region=$region \
--region=$region
Criar a regra de encaminhamento
gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=producer-net \
--subnet=producer-subnet \
--address=l7-ilb-ip-address \
--ports=80 \
--region=$region \
--target-http-proxy=l7-ilb-proxy \
--target-http-proxy-region=$region
O produtor do PSC publica o serviço
Você vai usar o PSC para publicar o serviço com connection-preference=ACCEPT_MANUAL e listas de consumidores vazias.
gcloud compute service-attachments create my-psc-service \
--region=$region \
--target-service=projects/$project_id/regions/$region/forwardingRules/l7-ilb-forwarding-rule \
--connection-preference=ACCEPT_MANUAL \
--nat-subnets=psc-subnet
export myserver_service_attachment=$(gcloud compute service-attachments describe my-psc-service --region=$region --format="value(selfLink.scope(v1))")
echo $myserver_service_attachment
6. O consumidor cria o endpoint do PSC
Reservar um IP para o endpoint do PSC
gcloud compute addresses create myserver-psc-endpoint-ip \
--region=$region \
--subnet=consumer-subnet \
--ip-version=IPV4
Criar endpoint do PSC
Crie o endpoint do PSC e extraia o IP dele para testar na próxima etapa.
gcloud compute forwarding-rules create myserver-psc-endpoint \
--region=$region \
--network=consumer-net \
--address=myserver-psc-endpoint-ip \
--target-service-attachment=$myserver_service_attachment
psc_endpoint_ip=$(gcloud compute forwarding-rules describe myserver-psc-endpoint \
--region=$region --format="value(IPAddress)")
echo $psc_endpoint_ip
O consumidor verifica o status do endpoint do PSC
Antes de o produtor adicionar o endpoint do PSC à lista de consumidores, a conexão fica visível no endpoint conectado do lado do consumidor com o status "Pendente".
gcloud compute forwarding-rules describe myserver-psc-endpoint \
--region=$region
Você vai ver um resultado semelhante ao abaixo.
IPAddress: 10.20.0.3
allowPscGlobalAccess: false
creationTimestamp: '2026-02-23T16:27:27.920-08:00'
fingerprint: yh_UiYqjHCc=
id: '934193159895862912'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: myserver-psc-endpoint
network: https://www.googleapis.com/compute/v1/projects/<project_id>/global/networks/consumer-net
networkTier: PREMIUM
pscConnectionId: '160443618817212419'
pscConnectionStatus: PENDING
region: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1/forwardingRules/myserver-psc-endpoint
selfLinkWithId: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1/forwardingRules/934193159895862912
serviceDirectoryRegistrations:
- namespace: goog-psc-default
target: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1/serviceAttachments/my-psc-service
7. Testar o acesso da VM consumidora à VM produtora
Verifique o IP do endpoint do PSC.
echo $psc_endpoint_ip
Faça SSH na VM chamada myclient e teste se ela pode acessar myserver na porta HTTP 80.
No Cloud Shell, faça o seguinte:
gcloud compute ssh \
--zone=$zone "myclient" \
--tunnel-through-iap
Use curl para acessar o endpoint do PSC que você criou.
curl -m 10 <psc_endpoint_ip>
O comando curl vai expirar. O cliente de teste da VPC consumidora não consegue acessar o servidor HTTP na VPC produtora.
curl: (28) Connection timed out after 10001 milliseconds
Saia da sessão SSH para voltar ao Cloud Shell.
exit
8. O produtor aprova o endpoint do PSC
O produtor verifica o status do endpoint do PSC
Antes de o produtor adicionar o endpoint do PSC à lista de consumidores, a conexão fica visível no anexo de serviço com o status "Pendente".
gcloud compute service-attachments describe my-psc-service --region=$region
Você vai ver um resultado semelhante ao abaixo.
connectedEndpoints:
- consumerNetwork: https://www.googleapis.com/compute/projects/<project_id>/global/networks/consumer-net
endpoint: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/myserver-psc-endpoint
endpointWithId: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/934193159895862912
pscConnectionId: '160443618817212419'
status: PENDING
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2026-02-23T13:27:33.886-08:00'
description: ''
enableProxyProtocol: false
fingerprint: -9EI8FCALrA=
id: '2578692595155826858'
kind: compute#serviceAttachment
name: my-psc-service
natSubnets:
- https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/subnetworks/psc-subnet
pscServiceAttachmentId:
high: '149466704441770984'
low: '2578692595155826858'
reconcileConnections: false
region: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1
selfLink: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/serviceAttachments/my-psc-service
targetService: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/l7-ilb-forwarding-rule
Receber o URI baseado em ID do endpoint do PSC
O URI baseado em ID do endpoint do PSC é o ID da regra de encaminhamento que o consumidor acabou de criar. No exemplo acima, "endpointWithId" é o URI do endpoint do PSC criado pelo consumidor. Você vai precisar desse URI para que o produtor crie o controle de acesso baseado em endpoints.
O ID de conexão do PSC não é o que estamos procurando. )
export psc_endpoint_uri=$(gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints.endpointWithId)")
echo $psc_endpoint_uri
Adicionar URI baseado em ID do endpoint do PSC à lista de aceitação do consumidor
gcloud compute service-attachments update my-psc-service \
--region=$region \
--consumer-accept-list=$psc_endpoint_uri
O produtor verifica o status do endpoint do PSC
gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints)"
Você vai ver um resultado semelhante ao abaixo. O status mudou para "ACEITO".
{'consumerNetwork': 'https://www.googleapis.com/compute/projects/<project_id>/global/networks/consumer-net', 'endpoint': 'https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/myserver-psc-endpoint', 'endpointWithId': 'https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/47564871796017232', 'pscConnectionId': '54547416268144643', 'status': 'ACCEPTED'}
9. Testar o acesso da VM consumidora à VM produtora
Verifique o IP do endpoint do PSC.
echo $psc_endpoint_ip
Faça SSH na VM chamada myclient e teste se ela pode acessar myserver na porta HTTP 80.
No Cloud Shell, faça o seguinte:
gcloud compute ssh \
--zone=$zone "myclient" \
--tunnel-through-iap
Use curl para acessar o endpoint do PSC que você criou.
curl <psc_endpoint_ip>
O comando curl vai retornar uma resposta de myserver. O cliente de teste da VPC consumidora acessou o servidor HTTP na VPC produtora.
I am a Http Server.
Saia da sessão SSH para voltar ao Cloud Shell.
exit
10. Limpar
Liberar espaço nas VMs
No Cloud Shell, faça o seguinte:
gcloud compute instances delete myserver --zone $zone --quiet
gcloud compute instances delete myclient --zone $zone --quiet
Liberar memória dos componentes do cliente do PSC
gcloud compute forwarding-rules delete myserver-psc-endpoint \
--region=$region --quiet
gcloud compute addresses delete myserver-psc-endpoint-ip \
--region=$region --quiet
Liberar memória dos componentes do produtor do PSC
gcloud compute service-attachments delete my-psc-service \
--region=$region --quiet
gcloud compute forwarding-rules delete l7-ilb-forwarding-rule \
--region=$region --quiet
gcloud compute target-http-proxies delete l7-ilb-proxy \
--region=$region --quiet
gcloud compute url-maps delete l7-ilb-map \
--region=$region --quiet
gcloud compute backend-services remove-backend l7-ilb-backend-service \
--instance-group=my-service-ig \
--instance-group-zone=$zone \
--region=$region --quiet
gcloud compute backend-services delete l7-ilb-backend-service \
--region=$region --quiet
gcloud compute health-checks delete l7-ilb-basic-check \
--region=$region --quiet
gcloud compute instance-groups unmanaged delete my-service-ig \
--zone=$zone --quiet
gcloud compute addresses delete l7-ilb-ip-address \
--region=$region --quiet
Liberar espaço de firewall, Cloud NAT, Cloud Router e VPCs
gcloud compute network-firewall-policies rules delete 100 \
--firewall-policy=global-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies rules delete 200 \
--firewall-policy=global-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies rules delete 300 \
--firewall-policy=global-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies associations delete \
--firewall-policy=global-fw-policy \
--name=producer-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies associations delete \
--firewall-policy=global-fw-policy \
--name=consumer-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies delete global-fw-policy \
--global --quiet
gcloud compute routers nats delete $region-nat \
--router=$region-cr \
--region=$region --quiet
gcloud compute routers delete $region-cr \
--region=$region --quiet
gcloud compute networks subnets delete producer-subnet \
--region=$region --quiet
gcloud compute networks subnets delete proxy-only-subnet \
--region=$region --quiet
gcloud compute networks subnets delete psc-subnet \
--region=$region --quiet
gcloud compute networks delete producer-net --quiet
gcloud compute networks subnets delete consumer-subnet \
--region=$region --quiet
gcloud compute networks delete consumer-net --quiet
11. Parabéns
Você testou com sucesso o controle de acesso baseado em endpoints do produtor do Private Service Connect.