Configura la federación de identidades para cargas de trabajo con Active Directory

En esta guía, se describe cómo usar la federación de identidades para cargas de trabajo para permitir que las cargas de trabajo usen credenciales de Active Directory a fin de autenticarse en Google Cloud.

Si ejecutas cargas de trabajo de Windows Server en un entorno de Active Directory, estas cargas de trabajo podrían tener acceso a las credenciales de Active Directory. Por ejemplo:

  • Es posible que un servicio de Windows esté configurado para acceder como usuario de dominio.
  • Una aplicación de IIS se puede configurar para que se ejecute como una cuenta de servicio administrada de grupo (gMSA).

Si usas la federación de Workload Identity en combinación con los Servicios de federación de Active Directory (AD FS), puedes permitir que estas cargas de trabajo intercambien sus credenciales de Kerberos de Active Directory por credenciales de Google Cloud de corta duración. Las cargas de trabajo pueden usar estas credenciales de corta duración para acceder a las APIs de Google Cloud.

El intercambio de credenciales de Active Directory por credenciales de Google Cloud de corta duración funciona encadenando dos intercambios de tokens:

  1. Una carga de trabajo usa OpenID Connect (OIDC), SAML-POST o WS-Trust para solicitar un token de OIDC o una aserción de SAML de AD FS. Para autenticarse en AD FS, la carga de trabajo usa la autenticación integrada de Windows (IWA) y sus credenciales existentes de Active Directory.
  2. Luego, la carga de trabajo usa la federación de identidades para cargas de trabajo para intercambiar el token OIDC o la aserción de SAML por un token de Security Token Service y, de forma opcional, actuar en nombre de una cuenta de servicio de Google Cloud.

En este documento, se muestra cómo puedes automatizar este proceso de una manera que no requiera cambios en tu aplicación con el Workload Authenticator para Windows.

Prepara AD FS

Solo debes realizar estos pasos una vez.

Selecciona un protocolo

La forma de preparar AD FS depende del protocolo que desees usar:

  • SAML: Puedes permitir que las cargas de trabajo usen SAML o WS-Trust para obtener aserciones de SAML.

    Para usar SAML o WS-Trust, debes crear una parte de confianza en AD FS y configurar un grupo de identidades para cargas de trabajo para que confíe en las aserciones emitidas para esta parte de confianza.

    Una carga de trabajo puede usar su usuario de Active Directory para autenticarse en AD FS, mediante la vinculación SAML-POST o WS-Trust. AD FS emite una aserción de SAML que contiene información sobre el usuario de Active Directory de la carga de trabajo y datos adicionales, como las membresías de grupo.

    El uso de SAML o WS-Trust requiere AD FS 3.0, AD FS para Windows Server 2016 o una versión más reciente de AD FS.

  • OIDC: Puedes permitir que las cargas de trabajo usen OIDC para obtener tokens de OIDC.

    Para usar OIDC, debes crear un cliente de OIDC (aplicación nativa) y un recurso de OIDC (API web) en AD FS. Luego, configura un grupo de identidades para cargas de trabajo a fin de que confíe en los tokens de acceso emitidos para la API de Web.

    Una carga de trabajo puede usar su usuario de Active Directory y el permiso client_credentials de OAuth para autenticarse en AD FS. AD FS emite un token de acceso, pero no un token de ID.

    El token de acceso contiene información sobre la aplicación cliente de OIDC, pero no incluye información sobre el usuario de Active Directory de la carga de trabajo ni sus membresías de grupo.

    Debido a que los tokens de acceso no contienen información sobre el usuario de Active Directory, usar OIDC puede ser menos flexible que usar SAML o WS-Trust.

    El uso de OIDC requiere AD FS para Windows Server 2016 o una versión más reciente de AD FS.

Para el acceso, tu IdP debe proporcionar información de autenticación firmada: los IdP de OIDC deben proporcionar un JWT y las respuestas del IdP de SAML deben estar firmadas.

Requisitos previos de IWA

En esta sección, se describen los requisitos previos de IWA que se necesitan para usar esta guía.

Si nunca usaste IWA con AD FS, asegúrate de cumplir con los siguientes requisitos:

Registra la carga de trabajo

Para registrar tu carga de trabajo en AD FS, haz lo siguiente:

OIDC

Para permitir que las cargas de trabajo usen OIDC, necesitas dos registros de aplicaciones en AD FS:

  • Un registro de aplicación del tipo aplicación nativa o aplicación de servidor

  • Un registro de aplicación del tipo API de Web que corresponde a un proveedor de grupos de identidades para cargas de trabajo en Google Cloud.

Registra la aplicación cliente

Crea una aplicación cliente que represente la carga de trabajo. Si tienes varias cargas de trabajo que necesitan acceso a Google Cloud, es posible que debas crear varias aplicaciones cliente.

Para registrar una aplicación cliente en AD FS, haz lo siguiente:

  1. Abre el complemento de MMC de AD FS y navega a Application Groups.
  2. Haz clic en Add application group.
  3. En la página Bienvenida, haz lo siguiente:

    1. En el campo de texto, ingresa un nombre para el cliente.
    2. Selecciona Aplicación de servidor.
    3. Haz clic en Siguiente.
  4. En la página Aplicación del servidor, haz lo siguiente:

    1. En el campo de texto text-field, ingresa un identificador de cliente (ID de cliente) y un URI de redireccionamiento.

      Si solo planeas usar el tipo de otorgamiento client_credentials, el URI de redireccionamiento no se usará y puedes usar un URI como http://localhost/.

    2. Haz clic en Siguiente.

  5. En la página Configurar credenciales de la aplicación, haz lo siguiente:

    1. Elige cómo se autentica el cliente. Para usar IWA, configura la Autenticación integrada de Windows como habilitada.
    2. Selecciona el usuario de dominio con el que tu aplicación está configurada para ejecutarse.
    3. Haz clic en Siguiente.
  6. En la página Resumen, revisa la configuración y haz clic en Siguiente.

  7. Haz clic en Cerrar para descartar el cuadro de diálogo.

