Como configurar a conectividade particular com as APIs e os serviços do Google

É possível usar o VPC Service Controls para controlar o acesso a APIs e serviços do Google a partir de hosts que usam endereços IP privados. Esses hosts podem ser instâncias de VM em uma rede VPC ou clientes em uma rede local.

Para restringir o Acesso privado do Google dentro de um perímetro de serviço a apenas APIs e serviços do Google compatíveis com o VPC Service Controls, os hosts precisam enviar suas solicitações para o nome de domínio restricted.googleapis.com em vez de *.googleapis.com. O domínio restricted.googleapis.com é resolvido para um intervalo VIP (endereço IP virtual) 199.36.153.4/30. Esse intervalo de endereços IP não é anunciado para a Internet.

As seções a seguir descrevem como configurar a conectividade privada para hosts em uma rede VPC ou local. Para obter uma visão geral e exemplos de diagramas de topologia, consulte Acesso privado do Google com VPC Service Controls.

Antes de começar

  • É preciso ativar as APIs que você quer acessar na página de APIs e serviços do Console do Google Cloud.
  • Proprietários de projetos, editores e membros do IAM com o papel Administrador de rede podem criar ou atualizar sub-redes e atribuir endereços IP. Para saber mais informações sobre papéis, leia a documentação sobre os papéis do IAM.
  • Tanto o Acesso privado do Google quanto o Acesso privado do Google para hosts locais exigem uma rede VPC. Redes VPC de modo automático e personalizado são compatíveis. Redes legadas não são compatíveis.
  • Para instâncias de VM em uma rede VPC, elas precisam ter apenas um endereço IP privado (sem endereço IP público) e estar na sub-rede com o Acesso privado do Google ativado.
  • Para hosts locais, você precisa ter um túnel do Cloud VPN existente ou uma conexão do Cloud Interconnect com sua rede VPC.

Visão geral do procedimento

Para configurar a conectividade privada, conclua as seguintes tarefas:

  • Configure rotas para o destino 199.36.153.4/30. Para saber mais informações, consulte Como configurar rotas.
  • Configure regras de firewall para permitir o tráfego adequado para o intervalo de endereços IP das APIs restritas do Google. Para mais informações, consulte Como configurar regras de firewall.
  • Configure o DNS para que o tráfego para as APIs do Google seja resolvido para o intervalo de endereços IP das APIs restritas do Google. Para saber mais informações, consulte Como configurar o DNS.

Configurar uma rota para restricted.googleapis.com

Para acesso privado do Google e Acesso privado do Google para hosts locais, sua rede VPC precisa incluir uma rota para um destino 199.36.153.4/30 que tenha o gateway de Internet padrão como próximo salto. Embora o próximo salto seja um gateway padrão da Internet, o tráfego enviado para 199.36.153.4/30 permanece dentro da rede do Google. Sua rede VPC já pode ter uma rota padrão em que próximo salto seja o gateway de Internet padrão. Caso contrário, crie uma rota estática personalizada em que o destino seja 199.36.153.4/30 e em que o próximo salto seja o gateway de Internet padrão.

Além da rota estática personalizada, o Acesso privado do Google a hosts locais requer uma divulgação de rota personalizada para que os hosts na rede local possam saber mais sobre o VIP restrito. É possível criar uma rota dinâmica personalizada usando o Cloud Router para divulgar o VIP restrito.

Para obter mais informações sobre como trabalhar com rotas VPC, consulte Como usar rotas na documentação da VPC.

Como configurar uma rota estática personalizada em uma rede VPC

Adicione uma rota estática personalizada para ativar o acesso aos serviços gerenciados pelo Google compatíveis com o VPC Service Controls.

  • Adicione uma rota personalizada que permita o acesso apenas aos serviços gerenciados pelo Google protegidos pelo VPC Service Controls.

    gcloud compute routes create ROUTE_NAME \
      --network=NETWORK_NAME \
      --destination-range=199.36.153.4/30 \
      --next-hop-gateway=default-internet-gateway
    

    Em que:

    • ROUTE_NAME é um nome para a rota personalizada.

    • NETWORK_NAME é o nome da sua rede VPC.

Divulgação da rota restrita aos hosts em uma rede local

