Aceda às APIs Google através de pontos finais

Este documento explica como usar pontos finais do Private Service Connect para se ligar às APIs Google. Em vez de enviar pedidos de API para os endereços IP disponíveis publicamente para pontos finais de serviço, como storage.googleapis.com, pode enviar os pedidos para o endereço IP interno de um ponto final.

Também pode usar o Private Service Connect para aceder a serviços noutra rede VPC e para publicar serviços.

Funções

As seguintes funções de IAM fornecem as autorizações necessárias para realizar as tarefas neste guia.

Tarefa Funções
Crie um ponto final Todas as seguintes funções:
Compute Administrador de rede (roles/compute.networkAdmin),
Service Editor de diretório (roles/servicedirectory.editor) e
Administrador de DNS (roles/dns.admin)
Configure o acesso privado do Google (opcional) Compute Network Admin (roles/compute.networkAdmin)

Antes de começar

  • Leia o artigo Acerca da ligação às APIs Google através de pontos finais para mais informações, incluindo a configuração de DNS e limitações.

  • O Private Service Connect não ativa automaticamente nenhuma API. Tem de ativar separadamente as APIs Google que precisa de usar na página APIs e serviços na Google Cloud consola.

  • Tem de ativar a API Compute Engine no seu projeto.

  • Tem de ativar a API Service Directory no seu projeto.

  • Tem de ativar a API Cloud DNS no seu projeto.

  • Tem de escolher um endereço IP para usar no ponto final. Para obter informações sobre os endereços IP que pode usar, consulte os requisitos de endereço IP.

  • As regras de firewall de saída têm de permitir o tráfego para o ponto final. A configuração da firewall predefinida para uma rede VPC permite este tráfego, porque contém uma regra de saída de permissão implícita. Verifique se não criou uma regra de saída de prioridade mais elevada que bloqueie o tráfego.

  • As instâncias de máquinas virtuais (VM) sem um endereço IP externo atribuído têm de usar uma sub-rede com o acesso privado à Google ativado para aceder às APIs e aos serviços Google através de um ponto final.

    Uma VM com um endereço IP externo pode aceder às APIs e aos serviços Google através de pontos finais, mesmo que o acesso privado à Google esteja desativado para a respetiva sub-rede. A conetividade ao ponto final permanece na rede da Google.

  • Se a sua rede VPC não contiver nenhum ponto final, verifique se existe uma zona privada do Cloud DNS para p.googleapis.com. Se a zona existir, elimine-a antes de criar o ponto final. Se não a eliminar, a criação da zona DNS do Service Directory usada para o Private Service Connect falha. Para mais informações, consulte a secção de resolução de problemas.

  • Os pontos finais não estão acessíveis a partir de redes de VPC com peering.

Ative o acesso privado à Google para uma sub-rede

As VMs sem um endereço IP externo atribuído têm de estar ligadas a uma sub-rede com o acesso privado à Google ativado para aceder às APIs e aos serviços Google através de um ponto final.

Se a VM tiver mais do que uma interface, ligue a interface que está configurada com um encaminhamento predefinido (normalmente, nic0).

O endereço IP de origem dos pacotes enviados a partir da VM tem de corresponder 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 à Google numa sub-rede, siga estes passos.

Consola

  1. Na Google Cloud consola, aceda à página Redes VPC.

    Aceda a redes de VPC

  2. Clique no nome da rede que contém a sub-rede para a qual tem de ativar o acesso privado à Google.

  3. Clique no nome da sub-rede. É apresentada a página Detalhes da sub-rede.

  4. Clique em Edit.

  5. Na secção Acesso privado ao Google, selecione Ativado.

  6. Clique em Guardar.

gcloud

  1. Determine o nome e a região da sub-rede. Para apresentar uma lista das sub-redes de uma rede específica, use o seguinte comando:

    gcloud compute networks subnets list --filter=NETWORK_NAME
    
  2. Execute o seguinte comando para ativar o acesso privado Google:

    gcloud compute networks subnets update SUBNET_NAME \
    --region=REGION \
    --enable-private-ip-google-access
    
  3. Verifique se o acesso privado à Google está ativado executando este comando:

    gcloud compute networks subnets describe SUBNET_NAME \
    --region=REGION \
    --format="get(privateIpGoogleAccess)"
    