Crea una aplicación de API de Web para el grupo de identidades para cargas de trabajo

Crea otro registro de aplicación de tipo API de Web. Esta aplicación corresponde a un proveedor de grupos de identidades para cargas de trabajo, y debes usarla para configurar una relación de confianza con Google Cloud.

Para crear la aplicación en AD FS, haz lo siguiente:

  1. Abre el complemento de MMC de AD FS y navega a Application Groups.
  2. Haz clic en Add application group.
  3. En la página de bienvenida, ingresa un nombre, como Workload Identity Federation (test environment), y selecciona API de Web. Luego, haga clic en Siguiente.
  4. En la página Configurar API de Web, ingresa un identificador de relación de confianza para la API de Web.

    En lugar de definir un identificador de relación de confianza personalizado, puedes usar el siguiente URI como tal:

    https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_POOL_ID/providers/PROVIDER_ID
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: Es el número del proyecto de Google Cloud que usas para crear el grupo de identidades para cargas de trabajo.
    • WORKLOAD_POOL_ID: Es un ID que elijas que identifique el grupo de identidades para cargas de trabajo. Debes usar el mismo ID cuando crees el grupo de identidades para cargas de trabajo más adelante.
    • PROVIDER_ID: Es un ID que elijas que identifique al proveedor de grupos de identidades para cargas de trabajo. Debes usar el mismo ID cuando crees el proveedor de grupos de identidades para cargas de trabajo más adelante.

    Formatear el URI de esta manera garantiza que el identificador de usuario de confianza identifique de manera inequívoca un proveedor de grupos de identidades para cargas de trabajo.

    Necesitarás el identificador de relación de confianza más adelante cuando configures el proveedor de grupo de identidades para cargas de trabajo.

  5. Haz clic en Siguiente.

  6. En la página Apply access control policy, selecciona una política de acceso adecuada y, luego, haz clic en Siguiente.

  7. En la página Configure application permissions, agrega la aplicación cliente que creaste antes. Luego, haga clic en Siguiente.

  8. En la página Resumen, revisa la configuración y haz clic en Siguiente.

  9. Haz clic en Cerrar para descartar el cuadro de diálogo.

SAML o WS-Trust

Crea una relación de confianza con la parte autenticada en AD FS:

  1. Abre el complemento AD FS de MMC.
  2. Navega a Relaciones de confianza con la parte autenticada.
  3. Haz clic en Agregar relación de confianza con la parte autenticada.
  4. En la página Bienvenida del asistente Agregar relación de confianza con la parte autenticada, haz lo siguiente:
    1. Selecciona Compatible con notificaciones.
    2. Haz clic en Iniciar.
  5. En la página Seleccionar fuente de datos, haz lo siguiente:
    1. Selecciona Enter data about relying party manually.
    2. Haz clic en Siguiente.
  6. En la página Especificar nombre visible, haz lo siguiente:

    1. Ingresa un nombre para la relación de confianza.
    2. Haz clic en Siguiente.
  7. En la página Configurar certificado, haz clic en Siguiente. Si bien la federación de Workload Identity de trabajo admite SAML encriptado, no se describe en este procedimiento. Para obtener más información, consulta las instrucciones de la gcloud CLI en Crea el grupo de identidades y el proveedor, más adelante en esta guía.

  8. En la página Configurar URL, haz lo siguiente:

    SAML

    Usa la siguiente configuración:

    • Establece Habilitar compatibilidad con el protocolo SAML 2.0 WebSSO en Habilitado.
    • En el campo URL del servicio SSO SAML 2.0 de la parte autenticada, ingresa la siguiente URL:

      https://sts.googleapis.com/v1/token
      

    WS-Trust

    Mantener la configuración predeterminada

  9. Haz clic en Siguiente.

  10. En la página Configurar identificadores, ingresa un identificador de parte de confianza.

    En lugar de definir un identificador de relación de confianza personalizado, puedes usar el siguiente URI como tal:

    https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_POOL_ID/providers/PROVIDER_ID
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: Es el número del proyecto de Google Cloud que usas para crear el grupo de identidades para cargas de trabajo.
    • WORKLOAD_POOL_ID: Es un ID que elijas que identifique el grupo de identidades para cargas de trabajo. Debes usar el mismo ID cuando crees el grupo de identidades para cargas de trabajo más adelante.
    • PROVIDER_ID: Es un ID que elijas que identifique al proveedor de grupos de identidades para cargas de trabajo. Debes usar el mismo ID cuando crees el proveedor de grupos de identidades de carga más adelante.

    Formatear el URI de esta manera garantiza que el identificador de usuario de confianza identifique de manera inequívoca un proveedor de grupos de identidades para cargas de trabajo.

    Necesitarás el identificador de relación de confianza más adelante cuando configures el proveedor de grupo de identidades para cargas de trabajo.

  11. Haz clic en Siguiente.

  12. En la página Elige una política de control de acceso, selecciona una política de control de acceso adecuada y, luego, haz clic en Siguiente.

  13. En la página Listo para agregar confianza, revisa la configuración y haz clic en Siguiente.

  14. En la página Finalizar, haz clic en Cerrar para descartar el cuadro de diálogo.

Para ser compatibles con la federación de identidades para cargas de trabajo, las aserciones de SAML deben contener al menos una reclamación que identifique de manera inequívoca al usuario de Active Directory. Por lo general, debes usar la reclamación ID de nombre para este fin, que corresponde al valor del elemento NameID en la aserción de SAML.

