Restrinja a entrada de rede para o Cloud Run

Esta página descreve como usar as definições de entrada para restringir o acesso à rede ao seu serviço do Cloud Run.

Ao nível da rede, o ponto final de um serviço do Cloud Run é acessível a partir dos seguintes caminhos de entrada de rede:

  • URLs run.app predefinidos, que pode desativar
  • Qualquer mapeamento de domínios configurado
  • Qualquer balanceador de carga de aplicações externo ou balanceador de carga de aplicações interno configurado

Todos os caminhos de entrada na rede estão sujeitos à definição de entrada do serviço. Os caminhos de entrada e a definição de entrada predefinidos permitem que qualquer recurso na Internet alcance o seu serviço do Cloud Run. Pode usar uma restrição personalizada para restringir as definições de entrada para a sua organização ou para um conjunto de projetos. A autenticação IAM continua a aplicar-se aos pedidos que chegam aos pontos finais do serviço a partir de qualquer um dos caminhos de entrada de rede anteriores. Para uma abordagem em camadas à gestão do acesso, use as definições de entrada de rede e a autenticação IAM.

Use etiquetas de rede para restringir o acesso da VM do conetor aos recursos da VPC.

Definições de entrada de rede disponíveis

Estão disponíveis as seguintes definições:

Definição Descrição
Internos Mais restritiva. Permite pedidos das seguintes origens:
  • Balanceador de carga de aplicações interno, incluindo pedidos de redes de VPC partilhada quando encaminhados através do balanceador de carga de aplicações interno.
  • Recursos permitidos por qualquer perímetro dos VPC Service Controls que contenha o seu serviço do Cloud Run. O Cloud Run tem de ser configurado como um serviço restrito.
  • Redes VPC que estão no mesmo projeto que o seu serviço do Cloud Run.
  • Entrada da VPC partilhada: a rede VPC partilhada para a qual a sua revisão está configurada para enviar tráfego. Para obter informações sobre quando o tráfego da VPC partilhada é reconhecido como "interno", consulte as Considerações especiais para a VPC partilhada.
  • Os seguintes Google Cloud produtos, se estiverem no mesmo projeto ou perímetro dos VPC Service Controls que o seu serviço do Cloud Run e se estiverem a usar o URL run.app predefinido e não um domínio personalizado:
Os pedidos destas origens permanecem na rede Google, mesmo que acedam ao seu serviço no URL run.app. Os pedidos de outras origens, incluindo a Internet, não conseguem aceder ao seu serviço no URL run.app ou nos domínios personalizados.

Interno e Cloud Load Balancing Esta definição permite pedidos dos seguintes recursos:
  • Recursos permitidos pela definição "interna" mais restritiva
  • Balanceador de carga de aplicações externo
Use esta definição para fazer o seguinte:
  • Aceitar pedidos da Internet através do balanceador de carga de aplicações externo. Não são permitidos pedidos diretos ao URL run.app a partir da Internet.
  • Certifique-se de que os pedidos da Internet estão sujeitos a funcionalidades do balanceador de carga de aplicações externo, como o Identity-Aware Proxy, o Google Cloud Armor e o Cloud CDN.

Nota: para ativar esta definição na CLI gcloud, use internal-and-cloud-load-balancing. Para ativar esta definição na Google Cloud consola, selecione Interno > Permitir tráfego de equilibradores de carga de aplicações externos.
Tudo O menos restritivo. Permite todos os pedidos, incluindo pedidos diretamente da Internet para o URL run.app.

Aceda a serviços internos

Aplicam-se as seguintes considerações adicionais:

  • Quando acede a serviços internos, chame-os como faria normalmente através do respetivo URL, quer seja o URL run.app predefinido ou um domínio personalizado configurado no Cloud Run.

  • Para pedidos de instâncias de VM do Compute Engine, não é necessária configuração adicional para máquinas com endereços IP externos ou que usam o Cloud NAT. Caso contrário, consulte o artigo Receba pedidos de redes VPC.

  • Quando chama a partir do Cloud Run ou do App Engine para um serviço do Cloud Run definido como "Interno" ou "Interno e Cloud Load Balancing", o tráfego tem de ser encaminhado através de uma rede de VPC considerada interna. Consulte o artigo Receba pedidos de outros serviços do Cloud Run ou do App Engine.

  • Os pedidos de recursos nas redes VPC no mesmo projeto são "internos", mesmo que o recurso de origem tenha um endereço IP externo.

  • Os pedidos de recursos no local ligados à rede VPC através da Cloud VPN e do Cloud Interconnect são "internos".