Substitua o seguinte:

  • SUBNET_NAME: o nome da sub-rede
  • REGION: a região da sub-rede
  • NETWORK_NAME: o nome da rede VPC que contém a sub-rede

Terraform

Pode usar o recurso Terraform para ativar o acesso privado à Google numa sub-rede.

resource "google_compute_network" "network" {
  project                 = var.project # Replace this with your project ID in quotes
  name                    = "tf-test"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "vpc_subnetwork" {
  project                  = google_compute_network.network.project
  name                     = "test-subnetwork"
  ip_cidr_range            = "10.2.0.0/16"
  region                   = "us-central1"
  network                  = google_compute_network.network.id
  private_ip_google_access = true
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Crie um ponto final

Depois de escolher um endereço IP que cumpre os requisitos, pode criar um ponto final.

Um ponto final liga-se às APIs Google e aos serviços através de uma regra de encaminhamento global. Cada regra de encaminhamento conta para a quota por rede VPC do Private Service Connect.

Não pode atualizar um ponto final para APIs e serviços Google depois de o criar. Se precisar de atualizar um ponto final para APIs e serviços Google, elimine o ponto final e, em seguida, crie um novo.

Consola

  1. Na Google Cloud consola, aceda à página Private Service Connect.

    Aceda ao Private Service Connect

  2. Clique no separador Pontos finais ligados.

  3. Clique em Associar ponto final.

  4. Para Segmentação, selecione o pacote da API de destino que quer usar:

    • Todas as APIs Google
    • VPC-SC
  5. Em Nome do ponto final, introduza um nome para o ponto final.

  6. Selecione uma rede para o ponto final.

  7. Selecione um endereço IP para o ponto final.

    O endereço IP tem de cumprir estes requisitos.

    Se precisar de um novo endereço IP, pode criar um:

    1. Clique em Criar endereço IP.
    2. Introduza um Nome e uma Descrição para o endereço IP.
    3. Introduza o endereço IP que quer usar e clique em Guardar .
  8. Se ainda não tiver configurado uma região do Service Directory para esta rede VPC, selecione a região que quer usar.

    Todos os pontos finais usados para aceder a APIs e serviços Google numa determinada rede VPC usam a mesma região do Service Directory.

  9. Se ainda não estiver configurado um espaço de nomes do Service Directory para esta rede VPC, configure o espaço de nomes que quer usar:

    • Para usar um espaço de nomes atribuído automaticamente, clique no menu pendente Espaço de nomes e selecione o espaço de nomes atribuído automaticamente.

    • Para selecionar um espaço de nomes existente que é usado noutra rede, clique no menu pendente Espaço de nomes e selecione um espaço de nomes na lista. A lista apresenta todos os espaços de nomes no projeto. Tem de selecionar um espaço de nomes que seja usado apenas para pontos finais que sejam usados para aceder às APIs Google.

    • Para criar um novo espaço de nomes, clique no menu pendente Espaço de nomes e clique em Criar espaço de nomes. Introduza o espaço de nomes e clique em Criar.

    Todos os pontos finais que usa para aceder às APIs e aos serviços Google numa determinada rede VPC usam o mesmo espaço de nomes do Service Directory.

  10. Clique em Adicionar ponto final.

gcloud

  1. Reserve um endereço IP interno global para atribuir ao ponto final.

    gcloud compute addresses create ADDRESS_NAME \
      --global \
      --purpose=PRIVATE_SERVICE_CONNECT \
      --addresses=ENDPOINT_IP \
      --network=NETWORK_NAME
    

    Substitua o seguinte:

    • ADDRESS_NAME: o nome a atribuir ao endereço IP reservado.

    • ENDPOINT_IP: o endereço IP a reservar para o ponto final.

      O endereço IP tem de cumprir estes requisitos.

    • NETWORK_NAME: o nome da rede VPC para o ponto final.

  2. Crie uma regra de encaminhamento para ligar o ponto final às APIs e aos serviços 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 o seguinte:

    • ENDPOINT_NAME: o nome a atribuir ao ponto final. O nome tem de ser uma string de 1 a 20 carateres, que contenha apenas letras minúsculas e números. O nome tem de começar com uma letra.

    • NETWORK_NAME: o nome da rede VPC para o ponto final.

    • ADDRESS_NAME: o nome da morada reservada na rede associada.

    • API_BUNDLE: o pacote de APIs a disponibilizar através do ponto final. Consulte a lista de APIs suportadas.

      • Use all-apis para conceder acesso a todas as APIs suportadas.

      • Use o vpc-sc para restringir o acesso às APIs Google que suportam os VPC Service Controls.

    • REGION_NAMESPACE_URI: o URI da região ou do espaço de nomes do Service Directory que quer usar. Este URI tem de fazer referência ao mesmo projeto no qual está a criar o ponto final.

      • Só pode definir uma região com projects/PROJECT_NAME/locations/REGION.

      • Pode definir uma região e um espaço de nomes com projects/PROJECT_NAME/locations/REGION/namespaces/NAMESPACE.

      Se omitir --service-directory-registration completamente ou definir uma região sem um espaço de nomes, ocorre o seguinte:

      • Se uma região ou um espaço de nomes já estiver configurado para esta rede VPC, são usados esses predefinições.

      • Se não for configurada uma região, a região é definida como us-central1. Se não for configurado um espaço de nomes, é atribuído um espaço de nomes gerado pelo sistema.

API

  1. Reserve um endereço IP interno global para atribuir ao ponto final.

    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 o seguinte:

    • PROJECT_ID: o ID do seu projeto.

    • ADDRESS_NAME: o nome a atribuir ao endereço IP reservado.

    • ENDPOINT_IP: o endereço IP a reservar para o ponto final.

      O endereço IP tem de cumprir estes requisitos.

    • NETWORK_URL: a rede VPC para o ponto final. Use o método network.list ou gcloud compute networks list --uri para encontrar os URLs das suas redes.

  2. Crie uma regra de encaminhamento para ligar o ponto final às APIs e aos serviços 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 o seguinte:

    • PROJECT_ID: o ID do seu projeto.

    • ENDPOINT_NAME: o nome a atribuir ao ponto final. O nome tem de ser uma string de 1 a 20 carateres, que contenha apenas letras minúsculas e números. O nome tem de começar com uma letra.

    • NETWORK_URL: a rede VPC para o ponto final. Use o método network.list ou gcloud 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 ou gcloud compute addresses list --uri para encontrar os URLs das suas moradas reservadas.

    • API_BUNDLE: o pacote de APIs a disponibilizar através do ponto final. Consulte a lista de APIs suportadas.

      • Use all-apis para conceder acesso a todas as APIs suportadas.

      • Use o vpc-sc para restringir o acesso às APIs Google que suportam os VPC Service Controls.

    • REGION: a região do diretório de serviços que quer usar. Por exemplo, us-central1. Se omitir REGION e já existir uma região configurada para esta rede VPC, essa região é usada. Se uma região não estiver configurada, a região é definida como us-central1.

    • NAMESPACE: o nome do espaço de nomes do Service Directory que quer usar. Se omitir NAMESPACE e já existir um espaço de nomes configurado para esta rede VPC, esse espaço de nomes é usado. Se não for configurado um espaço de nomes, é atribuído um espaço de nomes gerado pelo sistema.

Terraform

Pode usar os seguintes recursos do Terraform para criar um ponto final:

resource "google_compute_global_address" "default" {
  project      = google_compute_network.network.project
  name         = "global-psconnect-ip"
  address_type = "INTERNAL"
  purpose      = "PRIVATE_SERVICE_CONNECT"
  network      = google_compute_network.network.id
  address      = "10.3.0.5"
}
resource "google_compute_global_forwarding_rule" "default" {
  project               = google_compute_network.network.project
  name                  = "globalrule"
  target                = "all-apis"
  network               = google_compute_network.network.id
  ip_address            = google_compute_global_address.default.id
  load_balancing_scheme = ""
}

Verifique se o ponto final está a funcionar

Crie uma instância de VM na rede VPC onde o Private Service Connect está configurado. Execute o seguinte comando na VM para verificar se o ponto final do Private Service Connect está a funcionar. Os pontos finais não respondem a pedidos de ping (ICMP).

curl -v ENDPOINT_IP/generate_204

Substitua ENDPOINT_IP pelo endereço IP do ponto final.

Se o ponto final estiver a funcionar, vê um código de resposta HTTP 204.

Apresente pontos finais

Pode listar todos os pontos finais configurados.

Consola

  1. Na Google Cloud consola, aceda à página Private Service Connect.

    Aceda ao Private Service Connect

  2. Clique no separador Pontos finais ligados.

    Os pontos finais são apresentados.

gcloud

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

O resultado é semelhante ao seguinte:

NAME  REGION  IP_ADDRESS  IP_PROTOCOL  TARGET
RULE          IP          TCP          all-apis

Receba informações sobre um ponto final

Pode ver todos os detalhes de configuração de um ponto final.

Consola

  1. Na Google Cloud consola, aceda à página Private Service Connect.

    Aceda ao Private Service Connect

  2. Clique no separador Pontos finais ligados.

    Os pontos finais são apresentados.

  3. Clique no ponto final cujos detalhes quer ver.

gcloud

gcloud compute forwarding-rules describe \
    ENDPOINT_NAME --global

Etiquete um ponto final

Pode gerir etiquetas para pontos finais. Consulte os recursos de etiquetagem para mais informações.

Elimine um ponto final

Pode eliminar um ponto final.

Consola

  1. Na Google Cloud consola, aceda à página Private Service Connect.

    Aceda ao Private Service Connect

  2. Clique no separador Pontos finais ligados.

  3. Selecione o ponto final que quer eliminar e clique em Eliminar.

gcloud

    gcloud compute forwarding-rules delete \
        ENDPOINT_NAME --global

Substitua ENDPOINT_NAME pelo nome do ponto final que quer eliminar.

Use um ponto final

Para usar um ponto final, envia pedidos para um nome do anfitrião DNS que é resolvido para o endereço IP do ponto final.

  • Pode usar os nomes DNS criados automaticamente se puder configurar os seus clientes para usar um ponto final personalizado e se p.googleapis.com forem criados registos DNS para as APIs e os serviços que quer usar.p.googleapis.com Para mais informações, consulte o artigo Use nomes DNS.p.googleapis.com

    Por exemplo, se o nome do ponto final for xyz, são criados registos DNS para storage-xyz.p.googleapis.com, compute-xyz.p.googleapis.com e outras APIs usadas com frequência no pacote de APIs.

  • Pode criar registos DNS através dos nomes DNS predefinidos se estiver a usar um cliente que não tenha sido configurado para usar um ponto final personalizado ou se não existir um registo DNS para o serviço que quer usar.p.googleapis.com Para mais informações, consulte o artigo Crie registos DNS através de nomes DNS predefinidos.

    Por exemplo, crie registos de DNS para storage.googleapis.com, compute.googleapis.com ou *.gke.goog.

Use nomes DNS p.googleapis.com

Quando cria um ponto final, o Service Directory cria registos DNS para APIs e serviços usados frequentemente que estão disponíveis através do ponto final. Os registos de DNS são criados apenas para APIs e serviços que têm nomes de DNS predefinidos que terminam com googleapis.com e apenas para um subconjunto dessas APIs e serviços.

Os registos DNS são criados numa p.googleapis.comzona privada. Os registos apontam para o endereço IP do ponto final e usam este formato: SERVICE-ENDPOINT.p.googleapis.com

Por exemplo, se o nome do ponto final for xyz, são criados registos DNS para storage-xyz.p.googleapis.com, compute-xyz.p.googleapis.com e outras APIs suportadas.

Os clientes que podem ser configurados para usar um ponto final personalizado podem usar os nomes DNS para enviar pedidos para um ponto final.p.googleapis.com

Consulte a documentação do seu cliente ou biblioteca cliente para ver informações sobre como configurá-lo para usar pontos finais personalizados. Por exemplo:

  • Python: pode configurar api_endpoint em Client options.

  • Aceda: pode configurar WithEndpoint em ClientOptions.

  • .NET: pode configurar Endpoint na classe de criação do cliente.

  • gcloud: pode configurar api_endpoint_overrides na CLI gcloud.

Crie registos de DNS usando nomes de DNS predefinidos

Tem de criar registos de DNS para direcionar os nomes de DNS predefinidos para APIs e serviços para o seu ponto final nestas circunstâncias:

  • Não é possível configurar o cliente ou a aplicação para usar um p.googleapis.com nome DNS.

  • Precisa de aceder a um serviço suportado, mas não existe um nome de DNS p.googleapis.comcriado automaticamente para esse serviço.

Para criar registos de DNS que apontam para o seu ponto final do Private Service Connect, siga estas instruções:

  1. Crie uma zona de DNS para o domínio que precisa de usar (por exemplo, googleapis.com ou gcr.io). Considere criar uma zona privada do Cloud DNS para este fim.

  2. Nesta zona DNS:

    1. Crie um registo A para o próprio nome do domínio (zona); por exemplo, googleapis.com ou gcr.io. Aponte este registo A para o endereço IP do ponto final. Se estiver a usar o Cloud DNS, consulte o artigo sobre como adicionar um registo.

    2. Crie um registo CNAME para todos os possíveis nomes de anfitriões do domínio adicional usando um asterisco e um ponto seguido do nome do domínio (zona); por exemplo, *.googleapis.com ou *.gcr.io. Aponte este registo CNAME para o registo A na mesma zona. Por exemplo, a seta *.googleapis.com aponta para googleapis.com ou a seta *.gcr.io aponta para gcr.io.

Aceda ao ponto final a partir de anfitriões no local

Se a sua rede no local estiver ligada a uma rede VPC, pode usar o Private Service Connect para aceder às APIs e aos serviços Google a partir de anfitriões no local através do endereço IP interno do ponto final.

  • A sua rede no local tem de estar ligada a uma rede VPC através de túneis do Cloud VPN ou anexos de VLAN para o Cloud Interconnect.

  • O ponto final tem de estar na rede VPC que está ligada à sua rede no local.

  • A rede no local tem de ter rotas adequadas para o ponto final. Configure um anúncio de rota personalizada do Cloud Router para anunciar rotas para o ponto final na sessão BGP que gere rotas para o túnel VPN do Google Cloud ou a associação de VLAN.

    • Se a sua rede no local usar o encaminhamento de vários caminhos de igual custo (ECMP) para distribuir o tráfego para os pontos finais do Private Service Connect, tem de garantir que todos os pacotes para uma única ligação TCP são encaminhados através do mesmo túnel da VPN do Google Cloud ou anexo de VLAN. Se os pacotes de uma ligação TCP estabelecida forem encaminhados através de vários caminhos, pode ocorrer uma reposição de TCP intermitente (RST). Para ajudar a evitar as reposições, configure os routers de pares no local para manter destinos de próximo salto consistentes.
  • Tem de configurar os sistemas no local para que possam fazer consultas às suas zonas DNS privadas.

    Se implementou as zonas DNS privadas através do Cloud DNS, conclua os seguintes passos:

Resolução de problemas

As secções seguintes contêm informações sobre a resolução de problemas com os pontos finais do Private Service Connect usados para aceder às APIs Google.

A criação da zona DNS privada falha

Quando cria um ponto final, é criada uma zona DNS do Service Directory. A criação de zonas pode falhar pelos seguintes motivos:

  • Não ativou a API Cloud DNS no seu projeto.

  • Não tem as autorizações necessárias para criar uma zona DNS do Service Directory.

  • Já existe uma zona DNS com o mesmo nome de zona nesta rede VPC.

  • Já existe uma zona DNS para p.googleapis.com nesta rede VPC.

Podem existir zonas em conflito porque uma eliminação anterior falhou.

Para criar a zona de DNS do diretório de serviços, faça o seguinte:

  1. Confirme se a API Cloud DNS está ativada no seu projeto.

  2. Verifique se tem as autorizações necessárias para criar a zona DNS do Service Directory:

    • dns.managedZones.create
    • servicedirectory.namespaces.associatePrivateZone
  3. Elimine a zona DNS.

  4. Crie uma zona DNS do Service Directory com base no espaço de nomes do Service Directory associado ao seu ponto final.

    Use os seguintes valores quando criar a zona:

    O espaço de nomes do Service Directory tem o seguinte formato: goog-psc-NETWORK_NAME-NETWORK_ID.

A eliminação da zona DNS privada falha

Quando elimina o último ponto final numa rede VPC, a configuração do Service Directory associada, incluindo a zona DNS, é eliminada.

Esta eliminação pode falhar pelos seguintes motivos:

  • Não tem as autorizações necessárias para eliminar a zona DNS.

  • A zona contém entradas DNS definidas pelo utilizador que não foram criadas pelo diretório de serviços.

Para resolver este problema, faça o seguinte:

  1. Verifique se tem a autorização dns.managedZones.delete. Para mais informações, consulte o artigo Controlo de acesso na documentação do Cloud DNS.

  2. Elimine a zona DNS.