Configurar IAP con Workforce Identity Federation

En esta página se explica cómo configurar Identity-Aware Proxy (IAP) para usar Federación de Identidades de los Empleados.

Cuando configuras la federación de identidades para los trabajadores con IAP, puedes usar un proveedor de identidades externo para autenticar y autorizar a un grupo de usuarios (por ejemplo, empleados, partners y contratistas) mediante Identity and Access Management (IAM). De esta forma, los usuarios pueden acceder de forma segura a los servicios implementados enGoogle Cloud o en las instalaciones.

Configurar IAP con la federación de identidades de los trabajadores te permite hacer lo siguiente con respecto a tus aplicaciones protegidas con IAP:

  • Redirigir a un usuario final a un proveedor de identidades externo, como Okta, para que inicie sesión.
  • Configura una sesión de inicio de sesión de entre 15 minutos y 12 horas.
  • Permitir que solo determinados usuarios finales o conjuntos de usuarios finales de un proveedor de identidades 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 concreto del día.

Puedes usar IAP con la federación de identidades de Workforce en todos los recursos y balanceadores de carga que admite IAP.

Configurar IAP con Workforce Identity Federation para una aplicación

Para configurar IAP con Workforce Identity Federation, debes llevar a cabo las siguientes tareas principales:

  1. Configura un grupo y un proveedor de empleados.
  2. Crea un ID de cliente y un secreto de cliente de OAuth.
  3. Habilita IAP y configúralo para que use Workforce Identity Federation.

Configurar un grupo y un proveedor de empleados

Para configurar un grupo y un proveedor de empleados, sigue las instrucciones que se indican en Federación de identidades de Workforce. Cuando definas la duración de la sesión, consulta el artículo Gestionar IAP con sesiones de federación de identidades de Workforce.

Si quieres asignar una dirección de correo de un proveedor de identidades de terceros a Google Cloud, debes añadir una asignación de atributos en tu proveedor de grupos de usuarios.google.email Ejemplo: google.email=assertion.email

Crear un ID y un secreto de cliente de OAuth

  1. Sigue las instrucciones para crear un ID y un secreto de cliente de OAuth en un proyecto de la misma organización que el grupo de trabajadores que vas a usar en esta configuración. El proyecto no tiene por qué ser el mismo en el que se encuentra el recurso protegido por IAP. Cuando crees el ID de cliente y el secreto de OAuth, haz lo siguiente:

    1. Usa un marcador de posición para el URI de redirección al crear el ID de cliente. Después de crear el ID de cliente, ejecuta describe un cliente de OAuth para obtener el clientID generado.

    2. Cuando tengas el clientID, ejecuta update un cliente de OAuth para actualizar allowed-redirect-uris a lo siguiente: https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect.

      Donde CLIENT_ID es el clientID recuperado en el paso anterior.

    3. Después de crear el secreto de cliente, ejecuta describe un cliente de OAuth credentials para obtener el clientSecret generado.

    Guarda clientId y clientSecret, ya que los necesitarás en pasos posteriores.

Habilitar IAP para usar Workforce Identity Federation

Para habilitar las compras en la aplicación con la federación de identidades de los empleados, sigue estos pasos.

Habilitar IAP

Habilita IAP en el recurso.

consola

  1. En la Google Cloud consola, abre la página IAP.
    Ir a la página de IAP
  2. Selecciona un proyecto. El proyecto debe estar en la misma organización que el grupo de trabajadores que has creado anteriormente. No es necesario que sea el proyecto en el que creaste el ID de cliente y el secreto de OAuth.
  3. Haz clic en la pestaña Aplicaciones y, a continuación, busca la aplicación a la que quieras restringir el acceso mediante compras en la aplicación.
  4. En la columna IAP, activa el interruptor.

gcloud

Para usar la CLI de gcloud y habilitar IAP, sigue los procedimientos del servicio correspondiente:

API

  1. Crea un archivo settings.json.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled":true,
     }
    }
    EOF
    
  2. 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 Compute Engine, usa la siguiente URL: https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME?updateMask=iap.enabled.

Actualizar la configuración de las compras en la aplicación

Para configurar IAP de forma que use la federación de identidades de los trabajadores, debe configurar los siguientes ajustes:

  • WorkforceIdentitySettings: el ID de cliente y el secreto de cliente de OAuth que has creado anteriormente.
  • IdentitySources: la fuente de identidad.

Para obtener más información, consulta las APIs de IAP.

