Compartir a través de


Credenciales de identidad federada flexibles (versión preliminar)

Las credenciales de identidad federada flexibles son una característica avanzada del identificador de carga de trabajo de Microsoft Entra que mejora el modelo de credenciales de identidad federada existente. En este artículo se explica cómo funcionan estas credenciales, sus ventajas y limitaciones actuales.

Las credenciales de identidad federadas flexibles permiten el uso de un lenguaje de expresiones restringido para hacer coincidir las declaraciones entrantes de subject y habilitar la inclusión de declaraciones personalizadas, ayudando a reducir la carga de gestión y a abordar los límites de escala en la federación de identidades de carga de trabajo. Si desea simplificar la autenticación para cargas de trabajo externas con Microsoft Entra, esta guía le proporciona la información necesaria y los pasos necesarios para usar esta característica eficaz.

¿Por qué usar credenciales de identidad federadas flexibles?

El comportamiento actual de las credenciales de identidad federada dentro de la federación de identidad para cargas de trabajo requiere coincidencia exacta al comparar los subject, issuery audience definidos en la credencial de identidad federada con los subject, issuery audience contenidos en el token enviado a Microsoft Entra. Cuando se combina con el límite actual de 20 credenciales de identidad federada para una aplicación determinada o una identidad administrada asignada por el usuario, los límites de escala se pueden alcanzar rápidamente.

Las credenciales de identidad federada flexibles amplían el modelo de credenciales de identidad federada existente al permitir el uso de un lenguaje de expresiones restringido para hacer coincidir las reclamaciones entrantes de subject. También se puede utilizar para extender el modelo de autorización de credenciales de identidad federada más allá de las reclamaciones subject, issuery audience, permitiendo la inclusión de ciertas reclamaciones personalizadas permitidas dentro de sus credenciales de identidad federada.

Las credenciales de identidad federadas flexibles pueden ayudar a reducir la sobrecarga de administración al intentar autenticar cargas de trabajo externas con Microsoft Entra y abordar los límites de escala en las implementaciones de federación de identidades de carga de trabajo.

¿Cómo funcionan las credenciales de identidad federada flexibles?

Las credenciales de identidad federada flexibles no cambian la funcionalidad de línea base proporcionada por las credenciales de identidad federada. Estas relaciones de confianza se siguen usando para indicar qué token del IdP externo debe ser de confianza para la aplicación. En su lugar, amplían la capacidad de las credenciales de identidad federada habilitando escenarios que anteriormente requerían varias credenciales de identidad federada para administrarse en una única credencial de identidad federada flexible. Algunos ejemplos son:

  • Repositorios de GitHub con varios flujos de trabajo, cada uno que se ejecuta en una rama diferente (o se usa entre ramas). Anteriormente, se requería una credencial de identidad federada única para cada una de las ramas en las que se podían ejecutar flujos de trabajo. Con credenciales de identidad federada flexibles, este escenario se puede administrar con una sola credencial de identidad federada.
  • Planes run_phases de Terraform Cloud, cada uno de los cuales requiere una credencial de identidad federada única. Con credenciales de identidad federada flexibles, se puede administrar con una única credencial de identidad federada flexible.
  • Flujos de trabajo reutilizables de Acciones de GitHub, donde se pueden usar caracteres comodín en la declaración job_workflow_ref personalizada de GitHub.

Nota

Actualmente se proporciona compatibilidad con credenciales de identidad federada flexibles para buscar coincidencias con tokens emitidos en GitHub, GitLab y Terraform Cloud. Esta compatibilidad solo existe para las credenciales de identidad federada configuradas actualmente en objetos de aplicación. Solo puede crear y administrar credenciales de identidad federada flexibles a través de Microsoft Graph o Azure Portal.

Estructura flexible del lenguaje de credenciales de identidad federada

Una expresión flexible de credenciales de identidad federada se compone de tres partes: la búsqueda de reclamaciones, el operador y el comparando. Consulte la tabla siguiente para obtener un desglose de cada parte:

Nombre Descripción Ejemplo
Búsqueda de reclamaciones La búsqueda de reclamaciones debe seguir el patrón de claims[‘<claimName>’] claims['sub']
Operador La parte del operador debe ser solo el nombre del operador, separado de la búsqueda de reclamaciones y el comparando por un solo espacio matches
Comparando El comparando contiene lo que deseas comparar con el reclamo especificado en la búsqueda: debe incluirse entre comillas simples. 'repo:contoso/contoso-repo:ref:refs/heads/*'

En conjunto, una expresión de credenciales de identidad federada flexible de ejemplo tendría un aspecto similar al siguiente objeto JSON:

"claims['sub'] matches 'repo:contoso/contoso-repo:ref:refs/heads/*'."

Configuración de credenciales de identidad federada a través de Microsoft Graph