Para personalizar el conjunto de reclamaciones de la aserción de SAML, debes editar la política de emisión de reclamaciones de la relación de confianza con la parte autenticada. Para editar la política de emisión de reclamaciones, haz lo siguiente:

  1. En la lista de relaciones de confianza, selecciona la relación de confianza que acabas de crear y haz clic en Editar política de emisión de reclamaciones.
  2. Haz clic en Agregar regla.
  3. En la página Elige un tipo de regla del asistente Agregar regla de reclamación de transformación, haz lo siguiente:
    1. Selecciona Transforma una reclamación entrante.
    2. Haz clic en Siguiente.
  4. En la página Configurar regla de reclamación, establece la siguiente configuración:

    • Nombre de la regla de reclamación: Name Identifier.
    • Tipo de reclamación entrante: Selecciona SID principal, UPN o una reclamación diferente para identificar de forma exclusiva al sujeto.
    • Tipo de reclamo saliente: Name ID
    • Formato de ID de nombre saliente: Sin especificar.
  5. Selecciona Pasar todos los valores de la reclamación y haz clic en Finalizar.

  6. De forma opcional, configura reglas adicionales para incluir más atributos en las aserciones de SAML.

  7. Haz clic en Aceptar para cerrar el cuadro de diálogo de la política de emisión de reclamaciones.

Configura la federación de identidades para cargas de trabajo

Solo debes realizar estos pasos una vez por cada usuario de Microsoft Entra ID o la cuenta de AWS con la que deseas federar. Luego, puedes usar el mismo grupo y proveedor de Workload Identity para varias cargas de trabajo y en varios proyectos de Google Cloud.

Para comenzar a configurar la federación de identidades para cargas de trabajo, haz lo siguiente:

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Es mejor usar un proyecto exclusivo para administrar los grupos y los proveedores de identidades para cargas de trabajo.
  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the IAM, Resource Manager, Service Account Credentials, and Security Token Service APIs.

    Enable the APIs

Define una condición y la asignación de atributos

Las credenciales específicas del entorno de la carga de trabajo de AWS o Azure contienen varios atributos, y debes decidir qué atributo deseas usar como identificador de asunto (google.subject) en Google Cloud.

De manera opcional, puedes asignar atributos adicionales. Luego, puedes hacer referencia a estos atributos adicionales cuando otorgues acceso a los recursos.

OIDC

Tus asignaciones de atributos pueden usar las reclamaciones incorporadas en los tokens de acceso de AD FS como atributos de origen.

Para autenticar una aplicación, puedes usar la siguiente asignación de atributos:

google.subject=assertion.appid

Esta asignación establece google.subject en el valor de la reclamación appid, que contiene el ID de cliente de la aplicación de AD FS.

SAML o WS-Trust

Tus asignaciones de atributos pueden usar las reclamaciones incorporadas en la aserción emitida por AD FS, como se describió antes en esta guía.

Usa la siguiente asignación para permitir que la federación de Workload Identity use la reclamación de ID de nombre de la aserción de SAML para identificar de manera inequívoca al usuario:

google.subject=assertion.subject

Si configuraste tu política de emisión de reclamaciones a fin de incluir reclamaciones adicionales en las aserciones de SAML, puedes agregar asignaciones adicionales. Por ejemplo:

google.groups=assertion.attributes['http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid']
attribute.userip=['http://schemas.microsoft.com/2014/09/requestcontext/claims/userip'][0]

De manera opcional, puedes definir una condición de atributo. Las condiciones de los atributos son expresiones CEL que pueden verificar los atributos de aserción y los atributos de destino. Si la condición del atributo se evalúa como true para una credencial determinada, se acepta la credencial. De lo contrario, se rechaza la credencial.

OIDC

Puedes usar una condición de atributo a fin de restringir qué clientes pueden usar la federación de Workload Identity para obtener tokens de Google Cloud de corta duración.

Por ejemplo, la siguiente condición define que las aplicaciones deben usar IWA para autenticarse en AD FS:

assertion.authmethod=='http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/windows'

A fin de controlar la lista de aplicaciones, puedes obtener credenciales de corta duración para Google Cloud, no definas condiciones de atributos. En su lugar, usa permisos del cliente en AD FS para definir qué aplicaciones están permitidas.

SAML o WS-Trust

Puedes usar una condición de atributo a fin de restringir qué usuarios pueden usar la federación de Workload Identity para obtener tokens de Google Cloud de corta duración.

Por ejemplo, la siguiente condición solo permite aserciones de SAML que incluyen una reclamación de membresía de grupo determinada:

"S-1-5-6" in google.groups

Crea el proveedor y el grupo de identidades para cargas de trabajo

Roles obligatorios

A fin de obtener los permisos que necesitas para configurar la federación de identidades para cargas de trabajo, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

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 mediante roles personalizados o cualquier otro rol predefinido.

De manera alternativa, el rol básico de propietario de IAM (roles/owner) también incluye permisos para configurar la federación de identidades. No deberías otorgar roles básicos en un entorno de producción, pero puedes otorgarlas en un entorno de desarrollo o de prueba.

Console

  1. En la consola de Google Cloud, ve a la página Proveedor y grupo de cargas de trabajo nuevos.

    Ir a Nuevo proveedor y grupo de cargas de trabajo

  2. En Crear un grupo de identidades, ingresa lo siguiente:

    • Nombre: Es el nombre del grupo. El nombre también se usa como el ID del grupo. No puedes cambiar el ID del grupo más adelante.
    • Descripción: Es el texto que describe el propósito del grupo.
  3. Haz clic en Continuar.

  4. Establece la configuración del proveedor:

    OIDC

    • Selecciona un proveedor: OpenID Connect (OIDC).
    • Nombre del proveedor: el nombre del proveedor del conjunto de datos. El nombre también se usa como el ID del proveedor. No puedes cambiar el ID del proveedor más adelante.
    • URL del emisor: https://ADFS_DOMAIN/adfs en la que ADFS_DOMAIN es el nombre de dominio público del servidor o la granja de AD FS.

    SAML

    Para configurar la federación de Workload Identity desde un IdP compatible con SAML 2.0, puedes usar las instrucciones de la CLI de gcloud.

  5. Haz clic en Continuar.

  6. En Configura los atributos del proveedor, agrega las asignaciones de atributos que identificaste antes.

  7. En Condiciones del atributo, ingresa la condición del atributo que identificaste antes. Deja el campo en blanco si no tienes una condición de atributo.

  8. Haz clic en Guardar para crear el proveedor y el grupo de identidades para cargas de trabajo.

