Acessar APIs em VMs com endereços IP externos

Uma instância de máquina virtual (VM, na sigla em inglês) com um endereço IP externo atribuído à interface de rede poderá se conectar a serviços e APIs do Google se os requisitos de rede descritos nesta página forem atendidos. A conexão é feita no endereço IP externo da VM, mas o tráfego fica dentro do Google Cloud e não é enviado pela Internet pública.

Requisitos de rede

Você precisa atender aos seguintes requisitos para acessar serviços e APIs do Google de uma VM com um endereço IP externo:

  • Para se conectar aos serviços e às APIs do Google usando o IPv6, você precisa atender a estes dois requisitos:

  • Se você usar os nomes de domínio private.googleapis.com ou restricted.googleapis.com, precisará criar registros DNS para direcionar o tráfego para os endereços IP associados a esses domínios. Para mais informações, consulte Configuração de rede.

  • Sua rede precisa ter rotas apropriadas para os intervalos de IP de destino usados pelas APIs e serviços do Google. Essas rotas precisam usar o próximo salto de gateway de Internet padrão. Se você usar os nomes de domínio private.googleapis.com ou restricted.googleapis.com, precisará apenas de uma rota (por domínio). Caso contrário, você precisará criar várias rotas. Consulte Opções de roteamento para mais detalhes.

  • Os firewalls de saída precisam permitir o tráfego para os intervalos de endereços IP usados pelas APIs e serviços do Google. A regra de firewall de saída implícita atende a esse requisito. Para outras maneiras de atender ao requisito de firewall, consulte Configuração de firewall.

Configuração de rede

Nesta seção, descrevemos os requisitos básicos de rede que você precisa atender para que uma VM na rede VPC acesse serviços e APIs do Google.

Opções de domínio

Escolha o domínio que você quer usar para acessar as APIs e os serviços do Google.

Os endereços IP virtuais (VIPs, na sigla em inglês) private.googleapis.com e restricted.googleapis.com são compatíveis apenas com protocolos HTTP por TCP (HTTP, HTTPS e HTTP/2). Todos os outros protocolos, incluindo MQTT e ICMP, não são compatíveis.

Intervalos de domínios e endereços IP Serviços compatíveis Exemplo de uso

Domínios padrão.

Todos os nomes de domínio para APIs e serviços do Google, exceto private.googleapis.com e restricted.googleapis.com.

Vários intervalos de endereços IP: é possível determinar um conjunto de intervalos de IP que contenha os possíveis endereços usados pelos domínios padrão consultando os endereços IP de domínios padrão.

Permite o acesso da API à maioria das APIs e serviços do Google, sejam ou não compatíveis com o VPC Service Controls. Inclui acesso da API ao Google Maps, Google Ads e Google Cloud. Inclui o Google Workspace e outros aplicativos da Web.

Os domínios padrão são usados quando você não configura registros DNS para private.googleapis.com e restricted.googleapis.com.

private.googleapis.com

199.36.153.8/30

2600:2d00:0002:2000::/64 (visualização)

Permite o acesso da API à maioria das APIs e serviços do Google, sejam ou não compatíveis com o VPC Service Controls. Inclui acesso da API ao Google Maps, Google Ads, Google Cloud e à maioria das outras APIs do Google, incluindo a lista a seguir. Não é compatível com aplicativos da Web do Google Workspace. Não é compatível com sites interativos.

Nomes de domínio que correspondem:

  • accounts.google.com (somente os caminhos necessários para a autenticação do OAuth)
  • appengine.google.com
  • *.appspot.com
  • *.backupdr.cloud.google.com
  • backupdr.cloud.google.com
  • *.backupdr.googleusercontent.com
  • backupdr.googleusercontent.com
  • *.cloudfunctions.net
  • *.cloudproxy.app
  • *.composer.cloud.google.com
  • *.composer.googleusercontent.com
  • *.datafusion.cloud.google.com
  • *.datafusion.googleusercontent.com
  • *.dataproc.cloud.google.com
  • dataproc.cloud.google.com
  • *.dataproc.googleusercontent.com
  • dataproc.googleusercontent.com
  • dl.google.com
  • gcr.io ou *.gcr.io
  • *.googleadapis.com
  • *.googleapis.com
  • *.gstatic.com
  • *.ltsapis.goog
  • *.notebooks.cloud.google.com
  • *.notebooks.googleusercontent.com
  • packages.cloud.google.com
  • pkg.dev ou *.pkg.dev
  • pki.goog ou *.pki.goog
  • *.run.app
  • source.developers.google.com