Se você usa o Acesso privado do Google para hosts locais, configure as rotas para que o tráfego da API do Google seja encaminhado por meio da sua conexão do Cloud VPN ou do Cloud Interconnect. Para anunciar o VIP restrito (199.36.153.4/30) na sua rede local, use a Divulgação de rota personalizada do Cloud Router. Esse intervalo de endereços IP só pode ser acessado por hosts locais que podem acessar sua rede VPC por meio de endereços IP particulares.

É possível adicionar essa divulgação de rota personalizada a um Cloud Router (para todas as sessões do BGP no roteador) ou selecionar uma sessão do BGP (para um único túnel do Cloud VPN ou anexo da VLAN).

Se você quiser criar uma divulgação de rota personalizada para o intervalo restrito de todas as sessões do BGP em um Cloud Router existente, siga estas etapas:

Console


  1. Acesse a página do Cloud Router no Console do Google Cloud.
    Lista do Cloud Router
  2. Selecione o roteador do Cloud a ser atualizado.
  3. Na página de detalhes do Cloud Router, selecione Editar.
  4. Expanda a seção Rotas divulgadas.
  5. Em Rotas, selecione Criar rotas personalizadas.
  6. Selecione Anunciar todas as sub-redes visíveis para o Cloud Router para continuar divulgando as sub-redes disponíveis para o Cloud Router. A ativação dessa opção imita o comportamento padrão do Cloud Router.
  7. Selecione Adicionar rota personalizada para adicionar uma rota anunciada.
  8. Configure a divulgação de rota.
    • Origem: selecione Intervalo de IP personalizado para especificar um intervalo de IP personalizado.
    • Intervalo de endereços IP: especifique 199.36.153.4/30.
    • Descrição: adicione uma descrição de Restricted Google APIs IPs.
  9. Quando terminar de adicionar as rotas, selecione Salvar.

gcloud


Execute o comando update usando a sinalização --set-advertisement-ranges ou --add-advertisement-ranges para especificar os intervalos de IP personalizados:

  • Para definir intervalos de IP personalizados, use a sinalização --set-advertisement-ranges. Todas as divulgações personalizadas existentes serão substituídas. O exemplo a seguir atualiza o Cloud Router my-router para divulgar todas as sub-redes e o intervalo de IPs 199.36.153.4/30 das APIs restritas do Google:

    gcloud compute routers update my-router \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges 199.36.153.4/30
    
  • Para anexar intervalos de IP personalizados a uma divulgação atual, use a sinalização --add-advertisement-ranges. Ela exige que o modo de divulgação do Cloud Router já esteja configurado como custom. O exemplo a seguir acrescenta o IP personalizado Restricted Google APIs IPs às divulgações do Cloud Router:

    gcloud compute routers update my-router \
        --add-advertisement-ranges 199.36.153.4/30
    

Se você quiser criar uma divulgação de rota personalizada para o intervalo restrito em uma sessão do BGP específica de um Cloud Router existente, siga estas etapas:

Console


  1. Acesse a página do Cloud Router no Console do Google Cloud.
    Lista do Cloud Router
  2. Selecione o roteador do Cloud Router que contém a sessão do BGP a ser atualizada.
  3. Na página de detalhes do Cloud Router, selecione a sessão do BGP a ser atualizada.
  4. Na página de detalhes da sessão do BGP, selecione Editar.
  5. Em Rotas, selecione Criar rotas personalizadas.
  6. Selecione Anunciar todas as sub-redes visíveis para o Cloud Router para continuar divulgando as sub-redes disponíveis para o Cloud Router. A ativação dessa opção imita o comportamento padrão do Cloud Router.
  7. Selecione Adicionar rota personalizada para adicionar uma rota anunciada.
  8. Configure a divulgação de rota.
    • Origem: selecione Intervalo de IP personalizado para especificar um intervalo de IP personalizado.
    • Intervalo de endereços IP: especifique 199.36.153.4/30.
    • Descrição: adicione uma descrição de Restricted Google APIs IPs.
  9. Quando terminar de adicionar as rotas, selecione Salvar.

gcloud


