Configurar conectores no projeto host da 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 host.

Se você precisar configurar um conector em um projeto de serviço, consulte Configurar conectores em projetos de serviço. Para saber mais sobre as vantagens de cada método, consulte Como se conectar a uma rede VPC compartilhada.

Antes de começar

  1. Verifique os papéis do Identity and Access Management (IAM) da conta que você está usando. A conta ativa precisa ter os seguintes papéis no projeto host:

  2. Selecione o projeto host no ambiente que preferir.

Defina o projeto padrão na CLI gcloud para o projeto host executando este comando no terminal:

gcloud config set project HOST_PROJECT_ID

Substitua:

  • HOST_PROJECT_ID: o ID do projeto host da VPC compartilhada.

Criar um conector de acesso VPC sem servidor

Para enviar solicitações à rede VPC e receber as respostas correspondentes, você precisa criar um conector de acesso VPC sem servidor. É possível criar um conector usando a CLI do Google Cloud ou o Terraform:

gcloud

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

    gcloud components update
    
  2. Ative a API de acesso VPC sem servidor para seu projeto:

    gcloud services enable vpcaccess.googleapis.com
    
  3. Crie um conector de acesso VPC sem servidor:

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
    --region=REGION \
    --subnet=SUBNET \
    --subnet-project=HOST_PROJECT_ID \
    # Optional: specify minimum and maximum instance values between 2 and 10, default is 2 min, 10 max.
    --min-instances=MIN \
    --max-instances=MAX \
    # Optional: specify machine type, default is e2-micro
    --machine-type=MACHINE_TYPE

    Substitua:

    • CONNECTOR_NAME: um nome para o conector. O nome precisa seguir a convenção de nomenclatura do Compute Engine e ter menos de 21 caracteres. Hifens (-) contam como dois caracteres.
    • REGION: uma região para o conector. Ela precisa corresponder à região do serviço sem servidor. Se o serviço estiver na região us-central ou europe-west, use us-central1 ou europe-west1.
    • SUBNET: o nome de uma sub-rede /28 não utilizada.
      • As sub-redes precisam ser usadas exclusivamente pelo conector. Elas não podem ser usadas por outros recursos, como VMs, Private Service Connect ou balanceadores de carga.
      • Para confirmar se a sub-rede não está sendo usada para o Private Service Connect ou o Cloud Load Balancing, verifique se o purpose da rede é PRIVATE executando o seguinte comando na CLI gcloud:
        gcloud compute networks subnets describe SUBNET_NAME
        
        Substitua:
        • SUBNET_NAME: o nome da sub-rede
    • HOST_PROJECT_ID: o ID do projeto host
    • MIN: é o número mínimo de instâncias a serem usadas no conector. Use um número inteiro entre 2 e 9. O padrão é 2. Para saber mais sobre o escalonamento do conector, consulte Capacidade de processamento e escalonamento.
    • MAX: o número máximo de instâncias a serem usadas para o conector. Use um número inteiro entre 3 e 10. O padrão é 10. Se o tráfego exigir, o conector será escalonado horizontalmente para instâncias [MAX], mas a escala não será reduzida. Para saber mais sobre o escalonamento do conector, consulte Capacidade de processamento e escalonamento.
    • MACHINE_TYPE: f1-micro, e2-micro ou e2-standard-4. Para saber mais sobre a capacidade de processamento do conector, incluindo o tipo de máquina e o escalonamento, consulte Capacidade de processamento e escalonamento.

    Para mais detalhes e argumentos opcionais, consulte a página de referência da gcloud.

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

    gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \
    --region=REGION

    Substitua:

    • CONNECTOR_NAME: o nome do conector. Este é o nome que você especificou na etapa anterior
    • REGION: a região do conector. Esta é a região especificada na etapa anterior

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

Terraform

É possível usar um recurso do Terraform para ativar a API vpcaccess.googleapis.com.

resource "google_project_service" "vpcaccess-api" {
  project = var.project_id # Replace this with your project ID in quotes
  service = "vpcaccess.googleapis.com"
}

É possível usar módulos do Terraform para criar uma rede VPC e uma sub-rede e, em seguida, criar o conector.

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 10.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "my-serverless-network"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "serverless-subnet"
      subnet_ip     = "10.10.10.0/28"
      subnet_region = "us-central1"
    }
  ]
}

