Configura la federación de identidades para cargas de trabajo con otros proveedores de identidad

En esta guía, se describe cómo usar la federación de identidades para cargas de trabajo con otros proveedores de identidad (IdP).

Para autenticarte en Cloud de Confiance, puedes permitir que la carga de trabajo intercambie sus credenciales específicas del entorno por credenciales de Cloud de Confiance de corta duración con la federación de identidades para cargas de trabajo.

Las cargas de trabajo que se ejecutan fuera de Cloud de Confiance pueden tener acceso a credenciales existentes y específicas del entorno, por ejemplo:

  • Una carga de trabajo puede obtener un token de aserción de OpenID Connect (OIDC) de un IdP.

  • Una carga de trabajo puede obtener un token de aserción de SAML de un proveedor de identidad (IdP).

La federación de Workload Identity puede ayudarte a reducir la cantidad de credenciales que requieren rotación.

En las siguientes secciones, se describe cómo puedes usar la federación de Workload Identity con IdP que admiten protocolos de autenticación de OpenID Connect (OIDC) o SAML.

Prepara el IdP externo

Debes realizar estos pasos una vez para cada IdP.

Antes de comenzar, verifica que tu IdP externo cumpla con los siguientes requisitos:

OIDC

  • El IdP es compatible con OpenID Connect 1.0.

  • El IdP tiene un URI de entidad emisora.

  • Cloud de Confiance puede acceder a un conjunto de claves web JSON (JWKS) que contiene claves web JSON (JWK). Las JWK se usan para validar los tokens de aserción de OIDC. Puedes proporcionar acceso al JWKS con uno de los siguientes métodos:

    • Cloud de Confiance descarga metadatos de OIDC del IdP a través de una URL de Discovery conocida, disponible públicamente y accesible por Internet. Dentro de los metadatos, la URL de JWKS debe protegerse con SSL y TLS. La URL de JWKS debe comenzar con https://. Cloud de Confiance no admite URLs de JWKS que estén protegidas con certificados autofirmados.

      De forma predeterminada, Cloud de Confiance agrega /.well-known/openid-configuration al URI de la entidad emisora para ubicar la URL de descubrimiento. Si tu IdP aloja los metadatos de descubrimiento en un extremo personalizado, puedes especificar un URI de descubrimiento personalizado (--discovery-uri) (versión preliminar).

      El URI de descubrimiento personalizado debe cumplir con los siguientes requisitos:

      • El URI debe comenzar con https://.
      • El URI no puede superar los 2,000 caracteres.
      • El esquema, el host y el puerto deben coincidir con el URI del emisor.
      • La ruta del URI debe contener /.well-known/<suffix> (donde <suffix> no está vacío, como openid-configuration) y cumplir con una de las siguientes topologías de URL de la entidad emisora:
      • El segmento de ruta conocido se inserta antes de la ruta de la entidad emisora (por ejemplo, https://example.com/.well-known/openid-configuration/tenant1 para la entidad emisora https://example.com/tenant1).
      • El segmento de ruta conocido se agrega debajo de la ruta de la entidad emisora (por ejemplo, https://example.com/tenant1/.well-known/openid-configuration para la entidad emisora https://example.com/tenant1).

      Cloud de Confiance usa estas URLs de extremos para descargar las claves web JSON (JWK) de tu IdP y usa estas claves para validar los tokens. Cloud de Confiance no limita la cantidad de claves que puede descargar.

    • Puedes subir un archivo JWKS de OIDC directamente a Cloud de Confiance cuando creas o actualizas el proveedor del grupo de identidades para cargas de trabajo de OIDC. Para ello, usa la marca --jwk-json-path para proporcionar una ruta de acceso a tu archivo JWKS. Puedes usar este método cuando la URL del extremo de metadatos de OIDC del IdP no sea de acceso público. Se puede subir un máximo de 8 claves a Cloud de Confiance. Como práctica recomendada, te sugerimos que rotes tus claves de JWKS con regularidad actualizando el archivo JWKS.

  • Si federas cargas de trabajo de AWS con la federación de identidades de salida de AWS, AWS actúa como tu IdP de OIDC. Para preparar tu entorno de AWS, sigue estos pasos:

    1. Habilita la federación de identidades saliente en la configuración de tu cuenta de AWS para generar tu URL de entidad emisora de OIDC única.

    2. Asegúrate de que tus cargas de trabajo de AWS (como los perfiles de instancias de EC2 o los roles de tareas de ECS) tengan la política de IAM de AWS requerida que otorga permiso para obtener tokens web JSON (JWT).

SAML

  • El IdP es compatible con SAML 2.0.

  • El IdP proporciona un documento de metadatos del SP de SAML que describe la configuración del proveedor de servicios de SAML y contiene el certificado de firma del IdP.

    Cloud de Confiance usa este certificado para validar las aserciones y respuestas de SAML.

  • El certificado de firma del IdP debe contener una clave ECDSA o RSA que esté dentro de un certificado X.509 v3.

  • Entre los algoritmos de firma recomendados, se incluyen los siguientes:

  • El certificado de firma debe cumplir con los siguientes requisitos de validez:

    • notBefore: una marca de tiempo que no sea superior a 7 días en el futuro
    • notAfter: una marca de tiempo que no sea más de 25 años en el futuro

Puedes configurar un proveedor de grupos de identidades para cargas de trabajo de SAML con un máximo de tres certificados de firma de SAML en un momento determinado. Esta limitación no se aplica a otros tipos de proveedores de grupos de identidades para cargas de trabajo, como OIDC y X.509. Cuando existen varios certificados, Cloud de Confiance itera a través de ellos y trata de usar cada certificado no vencido para entregar una solicitud de intercambio de tokens.

Como práctica recomendada de seguridad, te recomendamos que no vuelvas a usar el mismo par de claves con otros servicios.

Si tu IdP cumple con estos criterios, haz lo siguiente:

OIDC

Configura tu IdP para que tu carga de trabajo pueda obtener tokens de ID que cumplan con los siguientes criterios:

  • Los tokens se firman con el algoritmo RS256 o ES256.
  • Los tokens contienen una reclamación aud con el siguiente valor:

    https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: Es el número del proyecto de Cloud de Confiance que usas para crear un grupo de identidades para cargas de trabajo.
    • 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.
    • WORKLOAD_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.

    Como alternativa, puedes configurar el proveedor del grupo de identidades para cargas de trabajo para que espere un público personalizado.

  • Los tokens contienen una reclamación exp que es futura y una reclamación iat que es pasada.

    El valor de exp debe ser mayor que el de iat en 24 horas como máximo.

  • Tokens vinculados a certificados (versión preliminar): De manera opcional, los tokens pueden incluir una reclamación cnf (confirmación) que contenga una huella digital del certificado SHA-256 (x5t#S256):

    "cnf": {
      "x5t#S256": "BASE64URL_SHA256_CERT_FINGERPRINT"
    }
    

    El valor de x5t#S256 debe ser el hash SHA-256 codificado en base64url de la codificación DER del certificado X.509 de tu cliente. Cuando se presenta un token que contiene esta reclamación a la federación de identidades para cargas de trabajo a través de una conexión de TLS mutua (mTLS) (sts.mtls.googleapis.com), el Servicio de tokens de seguridad valida que la huella digital coincida con el certificado de cliente presentado durante el protocolo de enlace TLS y emite un token de acceso de corta duración vinculado criptográficamente al certificado.

    Para ayudar a proteger los recursos contra el robo de tokens y los ataques repetidos, aplica tokens vinculados a certificados configurando políticas de acceso adaptado al contexto.

Por lo general, es mejor usar tokens de ID cuando realizas un intercambio de tokens, ya que estos reflejan la identidad del usuario. Si decides usar tokens de acceso, asegúrate de que cumplan con los siguientes requisitos adicionales:

  • Los tokens de acceso tienen el formato de token web JSON.
  • Los tokens de acceso contienen una reclamación ISSUER para que la URL ISSUER/.well-known/openid-configuration apunte al extremo de metadatos OIDC del IdP.

  • Para subir claves JWK locales (vista previa), consulta Administra JWKs de OIDC.

SAML

Configura tu IdP para que las aserciones de SAML contengan elementos que cumplan con los siguientes criterios:

  • Un elemento Issuer configurado en el ID de entidad configurado en el proveedor del grupo de identidades para cargas de trabajo. El formato de la entidad emisora debe omitirse o establecerse en urn:oasis:names:tc:SAML:2.0:nameid-format:entity.
  • Un elemento Subject con lo siguiente:
    • un elemento NameID.
    • Exactamente un elemento SubjectConfirmation con Method establecido en urn:oasis:names:tc:SAML:2.0:cm:bearer.
    • un elemento SubjectConfirmationData con NotOnOrAfter configurado en una marca de tiempo que se produce en el futuro y no hay un valor NotBefore
  • Un elemento Conditions con lo siguiente:

    • Se omitió NotBefore o pertenece al pasado.
    • Se omitió NotOnOrAfter o pertenece al futuro.
    • Un Audience con el siguiente formato:

      https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID
      

      Reemplaza lo siguiente:

      • PROJECT_NUMBER: Es el número del proyecto de Cloud de Confiance que usas para crear el grupo de identidades para cargas de trabajo.
      • 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.
      • WORKLOAD_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.
  • al menos un elemento AuthnStatement.

  • un elemento SessionNotOnOrAfter con una marca de tiempo que ocurra en el futuro. Como alternativa, omite el elemento.

Para las aserciones de SAML que se incluyen en una respuesta de SAML, esta debe contener lo siguiente:

  • exactamente una aserción que cumpla con los criterios de aserción de SAML que se describieron antes en esta sección.
  • un atributo IssueInstant con un valor de menos de 1 hora de antigüedad.
  • el código de estado urn:oasis:names:tc:SAML:2.0:status:Success.

Se debe firmar la aserción de SAML, la respuesta o ambas.

Configura la federación de identidades para cargas de trabajo

Solo debes realizar estos pasos una vez para cada IdP. Luego, puedes usar el mismo grupo y proveedor de Workload Identity para varias cargas de trabajo y en varios proyectos de Cloud de Confiance .

Para comenzar a configurar la federación de Workload Identity, haz lo siguiente:

  1. En la consola de Cloud de Confiance , en la página del selector de proyectos, selecciona o crea un proyecto de Cloud de Confiance .

    Roles necesarios para seleccionar o crear un proyecto

    • Seleccionar un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crea un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (roles/resourcemanager.projectCreator), que contiene el permiso resourcemanager.projects.create. Obtén más información para otorgar roles.

    Ir al selector de proyectos

  2. Es mejor usar un proyecto dedicado para administrar grupos y proveedores de identidades para cargas de trabajo.
  3. Verifica que la facturación esté habilitada para tu proyecto de Cloud de Confiance .

  4. Habilita las APIs de IAM, Resource Manager, Credenciales de cuenta de servicio y Security Token Service, si aún no están habilitadas.

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtenerlo a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

    Habilitar las API

Administra los JWK de OIDC subidos por el usuario (opcional)

En esta sección, se muestra cómo administrar JWK de OIDC subidos por el usuario en proveedores de OIDC de grupos de identidades para cargas de trabajo.

Crea un proveedor y sube JWK de OIDC

Para crear JWK de OIDC, consulta Implementaciones de JWT, JWS, JWE, JWK y JWA.

Para subir un archivo JWK de OIDC cuando creas un proveedor de grupo de identidades para cargas de trabajo, ejecuta el comando gcloud iam workload-identity-pools providers create-oidc con --jwk-json-path="JWK_JSON_PATH". Reemplaza JWK_JSON_PATH por la ruta de acceso al archivo JSON de JWK.

Esta operación crea claves subidas con las del archivo.

Actualiza los JWK de OIDC

Para actualizar JWK de OIDC, ejecuta el comando gcloud iam workload-identity-pools providers update-oidc con --jwk-json-path="JWK_JSON_PATH". Reemplaza JWK_JSON_PATH por la ruta de acceso al archivo JSON de JWK.

Esta operación reemplaza cualquier clave subida existente por las que están en el archivo. No puedes restablecer las claves reemplazadas.

Borra todos los JWK de OIDC subidos

Para borrar todos los JWK de OIDC subidos y volver a usar el URI de la entidad emisora para recuperar las claves, ejecuta el comando gcloud iam workload-identity-pools providers update-oidc con --jwk-json-path="JWK_JSON_PATH". Reemplaza JWK_JSON_PATH por la ruta a un archivo vacío. Usa la marca --issuer-uri para establecer el URI de la entidad emisora.

Esta operación borra todas tus claves subidas existentes. No puedes restablecer las claves borradas.

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

Los tokens de OIDC o las aserciones de SAML que emite tu IdP pueden contener varios atributos, y debes decidir qué atributo deseas usar como identificador de asunto (google.subject) en Cloud de Confiance.

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

OIDC

Las asignaciones de atributos pueden usar las reclamaciones incorporadas en el token de ID o el token de acceso emitido por el IdP externo.

Debes asignar una de estas reclamaciones a google.subject para identificar de forma única al usuario. Para protegerte contra las amenazas de falsificación de identidad, elige un reclamo con un valor único que no pueda cambiarse.

Muchos IdP propagan la reclamación sub con un ID único e inmutable. Para estos IdP, considera asignar la reclamación sub a google.subject:

google.subject=assertion.sub

Evita usar una reclamación como email con este propósito. Por lo general, las direcciones de correo electrónico se pueden reasignar o cambiar, por lo que no identifican de forma única y permanente a un usuario.

Asigna atributos de actor con delegación de identidad (versión preliminar): Cuando usas la delegación de identidad, el servicio de tokens de seguridad combina las reclamaciones de sujeto y las reclamaciones de actor, lo que expone las reclamaciones de actor en el objeto de reclamación act. Puedes hacer referencia a las reclamaciones de actor en tus asignaciones de atributos con assertion.act.<claim_name>.

Cuando se realiza un intercambio de tokens delegado, solo se evalúan y aplican las asignaciones de atributos y las condiciones de los atributos del proveedor de sujetos. Se ignoran las asignaciones o condiciones de atributos configuradas en el proveedor de actores.

Por ejemplo, puedes asignar el identificador de sujeto y el URI de la entidad emisora del actor a atributos personalizados de Google:

attribute.actor_subject=assertion.act.sub,attribute.actor_issuer=assertion.act.iss

Si se usa la delegación de varios saltos, los actores upstream se anidan dentro de assertion.act.act. Sin embargo, no se garantiza el orden de las reclamaciones anidadas.

SAML

Tus asignaciones de atributos pueden usar los elementos <Subject> y <Attribute> incorporados en la aserción emitida por el IdP externo. Se puede hacer referencia a los atributos de SAML mediante las siguientes palabras clave:

  • assertion.subject, contiene el NameID del usuario autenticado que se encontró en el elemento <Subject>.
  • assertion.attributes['ATTRIBUTE_NAME'], contiene una lista de valores para el <Attribute> con nombre similar.

Debes asignar una de estas reclamaciones a google.subject para identificar de forma única al usuario. Para protegerte contra las amenazas de falsificación de identidad, elige un reclamo con un valor único que no pueda cambiarse.

Muchos IdP propagan el NameId con un ID único e inmutable. Para estos IdP, considera asignar el atributo NameId a google.subject:

google.subject=assertion.subject

Evita usar un atributo como http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress para este fin. Por lo general, las direcciones de correo electrónico se pueden reasignar o cambiar, por lo que no identifican de forma única y permanente a un usuario.

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 para restringir qué usuarios pueden usar la federación de identidades para cargas de trabajo para obtener tokens de Cloud de Confiance de corta duración.

Por ejemplo, la siguiente condición restringe el acceso a los tokens que contienen una reclamación service_account personalizada con un valor true:

assertion.service_account==true

Condiciones de delegación de identidad (token de actor) (versión preliminar): Cuando usas la delegación de identidad, puedes usar condiciones de atributos de CEL para restringir qué actores pueden realizar operaciones en nombre de los sujetos o aplicar reclamaciones específicas en el token de actor.

Por ejemplo, la siguiente condición requiere que haya un token de actor presente y que el actor se haya originado de una entidad emisora esperada:

has(assertion.act) && assertion.act.iss == 'https://actor-idp.example.com'

Para restringir el acceso a un identificador de sujeto de actor específico, haz lo siguiente:

assertion.act.sub == 'authorized-agent-worker'

SAML

Puedes usar una condición de atributo para restringir qué usuarios pueden usar la federación de identidades para cargas de trabajo para obtener tokens de Cloud de Confiance de corta duración.

Por ejemplo, la siguiente condición restringe el acceso a las aserciones que contienen un atributo https://example.com/SAML/Attributes/AllowGcpFederation personalizado con un valor true:

assertion.attributes['https://example.com/SAML/Attributes/AllowGcpFederation'][0]=='true'

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

Roles obligatorios

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

Ya recopilaste toda la información que necesitas para crear un grupo y un proveedor de Workload Identity:

Console

  1. En la consola de Cloud de Confiance , ve a la página Nuevo proveedor y grupo de cargas de trabajo.

    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 de la siguiente manera:

    OIDC

    • En Selecciona un proveedor, elige OpenID Connect (OIDC).
    • En Nombre del proveedor, ingresa un nombre para el proveedor. El nombre también se usa como el ID del proveedor. No puedes cambiar el ID del proveedor después de crearlo.
    • En URL del emisor, ingresa la URL del emisor de tu IdP. La URL debe comenzar con https://.
    • Opcional: En Archivo JWK (JSON), elige un archivo JWK para subir. Si no se proporciona este campo, Cloud de Confiance intenta recuperar un JWK de la entidad emisora.
    • Público permitido: Público esperado de tokens de ID.

    SAML

    • En Selecciona un proveedor, selecciona SAML.
    • En Nombre del proveedor, ingresa un nombre para el proveedor. El nombre también se usa como el ID del proveedor. No puedes cambiar el ID del proveedor después de crearlo.
    • En Archivo de metadatos de IdP (XML), sube el documento XML de metadatos de SAML que proporciona tu IdP.
  5. Haz clic en Continuar.

  6. En Configura los atributos del proveedor, agrega las asignaciones de atributos que identificaste antes en esta guía.

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

  8. Para crear el grupo de identidades para cargas de trabajo y el proveedor, haz clic en Guardar.

gcloud

  1. Para crear un nuevo grupo de identidades para cargas de trabajo, ejecuta el siguiente comando:

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

    Reemplaza lo siguiente:

    • POOL_ID: el ID único para el grupo.
    • DISPLAY_NAME: el nombre del grupo.
    • DESCRIPTION: una descripción del grupo que eliges. Esta descripción aparece cuando otorgas acceso a identidades de grupo.
  2. Para agregar un proveedor de grupos de identidades para cargas de trabajo, haz lo siguiente:

    OIDC

    Para agregar un proveedor de grupos de identidades para cargas de trabajo de OIDC, ejecuta el siguiente comando:

    gcloud iam workload-identity-pools providers create-oidc WORKLOAD_PROVIDER_ID \
        --location="global" \
        --workload-identity-pool="POOL_ID" \
        --issuer-uri="ISSUER" \
        --discovery-uri="DISCOVERY_URI" \
        --allowed-audiences="AUDIENCE" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS" \
        --jwk-json-path="JWK_JSON_PATH" \
        --actor-providers="ACTOR_PROVIDERS"
    

    Reemplaza lo siguiente:

    • WORKLOAD_PROVIDER_ID: Es un ID de proveedor de grupos de identidades para cargas de trabajo único que elijas.
    • POOL_ID: Es el ID del grupo de identidades para cargas de trabajo que creaste antes.
    • ISSUER: Es un URI de la entidad emisora, como se define en los metadatos de OIDC.
    • DISCOVERY_URI Versión preliminar: Es una URL de descubrimiento personalizada opcional para recuperar metadatos de OIDC si tu IdP no aloja el extremo de descubrimiento de OIDC conocido en https://<issuer_url>/.well-known/openid-configuration. El esquema, el host y el puerto deben coincidir con el ISSUER, y la ruta de acceso debe cumplir con la topología de la URL de la entidad emisora (que contiene /.well-known/<suffix>).
    • AUDIENCE: El público esperado de los tokens de ID, que, para muchos proveedores, coincide con el ID de cliente.
    • MAPPINGS: Una lista separada por comas de las asignaciones de atributos que creaste antes en esta guía.
    • CONDITIONS: Es una condición de atributo opcional que creaste antes en esta guía. Quita el parámetro si no tienes una condición de atributo.
    • JWK_JSON_PATH: Una ruta de acceso opcional a un JWK de OIDC subido de forma local. Si no se proporciona este parámetro, Cloud de Confiance usa la URL de Discovery (DISCOVERY_URI o la ruta de acceso /.well-known/openid-configuration de tu IdP) para obtener los JWK que contienen las claves públicas.
    • ACTOR_PROVIDERS Versión preliminar: Es una lista opcional separada por comas de los nombres de recursos completos de los proveedores de grupos de identidades para cargas de trabajo en el mismo grupo que están autorizados para emitir tokens de actor para este proveedor (por ejemplo, projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/ACTOR_PROVIDER_ID). El ID del contenedor del proyecto en el nombre del recurso debe coincidir con el formato que se usa para el proveedor del sujeto (ambos usan el número de proyecto numérico o ambos usan el ID del proyecto). Puedes especificar un máximo de tres proveedores de actores. Para obtener más información, consulta Configura la delegación de identidad y los tokens de actor.

    SAML

    Para agregar un proveedor de grupos de identidades para cargas de trabajo de SAML, ejecuta el siguiente comando:

    gcloud iam workload-identity-pools providers create-saml WORKLOAD_PROVIDER_ID \
        --location="global" \
        --workload-identity-pool="POOL_ID" \
        --idp-metadata-path="IDP_METADATA_PATH" \
        --attribute-mapping="MAPPINGS" \
        --attribute-condition="CONDITIONS"
    

    Reemplaza lo siguiente:

    • POOL_ID: el ID del grupo.
    • IDP_METADATA_PATH: la ruta local al documento de metadatos del IdP de SAML
    • MAPPINGS: una lista separada por comas de las asignaciones de atributos que creaste antes en esta guía.
    • CONDITIONS: la condición de atributo que creaste antes en esta guía (opcional).

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

    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.

    Cloud de Confiance by S3NS 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 WORKLOAD_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
    • WORKLOAD_PROVIDER_ID: Es el ID del proveedor del grupo de identidades de personal.
    • 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 WORKLOAD_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
    • WORKLOAD_PROVIDER_ID: Es el ID del proveedor del grupo de identidades de personal.
    • 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

    Configura tu IdP de SAML para usar el certificado público descargado del último paso a fin de encriptar las aserciones de SAML que emite. Consulta al equipo de IdP para obtener instrucciones específicas.

    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 WORKLOAD_PROVIDER_ID \
          --location global

    Reemplaza lo siguiente:

    • KEY_ID: el nombre de la clave
    • WORKLOAD_POOL_ID: el ID del grupo
    • WORKLOAD_PROVIDER_ID: Es el ID del proveedor del grupo de identidades de personal.

    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:

Configura la aplicación del Acceso adaptado al contexto para la federación de identidades para cargas de trabajo

La aplicación de la política de acceso adaptado al contexto solo se aplica cuando se usan tokens vinculados a certificados. Puedes fortalecer la seguridad de los recursos contra los ataques de robo y repetición de tokens habilitando el Acceso adaptado al contexto, que aplica la validación de mTLS y la vinculación de certificados para las solicitudes de acceso. Cuando se configuran las políticas de Acceso adaptado al contexto para los tokens vinculados a certificados, Cloud de Confiance evalúa el contexto de transporte y el certificado de cliente de las solicitudes entrantes para garantizar que los tokens de acceso que presenta tu carga de trabajo estén vinculados criptográficamente a una sesión de certificado de cliente de mTLS de confianza. La aplicación de la política de acceso adaptado al contexto no se aplica a los tokens estándar no vinculados.

Configura la delegación de identidad y los tokens de actor

En una situación de delegación de identidad, como se define en el RFC 8693: Intercambio de tokens de OAuth 2.0, una parte actuante (actor) realiza operaciones en nombre de una identidad de sujeto.

Para configurar y autorizar la delegación de identidad, cumple con los siguientes requisitos:

  1. Autorización del proveedor de actor: En la configuración de proveedores de actor (--actor-providers) del proveedor de sujeto, incluye el nombre de recurso completo del proveedor que emite el token de actor. El proveedor de actores debe cumplir con los siguientes criterios:

    • Debe residir en el mismo grupo de identidades para cargas de trabajo que el proveedor de sujetos.
    • El ID del contenedor del proyecto en el nombre del recurso debe coincidir con el formato que se usa para el proveedor de sujetos (por ejemplo, si usas Google Cloud CLI para crear el proveedor de sujetos, debe ser el ID del proyecto alfanumérico).
    • Se puede autorizar un máximo de 3 proveedores de actores por proveedor.
  2. Reclamación may_act en el token de sujeto: El token de ID de sujeto debe incluir una reclamación may_act:

    "may_act": {
      "sub": "ACTOR_SUBJECT",
      "iss": "ACTOR_ISSUER"
    }
    

    Reemplaza lo siguiente:

    • ACTOR_SUBJECT: Es el identificador del sujeto del actor autorizado (debe coincidir con la reclamación sub en el token del actor).
    • ACTOR_ISSUER: Opcional Es el URI de la entidad emisora del proveedor de identidad del actor (debe coincidir con la reclamación iss en el token del actor). Si se omite, se espera que el actor comparta el mismo emisor que el token de asunto.
  3. Parámetros de intercambio de tokens: Cuando se realiza un intercambio de tokens con la federación de identidades para cargas de trabajo, el cliente proporciona el subject_token y el actor_token, junto con sus respectivos tipos de tokens (subject_token_type y actor_token_type):

    • subject_token: Es el token de seguridad que representa la identidad en cuyo nombre se realiza la solicitud.
    • subject_token_type: Es un identificador que indica el tipo de token de asunto (como urn:ietf:params:oauth:token-type:jwt o urn:ietf:params:oauth:token-type:id_token).
    • actor_token: Es el token de seguridad que representa la identidad de la parte que actúa. El token de actor debe cumplir con los siguientes requisitos:
      • Reclamación de público (aud): Debe contener el URI de recurso completo del proveedor de actor específico que emite el actor_token: //iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/ACTOR_PROVIDER_ID. La reclamación aud debe contener solo un URI de recurso del proveedor de grupos de identidades para cargas de trabajo. Si existen varios proveedores de actores en el mismo grupo de identidades para cargas de trabajo, incluye solo el URI del recurso para el proveedor que emite el actor_token.
      • Proveedor de actores autorizado: El proveedor de actores identificado en la reclamación aud debe residir en el mismo grupo de identidades para cargas de trabajo que el proveedor de sujetos y aparecer en la configuración de proveedores de actores (--actor-providers) del proveedor de sujetos.
      • Reclamaciones sub y iss coincidentes: La reclamación sub y la reclamación iss opcional del token de actor deben coincidir con los valores sub y iss declarados en la reclamación may_act del token de sujeto.
    • actor_token_type: Es un identificador que indica el tipo de token de actor (urn:ietf:params:oauth:token-type:jwt o urn:ietf:params:oauth:token-type:id_token). Este parámetro es obligatorio cuando actor_token está presente.
    • Tokens vinculados a certificados con delegación: Si el subject_token está vinculado a un certificado (contiene una reclamación de confirmación cnf), el actor_token también debe estar vinculado a un certificado (contener una reclamación cnf). Cuando se realiza el intercambio de tokens a través de mTLS (sts.mtls.googleapis.com), el certificado de cliente que se presenta en el protocolo de enlace de mTLS debe coincidir con la huella digital del certificado de actor_token.

Autentica una carga de trabajo

Debes realizar estos pasos una vez por cada carga de trabajo.

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

Para proporcionar a tu carga de trabajo acceso a los recursos de Cloud de Confiance , te recomendamos que otorgues acceso directo a los recursos al principal. En este caso, el principal es el usuario federado. Algunos productos de Cloud de Confiance 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 la identidad temporal como cuenta de servicio. En este caso, la principal es la cuenta de servicio deCloud de Confiance , 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 Cloud de Confiance o gcloud CLI.

Console

Para usar la consola de Cloud de Confiance y 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 Cloud de Confiance , 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 gcloud CLI y otorgar roles de IAM en un recurso de 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: Es el número del proyecto que contiene el grupo de identidades para cargas de trabajo.
    • 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 Cloud de Confiance 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. Habilita las APIs de IAM, Security Token Service y Service Account Credentials, si aún no están habilitadas.

      Roles necesarios para habilitar las APIs

      Para habilitar las APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtenerlo a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

      Habilitar las API

    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.

  2. Para permitir que la identidad federada actúe en nombre de la cuenta de servicio, haz lo siguiente:

Console

Para usar la consola de Cloud de Confiance y 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 identidades para cargas de trabajo

    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 otorgar el rol de usuario de Workload Identity (roles/iam.workloadIdentityUser) a una principal o un conjunto de principales federados, ejecuta el siguiente comando. Para obtener más información sobre los identificadores de principales de la federación de identidades para cargas de trabajo, consulta Tipos de principales.

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: Es el número del proyecto que contiene el grupo de identidades para cargas de trabajo.
  • 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.

Descarga una configuración de credenciales

En esta sección, se describe cómo descargar la configuración de credenciales con la consola deCloud de Confiance .

Para permitir que tu carga de trabajo acceda a las bibliotecas cliente, primero debes descargar y configurar las credenciales predeterminadas de la aplicación (ADC). Para ello, sigue estos pasos:

  1. En la consola de Cloud de Confiance , ve a la página Grupos de identidades para cargas de trabajo.

    Ir a Grupos de identidades para cargas de trabajo
  2. En la tabla, selecciona tu grupo para ir a su página de detalles.

  3. Haz clic en Otorgar acceso.

  4. Selecciona Otorgar acceso con identidades federadas (recomendado).

  5. Para descargar las credenciales predeterminadas de la aplicación (ADC) de modo que tu carga de trabajo pueda acceder a las bibliotecas cliente, haz lo siguiente:

    1. Haz clic en Download config.

    2. En el diálogo Configurar tu aplicación, haz lo siguiente:

      1. En la lista desplegable Proveedor, selecciona tu proveedor.

      2. En Ruta de acceso del token de OIDC o Ruta de acceso de la aserción de SAML, ingresa la ruta de acceso en la que se encuentra el token o la aserción.

      3. En la lista desplegable Formato de archivo, selecciona el formato.

    3. Haz clic en Descargar configuración y toma nota de la ruta en la que guardaste el archivo.

Crea una configuración de credenciales

Las bibliotecas cliente de Cloud, gcloud CLI y Terraform pueden obtener credenciales externas de forma automática y usarlas para acceder a Cloud de Confiance. Para permitir que las bibliotecas y las herramientas completen este proceso, debes proporcionar un archivo de configuración de credenciales. Este archivo define lo siguiente:

  • Dónde obtener credenciales externas
  • Qué grupo y proveedor de identidades para cargas de trabajo usar
  • Qué cuenta de servicio actuará en nombre de ella si usas la identidad temporal como cuenta de servicio

Las bibliotecas cliente de Cloud obtienen credenciales externas de un archivo local, una URL HTTP, ejecutando un ejecutable local:

  • Credenciales basadas en ejecutables: Las bibliotecas inician un ejecutable cada vez que necesitan una credencial nueva. Si el ejecutable obtiene correctamente una credencial externa nueva, debe escribir un documento JSON en STDOUT que se vea de la siguiente manera:

    OIDC

    {
      "version": 1,
      "success": true,
      "token_type": "urn:ietf:params:oauth:token-type:id_token",
      "id_token": "HEADER.PAYLOAD.SIGNATURE",
      "expiration_time": 1620499962
    }
    

    Si el ejecutable no puede obtener una credencial nueva, debe escribir un documento JSON en STDOUT que se vea de la siguiente manera:

    {
      "version": 1,
      "success": false,
      "code": "401",
      "message": "Caller not authorized."
    }
    

    Los documentos JSON usan los siguientes campos:

    • version: Es la versión del resultado de JSON. Solo se admite la versión 1.
    • success: Es el estado de la respuesta.

      Cuando true, la respuesta debe contener los campos id_token y token_type. El ejecutable debe salir con el código de salida 0.

      Cuando es false, la respuesta debe contener los campos code y message, y salir con un valor distinto de cero.

    • token_type: Es el tipo de token de la credencial externa. Los valores admitidos son

      • urn:ietf:params:oauth:token-type:id_token
      • urn:ietf:params:oauth:token-type:jwt
    • id_token: Es la credencial externa.

    • expiration_time: Es el tiempo de vencimiento del token de OIDC en segundos (tiempo Unix). El campo solo es obligatorio cuando se especifica un archivo de salida en la configuración de la credencial.

    • code: La string de código de error.

    • message: el mensaje de error

    SAML

    {
      "version": 1,
      "success": true,
      "token_type": "urn:ietf:params:oauth:token-type:saml2",
      "saml_response": "...",
      "expiration_time": 1620499962
    }
    

    Si el ejecutable no puede obtener una credencial nueva, debe escribir un documento JSON en STDOUT que se vea de la siguiente manera:

    {
      "version": 1,
      "success": false,
      "code": "401",
      "message": "Caller not authorized."
    }
    

    Los documentos JSON usan los siguientes campos:

    • version: Es la versión del resultado de JSON. Solo se admite la versión 1.
    • success: Es el estado de la respuesta.

      Cuando true, la respuesta debe contener los campos id_token y token_type. El ejecutable debe salir con el código de salida 0.

      Cuando es false, la respuesta debe contener los campos code y message, y salir con un valor distinto de cero.

    • token_type: Es el tipo de token de la credencial externa. Debe ser urn:ietf:params:oauth:token-type:saml2.

    • saml_response: Es la respuesta de SAML o la aserción de SAML codificada en base64.

    • expiration_time: Es el tiempo de vencimiento de la aserción en segundos (tiempo Unix). El campo solo es obligatorio cuando se especifica un archivo de salida en la configuración de la credencial.

    • code: La string de código de error.

    • message: el mensaje de error

    Cuando se inicia el ejecutable, las bibliotecas cliente establecen las siguientes variables de entorno:

    • GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE: Público de la configuración de las credenciales. Siempre presente.
    • GOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE: Es el tipo de token del asunto esperado. Siempre presente.
    • GOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL: Correo electrónico de la cuenta de servicio Solo está presente cuando se usa la identidad temporal como cuenta de servicio.
    • GOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE: Ubicación del archivo de salida de la configuración de credenciales. Solo está presente cuando se especifica en la configuración de credenciales.

    Para usar credenciales basadas en ejecutables, debes establecer la variable de entorno GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES en 1.

  • Credenciales provistas por el archivo: Las bibliotecas leen la credencial externa desde un archivo JSON o de texto sin formato local. Por ejemplo:

    JSON

    {
      "mytoken": "ey...
    }
    

    Si usas la delegación de actores (versión preliminar), el archivo JSON debe incluir campos separados para el token de sujeto y el token de actor:

    {
      "subject_token": "ey...",
      "actor_token": "ey..."
    }
    

    Las configuraciones de credenciales que usan la delegación de actores (actor_token_field_name y actor_token_type) solo son compatibles con la biblioteca de Google Auth para Java.

    Texto

    ey...
    

    La credencial externa puede ser la siguiente:

    • un token de OIDC
    • una respuesta de SAML
    • una aserción de SAML codificada en base64

    Debes actualizar el archivo de forma periódica para que siempre contenga una credencial válida. Por ejemplo, si el token de OIDC o la aserción de SAML son válidos durante una hora, debes actualizar el archivo al menos una vez por hora.

  • Credenciales basadas en URL: Las bibliotecas realizan una solicitud GET a un extremo HTTP cada vez que necesitan una credencial nueva. El extremo debe devolver una respuesta de texto sin formato o JSON que sea equivalente al formato que usan las credenciales basadas en archivos.

Para crear un archivo de configuración de credenciales, haz lo siguiente:

Credenciales basadas en ejecutables

gcloud iam workload-identity-pools create-cred-config \
    projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \
    --sts-location=REGION \
    --output-file=FILEPATH.json \
    --executable-command=EXECUTABLE_COMMAND \
    --executable-timeout-millis=EXECUTABLE_TIMEOUT \
    --executable-output-file=EXECUTABLE_OUTPUT_FILE

Reemplaza lo siguiente:

  • PROJECT_NUMBER: Es el número del proyecto que contiene el grupo de identidades para cargas de trabajo.
  • POOL_ID: Es el ID del grupo de identidades para cargas de trabajo.
  • WORKLOAD_PROVIDER_ID: El ID del proveedor de grupos de Workload Identity
  • SERVICE_ACCOUNT_EMAIL: Si usas la identidad temporal como cuenta de servicio, reemplaza por la dirección de correo electrónico de la cuenta de servicio. Omite esta marca si no usas la identidad temporal como cuenta de servicio.
  • SERVICE_ACCOUNT_TOKEN_LIFETIME: Si usas la identidad temporal como cuenta de servicio, reemplaza por la vida útil del token de acceso de la cuenta de servicio, en segundos; el valor predeterminado es de una hora cuando no se proporciona. Omite esta marca si no usas la identidad temporal como cuenta de servicio. Para especificar un ciclo de vida de más de una hora, debes configurar la restricción de la política de la organización constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • REGION: Opcional Especifica la región de los extremos regionales del servicio de tokens de seguridad, si están disponibles.
  • FILEPATH: El archivo en el que se guardará la configuración
  • EXECUTABLE_COMMAND: Es el comando completo, incluidos los argumentos, que se ejecuta para recuperar el token de ID de OIDC, por ejemplo, --executable-command="/path/to/command --foo=bar".
  • EXECUTABLE_TIMEOUT: La duración opcional en milisegundos que se esperará para que se ejecute el ejecutable (el valor predeterminado es de 30 segundos).
  • EXECUTABLE_OUTPUT_FILE: Es una ruta de acceso que apunta a las credenciales de 3PI que genera el ejecutable. Esto es útil para almacenar en caché las credenciales. Si especificas esta ruta de acceso, las bibliotecas de Auth verificarán su existencia antes de ejecutar el archivo ejecutable.

Credenciales basadas en archivos

gcloud iam workload-identity-pools create-cred-config \
    projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \
    --sts-location=REGION \
    --output-file=FILEPATH.json \
    --credential-source-file=TOKEN_FILEPATH \
    --credential-source-type=SOURCE_TYPE \
    --credential-source-field-name=FIELD_NAME \
    --actor-token-field-name=ACTOR_FIELD_NAME \
    --actor-token-type=ACTOR_TOKEN_TYPE \
    --credential-cert-path=WORKLOAD_CERTIFICATE_PATH \
    --credential-cert-private-key-path=WORKLOAD_KEY_PATH \
    --credential-cert-configuration-output-file=CERT_CONFIG_FILEPATH

Reemplaza lo siguiente:

  • PROJECT_NUMBER: Es el número del proyecto que contiene el grupo de identidades para cargas de trabajo.
  • POOL_ID: Es el ID del grupo de identidades para cargas de trabajo.
  • WORKLOAD_PROVIDER_ID: El ID del proveedor de grupos de Workload Identity
  • SERVICE_ACCOUNT_EMAIL: Si usas la identidad temporal como cuenta de servicio, reemplaza por la dirección de correo electrónico de la cuenta de servicio. Omite esta marca si no usas la identidad temporal como cuenta de servicio.
  • SERVICE_ACCOUNT_TOKEN_LIFETIME: Si usas la identidad temporal como cuenta de servicio, reemplaza por la vida útil del token de acceso de la cuenta de servicio, en segundos; el valor predeterminado es de una hora cuando no se proporciona. Omite esta marca si no usas la identidad temporal como cuenta de servicio. Para especificar un ciclo de vida de más de una hora, debes configurar la restricción de la política de la organización constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • REGION: Opcional Especifica la región de los extremos regionales del servicio de tokens de seguridad, si están disponibles.
  • FILEPATH: El archivo en el que se guardará la configuración.
  • TOKEN_FILEPATH: La ruta en la que se almacenan los tokens de ID de OIDC.
  • SOURCE_TYPE: El formato del archivo de token de ID de OIDC, configurado como text (predeterminado) o json. Si se especifica la marca --actor-token-field-name, se debe establecer en json.
  • FIELD_NAME: El campo en el archivo de texto que contiene el token (si SOURCE_TYPE es json).
  • ACTOR_FIELD_NAME (versión preliminar): Opcional. Si usas la delegación de actores, especifica el campo en el archivo JSON (TOKEN_FILEPATH) que contiene el token del actor. Debe ser diferente de FIELD_NAME. Omite esta marca si no usas la delegación de actores.
  • ACTOR_TOKEN_TYPE (versión preliminar): Opcional. Es el tipo de token del token de actor cuando se especifica la marca --actor-token-field-name. El valor predeterminado es urn:ietf:params:oauth:token-type:jwt. Omite esta marca si no usas la delegación de actores.
  • WORKLOAD_CERTIFICATE_PATH (versión preliminar): Opcional. Si usas tokens vinculados a certificados, especifica la ruta de acceso al archivo de certificado de hoja X.509 codificado con PEM de tu carga de trabajo. Cuando se especifica esta marca, gcloud CLI configura los extremos de mTLS (sts.mtls.googleapis.com y iamcredentials.mtls.googleapis.com) y genera un archivo de configuración de certificado.
  • WORKLOAD_KEY_PATH (versión preliminar): Opcional. Es la ruta de acceso al archivo de clave privada codificado con PEM para el certificado X.509 de tu carga de trabajo. Si se especifica la marca --credential-cert-path, esta marca es obligatoria.
  • CERT_CONFIG_FILEPATH (versión preliminar): Opcional. Es una ruta de acceso de salida personalizada para el archivo de configuración del certificado generado. Si omites esta marca y especificas la marca --credential-cert-path, gcloud CLI escribe certificate_config.json en la ubicación de configuración predeterminada de gcloud CLI (~/.config/gcloud/certificate_config.json en Linux y macOS, o %APPDATA%\gcloud\certificate_config.json en Windows).

Las configuraciones de credenciales resultantes que incluyen la delegación de actores con las marcas --actor-token-field-name y --actor-token-type solo son compatibles con la biblioteca de Google Auth para Java.

Credenciales basadas en URL

gcloud iam workload-identity-pools create-cred-config \
    projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --service-account-token-lifetime-seconds=SERVICE_ACCOUNT_TOKEN_LIFETIME \
    --sts-location=REGION \
    --output-file=FILEPATH.json \
    --credential-source-url="TOKEN_URL" \
    --credential-source-headers="KEY_1=VALUE_1,KEY_2=VALUE_2" \
    --credential-source-type=SOURCE_TYPE \
    --credential-source-field-name=FIELD_NAME

Reemplaza lo siguiente:

  • PROJECT_NUMBER: Es el número del proyecto que contiene el grupo de identidades para cargas de trabajo.
  • POOL_ID: Es el ID del grupo de identidades para cargas de trabajo.
  • WORKLOAD_PROVIDER_ID: Es el ID del proveedor de grupos de identidades para cargas de trabajo.
  • SERVICE_ACCOUNT_EMAIL: Si usas la identidad temporal como cuenta de servicio, reemplaza por la dirección de correo electrónico de la cuenta de servicio. Omite esta marca si no usas la identidad temporal como cuenta de servicio.
  • SERVICE_ACCOUNT_TOKEN_LIFETIME: Si usas la identidad temporal como cuenta de servicio, reemplaza por la vida útil del token de acceso de la cuenta de servicio, en segundos; el valor predeterminado es de una hora cuando no se proporciona. Omite esta marca si no usas la identidad temporal como cuenta de servicio. Para especificar un ciclo de vida de más de una hora, debes configurar la restricción de la política de la organización constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • REGION: Opcional Especifica la región de los extremos regionales del servicio de tokens de seguridad, si están disponibles.
  • FILEPATH: El archivo para guardar la configuración.
  • TOKEN_URL: Es la URL de la que se recuperará el token de ID de OIDC.
  • KEY_n, VALUE_n: Son los encabezados personalizados que se deben incluir en la solicitud HTTP a TOKEN_URL.
  • SOURCE_TYPE: Es el formato del archivo de token de ID de OIDC, configurado como text (predeterminado) o json.
  • FIELD_NAME: Es el campo en el archivo de texto que contiene el token (si SOURCE_TYPE es json).

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

Para permitir que las herramientas y las bibliotecas cliente usen tu configuración de credenciales, haz lo siguiente:

  1. Inicializa una variable de entorno GOOGLE_APPLICATION_CREDENTIALS y apúntala al archivo de configuración de credenciales:

    Bash

      export GOOGLE_APPLICATION_CREDENTIALS=`pwd`/FILEPATH.json
      
    En el ejemplo anterior, FILEPATH es la ruta de acceso relativa al archivo de configuración de credenciales.

    PowerShell

      $env:GOOGLE_APPLICATION_CREDENTIALS = Resolve-Path 'FILEPATH.json'
      
    En el ejemplo anterior, FILEPATH es la ruta de acceso relativa al archivo de configuración de credenciales.
  2. Usa una biblioteca cliente o herramienta que admita la federación de identidades para cargas de trabajo y pueda encontrar credenciales de forma automática:

    C++

    Las bibliotecas cliente deCloud de Confiance 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 deCloud de Confiance 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?