Use private.googleapis.com para acessar APIs e serviços do Google usando um conjunto de endereços IP somente roteáveis do Google Cloud.

Escolha private.googleapis.com nestas circunstâncias:

  • Você não usa o VPC Service Controls.
  • Você usa o VPC Service Controls, mas também precisa acessar APIs e serviços do Google que não são compatíveis com o VPC Service Controls.1

restricted.googleapis.com

199.36.153.4/30

2600:2d00:0002:1000::/64 (visualização)

Permite o acesso da API a APIs e serviços do Google compatíveis com o VPC Service Controls.

Bloqueia o acesso a APIs e serviços do Google que não são compatíveis com o VPC Service Controls. Não é compatível com aplicativos da Web do Google Workspace ou com APIs do Google Workspace.

Use restricted.googleapis.com para acessar APIs e serviços do Google usando um conjunto de endereços IP somente roteáveis do Google Cloud.

Escolha restricted.googleapis.com quando você precisar de acesso às APIs e serviços do Google compatíveis com o VPC Service Controls.

O domínio restricted.googleapis.com não permite o acesso a APIs e serviços do Google que não oferecem suporte ao VPC Service Controls.1

1 Se você precisar restringir usuários apenas às APIs e aos serviços do Google compatíveis com o VPC Service Controls, use restricted.googleapis.com. Embora o VPC Service Controls seja aplicado a serviços compatíveis e configurados, independentemente do domínio usado, o restricted.googleapis.com fornece mitigação de risco adicional para exfiltração de dados. O uso de restricted.googleapis.com nega acesso a APIs e serviços do Google que não são compatíveis com o VPC Service Controls. Consulte Como configurar a conectividade privada na documentação do VPC Service Controls para mais detalhes.

Suporte a IPv6 para private.googleapis.com e restricted.googleapis.com

Os seguintes intervalos de endereços IPv6 podem ser usados para direcionar o tráfego de clientes IPv6 para APIs e serviços do Google:

  • private.googleapis.com: 2600:2d00:0002:2000::/64
  • restricted.googleapis.com: 2600:2d00:0002:1000::/64

Configure os endereços IPv6 se você quiser usar o domínio private.googleapis.com ou restricted.googleapis.com e tiver clientes que usem endereços IPv6. Os clientes IPv6 que também têm endereços IPv4 configurados podem acessar as APIs e serviços do Google usando os endereços IPv4. Nem todos os serviços aceitam o tráfego de clientes IPv6.

Configuração do DNS

Para conectividade com as APIs e os serviços do Google, é possível enviar pacotes para os endereços IP associados ao VIP private.googleapis.com ou restricted.googleapis.com. Para usar um VIP, configure o DNS para que as VMs na rede VPC resolvam solicitações para *.googleapis.com e outros domínios que precisam ser acessados. Por exemplo, se você usa o Google Kubernetes Engine (GKE), também precisa configurar *.gcr.io e *.pkg.dev.

A seção a seguir descreve como usar zonas DNS para enviar pacotes aos endereços IP associados ao VIP escolhido. Se você quiser configurar entradas DNS apenas para algumas APIs, use as políticas de resposta. Para exemplos de configuração, consulte os casos de uso.

