Restringe la entrada a Cloud Run

En esta página, se describe cómo usar la configuración de entrada para restringir el acceso de red a tu servicio de Cloud Run. En un nivel de red, de forma predeterminada, cualquier recurso de Internet puede acceder a tu servicio Cloud Run en su URL run.app o en un dominio personalizado configurado en Cloud Run. Todas las rutas de acceso de entrada, incluida la URL predeterminada run.app, están sujetas al parámetro de configuración de entrada. La entrada se configura a nivel de servicio.

Puedes cambiar estos valores predeterminados si especificas una configuración de entrada diferente o inhabilitas la URL run.app.

La configuración de entrada y los métodos de autenticación de IAM son dos formas de administrar el acceso a un servicio. Son independientes entre sí. Para adoptar un enfoque en capas a fin de administrar el acceso, usa ambos.

Opciones de configuración de entrada disponibles

Podrás configurar los siguientes parámetros:

Configuración Descripción
Interno Más restrictivo. Permite solicitudes de las siguientes fuentes:
  • Balanceador de cargas de aplicaciones interno, incluidas las solicitudes de redes de VPC compartida cuando se enrutan a través del balanceador de cargas de aplicaciones interno
  • Recursos permitidos por cualquier perímetro de los Controles del servicio de VPC que contenga tu servicio de Cloud Run Cloud Run se debe configurar como un servicio restringido.
  • Redes de VPC que se encuentran en el mismo proyecto que el servicio de Cloud Run
  • Entrada de VPC compartida: La red de VPC compartida a la que está configurada tu revisión para enviar tráfico. Para obtener información sobre cuándo se reconoce el tráfico de VPC compartida como “interno”, consulta Consideraciones especiales para la VPC compartida.
  • Los siguientes productos de Google Cloud, si están en el mismo proyecto o perímetro de los Controles del servicio de VPC que tu servicio de Cloud Run y si usan la URL run.app predeterminada y no un dominio personalizado:
  • Balanceador de cargas de aplicaciones interno, incluidas las solicitudes de redes de VPC compartida cuando se enrutan a través del balanceador de cargas de aplicaciones interno
  • Solicitudes permitidas por los Controles del servicio de VPC.

Las solicitudes de estas fuentes permanecen dentro de la red de Google, incluso si acceden a tu servicio en la URL run.app. Las solicitudes de otras fuentes, incluido Internet, no pueden llegar a tu servicio en la URL run.app ni en dominios personalizados.

Para solicitudes de Cloud Scheduler, Cloud Tasks, Eventarc, Pub/Sub, BigQuery y Workflows a un servicio interno, debes usar la URL run.app predeterminada de Cloud Run para ese servicio. No puedes usar un dominio personalizado.
Balanceo de cargas interno y en la nube Esta configuración permite solicitudes de los siguientes recursos:
  • Recursos permitidos por la configuración "interna" más restrictiva
  • Balanceador de cargas de aplicaciones externo
Usa este parámetro de configuración para hacer lo siguiente:
  • Acepta solicitudes de Internet a través del balanceador de cargas de aplicaciones externo. No se permiten solicitudes directas a la URL run.app desde Internet.
  • Asegúrate de que las solicitudes de Internet estén sujetas a funciones del balanceador de cargas de aplicaciones externo, como Identity-Aware Proxy, Google Cloud Armor y Cloud CDN.

Nota: Para habilitar este parámetro de configuración en gcloud CLI, usa internal-and-cloud-load-balancing. Para habilitar este parámetro de configuración en la consola de Google Cloud, selecciona Internos > Permitir el tráfico de balanceadores de cargas de aplicaciones externos.
Todos Menos restrictivo. Permite todas las solicitudes, incluidas las solicitudes directas desde Internet a la URL run.app.

Accede a servicios internos