module "serverless-connector" {
  source     = "terraform-google-modules/network/google//modules/vpc-serverless-connector-beta"
  version    = "~> 10.0"
  project_id = var.project_id
  vpc_connectors = [{
    name        = "central-serverless"
    region      = "us-central1"
    subnet_name = module.test-vpc-module.subnets["us-central1/serverless-subnet"].name
    # host_project_id = var.host_project_id # Specify a host_project_id for shared VPC
    machine_type  = "e2-standard-4"
    min_instances = 2
    max_instances = 7
    }
    # Uncomment to specify an ip_cidr_range
    #   , {
    #     name          = "central-serverless2"
    #     region        = "us-central1"
    #     network       = module.test-vpc-module.network_name
    #     ip_cidr_range = "10.10.11.0/28"
    #     subnet_name   = null
    #     machine_type  = "e2-standard-4"
    #     min_instances = 2
    #   max_instances = 7 }
  ]
  depends_on = [
    google_project_service.vpcaccess-api
  ]
}

Ativar funções do Cloud Run para o projeto de serviço

Ative a API Cloud Run functions para o projeto de serviço. Isso é necessário para adicionar papéis do IAM em etapas futuras e para que o projeto de serviço use as funções do Cloud Run.

No terminal, execute:

gcloud services enable cloudfunctions.googleapis.com --project=SERVICE_PROJECT_ID

Substitua:

  • SERVICE_PROJECT_ID: o ID do projeto de serviço

Conceder acesso ao conector

Conceda acesso ao conector concedendo o papel de IAM de usuário de acesso VPC sem servidor do agente de serviço das funções do Cloud Run ao projeto de serviço no projeto host. Também é necessário conceder o mesmo papel ao agente de serviço das funções do Cloud Run.

  1. Execute o comando a seguir no terminal.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
    --role=roles/vpcaccess.user
    

    Substitua:

    • HOST_PROJECT_ID: o ID do projeto host da VPC compartilhada.
    • SERVICE_PROJECT_NUMBER: o número do projeto associado ao projeto de serviço. Ele é diferente do ID do projeto. Para encontrar o número do projeto, execute o comando a seguir:

      gcloud projects describe SERVICE_PROJECT_ID
      
  2. Também conceda o papel ao agente de serviço das funções do Cloud Run executando o seguinte comando:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \
    --role=roles/vpcaccess.user
    

Tornar o conector detectável

Na política do IAM do projeto host, conceda os papéis predefinidos a seguir aos principais que implantam serviços do Cloud Run:

Como alternativa, é possível usar papéis personalizados ou outros papéis predefinidos que incluam todas as permissões do papel Leitor de acesso VPC sem servidor (vpcaccess.viewer).

  1. Execute estes comandos no terminal:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=PRINCIPAL \
    --role=roles/vpcaccess.viewer
    
    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member=PRINCIPAL \
    --role=roles/compute.networkViewer
    

    Substitua:

    • HOST_PROJECT_ID: o ID do projeto host da VPC compartilhada.
    • PRINCIPAL: o principal que implanta serviços do Cloud Run. Saiba mais sobre a sinalização --member.

Configurar a função para usar o conector

Para cada função que requer acesso à sua VPC compartilhada, é necessário especificar o conector para a função. As etapas a seguir mostram como configurar sua função para usar um conector.

  1. Configure a gcloud CLI para usar o projeto que contém a função:

    gcloud config set project PROJECT_ID
    Substitua:

    • PROJECT_ID: o ID do projeto que contém a função que requer acesso à sua VPC compartilhada. Se a função estiver no projeto host, esse será o ID do projeto host. Se a função estiver em um projeto de serviço, esse será o ID do projeto de serviço.
  2. Use a sinalização --vpc-connector e implante a função:

    gcloud functions deploy FUNCTION_NAME --vpc-connector=CONNECTOR_NAME
    

    Substitua:

    • FUNCTION_NAME: o nome da sua função
    • CONNECTOR_NAME: o nome do conector. Use o nome totalmente qualificado ao implantar a partir de um projeto de serviço de VPC compartilhada (em vez do projeto host). Por exemplo:
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      em que HOST_PROJECT_ID é o ID do projeto host, CONNECTOR_REGION é a região do conector e CONNECTOR_NAME é o nome que você deu ao conector.

Para ter mais controle sobre quais solicitações são roteadas pelo conector, consulte Configurações de saída.

Próximas etapas