Conectar-se a uma rede VPC

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Nesta página, mostramos como usar o acesso VPC sem servidor para conectar um serviço do Cloud Run diretamente à sua rede VPC, permitindo acesso a instâncias de VM do Compute Engine, instâncias do Memorystore e outros recursos com um Endereço IP interno.

Antes de começar

Criar um conector de acesso VPC sem servidor

Para enviar solicitações à rede VPC e receber as respostas correspondentes sem usar a Internet pública, você precisa usar um conector de acesso VPC sem servidor.

É possível criar um conector usando o console do Google Cloud, a Google Cloud CLI ou o Terraform:

Console

  1. Certifique-se de que a API de acesso VPC sem servidor esteja ativada para o projeto.

    Ativar API

  2. Acesse a página de visão geral do acesso VPC sem servidor.

    Página do console sobre o acesso VPC sem servidor

  3. Clique em Criar conector.

  4. No campo Nome, insira um nome para o conector. Esse nome precisa estar de acordo com a convenção de nomenclatura do Compute Engine, com a restrição adicional de que precisa ter menos de 21 caracteres e os hífens (-) contam como dois caracteres.

  5. No campo Região, selecione 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.

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

  7. Clique no menu suspenso Sub-rede:

    • Se você estiver usando a VPC compartilhada, o que exige que você use sua própria sub-rede, selecione 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, o Private Service Connect ou o balanceamento de carga HTTP(S) interno.
      • Para confirmar se a sub-rede não está sendo usada para o Private Service Connect ou o balanceamento de carga HTTP(S) interno, 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
    • 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.

  8. Opcional: se você quiser configurar opções de escalonamento para ter mais controle sobre o conector, clique em Mostrar configurações de escalonamento para exibir o formulário de escalonamento:

    1. Defina os números mínimo e máximo de instâncias para seu conector ou use os padrões, que são 2 (mínimo) e 10 (máximo). O conector é escalonado de acordo com o máximo especificado se o uso do tráfego exigir, mas o conector não reduz o escalonamento quando o tráfego diminui. É preciso usar valores entre 2 e 10.
    2. No menu suspenso Tipo de instância, escolha o tipo de máquina a ser usado para o conector ou use o padrão e2-micro. Observe a barra lateral de custo à direita ao escolher o tipo de instância, que exibe a largura de banda e as estimativas de custo.
  9. Clique em Criar.

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

gcloud

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

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

    gcloud services enable vpcaccess.googleapis.com
    
  3. Se você estiver usando a VPC compartilhada, o que exige que você use sua própria sub-rede, crie um conector com o comando a seguir:

    gcloud 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 \
    # 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. Ele precisa estar de acordo com a convenção de nomenclatura do Compute Engine, com a restrição adicional de que precisa ter menos de 21 caracteres e hífens (-) contando 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, o Private Service Connect ou o balanceamento de carga HTTP(S) interno.
      • Para confirmar se a sub-rede não está sendo usada para o Private Service Connect ou o balanceamento de carga HTTP(S) interno, 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. Forneça-o somente se você estiver usando uma VPC compartilhada
    • 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 no 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. 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
    

    Substitua:

    • CONNECTOR_NAME: um nome para o conector. Ele precisa estar de acordo com a convenção de nomenclatura do Compute Engine, com a restrição adicional de que precisa ter menos de 21 caracteres e hífens (-) contando como dois caracteres.
    • VPC_NETWORK: a rede VPC a que seu conector será anexado.
    • 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.
    • 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 em notação CIDR (10.8.0.0/28). Esse intervalo de IP não pode se sobrepor a nenhuma reserva de endereço IP existente 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.

  5. 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      = "~> 6.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"
  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
  ]
}

Como configurar o serviço para usar um conector

Depois de criar um conector de acesso VPC sem servidor, configure o serviço do Cloud Run para usar o conector. Para isso, use o Console do Google Cloud, a Google Cloud CLI ou o arquivo YAML ao criar um novo serviço ouimplantar uma nova revisão:

Console

  1. Acessar o Cloud Run

  2. Clique em Criar serviço se estiver configurando um novo serviço em que fará uma implantação. Se você estiver configurando um serviço atual, clique nele e em Editar e implantar nova revisão.

  3. Se você estiver configurando um novo serviço, preencha a página inicial de configurações de serviço conforme desejado e clique em Contêiner, conexões, segurança para expandir a página de configuração do serviço.

  4. Clique na guia Conexões.

    imagem

  5. No campo Conector VPC, selecione um conector para usar ou selecione Nenhum para desconectar seu serviço de uma rede VPC.

  6. Clique em Criar ou Implantar.

