Configurar o acesso VPC sem servidor

O acesso VPC sem servidor permite que você se conecte a partir de um ambiente sem servidor no Google Cloud (Cloud Run, totalmente gerenciado, do Cloud Functions ou do ambiente padrão do App Engine), diretamente na sua rede VPC. Essa conexão possibilita que o ambiente sem servidor acesse instâncias de VM do Compute Engine, instâncias do Memorystore e qualquer outro recurso com um endereço IP interno. Por exemplo, ela pode ser útil nos seguintes casos:

  • O Memorystore é usado para armazenar dados de um serviço sem servidor.
  • Suas cargas de trabalho sem servidor usam softwares de terceiros que você executa em uma VM do Compute Engine.
  • Você executa um serviço de back-end em um grupo de instâncias gerenciadas no Compute Engine e precisa do ambiente sem servidor para se comunicar com esse back-end sem exposição na Internet pública.
  • Seu ambiente sem servidor precisa acessar dados do banco de dados local por meio do Cloud VPN.

A conexão com uma rede VPC permite que o ambiente sem servidor envie solicitações a nomes de DNS internos e endereços IP internos, conforme definido pela RFC 1918 e RFC 6598. Esses endereços internos só podem ser acessados pelos serviços do Google Cloud. O uso de endereços internos evita a exposição de recursos na Internet pública e melhora a latência de comunicação entre os serviços.

O acesso VPC sem servidor só permite que as solicitações sejam iniciadas pelo ambiente sem servidor. As solicitações iniciadas por uma VM precisam usar o endereço externo do serviço sem servidor. Consulte Acesso privado do Google para mais informações.

O acesso VPC sem servidor é compatível com VPC compartilhada e comunicação com as redes conectadas via Cloud Interconnect, Cloud VPN e Peering de rede VPC. O acesso VPC sem servidor não é compatível com redes legadas.

Sobre conectores de acesso VPC sem servidor

O acesso VPC sem servidor é baseado em um recurso chamado conector. Um conector processa o tráfego entre o ambiente sem servidor e a rede VPC. Ao criar um conector no seu projeto do Google Cloud, é preciso anexá-lo a uma rede VPC e região específicas. Em seguida, configure os serviços sem servidor para usar o conector em tráfego de rede de saída.

Ao criar um conector, você pode usar sua própria sub-rede CIDR /28 ou um intervalo de IP personalizado. O tráfego enviado pelo conector para sua rede VPC terá origem na sub-rede /28 ou em um endereço no intervalo de IP personalizado. Ao usar um intervalo de IP personalizado, ele precisa ser um intervalo CIDR /28 que ainda não esteja reservado na rede VPC.

Se a sub-rede não for compartilhada, uma regra de firewall implícita com prioridade 1.000 será criada na rede VPC para permitir a entrada da sub-rede do conector ou do intervalo de IP personalizado em todos os destinos na rede.

O acesso VPC sem servidor provisiona automaticamente a capacidade de um conector em incrementos de 100 Mbps, dependendo da quantidade de tráfego enviada por ele. A capacidade provisionada automaticamente pode escalonar apenas verticalmente. Um conector sempre tem pelo menos 200 Mbps provisionados e pode escalonar até 1.000 Mbps. É possível configurar os limites de escalonamento de capacidade ao criar um conector. A capacidade real por meio de um conector pode exceder a capacidade provisionada, especialmente para bursts de tráfego curtos.

Os conectores de acesso VPC sem servidor estão sujeitos a uma cobrança mensal com base no uso. Consulte a página "Preço" para mais detalhes.

Exemplo de Acesso VPC sem servidor (clique para ampliar)
Exemplo de acesso VPC sem servidor (clique para ampliar)