gcloud

  1. Crea un nuevo grupo de identidades para cargas de trabajo:

    gcloud iam workload-identity-pools create WORKLOAD_POOL_ID \
        --location="global" \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    Reemplaza lo siguiente:

    • WORKLOAD_POOL_ID: Es el ID único para el grupo.
    • DISPLAY_NAME: es el nombre del grupo.
    • DESCRIPTION: Es la descripción del grupo. Esta descripción aparece cuando se otorga acceso a identidades de grupo.
  2. Agrega un proveedor de grupos de identidades para cargas de trabajo:

    OIDC

    gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID \
        --location="global" \
        --workload-identity-pool="WORKLOAD_POOL_ID" \
        --issuer-uri="https://ADFS_DOMAIN/adfs" \
        --allowed-audiences="RELYING_PARTY_ID" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS"
    

    Reemplaza lo siguiente:

    El prefijo gcp- está reservado y no se puede usar en un ID de grupo ni de proveedor.

    SAML o WS-Trust

    curl -O https://ADFS_DOMAIN/federationmetadata/2007-06/federationmetadata.xml
    
    gcloud iam workload-identity-pools providers create-saml PROVIDER_ID \
        --location="global" \
        --workload-identity-pool="POOL_ID" \
        --idp-metadata-path="federationmetadata.xml" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS"
    

    Reemplaza lo siguiente:

    El prefijo gcp- está reservado y no se puede usar en un ID de grupo ni de proveedor.

    Ejemplo:

    gcloud iam workload-identity-pools providers create-saml example-provider \
        --location="global" \
        --workload-identity-pool="pool-1" \
        --idp-metadata-path="federationmetadata.xml" \
        --attribute-mapping=google.subject=assertion.subject"
    

    Opcional: Acepta las aserciones de SAML encriptadas de tu IdP

    Para permitir que tu IdP de SAML 2.0 produzca aserciones de SAML encriptadas que la federación de identidades de personal pueda aceptar, haz lo siguiente:

    • En la federación de identidades para cargas de trabajo, haz lo siguiente:
      • Crea un par de claves asimétricas para tu proveedor de grupos de identidades para cargas de trabajo.
      • Descargar un archivo de certificado que contenga la clave pública
      • Configura tu IdP de SAML para usar la clave pública a fin de encriptar las aserciones de SAML que emite.
    • En el IdP, haz lo siguiente:
      • Habilita la encriptación de aserciones, también conocida como encriptación de tokens.
      • Sube la clave pública que creaste en la federación de identidades para cargas de trabajo.
      • Confirma que tu IdP produzca aserciones de SAML encriptadas.
    Ten en cuenta que, incluso con las claves de proveedor de encriptación de SAML configuradas, la federación de identidades para cargas de trabajo aún puede procesar una aserción de texto simple.

    Crea claves de encriptación de aserciones de SAML de la federación de identidades para cargas de trabajo

    En esta sección, se explica cómo crear un par de claves asimétricas que permite que la federación de identidades para cargas de trabajo acepte aserciones de SAML encriptadas.

    Google Cloud usa la clave privada para desencriptar las aserciones de SAML que emite tu IdP. Para crear un par de claves asimétricas que se usarán con la encriptación SAML, ejecuta el siguiente comando. Para obtener más información, consulta Algoritmos de encriptación de SAML compatibles.

    gcloud iam workload-identity-pools providers keys create KEY_ID \
        --workload-identity-pool WORKLOAD_POOL_ID \
        --provider PROVIDER_ID \
        --location global \
        --use encryption \
        --spec KEY_SPECIFICATION

    Reemplaza lo siguiente:

    • KEY_ID: un nombre de clave que elijas
    • WORKLOAD_POOL_ID: el ID del grupo
    • PROVIDER_ID: el ID del proveedor
    • KEY_SPECIFICATION: la especificación de clave, que puede ser rsa-2048, rsa-3072 y rsa-4096.

    Después de crear el par de claves, ejecuta el siguiente comando para descargar la clave pública en un archivo de certificado. Solo la federación de identidades de personal tiene acceso a la clave privada.

    gcloud iam workload-identity-pools providers keys describe KEY_ID \
        --workload-identity-pool WORKLOAD_POOL_ID \
        --provider PROVIDER_ID \
        --location global \
        --format "value(keyData.key)" \
        > CERTIFICATE_PATH

    Reemplaza lo siguiente:

    • KEY_ID: el nombre de la clave
    • WORKLOAD_POOL_ID: el ID del grupo
    • PROVIDER_ID: el ID del proveedor
    • CERTIFICATE_PATH: la ruta en la que se escribe el certificado, por ejemplo, saml-certificate.cer o saml-certificate.pem

    Configura tu IdP compatible con SAML 2.0 para emitir aserciones de SAML encriptadas

    1. Mueve el archivo de certificado a tu servidor AD FS.
    2. En tu servidor AD FS, haz clic derecho en el botón derecho Inicio (o presiona Ganar + X) y haz clic en Windows PowerShell (administrador).
    3. En PowerShell, ejecuta el siguiente comando para habilitar la encriptación:
              Set-AdfsRelyingPartyTrust `
              -TargetName NAME `
              -SamlResponseSignature MessageAndAssertion `
              -EncryptionCertificate PATH `
              -EncryptClaims $True
          

      Reemplaza lo siguiente:

      • NAME: El nombre de la confianza de tu usuario de confianza
      • PATH: la ruta del archivo del certificado.

    Usuarios de WS-Trust: Esta función solo está disponible cuando usas SAML.

    Después de configurar tu IdP para encriptar las aserciones de SAML, te recomendamos que te asegures de que las aserciones que genera en realidad estén encriptadas. Incluso con la encriptación de aserciones de SAML configurada, la federación de identidades de personal puede procesar aserciones de texto simple.

    Borra claves de encriptación de la federación de Workload Identity

    Para borrar claves de encriptación de SAML, ejecuta el siguiente comando:
      gcloud iam workload-identity-pools providers keys delete KEY_ID \
          --workload-identity-pool WORKLOAD_POOL_ID \
          --provider PROVIDER_ID \
          --location global

    Reemplaza lo siguiente:

    • KEY_ID: el nombre de la clave
    • WORKLOAD_POOL_ID: el ID del grupo
    • PROVIDER_ID: el ID del proveedor

    Algoritmos de encriptación SAML compatibles

    La federación de identidades de personal admite los siguientes algoritmos de transporte de claves:

    La federación de identidades para cargas de trabajo admite los siguientes algoritmos de encriptación de bloques:

