Federación de Workload Identity

En este documento, se proporciona una descripción general de la federación de identidades para las cargas de trabajo externas. Mediante la federación de identidades, puedes otorgar a las cargas de trabajo locales o de múltiples nubes acceso a los recursos de Google Cloud, sin usar una clave de cuenta de servicio.

Puedes usar la federación de identidades con Amazon Web Services (AWS) o con cualquier proveedor de identidad que admita OpenID Connect (OIDC), como Microsoft Azure o SAML 2.0.

¿Por qué elegir la federación de identidades?

En general, las aplicaciones que se ejecutan fuera de Google Cloud usan claves de cuentas de servicio para acceder a los recursos de Google Cloud. Las claves de las cuentas de servicio son credenciales potentes y, si no se administran de forma adecuada, pueden representar un riesgo para la seguridad.

Con la federación de identidades, puedes usar la administración de identidades y accesos (IAM) para otorgar identidades de IAM de identidades externas, incluida la capacidad de suplantar cuentas de servicio. Esto te permite acceder a los recursos directamente mediante un token de acceso de corta duración y quita la carga de mantenimiento y seguridad asociada con las claves de las cuentas de servicio.

Grupos de Workload Identity

Puedes usar un grupo de Workload Identity para organizar y administrar identidades externas.

Un proyecto puede contener varios grupos de Workload Identity, y cada grupo puede tener acceso a diferentes recursos. Esto te permite seguir el principio de privilegio mínimo mediante la agrupación de identidades relacionadas en el mismo grupo y, luego, otorgarles acceso detallado a los recursos.

En general, recomendamos crear un grupo nuevo para cada entorno que no sea de Google Cloud y que necesite acceder a los recursos de Google Cloud, como entornos de desarrollo, etapa de pruebas o producción.

Proveedores de Workload Identity

Un proveedor de Workload Identity es una entidad que describe una relación entre Google Cloud y un proveedor de identidad externo. Estos son algunos ejemplos de proveedores:

  • AWS
  • Azure Active Directory
  • Active Directory local
  • Okta
  • Clústeres de Kubernetes

La federación de identidades de cargas de trabajo sigue la especificación del intercambio de tokens de OAuth 2.0. Proporciona una credencial desde un proveedor de identidad externo al servicio de token seguro, que verifica la identidad en la credencial y, luego, muestra un token federado a cambio.

Asignaciones de atributos

Por lo general, las credenciales incluyen atributos que proporcionan información sobre la identidad confirmada por la credencial, como su nombre, correo electrónico o ID del usuario. La asignación de atributos aplica los atributos de un token externo a un token de Google. Esto permite que IAM use tokens de proveedores externos para autorizar el acceso a los recursos de Google Cloud.

Para AWS, Google proporciona asignaciones predeterminadas, que abarcan las situaciones más comunes. También puedes proporcionar asignaciones personalizadas.

Para los proveedores de OIDC, debes proporcionar las asignaciones. Para construir la asignación, consulta la documentación del proveedor a fin de obtener una lista de atributos en sus credenciales.

La asignación de atributos admite el Common Expression Language (CEL), que te permite formular atributos nuevos y personalizados basados en las credenciales externas o hacer que los atributos existentes sean más legibles. Por ejemplo, la siguiente asignación define un atributo environment en función de si un nombre de recurso de Amazon (ARN) contiene :instance-profile/Production:

attribute.environment=assertion.arn.contains(":instance-profile/Production") ? "prod" : "test"

Los atributos asignados pueden aparecer en el identificador de una principal en una vinculación de función de IAM. También puedes usar atributos asignados en la condición de atributos para el proveedor de grupos de Workload Identity, como se explica en esta página.

En cada asignación, la clave es el nombre de un atributo de un token de Google. Cada atributo debe usar uno de los siguientes nombres:

  • google.subject: la identidad externa que IAM autentica. Este valor también aparece en los registros de auditoría.

  • google.groups: una lista de grupos a los que pertenece la identidad externa. Puedes otorgar acceso a todos los miembros de un grupo mediante la sintaxis descrita en Robo de identidad de la cuenta de servicio en esta página.

  • attribute.NAME: un nombre de atributo personalizado. Reemplaza NAME por un nombre único para el atributo.

El valor debe ser una expresión CEL que se evalúe como un tipo CEL válido. En la expresión CEL, la palabra clave assertion 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.

Para obtener más detalles, consulta la documentación de la API del campo attributeMapping.

Condiciones de atributos

Una condición de atributo te permite restringir qué identidades pueden autenticarse mediante tu grupo de Workload Identity. Mediante una expresión de CEL, puedes examinar los atributos en una credencial de solicitud y elegir si quieres permitir el acceso.

Las condiciones de los atributos son útiles en varias situaciones:

  • 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 proveedor de identidad 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.

Robo de identidad de la cuenta de servicio

El flujo de intercambio de tokens muestra un token de acceso federado. Puedes usar este token para actuar como una cuenta de servicio y obtener un token de acceso de OAuth 2.0 de corta duración. El token de acceso de corta duración te permite llamar a cualquier API de Google Cloud a la que tenga acceso la cuenta de servicio.

Para actuar como una cuenta de servicio, otorga a tu identidad externa la función de usuario de Workload Identity (roles/iam.workloadIdentityUser) en una cuenta de servicio con las funciones que requiere la carga de trabajo. Puedes otorgar una función a todas las identidades en un grupo de Workload Identity o a identidades externas específicas en función de sus atributos.

En la siguiente tabla, se describen situaciones comunes para otorgar funciones:

Identidades Formato del identificador
Identidad única principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT_NAME
Todas las identidades de un grupo principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP_NAME
Todas las identidades con un valor de atributo específico principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
Todas las identidades de un grupo principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*

¿Qué sigue?