gcloud

Para especificar um conector durante a implantação, use a sinalização --vpc-connector:

gcloud run deploy SERVICE --image IMAGE_URL --vpc-connector CONNECTOR_NAME
  • Substitua SERVICE pelo nome do serviço.
  • Substitua IMAGE_URL por uma referência à imagem do contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest.
  • Substitua CONNECTOR_NAME pelo nome do seu conector.

Para anexar, atualizar ou remover um conector de um serviço atual, use o comando gcloud run services update com uma das seguintes sinalizações, conforme necessário:

Por exemplo, para anexar ou atualizar um conector:

gcloud run services update SERVICE --vpc-connector CONNECTOR_NAME
  • Substitua SERVICE pelo nome do serviço.
  • Substitua CONNECTOR_NAME pelo nome do seu conector.

YAML

É possível fazer o download e ver a configuração do serviço atual usando o comando gcloud run services describe --format export, que produz resultados limpos no formato YAML. Em seguida, modifique os campos descritos abaixo e faça upload do YAML modificado usando o comando gcloud run services replace. Modifique os campos somente conforme documentado.

  1. Para visualizar e fazer o download da configuração:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Adicione ou atualize o atributo run.googleapis.com/vpc-access-connector no atributo annotations no atributo spec de nível superior:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
          name: REVISION

    Substitua:

    • SERVICE pelo nome do serviço do Cloud Run.
    • CONNECTOR_NAME pelo nome do conector.
    • REVISION por um novo nome de revisão ou excluí-lo (se houver). Se você fornecer um novo nome de revisão, ele precisará atender aos seguintes critérios:
      • Começa com SERVICE-
      • Contém apenas letras minúsculas, números e -
      • Não termina com um -
      • Não excede 63 caracteres
  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud run services replace service.yaml

Terraform

É possível usar um recurso do Terraform para criar um serviço e configurá-lo para usar seu conector.

# Cloud Run service
resource "google_cloud_run_service" "gcr_service" {
  name     = "mygcrservice"
  provider = google-beta
  location = "us-west1"

  template {
    spec {
      containers {
        image = "us-docker.pkg.dev/cloudrun/container/hello"
        resources {
          limits = {
            cpu    = "1000m"
            memory = "512M"
          }
        }
      }
      # the service uses this SA to call other Google Cloud APIs
      # service_account_name = myservice_runtime_sa
    }

    metadata {
      annotations = {
        # Limit scale up to prevent any cost blow outs!
        "autoscaling.knative.dev/maxScale" = "5"
        # Use the VPC Connector
        "run.googleapis.com/vpc-access-connector" = google_vpc_access_connector.connector.name
        # all egress from the service should go through the VPC Connector
        "run.googleapis.com/vpc-access-egress" = "all-traffic"
      }
    }
  }
  autogenerate_revision_name = true
}

Restringir o acesso a recursos da VPC

É possível restringir o acesso do conector à sua rede VPC usando regras de firewall.

Ao se conectar a uma rede VPC compartilhada com conectores nos projetos de serviço, as regras de firewall não são criadas automaticamente. Um usuário com o papel de Administrador de rede no projeto host define regras de firewall ao configurar o projeto host.

Quando você se conecta a uma rede VPC autônoma ou a uma rede VPC compartilhada que tem o conector no projeto host, uma regra de firewall implícita com prioridade 1.000 é criada automaticamente na rede VPC para permitir a entrada pela sub-rede do conector ou intervalo personalizado de IP a todos os destinos na rede VPC. Observação: a regra de firewall implícita não é visível no console do Google Cloud e existe apenas enquanto o conector associado existir. Se você não quiser que o conector alcance todos os destinos na rede VPC, restrinja o acesso dele.

É possível restringir o acesso do conector criando regras de entrada no recurso de destino ou criando regras de saída no conector VPC.

Restringir o acesso usando regras de entrada

Escolha tags de rede ou intervalos CIDR para controlar o tráfego de entrada para a rede VPC:

Tags de rede