Observações:

  • Um conector precisa estar localizado no mesmo projeto que o serviço sem servidor (como serviços do Cloud Run, aplicativos do App Engine ou Cloud Functions) que se conecta a ele.
  • Um conector precisa estar localizado na mesma região que o serviço sem servidor que se conecta a ele. Consulte a página Regiões compatíveis para ver uma lista com as regiões em que é possível criar um conector.
  • O tráfego para endereços IP internos e nomes DNS internos é roteado por meio do conector. Por padrão, o tráfego para endereços IP externos é roteado pela Internet.
  • Se você usa a VPC compartilhada:

  • É possível usar o mesmo conector com vários serviços sem servidor.

  • Para recursos, como instâncias de VM do Google Cloud ou clusters do GKE, que permitem acesso entre regiões, um conector pode estar em uma região diferente do recurso para a qual está enviando tráfego. Você receberá cobranças pela saída do conector. Consulte a seção Preços.

Como criar um conector

Para criar um conector, use o Console do Cloud ou a ferramenta de linha de comando gcloud:

Console

  1. Se você estiver usando a VPC compartilhada, verifique se configurou o projeto host.

  2. Certifique-se de que a API de acesso VPC sem servidor esteja ativada para seu projeto:

    Ativar API

  3. Vá para a página de visão geral do acesso VPC sem servidor.

    Página do console sobre o acesso VPC sem servidor

  4. Clique em Criar conector.

  5. No campo Nome, insira um nome para o conector.

  6. No campo Região, selecione uma região para o conector. Ele precisa corresponder à região do serviço sem servidor. Consulte Regiões compatíveis.

  7. No campo Rede, selecione uma rede VPC para o conector.

  8. Clique no menu suspenso Sub-rede:

    • Se você estiver usando sua própria sub-rede (necessária para a VPC compartilhada), selecione a sub-rede /28 que você quer usar para o conector.
    • Se você não estiver usando a VPC compartilhada e preferir que o conector crie uma sub-rede em vez de criar uma explicitamente, selecione Intervalo de IP personalizado no menu suspenso. Em seguida, no campo Intervalo de IP, insira o primeiro endereço em um intervalo de IP CIDR /28 interno não reservado. Ele não pode sobrepor nenhuma reserva de endereço IP atual na rede VPC. Por exemplo, 10.8.0.0 (/28) funcionará na maioria dos novos projetos.

  9. (Opcional) Para ter controle adicional sobre a taxa de transferência do conector, edite os campos Capacidade mínima e Capacidade máxima.

  10. Clique em Criar.

  11. Uma marca de seleção verde aparecerá ao lado do nome do conector quando ele estiver pronto para uso.

gcloud

  1. Se você estiver usando a VPC compartilhada, verifique se configurou o projeto host.

  2. Atualize os componentes gcloud para a versão mais recente:

    gcloud components update
    
  3. Certifique-se de que a API de acesso VPC sem servidor esteja ativada para seu projeto:

    gcloud services enable vpcaccess.googleapis.com
    
  4. Se você estiver usando sua própria sub-rede (necessária para a VPC compartilhada), crie um conector com o comando:

    gcloud beta compute networks vpc-access connectors create [CONNECTOR_NAME] \
    --region [REGION] \
    --subnet [SUBNET] \
    # If you are not using Shared VPC, omit the following line.
    --subnet-project [HOST-PROJECT-ID]
    

    Em que:

    • [CONNECTOR_NAME] é o nome do conector;
    • [REGION] é uma região para seu conector. Ele precisa corresponder à região do serviço sem servidor. Consulte Regiões compatíveis.
    • [SUBNET] é a sub-rede "/28" própria dedicada que não é usada por nenhum outro recurso. O valor a ser fornecido é o nome da sub-rede.
    • [HOST-PROJECT-ID] é o ID do projeto host. Forneça somente se você estiver usando a VPC compartilhada.

    Para mais detalhes e argumentos opcionais, como controles de capacidade, consulte a referência do gcloud.

  5. Se você não estiver usando a VPC compartilhada e quiser fornecer um intervalo de IP personalizado em vez de usar uma sub-rede, crie um conector com o comando:

    gcloud compute networks vpc-access connectors create [CONNECTOR_NAME] \
    --network [VPC_NETWORK] \
    --region [REGION] \
    --range [IP_RANGE]
    

    Em que:

    • [CONNECTOR_NAME] é o nome do conector;
    • [VPC_NETWORK] é a rede VPC a que seu conector será anexado;
    • [REGION] é uma região para seu conector. Ele precisa corresponder à região do serviço sem servidor. Consulte Regiões compatíveis.
    • [IP_RANGE] é uma rede de IP interno não reservada, e é necessário ter "/28" de espaço não alocado. O valor fornecido é a rede na notação CIDR (10.8.0.0/28). Esse intervalo de IP não pode se sobrepor a nenhuma reserva de endereço IP atual na rede VPC. Por exemplo, 10.8.0.0/28 funciona na maioria dos projetos novos.

    Para mais detalhes e argumentos opcionais, como controles de capacidade, consulte a referência do gcloud.

  6. Verifique se o conector está no estado READY antes de usá-lo:

    gcloud compute networks vpc-access connectors describe [CONNECTOR_NAME] --region [REGION]
    

    A saída precisa conter a linha state: READY.

