Restringir el acceso de red 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.

A nivel de red, se puede acceder al endpoint de un servicio de Cloud Run desde las siguientes rutas de entrada de red:

  • URLs run.app predeterminadas, que puedes inhabilitar
  • Cualquier asignación de dominio configurada
  • Cualquier balanceador de carga de aplicación externo o interno configurado

Todas las rutas de entrada de la red están sujetas al ajuste de entrada del servicio. Las rutas de entrada y la configuración de entrada predeterminadas permiten que cualquier recurso de Internet acceda a tu servicio de Cloud Run. Puedes usar una restricción personalizada para restringir los ajustes de entrada de tu organización o de un conjunto de proyectos. La autenticación de gestión de identidades y accesos sigue aplicándose a las solicitudes que llegan a los endpoints de servicio desde cualquiera de las rutas de entrada de red anteriores. Para gestionar el acceso por capas, utiliza tanto la configuración de entrada de red como la autenticación de IAM.

Usa etiquetas de red para restringir el acceso de la VM del conector a los recursos de la VPC.

Ajustes de entrada de red disponibles

Están disponibles los siguientes ajustes:

Ajuste Descripción
Interno Es el más restrictivo. Permite las solicitudes de las siguientes fuentes:
  • Balanceador de carga de aplicación interno, incluidas las solicitudes de redes de VPC compartida cuando se enrutan a través del balanceador de carga de aplicación interno.
  • Recursos permitidos por cualquier perímetro de Controles de Servicio de VPC que contenga tu servicio de Cloud Run. Cloud Run debe configurarse como un servicio restringido.
  • Redes de VPC que estén en el mismo proyecto que tu servicio de Cloud Run.
  • Ingreso de VPC compartida: la red de VPC compartida a la que se ha configurado 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 las consideraciones especiales de la VPC compartida.
  • Los siguientes productos Google Cloud , si están en el mismo proyecto o perímetro de Controles de Servicio de VPC que tu servicio de Cloud Run y si usan la URL run.app predeterminada y no un dominio personalizado:
Las solicitudes de estas fuentes permanecen en la red de Google, aunque accedan a tu servicio en la URL run.app. Las solicitudes de otras fuentes, incluida Internet, no pueden acceder a tu servicio en la URL run.app ni en los dominios personalizados.

Balanceo de carga interno y de Cloud Este ajuste permite las solicitudes de los siguientes recursos:
  • Recursos permitidos por el ajuste "interno", que es más restrictivo
  • Balanceador de carga de aplicación externo
Usa este ajuste para hacer lo siguiente:
  • Aceptar solicitudes de Internet a través del balanceador de carga de aplicación 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 las funciones del balanceador de carga de aplicaciones externo, como Identity-Aware Proxy, Google Cloud Armor y Cloud CDN.

Nota: Para habilitar este ajuste en gcloud CLI, usa internal-and-cloud-load-balancing. Para habilitar este ajuste en la consola de Google Cloud , selecciona Interno > Permitir tráfico de balanceadores de carga de aplicaciones externos.
Todo La menos restrictiva. Permite todas las solicitudes, incluidas las que se envían directamente desde Internet a la URL de run.app.

Acceder a servicios internos

Se aplican las siguientes consideraciones adicionales:

  • Cuando accedas a servicios internos, llámalos como lo harías normalmente con su URL, ya sea la URL run.app predeterminada o un dominio personalizado configurado en Cloud Run.

  • En el caso de las solicitudes de instancias de VM de Compute Engine, no es necesario realizar ninguna configuración adicional en las máquinas que tengan direcciones IP externas o que usen Cloud NAT. De lo contrario, consulta Recibir solicitudes de redes VPC.

  • Cuando se llama desde Cloud Run o App Engine a un servicio de Cloud Run que está configurado como "Internal" (Interno) o "Internal and Cloud Load Balancing" (Interno y balanceo de carga de Cloud), el tráfico debe enrutarse a través de una red de VPC que se considere interna. Consulta Recibir solicitudes de otros servicios de Cloud Run o App Engine.

  • Las solicitudes de recursos de redes VPC del mismo proyecto se consideran "internas" aunque el recurso del que procedan tenga una dirección IP externa.

  • Las solicitudes de recursos on-premise conectados a la red de VPC mediante Cloud VPN y Cloud Interconnect son "internas".

Definir Ingress

Puedes configurar el tráfico de entrada mediante la Google Cloud consola, la CLI de Google Cloud, YAML o Terraform.