gcloud

  1. Crea un archivo iap_settings.yaml siguiendo el ejemplo que se muestra a continuación.

    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
    
  2. 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
    

    Haz los cambios siguientes:

    • PROJECT: el ID del proyecto.
    • RESOURCE_TYPE: el tipo de recurso de IAP. El tipo de recurso debe ser cloud-run (Preview),app-engine, iap_web, compute, organization o folder.

      En el caso del tipo de recurso cloud-run, usa la marca --region para indicar la región en la que se ha desplegado tu servicio de Cloud Run.

    • SERVICE: el nombre del servicio. Este paso es opcional tanto para app-engine como para compute.

    Para obtener más información sobre el comando, consulta gcloud iap settings set.

API

  1. Crea un archivo iap_settings.json de configuración siguiendo el ejemplo que se muestra a continuación.

    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
    
  2. Usa la CLI de gcloud para obtener el nombre del recurso y, a continuación, copia el RESOURCE_NAME de la salida, ya que lo necesitarás en el siguiente paso.

    gcloud iap settings get \
        --project=PROJECT \
        --resource-type=RESOURCE_TYPE \
        --service=SERVICE
    

    Haz los cambios siguientes:

    • PROJECT: el ID del proyecto.
    • RESOURCE_TYPE: el tipo de recurso de IAP. El tipo de recurso debe ser appengine, iap_web, compute, organization, folder o cloud_run-$REGION (vista previa), donde $REGION es la región en la que se ha desplegado tu servicio de Cloud Run.
    • SERVICE: el nombre del servicio. Este paso es opcional tanto para app-engine como para compute.
  3. Sustituye RESOURCE_NAME en el siguiente comando por el RESOURCE_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" 
    

Conceder acceso a recursos protegidos mediante IAP

Para acceder a un recurso protegido mediante IAP, los usuarios finales deben tener el rol Usuario de aplicaciones web protegidas mediante IAP en el recurso. Puedes asignar el rol Usuario de aplicación web protegida por 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 conjunto completo de usuarios).

No se admite el acceso sin restricciones a los recursos protegidos mediante IAP.

consola

  1. En la Google Cloud consola, abre la página IAP.
    Ir a la página de IAP
  2. Selecciona el recurso que quieras proteger con compras en la aplicación.
  3. Haz clic en Añadir principal y, a continuación, añade los identificadores principales de los grupos o usuarios a los que quieras conceder un rol de gestión de identidades y accesos para el recurso.
  4. En Asignar roles, selecciona Usuario de aplicaciones web protegidas mediante IAP.
  5. Haz clic en Añadir.

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

Sustituye lo siguiente :

  • PRINCIPAL_IDENTIFIER: los identificadores principales.
  • PROJECT_ID: el ID del proyecto.
  • RESOURCE_TYPE: el tipo de recurso de IAP, que puede ser app-engine o backend-services.
  • SERVICE: (Opcional) El nombre del servicio.
  • CONDITION: (Opcional) Condiciones de gestión de identidades y accesos. 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 porque afecta a toda la política de IAM de un recurso. Si se produce un error, se podría eliminar la política de un recurso.

  1. Obtén los enlaces de políticas de gestión de identidades y accesos actuales.

    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
    

    Sustituye RESOURCE_NAME por el RESOURCE_NAME que has obtenido en un paso anterior.

  2. En el archivo iam_policy_bindings.json que has obtenido en el paso anterior, elimina las líneas de versión y etag, y añade la vinculación que quieras añadir al identificador principal. Para obtener más información, consulta el artículo Información sobre las políticas de permitir.

    {
      "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"
          }
        }
      ]
    }
    
  3. Actualiza los enlaces de la política de gestión de identidades y accesos.

    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"
    

    Sustituye RESOURCE_NAME por el RESOURCE_NAME que has obtenido en un paso anterior.

Consulta GetIamPolicy y SetIamPolicy para obtener más información.

(Opcional) Configurar el acceso contextual

De forma opcional, puedes configurar reglas de acceso contextual para la autorización avanzada.

Para configurar niveles de acceso, consulta el artículo 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 los empleados. Puedes seguir usando niveles de acceso basados en el contexto de la solicitud con condiciones sobre la dirección IP, la hora y la fecha.

Autenticación programática

IAP admite la autenticación JWT de cuentas de servicio para aplicaciones configuradas con la federación de identidades de la plantilla. Para obtener instrucciones, consulta el artículo sobre cómo autenticarte con un JWT de cuenta de servicio.

Limitaciones al trabajar con grupos de Workforce

  • Solo se puede configurar un grupo de trabajadores por cada aplicación habilitada para compras en la aplicación, y el grupo de trabajadores solo puede contener un proveedor.
  • El grupo de trabajadores, 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 niveles de acceso para la información relacionada con los dispositivos.
  • Solo se admiten las siguientes configuraciones de ajustes de compras en la aplicación:
  • El acceso programático con la federación de identidades de Workforce solo se admite en cuentas de servicio de Google.