Definir entrada

Pode definir a entrada através da Google Cloud consola, da CLI do Google Cloud, do YAML ou do Terraform.

Consola

  1. Na Google Cloud consola, aceda à página do Cloud Run:

    Aceda ao Cloud Run

  2. Se estiver a configurar um novo serviço, selecione Serviços no menu e clique em Implementar contentor para apresentar o formulário Criar serviço. Preencha a página de definições iniciais do serviço.

  3. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, clique no separador Rede.

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

    imagem

  5. Clique em Criar ou Guardar.

gcloud

  1. Se estiver a implementar um novo serviço, implemente-o com a flag --ingress:

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

    Substitua o seguinte:

    • INGRESS: uma das definições de entrada disponíveis:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • SERVICE: o nome do seu serviço
    • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  2. Se estiver a alterar uma entrada de serviço existente:

    gcloud run services update SERVICE --ingress INGRESS

    Substitua o seguinte:

YAML

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    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

    Substitua o seguinte:

    • SERVICE: o nome do seu Cloud Run
    • INGRESS: uma das definições de entrada disponíveis:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • REVISION com um novo nome de revisão ou elimine-o (se existir). Se fornecer um novo nome de revisão, este tem de cumprir os seguintes critérios:
      • Começa com SERVICE-
      • Contém apenas letras minúsculas, números e -
      • Não termina com um -
      • Não exceder 63 carateres
  3. Substitua o serviço pela respetiva nova configuração através do seguinte comando:

    gcloud run services replace service.yaml

Terraform

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

Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do Terraform:

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

Desative o URL predefinido

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

Para desativar o URL predefinido, siga os passos abaixo através da Google Cloud consola, da Google Cloud CLI, do YAML ou do Terraform.

Consola

  1. Na Google Cloud consola, aceda à página do Cloud Run:

    Aceda ao Cloud Run

  2. Clique num serviço existente.

  3. Selecione o separador Rede.

  4. No cartão Pontos finais, desmarque a opção Ativar em URL do ponto final HTTPS predefinido.

  5. Clique em Guardar.

Para restaurar o URL predefinido, selecione Ativar e clique em Guardar.

gcloud

  • Para um serviço existente, execute o comando gcloud run services update com a flag --no-default-url, por exemplo:

    gcloud run services update SERVICE_NAME --no-default-url
  • Para um novo serviço, execute o comando gcloud run deploy com a flag --no-default-url, por exemplo:

    gcloud run deploy SERVICE_NAME --no-default-url

    onde SERVICE_NAME é o nome do seu serviço do Cloud Run.

    No resultado, o URL é apresentado como None.

Para restaurar o URL predefinido, use a flag --default-url.

YAML

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    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
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION

    Substitua o seguinte:

    • SERVICE com o nome do seu serviço do Cloud Run.
    • REVISION com um novo nome de revisão ou elimine-o (se existir). Se fornecer um novo nome de revisão, este tem de cumprir os seguintes critérios:
      • Começa com SERVICE-
      • Contém apenas letras minúsculas, números e -
      • Não termina com um -
      • Não exceder 63 carateres
  3. Crie ou atualize o serviço com o seguinte comando:

    gcloud run services replace service.yaml

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

Terraform

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

Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do Terraform:
  resource "google_cloud_run_v2_service" "disable_default_url_service" {
    name     = "cloudrun-service"
    location = "europe-west1"
    default_uri_disabled = true

    template {
      containers {
        image = "us-docker.pkg.dev/cloudrun/container/hello"
      }
      annotations = {
        "run.googleapis.com/ingress" = "all"   # "all" or "internal-only"
      }

    }
  }

Verifique se as linhas launch_stage e default_uri_disabled estão no ficheiro main.tf. O recurso google_cloud_run_v2_service anterior especifica um serviço do Cloud Run com o URL predefinido desativado na pré-visualização.

Para restaurar o URL predefinido, remova os argumentos default_uri_disabled e launch_stage.

Os seguintes Google Cloud serviços estão a usar o URL run.apppredefinido para invocar o Cloud Run. A desativação do URL run.app predefinido impede que estes serviços funcionem conforme esperado:

O que se segue?