Opcional: Habilita la encriptación de SAML

Las aserciones de SAML que emite AD FS están firmadas de forma criptográfica y se intercambian a través de un canal TLS encriptado. Sin embargo, las aserciones de SAML no están encriptadas. Con la encriptación de SAML, puedes configurar AD FS para que encripte las aserciones de modo que solo tu grupo de identidades para cargas de trabajo pueda desencriptarlas y leerlas.

OIDC

Esta función solo está disponible cuando usas SAML.

SAML o WS-Trust

  1. Crea una clave de encriptación para tu proveedor de grupos de identidades para cargas de trabajo:

    gcloud iam workload-identity-pools providers keys create rsa2048 \
        --workload-identity-pool=POOL_ID \
        --provider=PROVIDER_ID \
        --location=global \
        --use=ENCRYPTION \
        --spec=RSA_2048
    

    Reemplaza lo siguiente:

    • PROVIDER_ID: Es el ID del proveedor.
    • POOL_ID: el ID del grupo.

    La federación de identidades para cargas de trabajo almacena y administra el par de claves. Puedes exportar la clave pública, pero solo la federación de identidades para cargas de trabajo puede acceder a la clave privada.

  2. Exporta un certificado que contenga la clave pública:

    gcloud iam workload-identity-pools providers keys describe rsa2048 \
        --workload-identity-pool=POOL_ID \
        --provider=PROVIDER_ID \
        --location=global \
        --format="value(keyData.key)" > workload-identity-federation.cer
    
  3. Mueve el archivo de certificado a tu servidor AD FS.

  4. En tu servidor AD FS, haz clic con el botón derecho en Inicio y, luego, en Windows PowerShell (Administrador).

  5. En PowerShell, modifica la confianza de la parte de confianza para que use encriptación:

    Set-AdfsRelyingPartyTrust `
      -TargetName NAME `
      -SamlResponseSignature MessageAndAssertion `
      -EncryptionCertificate PATH `
      -EncryptClaims $True
    

    Reemplaza lo siguiente:

    • NAME: El nombre de la confianza de tu usuario de confianza
    • PATH: la ruta del archivo del certificado.

Autentica una carga de trabajo

Debes realizar estos pasos una vez por carga de trabajo.

Permite que tu carga de trabajo externa acceda a los recursos de Google Cloud

Para proporcionar a tu carga de trabajo acceso a los recursos de Google Cloud, te recomendamos que otorgues acceso directo a los recursos al principal. En este caso, el principal es el usuario federado. Algunos productos de Google Cloud tienen limitaciones de las APIs de Google Cloud. Si tu carga de trabajo llama a un extremo de API que tiene una limitación, puedes usar el robo de identidad temporal como cuenta de servicio. En este caso, el principal es la cuenta de servicio de Google Cloud, que actúa como la identidad. Otorga acceso a la cuenta de servicio en el recurso.

Acceso directo a recursos

Puedes otorgar acceso a una identidad federada directamente en los recursos con la consola de Google Cloud o gcloud CLI.

Console

Para usar la consola de Google Cloud para otorgar roles de IAM directamente en un recurso, debes ir a la página del recurso y, luego, otorgar el rol. En el siguiente ejemplo, se muestra cómo ir a la página de Cloud Storage y otorgar el rol de visualizador de objetos de almacenamiento (roles/storage.objectViewer) a una identidad federada directamente en un bucket de Cloud Storage.

  1. En la consola de Google Cloud, ve a la página Buckets de Cloud Storage.

    Ir a Buckets

  2. En la lista de buckets, haz clic en el nombre del bucket para el que deseas otorgar el rol.

  3. Elige la pestaña Permisos cerca de la parte superior de la página.

  4. Haz clic en el botón Otorgar acceso.

    Aparecerá el cuadro de diálogo Agregar principales.

  5. En el campo Nuevas principales, ingresa una o más identidades que necesiten acceso a tu bucket.

    Por tema

    principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: el número del proyecto
    • POOL_ID: el ID del grupo de cargas de trabajo
    • SUBJECT: El sujeto individual asignado desde tu IdP, por ejemplo, administrator@example.com

    Por grupo

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: el número del proyecto
    • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
    • GROUP: El grupo asignado desde tu IdP, por ejemplo: administrator-group@example.com

    Por atributo

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: el número del proyecto
    • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
    • ATTRIBUTE_NAME: Uno de los atributos que se asignó desde tu IdP
    • ATTRIBUTE_VALUE: el valor del atributo.
  6. Elige un rol (o roles) del menú desplegable Selecciona un rol. Los roles que seleccionas aparecen en el panel con una descripción breve del permiso que otorgan.

  7. Haz clic en Guardar.