Para dar cabida a la funcionalidad flexible de credenciales de identidad federada, el recurso de federatedIdentityCredentials se está ampliando con una nueva propiedad claimsMatchingExpression. Además de esto, la propiedad subject ahora admite valores NULL. Las propiedades claimsMatchingExpression y subject son mutuamente excluyentes, por lo que no puede definir ambas dentro de una credencial de identidad federada.

  • audiences: la audiencia que puede estar presente en el token externo. Este campo es obligatorio y debe establecerse en api://AzureADTokenExchange para el identificador de Entra de Microsoft. Indica qué plataforma de identidad de Microsoft debe aceptar en la notificación aud en el token entrante. Este valor representa Microsoft Entra ID en el proveedor de identidades externo y no tiene ningún valor fijo entre los proveedores de identidades: es posible que tenga que crear un nuevo registro de aplicación en el IdP para que sirva como audiencia de este token.
  • issuer: la dirección URL del proveedor de identidades externo. Debe coincidir con la reclamación del emisor del token externo que está siendo intercambiado.
  • subject: identificador de la carga de trabajo de software externo dentro del proveedor de identidades externo. Al igual que el valor de audiencia, no tiene un formato fijo, ya que cada IdP usa su propio identificador: a veces un GUID, a veces un identificador delimitado por dos puntos, y a veces cadenas arbitrarias. El valor aquí debe coincidir con la notificación sub dentro del token presentado a Microsoft Entra ID. Si se define subject, claimsMatchingExpression debe establecerse en NULL.
  • name: una cadena única para identificar la credencial. Esta propiedad es una clave alternativa y el valor se puede usar para hacer referencia a la credencial de identidad federada a través de la GET y las operaciones de UPSERT.
  • claimsMatchingExpression: un nuevo tipo complejo que contiene dos propiedades, value y languageVersion. El valor se usa para definir la expresión y languageVersion se usa para definir la versión del lenguaje de expresión de credenciales de identidad federada flexible (FFL) que se usa. languageVersion siempre debe establecerse en 1. Si se define claimsMatchingExpression, subject debe establecerse en NULL.

Funcionalidad flexible del lenguaje de expresión de credenciales de identidad federada

Actualmente, las credenciales de identidad federada flexibles admiten el uso de ciertos operadores a través de los emisores habilitados. Las comillas simples se interpretan como caracteres de escape dentro del lenguaje de expresión de credenciales de identidad federada flexible.

Operador Descripción Ejemplo
matches Habilita el uso del comodín de caracteres individuales (indicados por ?) y múltiples caracteres (indicados por *) para la reclamación especificada “claims[‘sub’] matches ‘repo:contoso/contoso-repo:ref:refs/heads/*’”
“claims[‘sub’] matches ‘repo:contoso/contoso-repo-*:ref:refs/heads/????’”
eq Se usa para buscar coincidencias explícitas con una notificación especificada “claims[‘sub’] eq ‘repo:contoso/contoso-repo:ref:refs/heads/main’”
and Operador booleano para combinar expresiones contra múltiples reivindicaciones “claims[‘sub’] eq ‘repo:contoso/contoso-repo:ref:refs/heads/main’ and claims[‘job_workflow_ref’] matches ‘foo-org/bar-repo /.github/workflows/*@refs/heads/main’”

Direcciones URL del emisor, reclamaciones admitidas y operadores de plataforma

En función de las plataformas que esté utilizando, debe implementar diferentes direcciones URL del emisor, reclamaciones y operadores. Use las pestañas siguientes para seleccionar la plataforma elegida.

Direcciones URL del emisor admitidas: https://token.actions.githubusercontent.com

Notificaciones y operadores admitidos por notificación:

  • La notificación sub admite a los operadores eq y matches
  • La notificación job_workflow_ref admite a los operadores eq y matches

CLI de Azure, Azure PowerShell y proveedores de Terraform

La compatibilidad explícita con credenciales de identidad federada flexible aún no existe en la CLI de Azure, Azure PowerShell o los proveedores de Terraform. Si intenta configurar una credencial de identidad federada flexible con cualquiera de estas herramientas, verá un error. Además, si configura una credencial de identidad federada flexible a través de Microsoft Graph o Azure Portal e intenta leer esa credencial de identidad federada flexible con cualquiera de estas herramientas, verá un error.

Puede usar el método az rest de la CLI de Azure para realizar solicitudes de API REST para la creación y administración flexibles de credenciales de identidad federada.

az rest --method post \
    --url https://graph.microsoft.com/beta/applications/{objectId}/federatedIdentityCredentials
    --body "{'name': 'FlexFic1', 'issuer': 'https://token.actions.githubusercontent.com', 'audiences': ['api://AzureADTokenExchange'], 'claimsMatchingExpression': {'value': 'claims[\'sub\'] matches \'repo:contoso/contoso-org:ref:refs/heads/*\'', 'languageVersion': 1}}"