En esta página, se muestra cómo configurar Identity-Aware Proxy (IAP) para usar 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) que usa la administración de identidades y accesos (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:
- Redirecciona a un usuario final a un IdP externo, como Okta, para que acceda.
- Configurar una sesión de acceso de entre 15 minutos y 12 horas
- Permite que solo usuarios finales específicos o conjuntos de usuarios finales en un IdP accedan a tu y mantener la integridad de su aplicación.
- Especifica el contexto bajo el cual un usuario final puede acceder a una aplicación. Para Por ejemplo, solo permite el acceso durante un horario específico del día.
Puedes usar IAP con la federación de identidades de personal en todos los recursos y balanceadores de cargas existentes que admite IAP.
Configura la 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 incluye las siguientes tareas principales:
- Configura un proveedor y un grupo de personal.
- Crea un ID y un secreto de cliente de OAuth.
- Habilita IAP y configúralo para usar la federación de identidades de personal.
Configura un proveedor y un grupo de trabajadores
Para configurar un grupo de trabajadores y un proveedor, sigue las instrucciones en Federación de identidades de personal y cuándo Para configurar el tiempo de duración de la sesión, consulta Administra IAP con sesiones de federación de identidades de personal.
Si quieres asignar una dirección de correo electrónico de un IdP externo a Google Cloud,
Debes agregar una asignación de atributos en tu proveedor del grupo de trabajadores para google.email
.
Ejemplo: google.email=assertion.email
.
Crea un ID y un secreto de cliente de OAuth
Sigue las instrucciones para crear un ID de cliente y un secreto de OAuth en un proyecto de la misma organización que el grupo de trabajadores que usarás para esta configuración. El proyecto no tiene que ser el mismo que el del recurso protegido con IAP. Cuando crees el ID de cliente y el secreto 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
describe
un cliente de OAuth para obtener elclientID
generado.Cuando tengas el
clientID
, ejecutaupdate
un cliente de OAuth para actualizarallowed-redirect-uris
a lo siguiente:https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect
En ese ejemplo,
CLIENT_ID
es elclientID
que se recuperó en el paso anterior.Después de crear el secreto del cliente, ejecuta
describe
un cliente de OAuth credenciales para obtener elclientSecret
generado.
Guarda
clientId
yclientSecret
porque los necesitarás en pasos posteriores.
Habilita IAP para usar la federación de identidades de personal
Console
- En la consola de Google Cloud, abre la página de IAP.
Ve a la página de IAP - Selecciona un proyecto El proyecto debe estar en la misma organización que la grupo de trabajadores que creaste anteriormente. El proyecto no tiene que ser el en el que creaste el ID de cliente y el secreto de OAuth.
- Haz clic en la pestaña Applications y, luego, busca la aplicación a la que deseas restringir el acceso con IAP.
- En la columna IAP, activa la opción Activado (On).
gcloud
Para usar gcloud CLI y habilitar IAP, sigue las instrucciones procedimientos para el servicio correspondiente:
API
Crea un archivo
settings.json
.cat << EOF > settings.json { "iap": { "enabled":true, } } EOF
Habilita 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 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 para usar la federación de identidades de personal, debes hacer lo siguiente: establece la siguiente configuración:
WorkforceIdentitySettings
: El ID de cliente y el secreto de OAuth que creaste antes.IdentitySources
: Es la fuente de identidad.
Para obtener más información, consulta las APIs de IAP.
gcloud
Con el siguiente ejemplo como referencia, crea un
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" EOF
Ejecuta 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=SERVICE
Reemplaza lo siguiente:
- PROJECT: El ID del proyecto
- RESOURCE_TYPE: Es el tipo de recurso de IAP. El tipo de recurso debe ser
app-engine
,iap_web
,compute
,organization
ofolder
. - SERVICE: el nombre del servicio Esto es opcional para ambos
app-engine
ycompute
.
Para obtener detalles sobre el comando, consulta gcloud iap settings set.
API
Con el siguiente ejemplo como referencia, crea un
iap_settings.json
. de configuración de Terraform.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", } } } } EOF
Usa gcloud CLI para obtener el nombre del recurso y, luego, Copia el
RESOURCE_NAME
del resultado, ya que lo necesitarás en el paso siguiente.gcloud iap settings get \ --project=PROJECT \ --resource-type=RESOURCE_TYPE \ --service=SERVICE
Reemplaza lo siguiente:
- PROJECT: El ID del proyecto
- RESOURCE_TYPE: Es el tipo de recurso de IAP. El tipo de recurso debe ser
app-engine
,iap_web
,compute
,organization
ofolder
. - SERVICE: el nombre del servicio Esto es opcional para ambos
app-engine
ycompute
.
Reemplaza
RESOURCE_NAME
en el siguiente comando porRESOURCE_NAME
. del 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 con IAP
Para acceder a un recurso protegido con IAP, los usuarios finales deben tener el rol de Usuario de aplicación 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 por IAP.
Console
- En la consola de Google Cloud, abre la página de IAP.
Ve a la página de IAP - Selecciona el recurso que deseas proteger con IAP.
- Haz clic en Agregar principal y, luego, agrega la identificadores principales de los grupos o personas a los que deseas otorgar un Es un rol de IAM para el recurso.
- En Asignar roles, selecciona Usuario de aplicación 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: El identificadores principales.
- PROJECT_ID: El ID del proyecto
- RESOURCE_TYPE: Es el tipo de recurso de IAP, que puede ser
app-engine
obackend-services
. - SERVICE: Es el nombre del servicio (opcional).
- CONDITION: Condiciones de IAM (opcional). 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 in weekdays
API
No se recomienda este método, ya que afecta a 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.json
Reemplaza el RESOURCE_NAME por el RESOURCE_NAME que obtuviste en un paso anterior.
En el archivo
iam_policy_bindings.json
que obtuviste del paso anterior, quita las líneas de versión y etag, y agrega la vinculación que deseas agregar para el identificador 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 in week days" } } ] }
Actualiza las vinculaciones de políticas 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 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 adaptadas al contexto para la autorización avanzada.
Para configurar los niveles de acceso, consulta Crear y aplicar 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 el acceso basado en el contexto de las solicitudes con condiciones sobre la dirección IP, y la hora y fecha.
Limitaciones cuando se trabaja con grupos de trabajadores
- Para cada aplicación habilitada para IAP, solo se puede configurar un grupo de trabajadores, puede contener solo un proveedor.
- El grupo de personal, el ID de cliente y el secreto de OAuth, y las aplicaciones habilitadas para la 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 las siguientes configuraciones de IAP:
- No se admite el acceso programático con la federación de identidades de personal.