Nas etapas a seguir, mostramos como criar regras de entrada que restringem o acesso de um conector à sua rede VPC com base nas tags de rede do conector.

  1. Verifique se você tem as permissões necessárias para inserir regras de firewall. Você precisa ter um dos seguintes papéis de gerenciamento de identidade e acesso (IAM):

  2. Nega o tráfego do conector na sua rede VPC.

    Crie uma regra de firewall de entrada com prioridade menor que 1.000 na sua rede VPC para negar a entrada da tag de rede do conector. Isso substitui a regra de firewall implícita que o acesso VPC sem servidor cria na rede VPC por padrão.

    gcloud compute firewall-rules create RULE_NAME \
    --action=DENY \
    --rules=PROTOCOL \
    --source-tags=VPC_CONNECTOR_NETWORK_TAG \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --priority=PRIORITY
    

    Substitua:

    • RULE_NAME: o nome da nova regra de firewall. Por exemplo, deny-vpc-connector.
    • PROTOCOL: um ou mais protocolos que você quer permitir a partir do seu conector de VPC. É preciso especificar um ou mais de ah, all, esp, ipip, sctp, tcp, udp ou um número de protocolo do IP entre 0 e 255. Por exemplo, tcp:80,udp permite o tráfego TCP pela porta 80 e pelo UDP. Para mais informações, consulte a flag da documentação do allow.
    • VPC_CONNECTOR_NETWORK_TAG: a tag de rede universal do conector se você quiser restringir o acesso a todos os conectores (incluindo todos os conectores feitos no futuro), ou a tag de rede única se quiser restringir o acesso a um conector específico.

      • Tag de rede universal: vpc-connector
      • Tag de rede única: vpc-connector-REGION-CONNECTOR_NAME

        Substitua:

        • REGION: a região do conector que você quer restringir
        • CONNECTOR_NAME: o nome do conector que você quer restringir

      Para saber mais sobre as tags de rede do conector, consulte Tags de rede.

    • VPC_NETWORK: o nome da rede VPC.

    • PRIORITY: um número inteiro de 1 a 999, inclusive. Por exemplo: 990.

  3. Permitir tráfego do conector para o recurso que precisa receber tráfego do conector.

    Use as sinalizações allow e target-tags para criar uma regra de firewall de entrada que segmente o recurso na rede VPC que você quer que o conector VPC acesse. Defina a prioridade para essa regra como um valor menor que a prioridade da regra criada na etapa anterior.

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOL \
    --source-tags=VPC_CONNECTOR_NETWORK_TAG \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --target-tags=RESOURCE_TAG \
    --priority=PRIORITY
    

    Substitua:

    • RULE_NAME: o nome da nova regra de firewall. Por exemplo, allow-vpc-connector-for-select-resources.
    • PROTOCOL: um ou mais protocolos que você quer permitir a partir do seu conector de VPC. É preciso especificar um ou mais de ah, all, esp, icmp, ipip, sctp, tcp, udp ou um número de protocolo do IP entre 0 e 255. Por exemplo, tcp:80,icmp permite o tráfego TCP pela porta 80 e pelo ICMP. Para mais informações, consulte a documentação da flag allow.
    • VPC_CONNECTOR_NETWORK_TAG: a tag de rede universal do conector se você quiser restringir o acesso a todos os conectores (incluindo todos os conectores feitos no futuro), ou a tag de rede única se quiser restringir o acesso a um conector específico. Isso precisa corresponder à tag de rede que você especificou na etapa anterior.

      • Tag de rede universal: vpc-connector
      • Tag de rede única: vpc-connector-REGION-CONNECTOR_NAME

        Substitua:

        • REGION: a região do conector que você quer restringir
        • CONNECTOR_NAME: o nome do conector que você quer restringir

      Para saber mais sobre as tags de rede do conector, consulte Tags de rede.

    • VPC_NETWORK: o nome da rede VPC.

    • RESOURCE_TAG: a tag de rede do recurso da VPC que você quer que o conector da VPC acesse.

    • PRIORITY: um número inteiro menor que a prioridade que você definiu na etapa anterior. Por exemplo, se você definir a prioridade da regra criada na etapa anterior como 990, tente 980.

Para mais informações sobre as sinalizações obrigatórias e opcionais para criar regras de firewall, consulte a documentação de gcloud compute firewall-rules create.

Intervalo CIDR