Crie uma zona e registros do DNS para *.googleapis.com:

  1. Crie uma zona do DNS particular para googleapis.com. Considere criar uma zona particular do Cloud DNS para essa finalidade.
  2. Na zona googleapis.com, crie os seguintes registros DNS para private.googleapis.com ou restricted.googleapis.com, dependendo do domínio que você escolheu usar. Não inclua outros endereços IP no registro A ou combine endereços dos domínios private.googleapis.com e restricted.googleapis.com. Isso pode causar falhas intermitentes, porque os serviços oferecidos são diferentes com base no destino do pacote.

    • Para obter private.googleapis.com:

      1. Crie um registro A para private.googleapis.com que aponta para os seguintes endereços IP: 199.36.153.8, 199.36.153.9, 199.36.153.10 e 199.36.153.11.

      2. Para se conectar a APIs usando endereços IPv6, configure também um registro AAAA para private.googleapis.com que aponte para 2600:2d00:0002:2000::.

    • Para obter restricted.googleapis.com:

      1. Crie um registro A para restricted.googleapis.com que aponta para os seguintes endereços IP: 199.36.153.4, 199.36.153.5, 199.36.153.6 e 199.36.153.7.

      2. Para se conectar a APIs usando endereços IPv6, crie também um registro AAAA para restricted.googleapis.com que aponte para 2600:2d00:0002:1000::.

    Se você estiver usando o Cloud DNS, adicione os registros à zona particular googleapis.com.

  3. Na zona googleapis.com, crie um registro CNAME para *.googleapis.com que aponte para o domínio que você configurou: private.googleapis.com ou restricted.googleapis.com.

Algumas APIs e serviços do Google são fornecidos usando nomes de domínio adicionais, incluindo *.gcr.io, *.gstatic.com, *.pkg.dev e pki.goog. Consulte a tabela de intervalos de endereços IP e domínios em Opções de domínio para determinar se os serviços do domínio adicional podem ser acessados usando private.googleapis.com ou restricted.googleapis.com. Em seguida, para cada um dos domínios adicionais:

  1. Crie uma zona de DNS para DOMAIN (por exemplo, gcr.io). Se você estiver usando o Cloud DNS, verifique se essa zona está localizada no mesmo projeto que a zona particular googleapis.com.

  2. Nesta zona de DNS, crie os seguintes registros DNS para private.googleapis.com ou restricted.googleapis.com, dependendo do domínio que você escolheu usar:

    • Para obter private.googleapis.com:

      1. Crie um registro A para DOMAIN que aponta para os seguintes endereços IP: 199.36.153.8, 199.36.153.9, 199.36.153.10 e 199.36.153.11.

      2. Para se conectar a APIs usando endereços IPv6, crie também um registro AAAA para DOMAIN que aponte para 2600:2d00:0002:2000::.

    • Para obter restricted.googleapis.com:

      1. Crie um registro A para restricted.googleapis.com que aponta para os seguintes endereços IP: 199.36.153.4, 199.36.153.5, 199.36.153.6 e 199.36.153.7.

      2. Para se conectar a APIs usando endereços IPv6, crie também um registro AAAA para restricted.googleapis.com que aponte para 2600:2d00:0002:1000::.

  3. Na zona DOMAIN, crie um registro CNAME para *.DOMAIN que aponte para DOMAIN. Por exemplo, crie um registro CNAME para *.gcr.io que aponte para gcr.io.

Opções de roteamento

A rede VPC precisa ter rotas apropriadas com os próximos saltos que são o gateway de Internet padrão. O Google Cloud não é compatível com o tráfego de roteamento para APIs e serviços do Google por meio de outras instâncias de VM ou próximos saltos personalizados. Embora sejam chamados de gateway de Internet padrão, os pacotes enviados das VMs na sua rede VPC para APIs e serviços do Google permanecem na rede do Google.

  • Se você selecionar os domínios padrão, suas instâncias de VM se conectarão a APIs e serviços do Google usando um subconjunto de endereços IP externos do Google. Esses endereços IP são roteados publicamente, mas o caminho de uma VM em uma rede VPC para esses endereços permanece na rede do Google.

  • O Google não divulga rotas na Internet para nenhum dos endereços IP usados pelos domínios private.googleapis.com ou restricted.googleapis.com. Consequentemente, esses domínios só podem ser acessados por VMs em uma rede VPC ou sistemas locais conectados a uma rede VPC.

