Restringir a entrada de rede para o Cloud Run

Nesta página, descrevemos como usar as configurações de entrada para restringir o acesso à rede para seu serviço do Cloud Run.

No nível da rede, o endpoint de um serviço do Cloud Run pode ser acessado pelos seguintes caminhos de entrada de rede:

  • URLs run.app padrão, que podem ser desativados
  • Qualquer mapeamento de domínio configurado
  • Qualquer balanceador de carga de aplicativo externo ou interno configurado

Todos os caminhos de entrada de rede estão sujeitos à configuração de entrada do serviço. Os caminhos de entrada padrão e as configurações de entrada permitem que qualquer recurso na Internet acesse o serviço do Cloud Run. É possível usar uma restrição personalizada para restringir as configurações de entrada da organização ou de um conjunto de projetos. A autenticação do IAM ainda se aplica a solicitações que chegam aos endpoints de serviço de qualquer um dos caminhos de entrada de rede anteriores. Para uma abordagem em camadas para gerenciar o acesso, use as configurações de entrada de rede e a autenticação do IAM.

Configurações de entrada de rede disponíveis

As seguintes configurações estão disponíveis:

Configuração Descrição
Interno Mais restritiva. Permite solicitações das seguintes fontes:
  • Balanceador de carga de aplicativo interno, incluindo solicitações de redes VPC compartilhadas quando encaminhadas por meio do balanceador de carga de aplicativo interno.
  • Recursos permitidos por qualquer perímetro do VPC Service Controls que contenha seu serviço do Cloud Run. O Cloud Run precisa ser configurado como um serviço restrito.
  • Redes VPC que estão no mesmo projeto que o serviço do Cloud Run.
  • Entrada de VPC compartilhada: a rede VPC compartilhada para a qual a revisão está configurada para enviar tráfego. Para informações sobre quando o tráfego da VPC compartilhada é reconhecido como "interno", consulte Considerações especiais da VPC compartilhada.
  • Os seguintes produtos do Google Cloud, se estiverem no mesmo projeto ou perímetro VPC Service Controls como o ambiente serviço e se eles estiverem usando o URL run.app padrão e não uma domínio personalizado:
As solicitações dessas origens permanecem na rede do Google, mesmo que elas acessem o serviço no URL run.app. Solicitações de outras origens, incluindo a Internet, não podem alcançar seu serviço no URL run.app ou em domínios personalizados.

Interno e Cloud Load Balancing Essa configuração permite solicitações dos seguintes recursos:
  • Recursos permitidos pela regra "interna" mais restritiva (uso)
  • Balanceador de carga de aplicativo externo
. Use essa configuração para fazer o seguinte:
  • Aceitar solicitações da Internet pelo balanceador de carga de aplicativo externo. Não são permitidas solicitações diretas para o URL run.app a partir da Internet.
  • Verifique se as solicitações da Internet estão sujeitas a recursos do balanceador de carga de aplicativo externo, como Identity-Aware Proxy, Google Cloud Armor e Cloud CDN.

Observação: para ativar essa configuração na CLI gcloud, use internal-and-cloud-load-balancing. Para ativar essa configuração no console do Google Cloud, selecione Interno > Permitir tráfego de balanceadores de carga de aplicativo externos.
Todos Menos restritiva. Permite todas as solicitações, incluindo solicitações diretamente da Internet para o URL run.app.

Acessar serviços internos

As seguintes considerações adicionais se aplicam:

  • Ao acessar serviços internos, chame-os da mesma maneira que chamaria usando os URLs, seja o URL padrão run.app ou um domínio personalizado configurado no Cloud Run.

  • Para solicitações de instâncias de VM do Compute Engine, nenhuma outra configuração é necessária para máquinas que têm endereços IP externos ou que usam o Cloud NAT. Caso contrário, consulte Receber solicitações de redes VPC.

  • Ao chamar pelo Cloud Run, App Engine ou funções do Cloud Run para um serviço do Cloud Run definido como "Interno" ou "Interno e Cloud Load Balancing", o tráfego precisa ser roteado por uma rede VPC que é considerada interna. Consulte Receber solicitações de outros serviços do Cloud Run, do App Engine e de funções do Cloud Run.

  • Solicitações de recursos nas redes VPC do mesmo projeto são "internas" mesmo que o recurso de origem tenha um IP externo endereço IP.

  • As solicitações de recursos locais conectados à rede VPC via Cloud VPN e Cloud Interconnect são "internas".

Definir entrada

É possível definir a entrada usando qualquer um dos métodos compatíveis nas guias abaixo:

Console

  1. No console do Google Cloud, acesse a página do Cloud Run:

    Acessar o Cloud Run

  2. Se você estiver configurando um novo serviço, clique em Implantar contêiner e selecione Serviço para mostrar o formulário Criar serviço. Preencha a página inicial de configurações do serviço.

  3. Se você estiver configurando um serviço atual, clique nele e na guia Rede.

  4. Selecione o tráfego de entrada que você quer permitir:

    imagem

  5. Clique em Criar ou Salvar.

gcloud

  1. Se você estiver implantando um novo serviço, implante seu serviço com a sinalização --ingress:

    gcloud run deploy SERVICE --image IMAGE_URL --ingress INGRESS

    Substituir

    • INGRESS por uma das configurações de entrada disponíveis:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • SERVICE pelo nome do serviço.
    • IMAGE_URL por uma referência à imagem de contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  2. Se você estiver alterando uma entrada de serviço atual:

    gcloud run services update SERVICE --ingress INGRESS

    Substituir

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço, faça o download da configuração YAML correspondente:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize a anotação run.googleapis.com/ingress::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/ingress: INGRESS
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION

    Substituir

    • SERVICE com o nome do Cloud Run.
    • INGRESS por uma das configurações de entrada disponíveis:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • 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

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

Adicione a instrução a seguir ao seu arquivo main.tf:

resource "google_cloud_run_v2_service" "default" {
  provider = google-beta
  name     = "ingress-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  # For valid annotation values and descriptions, see
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#ingress
  ingress = "INGRESS_TRAFFIC_INTERNAL_ONLY"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello" #public image for your service
    }
  }
}

Desativar o URL padrão

Desative os URLs run.app padrão de um serviço do Cloud Run para permitir apenas o tráfego dos outros caminhos de entrada do serviço: Cloud Load Balancing e qualquer mapeamento de domínio configurado.

Para desativar o URL padrão, siga estas etapas:

Linha de comando

  • Para desativar o URL run.app para um serviço, execute o comando gcloud beta run deploy ou gcloud beta run services update com a flag --no-default-url:

    gcloud beta run deploy SERVICE_NAME --no-default-url

    em que SERVICE_NAME é o nome da instância do serviço do Cloud Run.

Na saída, o URL é exibido como None.

Para restaurar o URL padrão, use a sinalização --default-url.

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Para desativar o URL run.app, use a anotação run.googleapis.com/default-url-disabled:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/default-url-disabled: true
        run.googleapis.com/launch-stage: BETA
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION

    Substituir

    • SERVICE pelo nome do serviço do Cloud Run;
    • 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. Crie ou atualize o serviço usando o seguinte comando:

    gcloud run services replace service.yaml

Para restaurar o URL padrão, remova a anotação run.googleapis.com/default-url-disabled.

Os seguintes serviços do Google Cloud estão usando o URL run.app padrão para invocar o Cloud Run. Desativar o URL run.app padrão impede que esses serviços funcionem como esperado:

A seguir