En esta página, se muestra cómo configurar Identity-Aware Proxy (IAP) para usar la federación de identidades de personal.
Cuando configuras la federación de identidades de personal con IAP, puedes usar un proveedor de identidad externo (IdP) para autenticar y autorizar a un personal (un grupo de usuarios, como empleados, socios y contratistas) con Identity and Access Management (IAM), de modo que los usuarios puedan acceder de forma segura a los servicios implementados en Google Cloud o de forma local.
Configurar IAP con la federación de identidades de personal te permite hacer lo siguiente con respecto a tus aplicaciones protegidas por IAP:
- Redireccionar a un usuario final a un IdP externo, como Okta, para que acceda
- Configura una sesión de acceso de entre 15 minutos y 12 horas.
- Permite que solo usuarios finales o conjuntos de usuarios finales específicos de un IdP accedan a tu aplicación.
- Especifica el contexto en el que un usuario final puede acceder a una aplicación. Por ejemplo, solo permitir el acceso durante un momento específico del día.
Configura IAP con la federación de identidades de personal para una aplicación
La configuración de IAP con la federación de identidades de personal comprende las siguientes tareas principales:
- Configura un proveedor y un grupo de personal.
- Crea un ID y un secreto de cliente de OAuth.
- Habilitar IAP y configurarlo para que use la federación de identidades de personal
Configura un grupo de personal y un proveedor
Para configurar un grupo de personal y un proveedor, sigue las instrucciones de uno de los siguientes proveedores:
Cuando configures la duración de la sesión, consulta Administra IAP con sesiones de la federación de identidades de personal.
Si deseas asignar una dirección de correo electrónico de un IdP de terceros a Google Cloud,
debes agregar una asignación de atributos en tu proveedor de grupos de personal para google.email.
Ejemplo: google.email=assertion.email.
Crea un ID de cliente de OAuth y un secreto
Importante: El ID de cliente y el secreto de OAuth que crees en los siguientes pasos se crean para la infraestructura de la federación de identidades de personal. Estos son diferentes del ID de cliente y el secreto que se requieren cuando se usa la configuración personalizada de OAuth para habilitar IAP con identidades de Google.Sigue las instrucciones para crear un ID de cliente de OAuth y un secreto en un proyecto de la misma organización que el grupo de personal que usarás para esta configuración. No es necesario que el proyecto sea el mismo en el que se encuentra el recurso protegido por IAP. Cuando crees el ID y el secreto del cliente de OAuth, haz lo siguiente:
Usa un marcador de posición para el URI de redireccionamiento cuando crees el ID de cliente. Después de crear el ID de cliente, ejecuta
describeun cliente de OAuth para obtener elclientIDgenerado.Cuando tengas el
clientID, ejecutaupdateun cliente de OAuth para actualizarallowed-redirect-urisa lo siguiente:https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect.En el ejemplo anterior,
CLIENT_IDes elclientIDque se recuperó en el paso anterior.Después de crear el secreto del cliente, ejecuta
describeuna credencial de cliente de OAuth para obtener elclientSecretgenerado.
Guarda el
clientIdy elclientSecret, ya que los necesitarás en pasos posteriores.
Habilita IAP para usar la federación de identidades de personal
Para habilitar IAP con la federación de identidades de personal, completa los siguientes pasos.
Habilitar IAP
Habilita IAP en el recurso.
Console
- En la consola de Google Cloud , abre la página de IAP.
Ir a la página de IAP - Selecciona un proyecto. El proyecto debe estar en la misma organización que el grupo de personal que creaste antes. No es necesario que el proyecto sea el en el que creaste el ID y el secreto de cliente de OAuth.
- Haz clic en la pestaña Aplicaciones y, luego, busca la aplicación a la que quieres restringir el acceso con IAP.
- En la columna IAP, activa la opción Activado (On).
gcloud
Para usar gcloud CLI y habilitar IAP, sigue los procedimientos del servicio correspondiente:
API
Crea un archivo
settings.json.cat << EOF > settings.json { "iap": { "enabled":true, } } EOFHabilitar IAP en App Engine
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @settings.json \ "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap.enabled"Para habilitar IAP en Compute Engine, usa la siguiente URL:
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME?updateMask=iap.enabled.
Actualiza la configuración de IAP
Para configurar IAP de modo que use la federación de identidades del personal, debes establecer los siguientes parámetros de configuración:
WorkforceIdentitySettings: Es el ID y el secreto del cliente de OAuth que se crearon antes.IdentitySources: Es la fuente de identidad.
Para obtener más información, consulta las APIs de IAP.
gcloud
Usa el siguiente ejemplo como referencia para crear un archivo
iap_settings.yaml.CLIENT_ID=clientId CLIENT_SECRET=clientSecret WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool cat <<EOF > iap_settings.yaml access_settings: identity_sources: ["WORKFORCE_IDENTITY_FEDERATION"] workforce_identity_settings: workforce_pools: ["$WORKFORCE_POOL_NAME"] oauth2: client_id: "$CLIENT_ID" client_secret: "$CLIENT_SECRET" EOFEjecuta el siguiente comando para actualizar la configuración de IAP de tu recurso.
gcloud iap settings set iap_settings.yaml --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICEReemplaza lo siguiente:
- PROJECT: El ID del proyecto
- RESOURCE_TYPE: Es el tipo de recurso de IAP. El
tipo de recurso debe ser
cloud-run(versión preliminar),app-engine,iap_web,compute,organizationofolder. Para el tipo de recursocloud-run, usa la marca--regionpara indicar la región en la que se implementa tu servicio de Cloud Run. - SERVICE: Es el nombre del servicio. Es opcional para
app-engineycompute.
Para obtener detalles sobre el comando, consulta gcloud iap settings set.
API
Con el siguiente ejemplo como referencia, crea un archivo de configuración
iap_settings.json.CLIENT_ID=clientId CLIENT_SECRET=clientSecret WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool cat <<EOF > iap_settings.json { "access_settings": { "identity_sources": ["WORKFORCE_IDENTITY_FEDERATION"], "workforce_identity_settings": { "workforce_pools": ["$WORKFORCE_POOL_NAME"], "oauth2": { "client_id": "$CLIENT_ID", "client_secret": "$CLIENT_SECRET", } } } } EOFUsa gcloud CLI para obtener el nombre del recurso y, luego, copia el
RESOURCE_NAMEdel resultado, ya que lo necesitarás en el siguiente paso.gcloud iap settings get \ --project=PROJECT \ --resource-type=RESOURCE_TYPE \ --service=SERVICEReemplaza lo siguiente:
- PROJECT: El ID del proyecto
- RESOURCE_TYPE: Es el tipo de recurso de IAP. El
tipo de recurso debe ser
appengine,iap_web,compute,organization,folderocloud_run-$REGION(versión preliminar), en el que $REGION es la región en la que se implementa tu servicio de Cloud Run. - SERVICE: Es el nombre del servicio. Es opcional para
app-engineycompute.
Reemplaza
RESOURCE_NAMEen el siguiente comando por elRESOURCE_NAMEdel paso anterior.curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @iap_settings.json \ "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.identitySources,iapSettings.accessSettings.workforceIdentitySettings.workforcePools,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientId,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientSecret"
Otorga acceso a los recursos protegidos por IAP
Para acceder a un recurso protegido con IAP, los usuarios finales deben tener el rol de Usuario de app web protegida con IAP en el recurso. Puedes otorgar el rol de usuario de aplicación web protegida con IAP a un solo usuario (principal) o a un conjunto de usuarios (conjunto de principales, que se asigna a un grupo, un atributo específico o un grupo completo de usuarios).
No se admite el acceso sin restricciones a los recursos protegidos con IAP.
Console
- En la consola de Google Cloud , abre la página de IAP.
Ir a la página de IAP - Selecciona el recurso que deseas proteger con IAP.
- Haz clic en Agregar principal y, luego, agrega los identificadores de principal de los grupos o individuos a los que deseas otorgar un rol de IAM para el recurso.
- En Asignar roles, selecciona Usuario de app web protegida con IAP.
- Haz clic en Agregar.
gcloud
Ejecuta el siguiente comando.
gcloud iap web add-iam-policy-binding \
--member=PRINCIPAL_IDENTIFIER \
--role='roles/iap.httpsResourceAccessor' \
--project=PROJECT_ID \
--resource-type=RESOURCE_TYPE \
--service=SERVICE \
--condition=CONDITION
Reemplaza lo siguiente:
- PRINCIPAL_IDENTIFIER: Es el identificador de la principal.
- PROJECT_ID: Es el ID del proyecto.
- RESOURCE_TYPE: Es el tipo de recurso de IAP, que puede ser
app-engineobackend-services. - SERVICE: Es el nombre del servicio (opcional).
- CONDITION: (Opcional) Condiciones de IAM. A continuación, se muestra un ejemplo de condición configurada con niveles de acceso:
expression="accessPolicies/12345678/accessLevels/iap_test_access_level" in request.auth.access_levels,title=iap-test-access-level,description=only access on weekdays
API
No se recomienda este método, ya que afecta toda la política de IAM de un recurso. Un error podría quitar la política de un recurso.
Obtén las vinculaciones de políticas de IAM existentes.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d {} \ "https://iap.googleapis.com/v1/RESOURCE_NAME:getIamPolicy" -o iam_policy_bindings.jsonReemplaza RESOURCE_NAME por el RESOURCE_NAME que obtuviste en un paso anterior.
En el archivo
iam_policy_bindings.jsonque obtuviste en el paso anterior, quita las líneas de versión y etag, y agrega la vinculación que deseas agregar para el identificador de la principal. Para obtener más información, consulta Comprende las políticas de permisos.{ "bindings": [ { // existing bindings }, { "role": "roles/iap.httpsResourceAccessor", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/iap-test-pool/subject/iap-test-subject" ], "condition": { "expression": "\"accessPolicies/12345678/accessLevels/iap_test_access_level\" in request.auth.access_levels", "title": "iap-test-access-level", "description": "only access on weekdays" } } ] }Actualiza las vinculaciones de política de IAM.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d "{"policy":$(cat iam_policy_bindings.json)}" \ "https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"Reemplaza RESOURCE_NAME por el RESOURCE_NAME que obtuviste en un paso anterior.
Consulta GetIamPolicy y SetIamPolicy para obtener más información.
Configura el acceso adaptado al contexto (opcional)
De manera opcional, puedes configurar reglas de acceso adaptado al contexto para la autorización avanzada.
Para configurar los niveles de acceso, consulta Crea y aplica niveles de acceso. Los niveles de acceso basados en la información del dispositivo no están disponibles cuando se usa la federación de identidades de personal. Aún puedes usar niveles de acceso basados en el contexto de la solicitud con condiciones en la dirección IP, la hora y la fecha.
Autenticación programática
IAP admite la autenticación de JWT de cuentas de servicio para aplicaciones configuradas con la federación de identidades de personal. Para obtener instrucciones, consulta Autentica con un JWT de cuenta de servicio.
Limitaciones cuando se trabaja con grupos de personal
* Para cada aplicación habilitada para IAP, solo se puede configurar un grupo de personal, y este grupo solo puede contener un proveedor. * El grupo de personal, el ID y el secreto de cliente de OAuth, y las aplicaciones habilitadas para IAP deben estar en la misma organización. * No se admiten los niveles de acceso para la información relacionada con el dispositivo. * Solo se admiten los siguientes parámetros de configuración de IAP: * CorsSettings * CsmSettings * AccessDeniedPageSettings.accessDeniedPageUri * CookieDomain * El acceso programático con la federación de identidades de personal solo se admite para las cuentas de servicio de Google.Soluciona problemas
Para obtener información sobre la solución de problemas, consulta Preguntas frecuentes y solución de problemas.