Nas etapas a seguir, mostramos como criar regras de entrada que restringem o acesso de um conector à sua rede VPC com base no intervalo CIDR do conector.

  1. Verifique se você tem as permissões necessárias para inserir regras de firewall. Você precisa ter um dos seguintes papéis de gerenciamento de identidade e acesso (IAM):

  2. Nega o tráfego do conector na sua rede VPC.

    Crie uma regra de firewall de entrada com prioridade menor que 1.000 na sua rede VPC para negar a entrada do intervalo CIDR do conector. Isso substitui a regra de firewall implícita que o acesso VPC sem servidor cria na rede VPC por padrão.

    gcloud compute firewall-rules create RULE_NAME \
    --action=DENY \
    --rules=<_1, PROTOCOL> \
    --source-ranges=VPC_CONNECTOR_CIDR_RANGE \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --priority=PRIORITY
    

    Substitua:

    • RULE_NAME: o nome da nova regra de firewall. Por exemplo, deny-vpc-connector.
    • VPC_CONNECTOR_CIDR_RANGE: o intervalo CIDR do conector em que seu acesso está restrito
    • VPC_NETWORK: o nome da rede VPC.
    • PRIORITY: um número inteiro de 1 a 999. Por exemplo: 990.
  3. Permitir tráfego do conector para o recurso que precisa receber tráfego do conector.

    Use as sinalizações allow e target-tags para criar uma regra de firewall de entrada que segmente o recurso na rede VPC que você quer que o conector VPC acesse. Defina a prioridade para essa regra como um valor menor que a prioridade da regra criada na etapa anterior.

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOL \
    --source-ranges=VPC_CONNECTOR_CIDR_RANGE \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --target-tags=RESOURCE_TAG \
    --priority=PRIORITY
    

    Substitua:

    • RULE_NAME: o nome da nova regra de firewall. Por exemplo, allow-vpc-connector-for-select-resources.
    • PROTOCOL: um ou mais protocolos que você quer permitir a partir do seu conector de VPC. É preciso especificar um ou mais de ah, all, esp, icmp, ipip, sctp, tcp, udp ou um número de protocolo do IP entre 0 e 255. Por exemplo, tcp:80,icmp permite o tráfego TCP pela porta 80 e pelo ICMP. Para mais informações, consulte a documentação da flag allow.
    • VPC_CONNECTOR_CIDR_RANGE: o intervalo CIDR do conector em que seu acesso está restrito
    • VPC_NETWORK: o nome da rede VPC.
    • RESOURCE_TAG: a tag de rede do recurso da VPC que você quer que o conector da VPC acesse.
    • PRIORITY: um número inteiro menor que a prioridade que você definiu na etapa anterior. Por exemplo, se você definir a prioridade da regra criada na etapa anterior como 990, tente 980.

Para mais informações sobre as sinalizações obrigatórias e opcionais para criar regras de firewall, consulte a documentação de gcloud compute firewall-rules create.

Restringir o acesso usando regras de saída

As etapas a seguir mostram como criar regras de saída para restringir o acesso ao conector.

  1. Verifique se você tem as permissões necessárias para inserir regras de firewall. Você precisa ter um dos seguintes papéis do Identity and Access Management (IAM):

  2. Negue o tráfego de saída do conector.

    Crie uma regra de firewall de saída no conector de acesso VPC sem servidor a fim de impedir o envio de tráfego de saída.

    gcloud compute firewall-rules create RULE_NAME \
    --action=DENY \
    --rules=PROTOCOL \
    --direction=EGRESS \
    --target-tags=VPC_CONNECTOR_NETWORK_TAG \
    --network=VPC_NETWORK \
    --priority=PRIORITY
    

    Substitua:

    • RULE_NAME: o nome da nova regra de firewall. Por exemplo, deny-vpc-connector.
    • PROTOCOL: um ou mais protocolos que você quer permitir a partir do seu conector de VPC. É preciso especificar um ou mais de ah, all, esp, icmp, ipip, sctp, tcp, udp ou um número de protocolo do IP entre 0 e 255. Por exemplo, tcp:80,icmp permite o tráfego TCP pela porta 80 e pelo ICMP. Para mais informações, consulte a documentação da flag allow.
    • VPC_CONNECTOR_NETWORK_TAG: a tag de rede do conector VPC universal se você quiser que a regra se aplique a todos os conectores VPC existentes e a quaisquer conectores VPC no futuro. Ou a tag de rede do conector de VPC exclusiva, se você quiser controlar um conector específico.
    • VPC_NETWORK: o nome da rede VPC.
    • PRIORITY: um número inteiro de 1 a 999. Por exemplo: 990.
  3. Permitir tráfego de saída quando o destino estiver no intervalo CIDR que você quer que o conector acesse.

    Use as sinalizações allow e destination-ranges para criar uma regra de firewall que permita o tráfego de saída do conector para um intervalo de destino específico. Defina o intervalo de destino para o intervalo CIDR do recurso na rede VPC que você quer que o conector possa acessar. Defina a prioridade dessa regra como um valor menor do que a prioridade da regra criada na etapa anterior.

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOL \
    --destination-ranges=RESOURCE_CIDR_RANGE \
    --direction=EGRESS \
    --network=VPC_NETWORK \
    --target-tags=VPC_CONNECTOR_NETWORK_TAG \
    --priority=PRIORITY
    

    Substitua:

    • RULE_NAME: o nome da nova regra de firewall. Por exemplo, allow-vpc-connector-for-select-resources.
    • PROTOCOL: um ou mais protocolos que você quer permitir a partir do seu conector de VPC. É preciso especificar um ou mais de ah, all, esp, icmp, ipip, sctp, tcp, udp ou um número de protocolo do IP entre 0 e 255. Por exemplo, tcp:80,icmp permite o tráfego TCP pela porta 80 e pelo ICMP. Para mais informações, consulte a documentação da flag allow.
    • RESOURCE_CIDR_RANGE: o intervalo CIDR do conector em que seu acesso está restrito
    • VPC_NETWORK: o nome da rede VPC.
    • VPC_CONNECTOR_NETWORK_TAG: a tag de rede do conector VPC universal se você quiser que a regra se aplique a todos os conectores VPC existentes e a quaisquer conectores VPC no futuro. Ou a tag de rede do conector de VPC exclusiva, se você quiser controlar um conector específico. Se você tiver usado a tag de rede exclusiva na etapa anterior, use essa tag.
    • PRIORITY: um número inteiro menor que a prioridade que você definiu na etapa anterior. Por exemplo, se você definir a prioridade da regra criada na etapa anterior como 990, tente 980.

