Como se conectar a uma rede VPC compartilhada

Se a organização usa a VPC compartilhada, é possível configurar conectores de acesso VPC sem servidor no projeto de serviço ou no projeto host. Este guia mostra como configurar um conector no projeto de serviço.

Em geral, você precisa seguir estas etapas:

  1. Adicionar regras de firewall para permitir intervalos de IP obrigatórios
  2. Conceder permissões
  3. Criar uma sub-rede
  4. Na página Como configurar o Acesso VPC sem servidor, conclua as etapas nas seguintes seções:

Vantagens

Vantagens da criação de conectores nos projetos de serviço:

  • Isolamento: cada conector tem largura de banda dedicada e não é afetado pelo uso da largura de banda de conectores em outros projetos de serviço. Isso é bom quando você tem um serviço com picos de tráfego ou se precisa garantir que cada projeto de serviço não seja afetado pelo uso do conector por outros projetos de serviço.
  • Estornos: as cobranças realizadas pelos conectores são associadas ao projeto de serviço que contém o conector. Isso facilita os estornos.
  • Segurança: permite seguir o "princípio do menor privilégio". Os conectores precisam receber acesso aos recursos da sua rede VPC compartilhada que precisam acessar. Ao criar um conector no projeto de serviço, é possível limitar o que os serviços no projeto podem acessar usando regras de firewall.
  • Independência da equipe: reduz a dependência no administrador do projeto host. As equipes podem criar e gerenciar os conectores associados ao projeto de serviço. Um usuário com o papel Administrador de segurança do Compute Engine ou um papel personalizado de Gerenciamento de identidade e acesso (IAM) com a permissão compute.firewalls.create ativada para o projeto host ainda precisa gerenciar regras de firewall para o conector.

Se essas considerações não forem adequadas ao seu caso de uso, leia as vantagens de configurar a VPC compartilhada com conectores no projeto host.

Adicionar regras de firewall para permitir intervalos de IP

Para executar essas etapas, você precisa ter um dos seguintes papéis no projeto host:

É 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. Crie uma regra de entrada na sua rede VPC para permitir solicitações de conectores:

    gcloud compute firewall-rules create vpc-connector-requests \
    --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 limitar os recursos que seu ambiente sem servidor pode alcançar usando o acesso VPC sem servidor, especifique um destino para essas regras de firewall ou consulte Criar regras de firewall com escopo mais restrito. Se você especificar um destino, precisará criar um novo conjunto de regras de firewall sempre que criar um novo conector de VPC.

Criar regras de firewall com escopo mais restrito

Seguir o procedimento descrito em 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 destes mecanismos:

  • 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.

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.

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 adicionar 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.

Próximas etapas