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 enrutándolo a IAP para la autenticación. Si habilitas IAP desde Cloud Run, puedes dirigir el tráfico con un solo clic desde todas las rutas de entrada, incluidas las URLs run.app
predeterminadas y los balanceadores de carga.
Limitaciones conocidas
- El proyecto debe estar en una organización.
- Las identidades deben pertenecer a la misma organización.
- No puedes configurar IAP en el balanceador de carga y en el servicio de Cloud Run.
- Es posible que algunas integraciones, como Pub/Sub, dejen de funcionar si se habilita la compra en la aplicación.
Antes de empezar
Habilita la API IAP.
Roles obligatorios
Para obtener los permisos que necesitas para habilitar IAP, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
-
Administrador de Cloud Run (
roles/run.admin
) en el proyecto -
Concede acceso al servicio habilitado para IAP:
Administrador de políticas de IAP (
roles/iap.admin
) en el proyecto -
Crea un servicio con IAP o actualiza uno que ya tengas para habilitar IAP:
-
Lector de Artifact Registry (
roles/artifactregistry.reader
) en las imágenes de contenedor implementadas -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) en la identidad de servicio
-
Lector de Artifact Registry (
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Habilitar IAP desde Cloud Run
Te recomendamos que habilites IAP directamente desde Cloud Run.
Si usas IAP y Gestión de Identidades y Accesos (IAM) en el mismo servicio de Cloud Run, ten en cuenta las siguientes condiciones:
Se realizan las comprobaciones de IAP e IAM.
La comprobación de las compras en la aplicación se realiza primero y acepta o bloquea las solicitudes en función de la configuración de las compras en la aplicación.
Si la solicitud supera la comprobación de IAP, IAP usa su propia cuenta de servicio para autenticarse en la comprobación de IAM de Cloud Run.
Como la comprobación de las compras en aplicaciones se realiza primero, es posible que algunos servicios, como Pub/Sub, no se autentiquen correctamente.
Habilita IAP desde Cloud Run con la consola de Google Cloud , la CLI de Google Cloud o Terraform.
Consola
Cuando habilitas IAP para Cloud Run, IAP requiere permisos para invocar tu servicio de Cloud Run. Si habilitas IAP mediante la consola, este permiso se concede automáticamente al asignar el rol de invocador de Cloud Run (roles/run.invoker
) al agente de servicio de IAP. Google Cloud
Para habilitar IAP desde Cloud Run, sigue estos pasos:
En la Google Cloud consola, ve a la página Cloud Run:
Si vas a configurar e implementar un nuevo servicio, selecciona Implementar contenedor y, a continuación, Servicio. Si va a configurar y desplegar un servicio que ya tiene, haga clic en el servicio y, a continuación, en Editar y desplegar nueva revisión.
Si vas a configurar un servicio nuevo, rellena la página de configuración inicial del servicio según sea necesario y, a continuación, selecciona Requerir autenticación. Selecciona Identity-Aware Proxy (IAP).
Si vas a configurar e implementar un servicio, haz clic en el servicio y, a continuación, selecciona Requerir autenticación. Selecciona Identity-Aware Proxy (IAP).
Haz clic en Editar política para crear una política de acceso contextual:
Añade uno o varios principales y, opcionalmente, el nivel de acceso que debe cumplir cada principal para acceder a la aplicación.
Haz clic en Guardar.
Haz clic en Guardar.
gcloud
Para habilitar IAP directamente desde Cloud Run, añade la marca --iap
al desplegar tu aplicación y concede permiso de invocador al agente de servicio de IAP:
Despliega tu servicio de Cloud Run con uno de los siguientes comandos:
Para un servicio nuevo:
gcloud beta run deploy SERVICE_NAME \ --region=REGION \ --image=IMAGE_URL \ --no-allow-unauthenticated \ --iap
Para un servicio ya creado:
gcloud beta run services update SERVICE_NAME \ --region=REGION \ --iap
Haz los cambios siguientes:
- 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: 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 formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - PROJECT_NUMBER: tu número de proyecto. Google Cloud
Concede 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
Haz los cambios siguientes:
- 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: tu número de proyecto. 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 debe contener la siguiente cadena:
Iap Enabled: true
Ahora, todo el tráfico destinado al servicio de Cloud Run configurado se dirige a IAP para autenticarse antes de pasar al contenedor.
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Para habilitar IAP con Terraform, debes actualizar la definición de tu servicio y añadir una vinculación de políticas de gestión de identidades y accesos para conceder permiso de invocador a IAP.
Añade
iap_enabled = true
a un recursogoogle_cloud_run_v2_service
en tu configuración de Terraform para habilitar 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" } } }
Añade lo siguiente para asignar 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" }
Sustituye PROJECT_NUMBER por el número de tu proyecto.
Opcional. Para recuperar los datos de la política de IAM actual, añade 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 }
Inhabilitar IAP desde Cloud Run
Puedes inhabilitar IAP mediante la Google Cloud consola o la CLI de gcloud.
Consola
Para inhabilitar IAP desde Cloud Run, haz lo siguiente:
En la Google Cloud consola, ve a la página Cloud Run:
Haz clic en el servicio que quieras modificar.
Haz clic en Seguridad y selecciona Permitir acceso público.
Haz clic en Guardar.
gcloud
Para inhabilitar IAP directamente desde Cloud Run, añade la marca --no-iap
al desplegar tu aplicación:
Despliega tu servicio de Cloud Run con uno de los siguientes comandos:
Para un servicio nuevo:
gcloud beta run deploy SERVICE_NAME \ --region=REGION \ --image=IMAGE_URL \ --no-iap
Para un servicio ya creado:
gcloud beta run services update SERVICE_NAME \ --region=REGION \ --no-iap
Haz los cambios siguientes:
- SERVICE_NAME: el nombre de tu servicio de Cloud Run.
- REGION: el nombre de tu región de Cloud Run.
- 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 formatoLOCATION-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 debe 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 que se autentique antes de pasar al contenedor.
Gestionar el acceso de usuarios o grupos
De forma predeterminada, IAP para Cloud Run usa identidades de la organización con cuentas de Google. Puedes añadir o quitar el acceso a un servicio de Cloud Run mediante la Google Cloud consola o la CLI de gcloud.
Consola
Para añadir o quitar el acceso, sigue estos pasos:
En la Google Cloud consola, ve a la página Cloud Run:
Haga clic en el servicio que quiera modificar y, a continuación, en Seguridad.
En IAP, haz clic en Editar política.
Para añadir acceso, introduce la entidad y, opcionalmente, el nivel o los niveles de acceso que quieras añadir.
Para quitar el acceso de un principal, haz clic en el icono Eliminar política situado junto a Niveles de acceso.
Haz clic en Guardar.
gcloud
Para añadir o quitar el acceso a un servicio de Cloud Run a usuarios o grupos concretos de tu organización, ejecuta uno de los siguientes comandos:
Para añadir acceso, sigue estos pasos:
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:
gcloud beta iap web get-iam-policy \ --region=REGION \ --resource-type=cloud-run \ --service=SERVICE_NAME
Haz los cambios siguientes:
- USER_EMAIL: la dirección de correo del usuario.
- REGION: el nombre de tu región de Cloud Run.
- SERVICE_NAME: el nombre de tu servicio de Cloud Run.
Solución de problemas
El error del agente de servicio provoca un error de IAM
Si habilitas IAP en un proyecto nuevo por primera vez, puede producirse el siguiente error:
Setting IAM permissions failed
Esto se debe a que se ha producido un error en el agente de servicio de Cloud Run. Para solucionar el problema, vuelve a habilitar IAP o define la política de gestión de identidades y accesos manualmente.
Siguientes pasos
- Para obtener instrucciones sobre cómo habilitar IAP desde un servicio de backend o un balanceador de carga, consulta el artículo Habilitar IAP en Cloud Run.
- Si tienes problemas para habilitar las compras en la aplicación en Cloud Run, consulta la sección Solución de errores.
- Habilitar identidades externas.
- Habilitar la configuración de OAuth.
- Gestionar el acceso a los recursos protegidos mediante IAP
- Usar políticas de organización para controlar la habilitación de IAP.