Configura IAP para Cloud Run

En esta página, se describe cómo habilitar IAP desde Cloud Run y proteger el tráfico destinado a un servicio de Cloud Run mediante el enrutamiento a IAP para la autenticación. Si habilitas IAP desde Cloud Run, puedes enrutar el tráfico con un solo clic desde todas las rutas de acceso de entrada, incluidas las URLs run.app predeterminadas y los balanceadores de cargas.

Limitaciones conocidas

  • El proyecto debe estar dentro de una organización.
  • Las identidades deben pertenecer a la misma organización.
  • No puedes configurar IAP en el balanceador de cargas y en el servicio de Cloud Run.
  • Es posible que algunas integraciones, como Pub/Sub, dejen de funcionar si se habilitan las IAP.

Antes de comenzar

Roles requeridos

Para obtener los permisos que necesitas para habilitar la IAP, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Habilita IAP desde Cloud Run

Te recomendamos que habilites IAP directamente desde Cloud Run.

Si usas IAP y Identity and Access Management (IAM) en el mismo servicio de Cloud Run, ten en cuenta las siguientes condiciones:

  • Se realizan las verificaciones de IAP y de IAM.

  • Primero, se realiza la verificación de la IAP, que acepta o bloquea las solicitudes según la configuración de la IAP.

  • Si la solicitud pasa la verificación de IAP, IAP usa su propia cuenta de servicio para autenticarse en la verificación de IAM de Cloud Run.

  • Debido a que la verificación de IAP se realiza primero, es posible que algunos servicios, como Pub/Sub, no se autentiquen correctamente en él.

Habilita IAP desde Cloud Run con la consola de Google Cloud , Google Cloud CLI o Terraform.

Console

Cuando habilitas IAP para Cloud Run, IAP requiere permisos para invocar tu servicio de Cloud Run. Si habilitas IAP con la consola de Google Cloud , este permiso se otorga automáticamente cuando se asigna el rol de invocador de Cloud Run (roles/run.invoker) al agente de servicio de IAP.

Para habilitar IAP desde Cloud Run, haz lo siguiente:

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

    Ir a Cloud Run

  2. Si quieres configurar y, luego, implementar un servicio nuevo, selecciona Implementar contenedor y, luego, Servicio. Si quieres configurar y, luego, implementar un servicio existente, haz clic en el servicio y, luego, en Implementar y editar una nueva revisión.

  3. Si configuras un servicio nuevo, completa la página de configuración del servicio inicial como desees y selecciona Solicitar autenticación. Selecciona Identity-Aware Proxy (IAP).

  4. Si quieres configurar y, luego, implementar un servicio existente, haz clic en el servicio y, luego, selecciona Solicitar autenticación. Selecciona Identity-Aware Proxy (IAP).

  5. Haz clic en Editar política para crear una política de acceso adaptado al contexto:

    • Agrega una o más principales y, de forma opcional, el nivel de acceso que cada principal debe satisfacer para acceder a la aplicación.

    • Haz clic en Guardar.

  6. Haz clic en Guardar.

gcloud

Para habilitar IAP directamente desde Cloud Run, agrega la marca --iap cuando implementes tu app y otorga permiso de invocador al agente de servicio de IAP:

  1. Implementa tu servicio de Cloud Run con uno de los siguientes comandos:

    Para un servicio nuevo, sigue estos pasos:

    gcloud beta run deploy SERVICE_NAME \
    --region=REGION \
    --image=IMAGE_URL \
    --no-allow-unauthenticated \
    --iap

    Para un servicio existente, haz lo siguiente:

    gcloud beta run services update SERVICE_NAME \
    --region=REGION \
    --iap

    Reemplaza lo siguiente:

    • SERVICE_NAME: el nombre de tu servicio de Cloud Run.
    • REGION: El nombre de tu región de Cloud Run. Por ejemplo, europe-west1
    • IMAGE_URL: Es 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 debe estar creado. La URL sigue el formato de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud .
  2. Otorga permiso de invocador al agente de servicio de IAP:

    gcloud run services add-iam-policy-binding SERVICE_NAME \
    --region=REGION \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-iap.iam.gserviceaccount.com \
    --role=roles/run.invoker

    Reemplaza lo siguiente:

    • SERVICE_NAME: el nombre de tu servicio de Cloud Run.
    • REGION: El nombre de tu región de Cloud Run. Por ejemplo, europe-west1
    • PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud .
  3. Para verificar que tu servicio esté configurado con IAP habilitado, ejecuta el siguiente comando:

    gcloud beta run services describe SERVICE_NAME

    El resultado debería contener la siguiente cadena:

    Iap Enabled: true

Ahora enrutas todo el tráfico destinado al servicio de Cloud Run configurado a IAP para la autenticación antes de pasarlo al contenedor.

Terraform

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