Como configurar o projeto host usando a VPC compartilhada

Se você estiver criando um conector para a VPC compartilhada, precisará configurar o projeto host da seguinte maneira:

  • Adicione regras de firewall para permitir que os intervalos de IP obrigatórios acessem o conector.
  • Conceda a cada projeto de serviço o papel de usuário de rede do Compute no projeto do host.
  • Crie uma sub-rede no projeto host para ser usada ao criar um conector da VPC compartilhada.

Como adicionar regras de firewall para permitir intervalos de IP

Essas etapas precisam ser executadas por um usuário com o papel de administrador de rede no projeto host (administrador da VPC compartilhada).

É necessário criar regras de firewall para permitir que as solicitações dos seguintes intervalos de IP alcancem o conector e sejam alcançadas por ele:

  • Intervalos NAT
    • 107.178.230.64/26
    • 35.199.224.0/19
  • Intervalos de verificação de integridade
    • 130.211.0.0/22
    • 35.191.0.0/16
    • 108.170.220.0/23

Esses intervalos são usados pela infraestrutura do Google que serve como base para o Cloud Run, o Cloud Functions e o ambiente padrão do App Engine. Todas as solicitações desses IPs têm origem na infraestrutura do Google, que garante que todo serviço/função/aplicativo do Cloud Run, Cloud Functions e App Engine só se comunique com o conector de VPC ao qual estiver conectado.

Para uma configuração simples, aplique as regras para permitir que os serviços sem servidor em qualquer projeto de serviço conectado à rede VPC compartilhada enviem solicitações para qualquer recurso da rede.

Para aplicar essas regras, faça o seguinte:

  1. Execute os três comandos a seguir para definir regras que permitem que as solicitações do ambiente sem servidor alcancem todos os conectores de VPC na rede:

    gcloud compute firewall-rules create serverless-to-vpc-connector \
    --allow tcp:667,udp:665-666,icmp \
    --source-ranges 107.178.230.64/26,35.199.224.0/19 \
    --direction=INGRESS \
    --target-tags vpc-connector \
    --network=VPC-NETWORK
    gcloud compute firewall-rules create vpc-connector-to-serverless \
    --allow tcp:667,udp:665-666,icmp \
    --destination-ranges 107.178.230.64/26,35.199.224.0/19 \
    --direction=EGRESS \
    --target-tags vpc-connector \
    --network=VPC-NETWORK
    gcloud compute firewall-rules create vpc-connector-health-checks \
    --allow tcp:667 \
    --source-ranges 130.211.0.0/22,35.191.0.0/16,108.170.220.0/23 \
    --direction=INGRESS \
    --target-tags vpc-connector \
    --network=VPC-NETWORK

    Em que VPC_NETWORK é a rede VPC a que seu conector será anexado.

  2. Execute o comando abaixo para permitir solicitações de qualquer conector de VPC para qualquer outro recurso na rede:

    gcloud compute firewall-rules create \
    vpc-connector-egress \
    --allow tcp,udp,icmp \
    --direction=INGRESS \
    --source-tags vpc-connector \
    --network=VPC-NETWORK

    Esta regra concede ao conector da VPC acesso a todos os recursos da rede. Para permitir que os conectores da VPC acessem apenas um conjunto mais restrito de recursos, especifique um destino para essas regras de firewall.