Execute o comando update-bgp-peer, usando a sinalização --set-advertisement-ranges ou --add-advertisement-ranges para especificar os intervalos de IP personalizados.

  • Para definir intervalos de IP personalizados, use a sinalização --set-advertisement-ranges. Todas as divulgações personalizadas existentes serão substituídas. O exemplo abaixo atualiza a sessão my-bgp-session do BGP no my-router do Cloud Router para divulgar todas as sub-redes e o intervalo de IP personalizado 199.36.153.4/30:

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --advertisement-mode CUSTOM \
        --set-advertisement-groups ALL_SUBNETS \
        --set-advertisement-ranges 199.36.153.4/30
    
  • Para anexar intervalos de IP personalizados aos atuais, use a sinalização --add-advertisement-ranges. Ela exige que o modo de divulgação do Cloud Router já esteja configurado como custom. O exemplo a seguir acrescenta os IPs 199.36.153.4/30 das APIs restritas do Google às divulgações do Cloud Router:

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --add-advertisement-ranges 199.36.153.4/30
    

    Para saber mais informações, consulte Divulgações de rota personalizadas.

Configurar regras de firewall

Para o Acesso privado do Google, as instâncias de VM usam endereços IP internos e não exigem endereços IP externos para acessar recursos protegidos da API do Google. No entanto, é possível que as instâncias de VM tenham endereços IP externos ou atendam aos requisitos de acesso à Internet. Além das rotas personalizadas, é possível restringir o tráfego de saída de instâncias de VM na sua rede VPC criando regras de firewall para negar o tráfego de saída.

Por padrão, a regra implícita permitir firewall de saída permite que instâncias de VM enviem tráfego para qualquer destino se uma rota aplicável existir. É possível criar uma regra de negação de saída para bloquear todo o tráfego de saída e criar regras de permissão de saída de prioridade mais alta para permitir tráfego para destinos selecionados em sua rede VPC e para o intervalo de endereço IP 199.36.153.4/30 (restricted.googleapis.com). Toda a comunicação com restricted.googleapis.com é feita na porta TCP 443.

Para mais informações sobre como trabalhar com regras de firewall da VPC, consulte Como usar regras de firewall na documentação da VPC.

Regras de firewall em redes locais

Você precisa configurar seu firewall local para permitir que o tráfego dos seus hosts locais alcance 199.36.153.4/30.

Como configurar DNS

Para usar os endereços IP das APIs restritas do Google, configure seu servidor DNS para resolver *.googleapis.com como um CNAME para restricted.googleapis.com e configure um registro A para restricted.googleapis.com. Para uso geral do VPC Service Controls, recomendamos o uso de zonas particulares gerenciadas do Cloud DNS para suas redes VPC.

Para acesso local, é possível configurar uma política de encaminhamento de entrada do Cloud DNS para permitir que servidores de nomes locais consultem uma zona particular gerenciada do Cloud DNS ou um servidor de nomes local, como um que use BIND:

  • Com as zonas DNS privadas do Cloud DNS, é possível hospedar uma zona DNS acessível a partir de redes VPC autorizadas e, se você configurar o encaminhamento, a partir de determinados servidores de nomes locais. É possível criar uma zona particular para googleapis.com com um registro A para restricted.googleapis.com e registros CNAME apropriados para cada nome *.googleapis.com. As zonas particulares do Cloud DNS não são compatíveis com substituições parciais. Isso significa que só é possível optar por redirecionar todas as solicitações para *.googleapis.com para restricted.googleapis.com. Como resultado, não será possível usar APIs e serviços do Google que não sejam compatíveis com o VIP restricted.googleapis.com. Para mais informações, consulte Como gerenciar zonas.
  • O BIND personalizado não é compatível com o Dataflow. Para personalizar a resolução de DNS ao usar o Dataflow com o VPC Service Controls, use as zonas particulares do Cloud DNS em vez de usar servidores BIND personalizados. Para usar sua própria resolução de DNS local, use um método de encaminhamento de DNS do Google Cloud.

Como configurar o DNS com o Cloud DNS