gcloud

Para usar la CLI de gcloud para otorgar roles de IAM en un recurso en un proyecto, haz lo siguiente:

  1. Obtén el número del proyecto en el que se define el recurso.

    gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
    
  2. Otorga el acceso al recurso.

    Para usar gcloud CLI con el objetivo de otorgar el rol de Visualizador de objetos de almacenamiento (roles/storage.objectViewer) a identidades externas que cumplan con ciertos criterios, ejecuta el siguiente comando.

    Por tema

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"

    Por grupo

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"

    Por atributo

    gcloud storage buckets add-iam-policy-binding BUCKET_ID \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"

    Reemplaza lo siguiente:

    • BUCKET_ID: Es el bucket en el que se otorgará acceso.
    • PROJECT_NUMBER: el número del proyecto que contiene el grupo de Workload Identity.
    • POOL_ID: el ID del grupo de identidades para cargas de trabajo
    • SUBJECT: el valor esperado para el atributo que asignaste a google.subject
    • GROUP: el valor esperado para el atributo que asignaste a google.groups
    • ATTRIBUTE_NAME: el nombre de un atributo personalizado en la asignación de atributos
    • ATTRIBUTE_VALUE: Es el valor del atributo personalizado en tu asignación de atributos.

    Puedes otorgar roles en cualquier recurso de Google Cloud que admita políticas de permisos de IAM.

Uso de identidad temporal como cuenta de servicio

  1. Para crear una cuenta de servicio para la carga de trabajo externa, haz lo siguiente:

    1. Enable the IAM, Security Token Service, and Service Account Credentials APIs.

      Enable the APIs

    2. Crea una cuenta de servicio que represente la carga de trabajo. Te recomendamos que uses una cuenta de servicio dedicada para cada carga de trabajo. No es necesario que la cuenta de servicio esté en el mismo proyecto que el grupo de identidades para cargas de trabajo, pero debes consultar el proyecto que contiene la cuenta de servicio.

    3. Otorga acceso a la cuenta de servicio a los recursos a los que deseas que accedan las identidades externas.

    4. Otorga el rol de usuario de Workload Identity (roles/iam.workloadIdentityUser) a la cuenta de servicio:

  2. Para otorgar acceso a una identidad federada mediante la identidad temporal como cuenta de servicio con la consola de Google Cloud o gcloud CLI, haz lo siguiente:

Console

Para usar la consola de Google Cloud para otorgar roles de IAM a una identidad federada con una cuenta de servicio, haz lo siguiente:

Cuenta de servicio en el mismo proyecto

  1. Para otorgar acceso mediante la identidad temporal como cuenta de servicio para una cuenta de servicio en el mismo proyecto, haz lo siguiente:

    1. Ve a la página Grupos de identidades para cargas de trabajo.

      Ir a Grupos de Workload Identity

    2. Selecciona Otorgar acceso.

    3. En el cuadro de diálogo Otorgar acceso a la cuenta de servicio, selecciona Otorgar acceso mediante la identidad temporal como cuenta de servicio.

    4. En la lista Cuentas de servicio, selecciona la cuenta de servicio para las identidades externas que actuarán en nombre de ella y haz lo siguiente:

    5. Para elegir qué identidades en el grupo pueden actuar en nombre de la cuenta de servicio, realiza una de las siguientes acciones:

      • Para permitir que solo las identidades específicas del grupo de identidades para cargas de trabajo actúen en nombre de la cuenta de servicio, selecciona Solo identidades que coinciden con el filtro.

      • En la lista Nombre del atributo, selecciona el atributo que deseas filtrar.

      • En el campo Valor del atributo, ingresa el valor esperado del atributo; por ejemplo, si usas una asignación de atributos google.subject=assertion.sub, establece el nombre del atributo en subject y el valor del atributo en el valor de la declaración sub en los tokens que emite tu proveedor de identidad externo.

    6. Para guardar la configuración, haz clic en Guardar y, luego, en Descartar.

Cuenta de servicio en otro proyecto

  1. Para otorgar acceso mediante la identidad temporal como cuenta de servicio para una cuenta de servicio en un proyecto diferente, haz lo siguiente:

    1. Ve a la página de cuentas de servicio.

      Ir a Cuentas de servicio

    2. Elige la cuenta de servicio de la que quieres usar la identidad.

    3. Haz clic en Administrar acceso.

    4. Haz clic en Agregar principal.

    5. En el campo Principal nuevo, ingresa uno de los siguientes identificadores principales para las identidades de tu grupo que actuarán en nombre de la cuenta de servicio.

      Por tema

      principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
      

      Reemplaza lo siguiente:

      • PROJECT_NUMBER: el número del proyecto
      • POOL_ID: el ID del grupo de cargas de trabajo
      • SUBJECT: El sujeto individual asignado desde tu IdP, por ejemplo, administrator@example.com

      Por grupo

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
      

      Reemplaza lo siguiente:

      • PROJECT_NUMBER: el número del proyecto
      • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
      • GROUP: El grupo asignado desde tu IdP, por ejemplo: administrator-group@example.com

      Por atributo

      principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
      

      Reemplaza lo siguiente:

      • PROJECT_NUMBER: el número del proyecto
      • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
      • ATTRIBUTE_NAME: Uno de los atributos que se asignó desde tu IdP
      • ATTRIBUTE_VALUE: el valor del atributo.

      Junto al grupo

      <principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
      

      Reemplaza lo siguiente:

      • PROJECT_NUMBER: el número del proyecto
      • WORKLOAD_POOL_ID: el ID del grupo de cargas de trabajo
    6. En Selecciona un rol, elige el rol de usuario de Workload Identity (roles/iam.workloadIdentityUser).

    7. Para guardar la configuración, haz clic en Guardar.