Como criar regras de firewall com escopo mais restrito

Seguir o procedimento descrito em Como adicionar regras de firewall para permitir intervalos de IP resulta em regras de firewall que se aplicam a todos os conectores, tanto os atuais quanto os criados no futuro. Se você não quiser fazer isso, mas quiser criar regras somente para conectores específicos, poderá definir o escopo das regras para que elas se apliquem apenas a esses conectores.

Para limitar o escopo das regras a conectores específicos, use um dos mecanismos a seguir.

  • Tags de rede. Cada conector tem duas tags de rede: vpc-connector e vpc-connector-<region>-<connector-name>. Use o último formato para limitar o escopo das suas regras de firewall a um conector específico.
  • Intervalos de IP. Use esse método apenas para regras de saída, pois ele não funciona para entrada. É possível usar o intervalo de IP da sub-rede do conector para limitar o escopo das regras de firewall a um único conector de VPC.

Como conceder permissões a contas de serviço nos projetos de serviço

Em cada projeto de serviço que usará conectores de VPC, o administrador de VPC compartilhada precisa conceder o papel de usuário de rede do Compute (compute.networkUser) no projeto host ao projeto de serviço cloudservices e às contas de serviço vpcaccess.

Para conceder o papel:

  1. Use os comandos a seguir:

    gcloud projects add-iam-policy-binding HOST-PROJECT-ID \
    --role "roles/compute.networkUser" \
    --member "serviceAccount:service-SERVICE-PROJECT-NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding HOST-PROJECT-ID \
    --role "roles/compute.networkUser" \
    --member "serviceAccount:SERVICE-PROJECT-NUMBER@cloudservices.gserviceaccount.com"
  2. Se a conta de serviço @gcp-sa-vpcaccess não existir, ative a API de acesso VPC sem servidor no projeto de serviço e tente novamente:

    gcloud services enable vpcaccess.googleapis.com

Se você preferir não conceder o acesso a toda a rede VPC compartilhada para essas contas de serviço e quiser permitir o acesso apenas a sub-redes específicas, é possível conceder esses papéis a essas contas de serviço somente em sub-redes específicas.

Como criar uma sub-rede

Ao usar a VPC compartilhada, o administrador de VPC compartilhada precisa criar uma sub-rede para cada conector. Siga a documentação sobre como adicionar uma sub-rede para incluir uma sub-rede /28 na rede VPC compartilhada. Essa sub-rede precisa estar na mesma região que os serviços sem servidor que usarão o conector.

Como excluir um conector

Antes de excluir um conector, verifique se nenhum serviço ainda usando ele. Consulte a documentação do produto relevante para informações sobre como desconectar um conector de um serviço. Observe também que não é possível excluir uma rede VPC se um conector de acesso VPC sem servidor ainda estiver conectado a ela. É necessário excluir todos os conectores anexados antes de excluir a rede VPC.

Para excluir um conector, use o Console do Cloud ou a ferramenta de linha de comando gcloud:

Console

  1. Vá para a página de visão geral do acesso VPC sem servidor.

    Página do console sobre o acesso VPC sem servidor

  2. Selecione o conector que você quer excluir.

  3. Clique em Excluir.

gcloud

Use o seguinte comando gcloud para excluir um conector:

gcloud compute networks vpc-access connectors delete [CONNECTOR_NAME] --region [REGION]

Em que:

  • [CONNECTOR_NAME] é o nome do conector que você quer excluir;
  • [REGION] é a região onde o conector está localizado.

Como configurar o serviço para usar um conector

Depois de criar um conector, é possível configurar os serviços sem servidor para usá-lo. A forma como um serviço é configurado para usar um conector depende do produto. Para instruções específicas, consulte o guia correspondente:

