Como restringir a entrada no 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 de rede, por padrão, qualquer recurso na Internet pode acessar seu serviço do Cloud Run no URL run.app ou em um domínio personalizado configurado no Cloud Run. É possível alterar esse padrão especificando uma configuração diferente de entrada. Todos os caminhos de entrada, incluindo o URL run.app padrão, estão sujeitos à configuração de entrada. O recurso de entrada é definido no nível do serviço.

As configurações de entrada e os métodos de autenticação do IAM são duas maneiras de gerenciar o acesso a um serviço. Eles são independentes uns dos outros. Use uma dessas abordagens para gerenciar o acesso em camadas.

Configurações de entrada 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:
  • Balanceador de carga de aplicativo interno, incluindo solicitações de redes VPC compartilhadas quando encaminhadas por meio do balanceador de carga de aplicativo interno.
  • Solicitações permitidas pelo VPC Service Controls.

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.
e
Para solicitações do Cloud Scheduler, Cloud Tasks, Eventarc, Pub/Sub, BigQuery e Workflows para um serviço interno, use o run.app padrão do Cloud Run para esse serviço. Não é possível usar um domínio personalizado.
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.
Tudo Menos restritiva. Permite todas as solicitações, incluindo solicitações diretamente da Internet para o URL run.app.

Como 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 públicos, 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 Cloud Functions para um serviço do Cloud Run definido como "Interno" ou "Interno e Cloud Load Balancing", o tráfego precisa ser roteado por uma VPC rede que é considerada interna. Consulte Receber solicitações de outros serviços do Cloud Run, do App Engine e do Cloud Functions.

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

Como configurar a entrada

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

Console

  1. Acesse o Cloud Run

  2. Se você estiver configurando um novo serviço, clique em Criar serviço e preencha a página de configurações de serviço inicial conforme desejado.

  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:

    image

  5. Clique em Criar ou Salvar.

Linha de comando

  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"

  # 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
    }
  }
}

A seguir