gcloud

Para usar la CLI de gcloud a fin de otorgar el rol de usuario de Workload Identity (roles/iam.workloadIdentityUser) a identidades externas que cumplan con ciertos criterios, ejecuta el siguiente comando.

Por tema

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"

Por grupo

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"

Por atributo

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
    --role=roles/iam.workloadIdentityUser \
    --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"

Reemplaza lo siguiente:

  • SERVICE_ACCOUNT_EMAIL: La dirección de correo electrónico de la cuenta de servicio
  • PROJECT_NUMBER: el número del proyecto que contiene el grupo de Workload Identity.
  • POOL_ID: el ID del grupo de identidades para cargas de trabajo
  • SUBJECT: el valor esperado para el atributo que asignaste a google.subject
  • GROUP: el valor esperado para el atributo que asignaste a google.groups
  • ATTRIBUTE_NAME: el nombre de un atributo personalizado en la asignación de atributos
  • ATTRIBUTE_VALUE: Es el valor del atributo personalizado en tu asignación de atributos.

Crea una configuración de credenciales

Puedes permitir que Bibliotecas cliente de Cloud y herramientas como la CLI de gcloud y Terraform usen credenciales de Active Directory para autenticarse en Google Cloud mediante el uso de Autenticador de cargas de trabajo para Windows

El autenticador de cargas de trabajo para Windows es una herramienta de código abierto que actúa como un complemento para las bibliotecas cliente de Cloud y las herramientas como gcloud CLI:

  1. Cuando la herramienta o la biblioteca necesitan una credencial nueva, inician el autenticador de cargas de trabajo en segundo plano.
  2. El autenticador de cargas de trabajo usa OIDC, SAML o WS-Trust para obtener un token nuevo o una aserción de SAML de AD FS y lo pasa a la herramienta o la biblioteca.
  3. Luego, la herramienta o biblioteca usa el intercambio de tokens o la aserción de SAML con credenciales de Google Cloud de corta duración mediante la federación de Workload Identity.

Si deseas usar el autenticador de cargas de trabajo para Windows, debes crear un archivo de configuración de credenciales. Este archivo define lo siguiente:

  • Dónde encontrar el autenticador de cargas de trabajo para Windows ejecutable (wwauth.exe) y con qué parámetros ejecutarlo
  • Qué grupo y proveedor de identidades para cargas de trabajo usar
  • Qué cuenta de servicio actuará en nombre de ella

Para crear un archivo de configuración de credenciales, haz lo siguiente en el servidor de Windows que ejecuta tu carga de trabajo:

  1. Haz clic con el botón derecho en Iniciar (o presiona Windows+X) y, luego, en Windows PowerShell.
  2. Descarga el autenticador de cargas de trabajo para Windows y guárdalo en una ubicación a la que pueda acceder tu carga de trabajo:

    (New-Object Net.WebClient).DownloadFile(
      "https://github.com/GoogleCloudPlatform/iam-windows-authenticator/releases/latest/download/wwauth.exe",
      "${env:ProgramData}\wwauth.exe")
    

    Si creas un archivo de configuración de credenciales con el autenticador de cargas de trabajo para Windows, el archivo contiene la ruta de acceso a su ejecutable. Si más adelante borras o mueves el ejecutable, las cargas de trabajo no podrán encontrarlo ni usarlo.

  3. Iniciar wwauth.exe:

    & ${env:ProgramData}\wwauth.exe
    

    Se abrirá un cuadro de diálogo de configuración:

    Autenticador de cargas de trabajo

  4. Selecciona la pestaña AD FS y, luego, ingresa la siguiente configuración:

    • URI del emisor del servidor de AD FS: el URI público de tu servidor o granja de AD FS.

      https://ADFS_DOMAIN/adfs/
      

      Reemplaza ADFS_DOMAIN por el nombre de dominio público del servidor de AD FS o la granja de servidores.

    La siguiente configuración depende del protocolo que desees usar:

    OIDC

    • Protocolo: AdfsOidc
    • ID de la parte de confianza: Mantén la configuración predeterminada.
    • ID de cliente: Es el identificador de cliente (ID de cliente) de la aplicación del servidor en AD FS.

    SAML

    • Protocolo: AdfsSamlPost
    • URL del servicio para clientes de confirmación: https://sts.googleapis.com/v1/token
    • Firmar solicitudes con un certificado: inhabilitada

    WS-Trust

    • Protocolo: AdfsWsTrust
  5. Selecciona la pestaña Workload Identity y, luego, ingresa la siguiente configuración:

    • Número de proyecto: el número de proyecto que contiene el grupo de identidades para cargas de trabajo
    • ID del grupo: ID del grupo de identidades para cargas de trabajo
    • ID de proveedor: ID del proveedor de grupos de identidades para cargas de trabajo.
    • Actúa en nombre de la cuenta de servicio: habilitada, si usas identidad temporal como cuenta de servicio.
    • Dirección de correo electrónico: Dirección de correo electrónico de la cuenta de servicio, si usas la identidad temporal como cuenta de servicio
  6. Selecciona la pestaña AD FS y verifica que el campo ID de la parte autenticada ahora contenga la URL de tu proveedor de grupos de identidades para cargas de trabajo.

  7. Haz clic en Aplicar y elige una ubicación de archivo para guardar el archivo de configuración de credenciales.

    A diferencia de una clave de cuenta de servicio, un archivo de configuración de credenciales no contiene ningún secreto y no es confidencial. Los detalles sobre el archivo de configuración de credenciales están disponibles en https://google.aip.dev/auth/4117.