Se sua rede VPC contém uma rota padrão em que próximo salto seja o gateway de Internet padrão, é possível usar essa rota para acessar os serviços e as APIs do Google sem precisar criar rotas personalizadas. Consulte Roteamento com uma rota padrão para ver detalhes.

Se você tiver substituído uma rota padrão do IPv4 (destino 0.0.0.0/0) por uma rota personalizada em que o próximo salto não seja o gateway de Internet padrão, é possível atender aos requisitos de roteamento dos serviços e APIs do Google usando roteamento personalizado.

Se a rede VPC não tiver uma rota padrão IPv6, a conectividade IPv6 com as APIs e os serviços do Google não estará disponível. Adicione uma rota padrão do IPv6 para permitir a conectividade do IPv6.

Como rotear com uma rota padrão

Cada rede VPC contém uma rota padrão IPv4 (0.0.0.0/0) quando ela é criada. Se você ativar endereços IPv6 externos em uma sub-rede, uma rota padrão IPv6 gerada pelo sistema (::/0) será adicionada a essa rede VPC.

As rotas padrão fornecem um caminho para os endereços IP dos seguintes destinos:

  • Os domínios padrão

  • private.googleapis.com: 199.36.153.8/30 e 2600:2d00:0002:2000::/64.

  • restricted.googleapis.com: 199.36.153.4/30 e 2600:2d00:0002:1000::/64.

Para verificar a configuração de uma rota padrão em uma determinada rede, siga estas instruções.

Console

  1. No Console do Google Cloud, acesse a página Rotas.

    Acessar a página Rotas

  2. Filtre a lista de rotas para mostrar apenas as rotas da rede que você precisa inspecionar.

  3. Procure uma rota com o destino 0.0.0.0/0 para o tráfego IPv4 ou ::/0 para o tráfego IPv6 e em que o próximo salto seja gateway de Internet padrão.

gcloud

Use o seguinte comando gcloud, substituindo NETWORK_NAME pelo nome da rede a ser inspecionada:

gcloud compute routes list \
    --filter="default-internet-gateway NETWORK_NAME"

Se você precisar criar uma rota IPv4 padrão de substituição, consulte Como adicionar uma rota estática.

Se você precisar criar uma rota IPv6 padrão de substituição, consulte Como adicionar uma rota padrão IPv6.

Roteamento personalizado

Como alternativa a uma rota padrão para tráfego IPv4, é possível usar rotas estáticas personalizadas, cada uma com um destino mais específico e cada uma usando o próximo salto de gateway de internet padrão. O número de rotas necessárias e os endereços IP de destino delas dependem do domínio escolhido.

Para verificar a configuração de rotas personalizadas para APIs e serviços do Google em uma determinada rede, siga estas instruções.

Console

  1. No Console do Google Cloud, acesse a página Rotas.

    Acessar a página Rotas

  2. Use o campo de texto Filtrar tabela para filtrar a lista de rotas usando os critérios a seguir, substituindo NETWORK_NAME pelo nome da sua rede VPC.

    • Rede: NETWORK_NAME
    • Tipo do próximo salto: default internet gateway
  3. Observe a coluna Intervalo de IP de destino de cada rota. Se você escolheu os domínios padrão, verifique se há várias rotas estáticas personalizadas, uma para cada intervalo de endereços IP usado pelo domínio padrão. Se você escolheu private.googleapis.com ou restricted.googleapis.com, procure o intervalo de IP desse domínio.

gcloud

Use o seguinte comando gcloud, substituindo NETWORK_NAME pelo nome da rede a ser inspecionada:

gcloud compute routes list \
    --filter="default-internet-gateway NETWORK_NAME"