Depois que o serviço estiver conectado a uma rede VPC, você alcançará instâncias de VM e outros recursos internos com o envio de solicitações para os endereços IP internos ou para os nomes DNS.

Como adicionar o VPC Service Controls

Depois de criar um conector e configurar o serviço, é possível reduzir o risco de exfiltração de dados e proteger recursos e dados usando o VPC Service Controls para a API Serverless VPC Access.

Para informações gerais sobre como ativar o VPC Service Controls, consulte Como criar um perímetro de serviço.

Serviços compatíveis

Use o acesso VPC sem servidor para acessar uma rede VPC a partir dos seguintes serviços:

Regiões compatíveis

É possível criar um conector de acesso VPC sem servidor nas seguintes regiões:

  • asia-east1
  • asia-east2
  • asia-northeast1
  • asia-northeast2
  • asia-northeast3
  • asia-south1
  • asia-southeast1
  • asia-southeast2
  • australia-southeast1
  • europe-central2
  • europe-north1
  • europe-west1
  • europe-west2
  • europe-west3
  • europe-west4
  • europe-west6
  • northamerica-northeast1
  • southamerica-east1
  • us-central1
  • us-east1
  • us-east4
  • us-west1
  • us-west2
  • us-west3
  • us-west4

Protocolos de rede compatíveis

A tabela a seguir descreve os protocolos compatíveis com cada configuração de saída do conector de acesso VPC sem servidor. Consulte Como definir configurações de rede para mais informações sobre as configurações de saída disponíveis.

Protocolo Direcionar pelo conector VPC apenas solicitações para IPs privados Direcionar todo o tráfego pelo conector VPC
TCP
UDP
ICMP Compatível apenas com endereços IP externos

Papéis do IAM selecionados

Na tabela a seguir, descrevemos os papéis do gerenciamento de identidade e acesso (IAM, na sigla em inglês) associados ao acesso VPC sem servidor. Consulte Papéis de acesso VPC sem servidor na documentação do IAM para uma lista de permissões associadas a cada papel.

Papel Descrição
Administrador de acesso VPC sem servidor
roles/vpcaccess.admin
Acesso completo a todos os recursos de acesso VPC sem servidor
Usuário de acesso VPC sem servidor
roles/vpcaccess.user
Pode utilizar conectores de acesso VPC sem servidor
Visualizador de acesso VPC sem servidor
roles/vpcaccess.viewer
Pode ver todos os recursos de acesso VPC sem servidor

Conta de serviço

Para realizar operações no projeto do Cloud, o serviço de acesso VPC sem servidor usa a conta de serviço do Agente de serviço de acesso VPC sem servidor. O endereço de e-mail dessa conta de serviço tem o seguinte formato:

service-PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com

Por padrão, essa conta de serviço tem o papel Agente de serviço de acesso VPC sem servidor (roles/vpcaccess.serviceAgent). As operações de acesso VPC sem servidor podem falhar se você alterar as permissões dessa conta.

Geração de registros de auditoria

Consulte Informações sobre a geração de registros de auditoria de acesso VPC sem servidor.

Preços

Para ver os preços do acesso VPC sem servidor, consulte Acesso VPC sem servidor na página de preços.

Solução de problemas

Se a criação de um conector resultar em erro, tente o seguinte e recrie o conector:

  • Especifique um intervalo de IP interno RFC 1918 que não se sobreponha a nenhuma reserva de endereço IP existente na rede VPC.
  • Conceda permissão ao projeto para usar imagens de VM do Compute Engine do projeto com o ID serverless-vpc-access-images. Consulte Como configurar restrições de acesso a imagens para ver como atualizar a política da organização adequadamente.
  • Defina a política da organização constraints/compute.vmCanIpForward para permitir que as VMs ativem o encaminhamento de IP.

Se você especificou um conector para um serviço sem servidor, mas ainda não consegue acessar os recursos na rede VPC:

  • Verifique se não há regras de firewall na sua rede VPC com prioridade antes de 1.000 que negem a entrada do intervalo de IP do seu conector.