En este documento, se proporciona una descripción general de la federación de identidades para cargas de trabajo. Con la federación de identidades para cargas de trabajo, puedes proporcionar a las cargas de trabajo locales o de múltiples nubes acceso a los recursos de Google Cloud con identidades federadas en lugar de una clave de cuenta de servicio.
Puedes usar la federación de identidades para cargas de trabajo con cargas de trabajo que se autentiquen con certificados de cliente X.509, que se ejecuten en Amazon Web Services (AWS) o Azure, en Active Directory local, en servicios de implementación, como GitHub y GitLab, y con cualquier proveedor de identidad (IdP) que admita OpenID Connect (OIDC) o Security Assertion Markup Language (SAML) V2.0.
¿Por qué elegir la federación de Workload Identity?
Las aplicaciones que se ejecutan fuera de Google Cloud pueden usarclaves de cuentas de serviciopara acceder a los recursos de Google Cloud . Sin embargo, las claves de cuenta de servicio son credenciales potentes y, si no se administran de forma adecuada, pueden representar un riesgo para la seguridad. La federación de identidades para cargas de trabajo elimina la carga de seguridad y mantenimiento asociada con las claves de cuenta de servicio.
Con la federación de identidades para cargas de trabajo, puedes usar Identity and Access Management (IAM) para otorgar roles de IAM a principales basados en identidades federadas en un grupo de identidades para cargas de trabajo. Puedes otorgar acceso a los principales en recursos Google Cloud específicos. Este enfoque se denomina acceso directo. Como alternativa, puedes otorgar acceso a una cuenta de servicio, que luego podrá acceder a los recursos de Google Cloud . Este enfoque se denomina identidad temporal como cuenta de servicio.
Grupos de identidades para cargas de trabajo
Un grupo de identidades para cargas de trabajo es una entidad que te permite administrar identidades externas.
En general, recomendamos crear un grupo nuevo para cada entorno que no sea deGoogle Cloudy que necesite acceder a los recursos de Google Cloud , como entornos de desarrollo, etapa de pruebas o producción.
Proveedores de grupos de Workload Identity
Un proveedor de grupos de identidades para cargas de trabajo es una entidad que describe una relación entre Google Cloud y tu IdP, incluida la siguiente información:
- AWS
- Microsoft Entra ID
- GitHub
- GitLab
- Clústeres de Kubernetes
- Okta
- Active Directory Federation Services (AD FS) local
- Terraform
La federación de Workload Identity sigue la especificación del de trabajo sigue la especificación del intercambio de tokens de OAuth 2.0. Proporciona una credencial desde tu IdP al servicio de tokens de seguridad, que verifica la identidad en la credencial y, luego, muestra un token federado a cambio.
Proveedor de OIDC con JWK locales
Para federar cargas de trabajo que no tienen un extremo público de OIDC, puedes subir conjuntos de claves web JSON (JWKS) de OIDC directamente al grupo. Esto es común si tienes Terraform o GitHub Enterprise alojados en tu propio entorno o si tienes requisitos reglamentarios para no exponer URLs públicas. Para obtener más información, consulta Administra los JWK de OIDC (opcional).
Asignaciones de atributos
Los tokens emitidos por tu IdP externo contienen uno o más atributos. Algunos IdP se refieren a estos atributos como reclamaciones.
Los tokens del Servicio de tokens de seguridad de Google también contienen uno o más atributos, como se indica en la siguiente tabla:
| Atributo | Descripción |
|---|---|
google.subject |
Obligatorio. Un identificador único para el usuario. Este atributo se usa en las vinculaciones de roles principal:// de IAM y aparece en los registros de Cloud Logging.
El valor debe ser único y no puede superar los 127 caracteres.
|
google.groups |
Opcional. Un conjunto de grupos a los que pertenece la identidad. Este atributo se usa en las vinculaciones de roles principalSet:// de IAM para otorgar acceso a todos los miembros de un grupo.
|
attribute.NAME |
Opcional. Puedes definir hasta 50 atributos personalizados y usar estos atributos en las vinculaciones de roles principalSet:// de IAM para otorgar acceso a todas las identidades con un atributo determinado.
|
Una asignación de atributos define cómo derivar el valor del atributo del token del servicio de tokens de seguridad de Google de un token externo. Para cada atributo de token del servicio de tokens de seguridad de Google, puedes definir una asignación de atributos con el siguiente formato:
TARGET_ATTRIBUTE=SOURCE_EXPRESSION
Reemplaza lo siguiente:
TARGET_ATTRIBUTEes un atributo del token del servicio de tokens de seguridad de Google.SOURCE_EXPRESSIONes una expresión Common Expression Language (CEL) que transforma uno o más atributos de los tokens emitidos por tu IdP externo.
En la siguiente lista, se proporcionan ejemplos de asignaciones de atributos:
Asigna el atributo de aserción
subagoogle.subject:google.subject=assertion.sub
Concatena varios atributos de aserción:
google.subject='myprovider::' + assertion.aud + '::' + assertion.sub
Asigna un atributo de aserción con valor GUID
workload_ida un nombre y asigna el resultado a un atributo personalizado llamadoattribute.my_display_name:attribute.my_display_name={ "8bb39bdb-1cc5-4447-b7db-a19e920eb111": "Workload1", "55d36609-9bcf-48e0-a366-a3cf19027d2a": "Workload2" }[assertion.workload_id]Usa operadores y funciones lógicas CEL para establecer un atributo personalizado llamado
attribute.environmentenprodotest, según Amazon Resource Name (ARN):attribute.environment=assertion.arn.contains(":instance-profile/Production") ? "prod" : "test"Usa la función
extractpara propagar un atributo personalizadoaws_rolecon el nombre del rol supuesto o, si no se supone ningún rol, con el ARN de la identidad.attribute.aws_role=assertion.arn.contains('assumed-role') ? assertion.arn.extract('{account_arn}assumed-role/') + 'assumed-role/' + assertion.arn.extract('assumed-role/{role_name}/') : assertion.arnUsa la función
splitpara dividir una cadena en un separador especificado. Por ejemplo, para extraer el atributousernamede un atributo de dirección de correo electrónico dividiendo su valor en el símbolo@y usando la primera cadena, usa la siguiente asignación de atributos:attribute.username=assertion.email.split("@")[0]Usa la función
joinpara unir una lista de cadenas con un separador especificado. Por ejemplo, para propagar el atributo personalizadodepartmentconcatenando una lista de cadenas con.como separador, usa la siguiente asignación de atributos:attribute.department=assertion.department.join(".")
Cuando usas certificados de cliente X.509, la federación de identidades para cargas de trabajo asigna google.subject al nombre común del asunto del certificado de cliente (assertion.subject.dn.cn) de forma predeterminada:
google.subject=assertion.subject.dn.cn
También puedes asignar atributos adicionales de los certificados intermedios y de hoja.
Para AWS, si no especificas una asignación de atributos, Google aplica la siguiente asignación predeterminada, que abarca la mayoría de las situaciones comunes:
google.subject=assertion.arn
attribute.aws_role=assertion.arn.contains('assumed-role') ? assertion.arn.extract('{account_arn}assumed-role/') + 'assumed-role/' + assertion.arn.extract('assumed-role/{role_name}/') : assertion.arn
Esta asignación establece google.subject en el ARN de la entidad llamadora y attribute.aws_role en el ARN del rol supuesto (sin el nombre de la sesión) si se supone un rol o en el ARN de la entidad llamadora en caso contrario. También puedes proporcionar asignaciones personalizadas.
En el caso de los proveedores de OIDC y SAML, debes proporcionar las asignaciones de atributos. Para construir la asignación, consulta la documentación del proveedor a fin de obtener una lista de atributos en sus credenciales.
Para obtener más detalles, consulta la documentación de la API del campo attributeMapping.
Condiciones de atributos
Una condición de atributo es una expresión CEL que puede 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.
Puedes usar una condición de atributo para restringir qué identidades pueden autenticarse mediante tu grupo de Workload Identity.
Las condiciones de los atributos son útiles en situaciones como las siguientes:
Si tu carga de trabajo usa un proveedor de identidad que está disponible para el público en general, puedes restringir el acceso a fin de que solo las identidades que elijas tengan acceso a tu grupo de Workload Identity.
Si usas un IdP con varias plataformas en la nube, puedes evitar que las credenciales destinadas a usarse con otra plataforma se usen con Google Cloud, y viceversa. Esto ayuda a evitar el problema de engaño de aplicación delegada.
La condición de atributo de un proveedor de grupos de Workload Identity puede usar la palabra clave assertion, que hace referencia a un mapa que representa la credencial de autenticación emitida por el proveedor de identidad. Puedes usar la notación de puntos para acceder a los valores del mapa. Por ejemplo, las credenciales de AWS incluyen un valor arn, al que puedes acceder como assertion.arn. Además, la condición de atributo puede usar cualquier atributo que se defina en la asignación de atributos del proveedor.
En el siguiente ejemplo, solo se permiten solicitudes de identidades que tienen una función específica de AWS:
attribute.aws_role == "ROLE_MAPPING"
Para obtener más detalles, consulta la documentación de la API del campo attributeCondition.
Administración de acceso
El flujo de intercambio de tokens muestra un token de acceso federado. Puedes usar este token de acceso federado para otorgar acceso a tu carga de trabajo en nombre de las identidades principales en los recursos de Google Cloud y obtener un token de acceso de OAuth 2.0 de corta duración.
Puedes usar este token de acceso para proporcionar acceso a la IAM.
Te recomendamos que uses la federación de identidades para cargas de trabajo para proporcionar acceso directamente a un recurso Google Cloud . Aunque la mayoría de las Google Cloud APIs admiten la federación de identidades para cargas de trabajo, algunas APIs tienen limitaciones. Como alternativa, puedes usar la identidad temporal como cuenta de servicio.
El token de acceso de corta duración te permite llamar a cualquier API de Google Cloud a la que tenga acceso el recurso o la cuenta de servicio.
Acceso directo a recursos
Puedes usar el acceso directo a los recursos para otorgar a tu identidad externa acceso directo a un recurso Google Cloud con roles específicos del recurso.
Alternativa: identidad temporal como cuenta de servicio
Como alternativa a proporcionar acceso directo a los recursos, puedes usar la identidad temporal como cuenta de servicio.
Debes otorgar a tu cuenta de servicio el rol de usuario de Workload Identity (roles/iam.workloadIdentityUser).
Alcances principales y seguridad
Para otorgar acceso a principales o subconjuntos de ellos, usa los tipos de principales.
Tipos principales
En la siguiente tabla, se describe cómo definir principales como personas y grupos de identidades:
| Identidades | Formato del identificador |
|---|---|
| Identidad única |
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/
|
| Todas las identidades de un grupo |
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/
|
| Todas las identidades con un valor de atributo específico |
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/
|
¿Qué sigue?
Usa la federación de identidades para cargas de trabajo para permitir que tus cargas de trabajo accedan a los recursos de AWS o Azure, certificados X.509, Active Directory, canalizaciones de implementación o proveedores de OIDC o SAML.
Obtén información para administrar grupos de Workload Identity mediante Google Cloud CLI o la API de REST.