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
Habilita la API de IAP.
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:
-
Administrador de Cloud Run (
roles/run.admin
) en el proyecto -
Otorga acceso al servicio habilitado para IAP:
Administrador de políticas de IAP (
roles/iap.admin
) en el proyecto -
Crea un servicio habilitado para IAP o actualiza uno existente para habilitar IAP:
-
Lector de Artifact Registry (
roles/artifactregistry.reader
) en las imágenes de contenedor implementadas -
Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser
) en la identidad del servicio
-
Lector de Artifact Registry (
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:
En la consola de Google Cloud , ve a la página de Cloud Run:
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.
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).
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).
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.
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:
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 deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud .
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 .
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.
Agrega
iap_enabled = true
a un recursogoogle_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" } } }
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.
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:
En la consola de Google Cloud , ve a la página de Cloud Run:
Haz clic en el servicio existente que deseas modificar.
Haz clic en Seguridad y selecciona Permitir acceso público.
Haz clic en Guardar.
gcloud
Para inhabilitar el IAP directamente desde Cloud Run, agrega el parámetro --no-iap
cuando implementes tu app:
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 deLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
.
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:
En la consola de Google Cloud , ve a la página de Cloud Run:
Haz clic en el servicio existente que deseas modificar y, luego, en Seguridad.
En IAP, haz clic en Editar política.
Para agregar acceso, ingresa la principal y, de forma opcional, el nivel o los niveles de acceso que deseas agregar.
Para quitar el acceso de una principal existente, haz clic en el ícono de Borrar política junto a Niveles de acceso.
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?
- Si quieres obtener instrucciones para habilitar IAP desde un servicio de backend o un balanceador de cargas, consulta Habilita IAP para Cloud Run.
- Si tienes problemas para habilitar IAP para Cloud Run, consulta Solución de errores.
- Habilita identidades externas.
- Habilita la configuración de OAuth.
- Administra el acceso a los recursos protegidos con IAP.
- Cómo usar políticas de la organización para controlar la habilitación de IAP