Para mais informações sobre as sinalizações obrigatórias e opcionais para criar regras de firewall, consulte a documentação de gcloud compute firewall-rules create.

Gerenciar seu conector

Como controlar o tráfego de saída de um serviço

Por padrão, somente solicitações para endereços IP internos e nomes DNS internos são roteadas por meio de um conector de acesso VPC sem servidor. Em alguns casos, no entanto, é recomendável que todas as solicitações de saída do serviço sejam roteadas para a rede VPC. Por exemplo, se você quiser que as regras de firewall da rede VPC impeçam o tráfego de saída do Cloud Run de hosts perigosos ou indesejados, é necessário rotear todas as solicitações de saída do serviço por meio de uma VPC sem servidor Conector de acesso.

Para controlar o roteamento de solicitações de saída do seu serviço, defina a saída da VPC para uma das seguintes opções:

  • Rotear solicitações somente para IPs privados por meio do conector da VPC: padrão. Somente solicitações para intervalos de endereços IP RFC 1918 e RFC 6598 ou nomes de DNS internos são roteadas para sua rede VPC. Todas as outras solicitações são roteadas diretamente para a Internet.
  • Rotear todo o tráfego pelo conector VPC: todas as solicitações de saída da função são roteadas para sua rede VPC. As solicitações seguirão as regras de firewall, DNS e roteamento da rede.

É possível especificar uma configuração de saída da VPC usando o Console do Google Cloud, a Google Cloud CLI ou o arquivo YAML ao criar um novo serviço ou implantar uma nova revisão:

Console

  1. Acessar o Cloud Run

  2. Clique em Criar serviço se estiver configurando um novo serviço em que fará uma implantação. Se você estiver configurando um serviço atual, clique nele e em Editar e implantar nova revisão.

  3. Se você estiver configurando um novo serviço, preencha a página inicial de configurações de serviço conforme desejado e clique em Contêiner, conexões, segurança para expandir a página de configuração do serviço.

  4. Clique na guia Conexões.

    imagem

  5. Depois de selecionar um conector VPC, selecione Rotear solicitações somente para IPs privados por meio do conector VPC ou Rotear todo o tráfego pelo conector VPC.

  6. Clique em Criar ou Implantar.

gcloud

Para especificar uma configuração de saída, use a sinalização --vpc-egress. É possível especificar uma configuração de saída durante a implantação:

gcloud run deploy SERVICE \
--image IMAGE_URL \
--vpc-connector CONNECTOR_NAME \
--vpc-egress EGRESS_SETTING
  • Substitua SERVICE pelo nome do serviço.
  • Substitua IMAGE_URL por uma referência à imagem do contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest.
  • Substitua CONNECTOR_NAME pelo nome do seu conector.
  • Substitua EGRESS_SETTING por um valor de configuração de saída:
    • all-traffic: envia todo o tráfego de saída por meio do conector.
    • private-ranges-only: envia somente o tráfego para endereços internos por meio do conector VPC.

