Acessar APIs do Google por endpoints
Neste documento, explicamos como usar os endpoints do Private Service Connect
para se conectar às APIs do Google. Em vez de enviar solicitações de API para os endereços IP disponíveis publicamente para endpoints de serviço, como storage.googleapis.com
, envie as solicitações para o endereço IP interno de um endpoint.
Também é possível usar o Private Service Connect para acessar serviços em outra rede VPC e para publicar serviços.
Papéis
Os papéis do IAM a seguir fornecem as permissões necessárias para executar as tarefas neste guia.
Tarefa | Papéis |
---|---|
Crie um endpoint |
Todas as seguintes funções: Administrador de rede do Compute ( roles/compute.networkAdmin ),Editor do Diretório de serviços ( roles/servicedirectory.editor ), e
Administrador do DNS ( roles/dns.admin .
|
Configurar o Acesso privado do Google (opcional) |
Administrador
de rede do Compute (roles/compute.networkAdmin )
|
Antes de começar
Para mais informações, incluindo configurações e limitações de DNS, leia Sobre a conexão com APIs do Google usando endpoints.
O Private Service Connect não ativa automaticamente nenhuma API. É necessário ativar as APIs do Google separadamente na página de APIs e serviços do Console do Google Cloud.
Você precisa ativar a API Compute Engine no projeto.
Você precisa ativar a API Service Directory no seu projeto.
Você precisa ativar a API Cloud DNS no seu projeto.
Escolha um endereço IP para o endpoint. Para informações sobre quais endereços IP podem ser usados, consulte Requisitos de endereço IP.
As regras de firewall de saída precisam permitir tráfego para o endpoint. A configuração padrão de firewall para uma rede VPC permite esse tráfego porque contém uma regra de saída de permissão implícita. Verifique se você não criou uma regra de saída de prioridade mais alta que bloqueia o tráfego.
As instâncias de máquina virtual (VM, na sigla em inglês) sem um endereço IP externo atribuído precisam usar uma sub-rede com o Acesso privado do Google ativado para acessar as APIs e os serviços do Google usando um endpoint.
Uma VM com um endereço IP externo pode acessar APIs e serviços do Google usando endpoints, mesmo que o Acesso privado do Google esteja desativado para a sub-rede. A conectividade com o endpoint permanece na rede do Google.
Se a rede VPC não contiver endpoints, verifique se há uma zona particular do Cloud DNS para
p.googleapis.com
. Se a zona existir, exclua-a antes de criar o endpoint. Se você não a excluir, a criação da zona DNS do Diretório de serviços usada para o Private Service Connect falhará. Para mais informações, consulte Solução de problemas.Os endpoints não podem ser acessados em redes VPC com peering.
Ativar o Acesso privado do Google para uma sub-rede
As VMs sem um endereço IP externo atribuído precisam estar conectadas a uma sub-rede com o Acesso privado do Google ativado para acessar as APIs e os serviços do Google usando um endpoint.
Se a VM tiver mais de uma interface, conecte a interface configurada com uma rota padrão (geralmente nic0
).
O endereço IP de origem dos pacotes enviados da VM corresponde ao endereço IPv4 interno principal da interface da VM ou a um endereço IPv4 interno de um intervalo de IPs de alias.
Para ativar o Acesso privado do Google em uma sub-rede, siga estas etapas.
Console
No Console do Google Cloud, acesse a página Redes VPC.
Clique no nome da rede que contém a sub-rede para a qual você precisa ativar o Acesso privado do Google.
Clique no nome da sub-rede. A página Detalhes da sub-rede é exibida.
Clique em Editar.
Na seção Acesso privado do Google, selecione Ativado.
Clique em Salvar.
gcloud
Determine o nome e a região da sub-rede. Para listar as sub-redes de uma rede específica, use o seguinte comando:
gcloud compute networks subnets list --filter=NETWORK_NAME
Execute o seguinte comando para ativar o Acesso privado do Google:
gcloud compute networks subnets update SUBNET_NAME \ --region=REGION \ --enable-private-ip-google-access
Execute o comando a seguir para verificar se o Acesso privado do Google está ativado:
gcloud compute networks subnets describe SUBNET_NAME \ --region=REGION \ --format="get(privateIpGoogleAccess)"
Substitua:
SUBNET_NAME
: o nome da sub-redeREGION
: a região da sub-redeNETWORK_NAME
: o nome da rede VPC que contém a sub-rede
Terraform
Use o recurso do Terraform para ativar o Acesso privado do Google em uma sub-rede.
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Crie um endpoint
Depois de escolher um endereço IP que atenda aos requisitos, você poderá criar um endpoint.
Um endpoint se conecta às APIs e aos serviços do Google usando uma regra de encaminhamento global. Cada regra de encaminhamento é contabilizada na cota de rede VPC para a Private Service Connect.
Não é possível atualizar um endpoint para APIs e serviços do Google depois que ele é criado. Se você precisar atualizar um endpoint para APIs e serviços do Google, exclua o endpoint e crie um novo.
Console
No Console do Google Cloud, acesse a página do Private Service Connect.
Clique na guia Endpoints conectados.
Clique em Conectar endpoint.
Em Destino, selecione o pacote de API de destino que você quer usar:
- Todas as APIs do Google
- VPC-SC
Em Nome da conexão, insira um nome para o endpoint.
Selecione uma Rede para o endpoint.
Selecione um Endereço IP para o endpoint.
O endereço IP precisa atender a estes requisitos.
Se você precisar de um novo endereço IP, crie um:
- Clique em Criar endereço IP.
- Digite um Nome e uma Descrição para o endereço IP.
- Digite o endereço IP que você quer usar e clique em Salvar.
Se uma região do diretório de serviços ainda não estiver configurada para essa rede VPC, selecione a região que você quer usar.
Todos os endpoints usados para acessar serviços e APIs do Google em uma determinada rede VPC usam a mesma região do diretório de serviços.
Se um namespace do Diretório de serviços ainda não estiver configurado para esta rede VPC, configure o namespace que você quer usar:
Para usar um namespace atribuído automaticamente, clique no menu suspenso Namespace e selecione o namespace atribuído automaticamente.
Para selecionar um namespace usado em outra rede, clique no menu suspenso Namespace e selecione um namespace na lista. A lista exibe todos os namespaces no projeto. É preciso selecionar um namespace usado apenas para endpoints usados para acessar as APIs do Google.
Para criar um novo namespace, clique no menu suspenso Namespace e em Criar namespace. Digite o namespace e clique em Criar.
Todos os endpoints que você usa para acessar as APIs e os serviços do Google em uma determinada rede VPC usam o mesmo namespace do diretório de serviços.
Clique em Adicionar endpoint.
gcloud
Reserve um endereço IP interno global para atribuir ao endpoint.
gcloud compute addresses create ADDRESS_NAME \ --global \ --purpose=PRIVATE_SERVICE_CONNECT \ --addresses=ENDPOINT_IP \ --network=NETWORK_NAME
Substitua:
ADDRESS_NAME
: o nome a ser atribuído ao endereço IP reservado.ENDPOINT_IP
: o endereço IP a ser reservado para o endpoint.O endereço IP precisa atender a estes requisitos.
NETWORK_NAME
: o nome da rede VPC do endpoint.
Crie uma regra de encaminhamento para conectar o endpoint aos serviços e APIs do Google.
gcloud compute forwarding-rules create ENDPOINT_NAME \ --global \ --network=NETWORK_NAME \ --address=ADDRESS_NAME \ --target-google-apis-bundle=API_BUNDLE \ [ --service-directory-registration=REGION_NAMESPACE_URI ]
Substitua:
ENDPOINT_NAME
: o nome a ser atribuído ao endpoint. O nome precisa ser uma string de 1 a 20 caracteres, contendo apenas letras minúsculas e números. O nome precisa começar com uma letra.NETWORK_NAME
: o nome da rede VPC do endpoint.ADDRESS_NAME
: o nome do endereço reservado na rede associada.API_BUNDLE
: o pacote de APIs a ser disponibilizado usando o endpoint. Veja a lista de APIs compatíveis.Use
all-apis
para conceder acesso a todas as APIs compatíveis.Use
vpc-sc
para restringir o acesso às APIs do Google compatíveis com o VPC Service Controls.
REGION_NAMESPACE_URI
: o URI do namespace ou região do serviço de diretório que você quer usar. Esse URI precisa fazer referência ao mesmo projeto em que você está criando o endpoint.É possível definir uma região apenas com
projects/PROJECT_NAME/locations/REGION
.Defina uma região e um namespace com
projects/PROJECT_NAME/locations/REGION/namespaces/NAMESPACE
.
Se você omitir
--service-directory-registration
completamente ou definir uma região sem um namespace, ocorrerá o seguinte:Se uma região ou um namespace já estiver configurado para essa rede VPC, esses padrões serão usados.
Se uma região não estiver configurada, ela será definida como
us-central1
. Se um namespace não for configurado, um namespace gerado pelo sistema será atribuído.
API
Reserve um endereço IP interno global para atribuir ao endpoint.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses { "name": ADDRESS_NAME, "address": ENDPOINT_IP, "addressType": "INTERNAL", "purpose": PRIVATE_SERVICE_CONNECT, "network": NETWORK_URL }
Substitua:
PROJECT_ID
: o ID do projeto.ADDRESS_NAME
: o nome a ser atribuído ao endereço IP reservado.ENDPOINT_IP
: o endereço IP a ser reservado para o endpoint.O endereço IP precisa atender a estes requisitos.
NETWORK_URL
: a rede VPC do endpoint. Use o método network.list ougcloud compute networks list --uri
para encontrar os URLs das suas redes.
Crie uma regra de encaminhamento para conectar o endpoint aos serviços e APIs do Google.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "IPAddress": ADDRESS_URL, "network": NETWORK_URL, "name": ENDPOINT_NAME, "target": API_BUNDLE, "serviceDirectoryRegistrations : [ { "service_directory_region": REGION, "namespace": "NAMESPACE" } ], }
Substitua:
PROJECT_ID
: o ID do projeto.ENDPOINT_NAME
: o nome a ser atribuído ao endpoint. O nome precisa ser uma string de 1 a 20 caracteres, contendo apenas letras minúsculas e números. O nome precisa começar com uma letra.NETWORK_URL
: a rede VPC do endpoint. Use o método network.list ougcloud compute networks list --uri
para encontrar os URLs das suas redes.ADDRESS_URL
: o URL do endereço reservado na rede associada. Use o método globalAddresses.list ougcloud compute addresses list --uri
para encontrar os URLs dos endereços reservados.API_BUNDLE
: o pacote de APIs a ser disponibilizado usando o endpoint. Veja a lista de APIs compatíveis.Use
all-apis
para conceder acesso a todas as APIs compatíveis.Use
vpc-sc
para restringir o acesso às APIs do Google compatíveis com o VPC Service Controls.
REGION
: a região do Diretório de serviços que você quer usar. Por exemplo,us-central1
. Se você omitirREGION
e uma região já estiver configurada para essa rede VPC, essa região será usada. Se uma região não estiver configurada, a região será definida comous-central1
.NAMESPACE
: o nome do namespace do Diretório de serviços que você quer usar. Se você omitirNAMESPACE
e um namespace já estiver configurado para essa rede VPC, esse namespace será usado. Se um namespace não for configurado, um namespace gerado pelo sistema será atribuído.
Terraform
Use os seguintes recursos do Terraform para criar um endpoint:
Verifique se o endpoint está funcionando
Crie uma instância de VM na rede VPC em que o Private Service Connect está configurado. Execute o comando a seguir na VM para verificar se o endpoint do Private Service Connect está funcionando. Os endpoints não respondem a solicitações de ping (ICMP).
curl -v ENDPOINT_IP/generate_204
Substitua ENDPOINT_IP
pelo endereço IP do endpoint.
Se o endpoint estiver funcionando, você verá um código de resposta HTTP 204
.
Listar endpoints
É possível listar todos os endpoints configurados.
Console
No Console do Google Cloud, acesse a página do Private Service Connect.
Clique na guia Endpoints conectados.
Os endpoints serão exibidos.
gcloud
gcloud compute forwarding-rules list \ --filter target="(all-apis OR vpc-sc)" --global
O resultado será assim:
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET RULE IP TCP all-apis
Receber informações sobre um endpoint
É possível ver todos os detalhes de configuração de um endpoint.
Console
No Console do Google Cloud, acesse a página do Private Service Connect.
Clique na guia Endpoints conectados.
Os endpoints são exibidos.
Clique no endpoint com os detalhes que você quer ver.
gcloud
gcloud compute forwarding-rules describe \ ENDPOINT_NAME --global
Rotular um endpoint
É possível gerenciar rótulos para endpoints. Consulte Como rotular recursos para mais informações.
Excluir um endpoint
É possível excluir um endpoint.
Console
No Console do Google Cloud, acesse a página do Private Service Connect.
Clique na guia Endpoints conectados.
Selecione o endpoint que você quer excluir e clique em Excluir.
gcloud
gcloud compute forwarding-rules delete \ ENDPOINT_NAME --global
Substitua ENDPOINT_NAME
pelo nome do endpoint que você quer
excluir.
Usar um endpoint
Para usar um endpoint, envie solicitações para um nome de host DNS que seja resolvido para o endereço IP do endpoint.
É possível usar os nomes de DNS
p.googleapis.com
criados automaticamente se for possível configurar os clientes para usar um endpoint personalizado e se os registros de DNSp.googleapis.com
forem criados para as APIs e os serviços que você quer usar. Para mais informações, consulte Usar nomes DNSp.googleapis.com
.Por exemplo, se o nome do endpoint for
xyz
, os registros DNS serão criados parastorage-xyz.p.googleapis.com
,compute-xyz.p.googleapis.com
e outras APIs usadas com frequência no pacote de APIs.É possível criar registros DNS usando os nomes DNS padrão se você estiver usando um cliente que não tenha sido configurado para usar um endpoint personalizado ou se não houver um registro DNS
p.googleapis.com
para o serviço que você quer usar. Para mais informações, consulte Criar registros DNS usando nomes DNS padrão.Por exemplo, crie registros DNS para
storage.googleapis.com
ecompute.googleapis.com
.
Usar nomes DNS p.googleapis.com
Quando você cria um endpoint,
o Diretório de serviços cria registros DNS para APIs e
serviços usados com frequência que estão disponíveis no endpoint. Os registros DNS são criados apenas para
APIs e serviços que têm nomes DNS padrão que terminam com googleapis.com
e apenas para um subconjunto dessas APIs e serviços.
Os registros DNS são criados em uma zona particular p.googleapis.com
. Os registros
apontam para o endereço IP do endpoint e usam este formato:
SERVICE-ENDPOINT.p.googleapis.com
Por exemplo, se o nome do endpoint for xyz
, os registros DNS serão criados para
storage-xyz.p.googleapis.com
, compute-xyz.p.googleapis.com
e outras
APIs compatíveis.
Os clientes que podem ser configurados para usar um endpoint personalizado podem usar os
nomes de DNS p.googleapis.com
para enviar solicitações a um
endpoint.
Consulte a documentação do seu cliente ou da biblioteca de cliente para mais informações sobre como configurá-lo para usar endpoints personalizados. Exemplo:
Python: é possível configurar
api_endpoint
em Opções de cliente.Go: é possível configurar
WithEndpoint
em ClientOptions..NET: é possível configurar
Endpoint
na classe de builder do cliente.gcloud: é possível configurar
api_endpoint_overrides
na gcloud CLI.
Criar registros DNS usando nomes DNS padrão
Você precisa criar registros DNS para direcionar os nomes DNS padrão de APIs e serviços para seu endpoint nestas circunstâncias:
Seu cliente ou aplicativo não pode ser configurado para usar um nome DNS
p.googleapis.com
.Você precisa acessar um serviço compatível, mas não há um nome DNS
p.googleapis.com
criado automaticamente para esse serviço.
Para criar registros DNS que apontem para o endpoint do Private Service Connect, siga estas instruções:
Crie uma zona de DNS para o domínio que você precisa usar, por exemplo,
googleapis.com
ougcr.io
. Considere criar uma zona particular do Cloud DNS para essa finalidade.Nesta zona do DNS:
Crie um registro
A
para o próprio nome de domínio (zona). Por exemplo,googleapis.com
ougcr.io
Aponte esse registroA
para o endereço IP do endpoint. Se você estiver usando o Cloud DNS, consulte Como adicionar um registro.Crie um registro
CNAME
para todos os possíveis nomes de host do domínio usando um asterisco e um ponto seguido pelo nome do domínio (zona). Por exemplo,*.googleapis.com
ou*.gcr.io
. Aponte este registroCNAME
para o registroA
na mesma zona. Por exemplo, direcione*.googleapis.com
paragoogleapis.com
ou direcione*.gcr.io
paragcr.io
.
Acesse o endpoint de hosts locais
Se sua rede local estiver conectada a uma rede VPC, será possível usar o Private Service Connect para acessar APIs e serviços do Google de hosts locais usando o endereço IP interno do endpoint.
Sua rede local precisa estar conectada a uma rede VPC usando túneis do Cloud VPN ou anexos da VLAN para o Cloud Interconnect.
O endpoint precisa estar na rede VPC conectada à sua rede local.
A rede local precisa ter rotas apropriadas para o endpoint. Configure uma Divulgação de rota personalizada do Cloud Router para anunciar rotas para o endpoint na sessão do BGP que gerencia rotas para o túnel do Cloud VPN ou para o anexo do Cloud Interconnect (VLAN).
- Se a rede local usa roteamento de vários caminhos de custo igual (ECMP, na sigla em inglês) para distribuir tráfego para os endpoints do Private Service Connect, garanta que todos os pacotes de uma única conexão TCP sejam encaminhados pelo mesmo túnel do Cloud VPN ou anexo da VLAN. Se os pacotes de uma conexão TCP estabelecida forem encaminhados por vários caminhos, poderá haver redefinições de TCP intermitentes (RSTs, na sigla em inglês). Para evitar redefinições, configure os roteadores de peering locais para manter destinos consistentes do próximo salto.
Configure sistemas locais para que eles possam fazer consultas às suas zonas de DNS particulares.
Se você implementou as zonas DNS particulares usando o Cloud DNS, siga estas etapas:
Crie uma política de servidor de entrada na rede VPC a que sua rede local se conecta.
Identifique os pontos de entrada do encaminhador de entrada nas regiões em que os túneis do Cloud VPN e anexos da VLAN estão localizados, na rede VPC a que sua rede no local se conecta.
Configure sistemas locais e servidores de nomes DNS locais para encaminhar os nomes DNS dos endpoints do Private Service Connect para um ponto de entrada de encaminhador de entrada na mesma região do túnel do Cloud VPN que se conecta à rede VPC.
Solução de problemas
As seções a seguir contêm informações sobre como resolver problemas com os endpoints do Private Service Connect usados para acessar as APIs do Google.
Falha na criação da zona de DNS privado
Quando você cria um endpoint, uma zona DNS do diretório de serviços é criada. A criação da zona pode falhar por estes motivos:
Você não ativou a API do Cloud DNS no projeto.
Você não tem as permissões necessárias para criar uma zona de DNS do Diretório de serviços.
Há uma zona DNS com o mesmo nome de zona nessa rede VPC.
Já existe uma zona DNS para
p.googleapis.com
nessa rede VPC.
Pode haver zonas conflitantes devido a uma falha na exclusão anterior.
Para criar a zona DNS do Diretório de serviços, faça o seguinte:
Verifique se a API do Cloud DNS está ativada no projeto.
Verifique se você tem as permissões necessárias para criar a zona DNS do Diretório de serviços:
dns.managedZones.create
servicedirectory.namespaces.associatePrivateZone
Crie uma zona DNS do Diretório de serviços apoiada pelo namespace do Diretório de serviços associado ao seu endpoint.
Use os seguintes valores ao criar a zona:
Nome da zona: use o mesmo nome de zona que o sistema usou durante a tentativa de criação com falha. A mensagem de erro mostra o nome da zona que foi usada.
Nome do DNS:
p.googleapis.com.
(inclua o ponto final).Namespace do diretório de serviços: encontre o namespace do diretório de serviços para o endpoint de conexão de serviço privado que você criou e use esse namespace ao criar o serviço Zona de DNS do diretório.
O namespace do Diretório de serviços tem o seguinte formato:
goog-psc-NETWORK_NAME-NETWORK_ID
.
Falha ao excluir a zona DNS particular
Quando você exclui o último endpoint em uma rede VPC, a configuração do Diretório de serviços associada, incluindo a zona de DNS, é excluída.
Essa exclusão pode falhar por estes motivos:
Você não tem as permissões necessárias para excluir a zona DNS.
A zona contém entradas DNS definidas pelo usuário que não foram criadas pelo diretório de serviços.
Para resolver esse problema, faça o seguinte:
Verifique se você tem a permissão
dns.managedZones.delete
. Para mais informações, consulte Controle de acesso na documentação do Cloud DNS.