Para habilitar IAP con Terraform, debes actualizar la definición del servicio y agregar una vinculación de política de IAM para otorgar permiso de invocador a IAP.

  1. Agrega iap_enabled = true a un recurso google_cloud_run_v2_service en tu configuración de Terraform para habilitar el IAP en el servicio:

    resource "google_cloud_run_v2_service" "default" {
      provider = google-beta
      name     = "cloudrun-iap-service"
      location = "europe-west1"
      ingress      = "INGRESS_TRAFFIC_ALL"
      launch_stage = "BETA"
      iap_enabled  = true
    
      template {
        containers {
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
      }
    }
    
  2. Agrega lo siguiente para otorgar el rol roles/run.invoker al agente de servicio de IAP.

    resource "google_cloud_run_v2_service_iam_member" "iap_invoker" {
      provider = google-beta
      project = google_cloud_run_v2_service.default.project
      location = google_cloud_run_v2_service.default.location
      name = google_cloud_run_v2_service.default.name
      role   = "roles/run.invoker"
      member = "serviceAccount:service-"PROJECT_NUMBER@gcp-sa-iap.iam.gserviceaccount.com"
    }
    

    Reemplaza PROJECT_NUMBER por el número del proyecto.

  3. Opcional. Para recuperar los datos de la política de IAM actual, agrega lo siguiente a un recurso google_cloud_run_v2_service_iam_policy en tu configuración de Terraform.

    data "google_cloud_run_v2_service_iam_policy" "policy" {
      project = google_cloud_run_v2_service.default.project
      location = google_cloud_run_v2_service.default.location
      name = google_cloud_run_v2_service.default.name
    }
    

Inhabilita IAP desde Cloud Run

Puedes inhabilitar el IAP con la consola de Google Cloud o gcloud CLI.

Console

Para inhabilitar IAP desde Cloud Run, haz lo siguiente:

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

    Ir a Cloud Run

  2. Haz clic en el servicio existente que deseas modificar.

  3. Haz clic en Seguridad y selecciona Permitir acceso público.

  4. Haz clic en Guardar.

gcloud

Para inhabilitar el IAP directamente desde Cloud Run, agrega el parámetro --no-iap cuando implementes tu app:

  1. Implementa tu servicio de Cloud Run con cualquiera de los siguientes comandos:

    Para un servicio nuevo, sigue estos pasos:

    gcloud beta run deploy SERVICE_NAME \
    --region=REGION \
    --image=IMAGE_URL \
    --no-iap

    Para un servicio existente, haz lo siguiente:

    gcloud beta run services update SERVICE_NAME \
    --region=REGION \
    --no-iap

    Reemplaza lo siguiente:

    • SERVICE_NAME: el nombre de tu servicio de Cloud Run.
    • REGION: El nombre de tu región de Cloud Run.
    • IMAGE_URL: Es 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 debe estar creado. La URL sigue el formato de LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  2. Para verificar que tu servicio ya no esté configurado con IAP habilitado, ejecuta el siguiente comando:

    gcloud beta run services describe SERVICE_NAME

    El resultado ya no debería contener la siguiente cadena:

    Iap Enabled: true

Ya no enrutarás todo el tráfico destinado al servicio de Cloud Run configurado a IAP para la autenticación antes de pasarlo al contenedor.

Administra el acceso de usuarios o grupos

De forma predeterminada, IAP para Cloud Run usa identidades internas de la organización con Cuentas de Google. Puedes agregar o quitar el acceso a un servicio de Cloud Run con la Google Cloud consola o gcloud CLI.

Console

Sigue estos pasos para agregar o quitar el acceso:

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

    Ir a Cloud Run

  2. Haz clic en el servicio existente que deseas modificar y, luego, en Seguridad.

  3. En IAP, haz clic en Editar política.

  4. Para agregar acceso, ingresa la principal y, de forma opcional, el nivel o los niveles de acceso que deseas agregar.

  5. Para quitar el acceso de una principal existente, haz clic en el ícono de Borrar política junto a Niveles de acceso.

  6. Haz clic en Guardar.

gcloud

Para agregar o quitar el acceso a un servicio de Cloud Run para usuarios o grupos individuales dentro de tu organización, ejecuta uno de los siguientes comandos:

  • Sigue estos pasos para agregar el acceso:

    gcloud beta iap web add-iam-policy-binding \
    --member=user:USER_EMAIL \
    --role=roles/iap.httpsResourceAccessor \
    --region=REGION \
    --resource-type=cloud-run \
    --service=SERVICE_NAME
  • Para quitar el acceso, sigue estos pasos:

    gcloud beta iap web remove-iam-policy-binding \
    --member=user:USER_EMAIL \
    --role=roles/iap.httpsResourceAccessor \
    --region=REGION \
    --resource-type=cloud-run \
    --service=SERVICE_NAME
  • Para ver el acceso, sigue estos pasos:

    gcloud beta iap web get-iam-policy \
    --region=REGION \
    --resource-type=cloud-run \
    --service=SERVICE_NAME

Reemplaza lo siguiente:

  • USER_EMAIL: la dirección de correo electrónico del usuario.
  • REGION: El nombre de tu región de Cloud Run.
  • SERVICE_NAME: el nombre de tu servicio de Cloud Run.

Soluciona problemas

La falla del agente de servicio provoca un error de IAM establecido

Habilitar las IAP en un proyecto nuevo por primera vez puede provocar el siguiente error:

Setting IAM permissions failed

Esto se debe a que falló el agente de servicio de Cloud Run. Para resolver el problema, vuelve a habilitar IAP o establece la política de IAM de forma manual.

¿Qué sigue?