Use o Cloud DNS para ativar a resolução DNS para instâncias de VM na sua rede VPC, nos hosts em uma rede local ou em ambos. Se você estiver usando a VPC compartilhada, consulte Zonas particulares e VPC compartilhada na documentação do Cloud DNS. Além disso, se você estiver usando a VPC compartilhada, verifique se o projeto host da rede VPC compartilhada está incluído no mesmo perímetro de serviço dos projetos que se conectam à rede.

  1. Crie uma zona privada gerenciada para sua rede VPC.

    gcloud beta dns managed-zones create ZONE_NAME \
     --visibility=private \
     --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
     --description=DESCRIPTION \
     --dns-name=googleapis.com
    
    • ZONE_NAME é um nome para a zona que você está criando. Por exemplo, vpc. Esse nome será usado em cada uma das etapas a seguir.

    • PROJECT_ID é o código do projeto que hospeda sua rede VPC.

    • NETWORK_NAME é o nome da sua rede VPC.

    • DESCRIPTION é uma descrição opcional, legível por humanos, da zona gerenciada.

  2. Inicie uma transação.

    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    • ZONE_NAME é o nome da zona que você criou na primeira etapa.
  3. Adicione registros de DNS.

    gcloud dns record-sets transaction add --name=*.googleapis.com. \
        --type=CNAME restricted.googleapis.com. \
        --zone=ZONE_NAME \
        --ttl=300
    
    • ZONE_NAME é o nome da zona que você criou na primeira etapa.
    gcloud dns record-sets transaction add --name=restricted.googleapis.com. \
        --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
        --zone=ZONE_NAME \
        --ttl=300
    
    • ZONE_NAME é o nome da zona que você criou na primeira etapa.
  4. Execute a transação.

    gcloud dns record-sets transaction execute --zone=ZONE_NAME
    
    • ZONE_NAME é o nome da zona que você criou na primeira etapa.
  5. Opcional. Para permitir que os hosts locais acessem o VIP restrito, conclua as seguintes etapas:

    1. Crie uma política de DNS e ative o encaminhamento de DNS de entrada para disponibilizar externamente os serviços de resolução de nomes da rede VPC para sistemas em redes locais:

      gcloud beta dns policies create POLICY_NAME \
       --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \
       --enable-inbound-forwarding \
       --description=DESCRIPTION
      
      • POLICY_NAME é o nome da política que você está criando. Por exemplo, apipolicy.

      • PROJECT_ID é o código do projeto que hospeda sua rede VPC.

      • NETWORK_NAME é o nome da sua rede VPC.

      • DESCRIPTION é uma descrição opcional, legível por humanos, da zona gerenciada.

    2. Na sua rede local, ajuste seu DNS local para o endereço IP do encaminhador do Cloud DNS. Para encontrar o endereço IP do encaminhador, use o comando compute addresses list:

      gcloud compute addresses list --filter='name ~ ^dns-forwarding.*' \
       --format='csv[no-heading](address, subnetwork)'
      

Como configurar o DNS com o BIND

Se você usa o BIND para resolução de DNS, é possível configurá-lo para resolver solicitações de API do Google para as APIs restritas do Google. Use o exemplo de configuração BIND a seguir, que usa as zonas de política de resposta (RPZ, na sigla em inglês) para atingir esse comportamento:

  1. Adicione as linhas abaixo a /etc/bind/named.conf:

    include "/etc/bind/named.conf.options";
    include "/etc/bind/named.conf.local";
    
  2. Adicione as linhas abaixo a /etc/bind/named.conf.options:

    options {
      directory "/var/cache/bind";
    
      dnssec-validation no;
    
      auth-nxdomain no;    # conform to RFC 1035
      listen-on-v6 { any; };
      listen-on { any; };
      response-policy { zone "googleapis.zone"; };
      allow-query { any;};
    };
    
  3. Adicione as linhas abaixo a /etc/bind/named.conf.local:

    include "/etc/bind/named.conf.default-zones";

    zone "googleapis.zone" { type master; file "/etc/bind/db.googleapis.zone"; allow-query {none;}; };

  4. Adicione as linhas abaixo a /etc/bind/db.googleapis.zone:

    $TTL 1H
    @                       SOA LOCALHOST. noreply.localhost(1 1h 15m 30d 2h)
                            NS  LOCALHOST.

    *.googleapis.com CNAME restricted.googleapis.com. restricted.googleapis.com CNAME rpz-passthru.