Consola

  1. En la Google Cloud consola, ve a la página Cloud Run:

    Ir a Cloud Run

  2. Si va a configurar un servicio nuevo, seleccione Servicios en el menú y haga clic en Implementar contenedor para que se muestre el formulario Crear servicio. Rellena la página de configuración inicial del servicio.

  3. Si vas a configurar un servicio, haz clic en él y, a continuación, en la pestaña Redes.

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

    imagen

  5. Haz clic en Crear o en Guardar.

gcloud

  1. Si vas a implementar un nuevo servicio, hazlo con la marca --ingress:

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

    Haz los cambios siguientes:

    • INGRESS: uno de los ajustes de entrada disponibles:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • SERVICE: nombre de tu servicio
    • IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  2. Si vas a cambiar un ingreso de servicio:

    gcloud run services update SERVICE --ingress INGRESS

    Haz los cambios siguientes:

YAML

  1. Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:

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

    Haz los cambios siguientes:

    • SERVICE: el nombre de tu Cloud Run
    • INGRESS: uno de los ajustes de entrada disponibles:
      • all
      • internal
      • internal-and-cloud-load-balancing
    • REVISION con un nuevo nombre de revisión o elimínelo (si está presente). Si proporcionas un nuevo nombre de revisión, debe cumplir los siguientes criterios:
      • Empieza por SERVICE-
      • Contiene solo letras minúsculas, números y -
      • No termina con -
      • No supera los 63 caracteres
  3. Sustituye el servicio por su nueva configuración con el siguiente comando:

    gcloud run services replace service.yaml

Terraform

Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.

Añade lo siguiente a un recurso google_cloud_run_v2_service en tu configuración de 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
    }
  }
}

Inhabilitar la URL predeterminada

Inhabilita las URLs run.app predeterminadas de un servicio de Cloud Run para permitir solo el tráfico de las otras rutas de entrada del servicio: Cloud Load Balancing y cualquier asignación de dominios configurada.

Para inhabilitar la URL predeterminada, sigue estos pasos con la Google Cloud consola, la CLI de Google Cloud, YAML o Terraform.

Consola

  1. En la Google Cloud consola, ve a la página Cloud Run:

    Ir a Cloud Run

  2. Haz clic en un servicio.

  3. Selecciona la pestaña Redes.

  4. En la tarjeta Endpoints (Puntos de conexión), desmarca Enable (Habilitar) en Default HTTPS endpoint URL (URL del punto de conexión HTTPS predeterminado).

  5. Haz clic en Guardar.

Para restaurar la URL predeterminada, selecciona Habilitar y haz clic en Guardar.

gcloud

  • En el caso de un servicio que ya tengas, ejecuta el comando gcloud run services update con la marca --no-default-url. Por ejemplo:

    gcloud run services update SERVICE_NAME --no-default-url
  • En el caso de un servicio nuevo, ejecuta el comando gcloud run deploy con la marca --no-default-url. Por ejemplo:

    gcloud run deploy SERVICE_NAME --no-default-url

    donde SERVICE_NAME es el nombre de tu servicio de Cloud Run.

    En el resultado, la URL se muestra como None.

Para restaurar la URL predeterminada, usa la marca --default-url.

YAML

  1. Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:

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

    Haz los cambios siguientes:

    • SERVICE con el nombre de tu servicio de Cloud Run.
    • REVISION con un nuevo nombre de revisión o elimínelo (si está presente). Si proporcionas un nuevo nombre de revisión, debe cumplir los siguientes criterios:
      • Empieza por SERVICE-
      • Contiene solo letras minúsculas, números y -
      • No termina con -
      • No supera los 63 caracteres
  3. Crea o actualiza el servicio con el siguiente comando:

    gcloud run services replace service.yaml

Para restaurar la URL predeterminada, elimina la anotación run.googleapis.com/default-url-disabled.

Terraform

Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.

Añade lo siguiente a un recurso google_cloud_run_v2_service en tu configuración de 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"
      }

    }
  }

Verifica que las líneas launch_stage y default_uri_disabled estén en tu archivo main.tf. El recurso google_cloud_run_v2_service anterior especifica un servicio de Cloud Run con la URL predeterminada inhabilitada en Vista previa.

Para restaurar la URL predeterminada, quite los argumentos default_uri_disabled y launch_stage.

Los siguientes Google Cloud servicios usan la URL run.apppredeterminada para invocar Cloud Run. Si inhabilitas la URL predeterminada de run.app, estos servicios no funcionarán como deberían:

Siguientes pasos