Ya está todo listo para probar la configuración:

  1. Selecciona un usuario de Active Directory con el que realizar la prueba. Puede ser el usuario de Active Directory de la carga de trabajo o el usuario con el que accediste.

  2. Para probar la configuración con el usuario actual, haz clic en Probar.

    Para probar con un usuario diferente, selecciona Probar > Probar configuración como usuario y, luego, ingresa las credenciales para el usuario.

    Ahora, la herramienta intenta autenticarse en Google Cloud mediante los siguientes pasos:

    1. Adquiere un token de OIDC o una aserción de SAML de AD FS.
    2. Obtén un token del servicio de tokens de seguridad de Google.
    3. Actúa en nombre de la cuenta de servicio si usas la identidad temporal como cuenta de servicio.

    Si la autenticación se realiza correctamente, verás el mensaje Test completed successfully:

    Resultado de la prueba

Usa la configuración de credenciales para acceder a Google Cloud

Para permitir que las herramientas y las bibliotecas cliente usen tu configuración de credenciales, haz lo siguiente en el servidor Windows que ejecuta tu carga de trabajo:

  1. Haz clic con el botón derecho en el botón Inicio y, luego, en Ejecutar.
  2. Ingresa sysdm.cpl y haz clic en Aceptar.
  3. En la pestaña Avanzado, haz clic en Variables de entorno.
  4. En la sección Variables del sistema, agrega dos variables nuevas:

    Nombre Valor
    GOOGLE_APPLICATION_CREDENTIALS Ruta de acceso al archivo de configuración de credenciales
    GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES 1
  5. Haz clic en Aceptar.

  6. Usa una biblioteca cliente o herramienta que admita la federación de Workload Identity y pueda encontrar credenciales de forma automática:

    C++

    Las bibliotecas cliente de Google Cloud para C++ admiten la federación de identidades para cargas de trabajo desde la versión v2.6.0. Para usar la federación de identidades para cargas de trabajo, debes compilar las bibliotecas cliente con la versión 1.36.0 o posterior de gRPC.

    Go

    Las bibliotecas cliente para Go admiten la federación de identidades para cargas de trabajo si usan la versión v0.0.0-20210218202405-ba52d332ba99 o una versión posterior del módulo golang.org/x/oauth2.

    Para verificar qué versión de este módulo usa tu biblioteca cliente, ejecuta los siguientes comandos:

    cd $GOPATH/src/cloud.google.com/go
    go list -m golang.org/x/oauth2
    

    Java

    Las bibliotecas cliente para Java admiten la federación de identidades para cargas de trabajo si usan la versión 0.24.0 o posterior del artefacto com.google.auth:google-auth-library-oauth2-http.

    Para verificar qué versión de este artefacto usa tu biblioteca cliente, ejecuta el siguiente comando de Maven en el directorio de tu aplicación:

    mvn dependency:list -DincludeArtifactIds=google-auth-library-oauth2-http
    

    Node.js

    Las bibliotecas cliente de Node.js admiten la federación de identidades para cargas de trabajo si usan la versión 7.0.2 o una versión posterior del paquete google-auth-library.

    Para verificar qué versión de este paquete usa tu biblioteca cliente, ejecuta el siguiente comando en el directorio de tu aplicación:

    npm list google-auth-library
    

    Cuando creas un objeto GoogleAuth, puedes especificar un ID del proyecto o puedes permitir que GoogleAuth encuentre el ID del proyecto automáticamente. Para encontrar el ID del proyecto de manera automática, la cuenta de servicio en el archivo de configuración debe tener el rol de Navegador (roles/browser) o un rol con permisos equivalentes en tu proyecto. Para obtener más información, consulta el README del paquete google-auth-library.

    Python

    Las bibliotecas cliente para Python admiten la federación de identidades para cargas de trabajo si usan la versión 1.27.0 o posterior del paquete google-auth.

    Para verificar qué versión de este paquete usa tu biblioteca cliente, ejecuta el siguiente comando en el entorno en el que está instalado el paquete:

    pip show google-auth
    

    Si deseas especificar un ID del proyecto para el cliente de autenticación, puedes configurar la variable de entorno GOOGLE_CLOUD_PROJECT o permitir que el cliente busque el ID del proyecto automáticamente. Para encontrar el ID del proyecto de manera automática, la cuenta de servicio en el archivo de configuración debe tener el rol de Navegador (roles/browser) o un rol con permisos equivalentes en tu proyecto. Para obtener más información, consulta la guía del usuario del paquete google-auth.

    gcloud

    Para autenticar con la federación de identidades para cargas de trabajo, usa el comando gcloud auth login:

    gcloud auth login --cred-file=FILEPATH.json
    

    Reemplaza FILEPATH por la ruta de acceso al archivo de configuración de credenciales.

    La asistencia para la federación de identidades para cargas de trabajo en gcloud CLI está disponible en la versión 363.0.0 y posteriores de gcloud CLI.

    Terraform

    El proveedor de servicios de Google Cloud admite la federación de identidades para cargas de trabajo si usas la versión 3.61.0 o una posterior:

    terraform {
      required_providers {
        google = {
          source  = "hashicorp/google"
          version = "~> 3.61.0"
        }
      }
    }
    

    bq

    Para autenticar a través de la federación de identidades para cargas de trabajo, usa el comando gcloud auth login de la siguiente manera:

    gcloud auth login --cred-file=FILEPATH.json
    

    Reemplaza FILEPATH por la ruta de acceso al archivo de configuración de credenciales.

    La compatibilidad con la federación de identidades para cargas de trabajo en bq está disponible en la versión 390.0.0 y posteriores de gcloud CLI.

¿Qué sigue?