Se aplican las siguientes consideraciones adicionales:

  • Cuando accedes a los servicios internos, llámalos como lo harías con sus URL públicas, ya sea la URL run.app predeterminada o un dominio personalizado configurado en Cloud Run.

  • Para las solicitudes de instancias de VM de Compute Engine, no se requiere ninguna configuración adicional para las máquinas que tienen direcciones IP externas o que usan Cloud NAT. De lo contrario, consulta Recibe solicitudes de redes de VPC.

  • Cuando se llama desde Cloud Run, App Engine o Cloud Functions a un servicio de Cloud Run configurado como “Interno” o “Interno y Cloud Load Balancing”, el tráfico debe enrutarse a través de una red de VPC que se considere interna. Consulta Recibe solicitudes de otros servicios de Cloud Run, App Engine y Cloud Functions.

  • Las solicitudes de recursos dentro de una red de VPC en el mismo proyecto son “internas” incluso si el recurso desde el que se originan tiene una dirección IP externa.

  • Las solicitudes de recursos locales conectados a la red de VPC mediante Cloud VPN y Cloud Interconnect se consideran “internas”.

Configura la entrada

Puedes configurar la entrada con cualquiera de los métodos admitidos en las siguientes pestañas:

Console

  1. Ir a Cloud Run

  2. Si estás configurando un servicio nuevo, haz clic en Crear servicio y completa la página de configuración inicial del servicio como desees.

  3. Si quieres configurar un servicio existente, haz clic en el servicio y, luego, en la pestaña Herramientas de redes.

  4. Selecciona el tráfico de entrada que deseas permitir:

    imagen

  5. Haz clic en Crear o Guardar.

gcloud

  1. Si implementas un servicio nuevo, impleméntalo con la marca --ingress:

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

    Reemplazar

    • INGRESS por una de las configuraciones de entrada disponibles
      • all
      • internal
      • internal-and-cloud-load-balancing
    • SERVICE el nombre de tu servicio
    • IMAGE_URL por una referencia a la imagen del contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest Si usas Artifact Registry, el repositorio REPO_NAME debe estar creado. La URL tiene el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  2. Si cambias una entrada de servicio existente:

    gcloud run services update SERVICE --ingress INGRESS

    Reemplazar

YAML

  1. Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Actualiza la anotación 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

    Reemplazar

    • SERVICE por el nombre del trabajo de Cloud Run.
    • INGRESS por una de las configuraciones de entrada disponibles
      • all
      • internal
      • internal-and-cloud-load-balancing
    • REVISION por un nombre de revisión nuevo o bórralo (si está presente). Si proporcionas un nuevo nombre de revisión, debe cumplir con los siguientes criterios:
      • Comienza con SERVICE-
      • Solo contiene letras minúsculas, números y -
      • No termina con -
      • No supera los 63 caracteres
  3. Reemplaza el servicio por la configuración nueva mediante el siguiente comando:

    gcloud run services replace service.yaml

Terraform

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Agrega lo siguiente a tu archivo 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
    }
  }
}

Inhabilita la URL predeterminada

Inhabilita la URL run.app predeterminada para los servicios de Cloud Run a fin de evitar el acceso a cualquier servicio, excepto a través de Cloud Load Balancing que administres. Esto sujeto a todo el tráfico entrante a las políticas de seguridad que configuras en los balanceadores de cargas.

Inhabilitar la URL run.app evita que los siguientes servicios de Google Cloud invoquen servicios de Cloud Run:

Línea de comandos

  • Para inhabilitar la URL run.app de un servicio, ejecuta el comando gcloud beta run deploy con la marca --no-default-url:

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

    En el ejemplo anterior, SERVICE_NAME es el nombre de tu servicio de Cloud Run.

En el resultado, la URL se muestra como None.

YAML

  1. Si creas un servicio nuevo, omite este paso. Si actualizas un servicio existente, descarga su configuración de YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Para inhabilitar la URL run.app, implementa tu servicio con la anotación 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

    Reemplazar

    • SERVICE por el nombre del servicio de Cloud Run
    • REVISION por un nombre de revisión nuevo o bórralo (si está presente). Si proporcionas un nuevo nombre de revisión, debe cumplir con los siguientes criterios:
      • Comienza con SERVICE-
      • Solo contiene letras minúsculas, números y -
      • No termina con -
      • No supera los 63 caracteres
  3. Reemplaza el servicio por la configuración nueva mediante el siguiente comando:

    gcloud run services replace service.yaml

¿Qué sigue?