Também é possível atualizar um serviço existente e alterar a configuração de saída:

gcloud run services update SERVICE --vpc-egress EGRESS_SETTING

YAML

É possível fazer o download e ver a configuração do serviço atual usando o comando gcloud run services describe --format export, que produz resultados limpos no formato YAML. Em seguida, modifique os campos descritos abaixo e faça upload do YAML modificado usando o comando gcloud run services replace. Modifique os campos somente conforme documentado.

  1. Para visualizar e fazer o download da configuração:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Adicione ou atualize o atributo run.googleapis.com/vpc-access-egress no atributo annotations no atributo spec de nível superior:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
            run.googleapis.com/vpc-access-egress: EGRESS_SETTING
          name: REVISION

    Substitua:

    • SERVICE pelo nome do serviço do Cloud Run;
    • CONNECTOR_NAME pelo nome do conector. O atributo run.googleapis.com/vpc-access-connector é obrigatório ao especificar uma configuração de saída.
    • EGRESS_SETTING por um destes procedimentos:
      • all-traffic: envia todo o tráfego de saída por meio do conector.
      • private-ranges-only: envia somente o tráfego para endereços internos por meio do conector VPC.
      • REVISION por um novo nome de revisão ou excluí-lo (se houver). Se você fornecer um novo nome de revisão, ele precisará atender aos seguintes critérios:
        • Começa com SERVICE-
        • Contém apenas letras minúsculas, números e -
        • Não termina com um -
        • Não excede 63 caracteres
  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud run services replace service.yaml

Ver configurações do conector de acesso VPC sem servidor

É possível visualizar as configurações atuais do conector de acesso VPC sem servidor para seu serviço usando o Console do Google Cloud ou a ferramenta de linha de comando gcloud:

Console

  1. Acesse o Cloud Run

  2. Clique no serviço de seu interesse para abrir a página Detalhes do serviço.

  3. Clique na guia Revisões.

  4. No painel de detalhes à direita, a configuração do conector de acesso VPC sem servidor está listada na guia Conexões.

gcloud

  1. Use o comando a seguir:

    gcloud run services describe SERVICE
  2. Localize a configuração do conector de acesso VPC sem servidor na configuração retornada.

Desconectar um serviço de uma rede VPC

É possível desconectar um serviço da sua rede VPC usando o Console do Google Cloud ou a Google Cloud CLI:

Console

  1. Acessar o Cloud Run

  2. Clique em Criar serviço se estiver configurando um novo serviço em que fará uma implantação. Se você estiver configurando um serviço atual, clique nele e em Editar e implantar nova revisão.

  3. Se você estiver configurando um novo serviço, preencha a página inicial de configurações de serviço conforme desejado e clique em Contêiner, conexões, segurança para expandir a página de configuração do serviço.

  4. Clique na guia Conexões.

    imagem

  5. No campo Conector de VPC, selecione Nenhum para desconectar seu serviço de uma rede VPC.

  6. Clique em Criar ou Implantar.

gcloud

Use o comando gcloud run services update com as seguintes sinalizações:

gcloud run services update SERVICE --clear-vpc-connector
  • Substitua SERVICE pelo nome do serviço.

Os conectores continuam gerando cobranças, mesmo se estiverem sem tráfego e desconectados. Para mais detalhes, consulte preços. Se você não precisar mais do conector, exclua-o para evitar o faturamento contínuo.

Excluir um conector

Antes de excluir um conector, verifique se nenhum serviço ainda está conectado a ele.

Para usuários de VPC compartilhada que configuram conectores no projeto de host da VPC compartilhada, use o comando gcloud compute networks vpc-access connectors describe para listar os projetos em que há serviços que usam um determinado conector.

Para excluir um conector, use o console do Google Cloud ou a Google Cloud CLI:

Console

  1. Acesse a página de visão geral do acesso VPC sem servidor no console do Google Cloud:

    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

Substitua:

  • CONNECTOR_NAME pelo nome do conector que você quer excluir;
  • REGION pela região onde o conector está localizado.

Solução de problemas

Permissões de conta de serviço

Para realizar operações no projeto do Cloud, o 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.

Erros

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

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

Se você especificou um conector, 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.

Próximas etapas