As rotas são listadas no formato de tabela, a menos que você personalize o comando com a sinalização --format. Procure na coluna DEST_RANGE o destino de cada rota. Se você escolheu os domínios padrão, verifique se há várias rotas estáticas personalizadas, uma para cada intervalo de endereços IP usado pelo domínio padrão. Se você escolheu private.googleapis.com ou restricted.googleapis.com, procure o intervalo de IP desse domínio.

Se precisar criar rotas, consulte Como adicionar uma rota estática.

Configuração do firewall

A configuração do firewall da rede VPC precisa permitir o acesso de VMs aos endereços IP usados pelas APIs e serviços do Google. A regra allow egress implícita atende a esse requisito.

Em algumas configurações de firewall, é preciso criar regras de permissão de saída específicas. Por exemplo, suponha que você tenha criado uma regra de negação de saída que bloqueia o tráfego para todos os destinos (0.0.0.0 para IPv4 ou ::/0 para IPv6). Nesse caso, é preciso criar uma regra de firewall de permissão de saída com prioridade maior do que a regra de negação de saída para cada intervalo de endereços IP usado pelo domínio escolhido para serviços e APIs do Google.

Para criar regras de firewall, consulte Como criar regras de firewall. É possível limitar as VMs às quais as regras de firewall se aplicam ao definir o destino de cada regra de permissão de saída.

Endereços IP para domínios padrão

Nesta seção, descrevemos como criar uma lista de intervalos de IPs de domínio padrão usados por APIs e serviços do Google, como *.googleapis.com e *.gcr.io. Eles são alocados de forma dinâmica e alterados com frequência. Portanto, não é possível definir intervalos de IP específicos para serviços ou APIs individuais. Para manter uma lista precisa, configure a automação para executar o script todos os dias. Para alternativas para manter uma lista de intervalos de endereços IP, use o private.googleapis.com VIP ou o Private Service Connect.

  • O Google publica a lista completa de intervalos de IP que disponibiliza para usuários na Internet em goog.json.

  • O Google também publica uma lista de intervalos de endereços IP externos globais e regionais disponíveis para os recursos do Google Cloud dos clientes em cloud.json.

Os endereços IP usados pelos domínios padrão para APIs e serviços do Google se encaixam na lista de intervalos calculados removendo todos os intervalos em cloud.json daqueles em goog.json. Essas listas são atualizadas com frequência.

É possível usar o script Python a seguir para criar uma lista de intervalos de endereços IP que incluem aqueles usados pelos domínios padrão para APIs e serviços do Google.

Para mais informações sobre como executar esse script, consulte Como executar.

from __future__ import print_function

import json

try:
    from urllib import urlopen
except ImportError:
    from urllib.request import urlopen
    from urllib.error import HTTPError

import netaddr

IPRANGE_URLS = {
    "goog": "https://www.gstatic.com/ipranges/goog.json",
    "cloud": "https://www.gstatic.com/ipranges/cloud.json",
}

def read_url(url):
    try:
        return json.loads(urlopen(url).read())
    except (IOError, HTTPError):
        print("ERROR: Invalid HTTP response from %s" % url)
    except json.decoder.JSONDecodeError:
        print("ERROR: Could not parse HTTP response from %s" % url)

def get_data(link):
    data = read_url(link)
    if data:
        print("{} published: {}".format(link, data.get("creationTime")))
        cidrs = netaddr.IPSet()
        for e in data["prefixes"]:
            if "ipv4Prefix" in e:
                cidrs.add(e.get("ipv4Prefix"))
            if "ipv6Prefix" in e:
                cidrs.add(e.get("ipv6Prefix"))
        return cidrs

def main():
    cidrs = {group: get_data(link) for group, link in IPRANGE_URLS.items()}
    if len(cidrs) != 2:
        raise ValueError("ERROR: Could process data from Google")
    print("IP ranges for Google APIs and services default domains:")
    for ip in (cidrs["goog"] - cidrs["cloud"]).iter_cidrs():
        print(ip)

if __name__ == "__main__":
    main()