Configuración de una aplicación para confiar en un proveedor de identidades externo

En este artículo se describe cómo administrar una credencial de identidad federada en una aplicación de Microsoft Entra ID. La credencial de identidad federada crea una relación de confianza entre una aplicación y un proveedor de identidades externo (IdP).

A continuación, puede configurar una carga de trabajo de software externo para intercambiar un token desde el IdP externo por un token de acceso desde Plataforma de identidad de Microsoft. La carga de trabajo externa puede acceder a los recursos protegidos de Microsoft Entra sin necesidad de administrar secretos (en escenarios admitidos). Para más información sobre el flujo de trabajo de intercambio de tokens, lea sobre la federación de identidades de carga de trabajo.

En este artículo, aprenderá a crear, enumerar y eliminar credenciales de identidad federada en una aplicación de Microsoft Entra ID.

Consideraciones y restricciones importantes

Para crear, actualizar o eliminar una credencial de identidad federada, la cuenta que realiza la acción debe tener el rol Administrador de aplicaciones, Desarrollador de aplicaciones, Administrador de aplicaciones en la nube o Propietario de la aplicación. El permiso microsoft.directory/applications/credentials/update es necesario para actualizar una credencial de identidad federada.

Es posible agregar un máximo de 20 credenciales de identidad federada a una aplicación o a una identidad administrada asignada por el usuario.

Al configurar una credencial de identidad federada se debe proporcionar cierta información importante:

  • issuer y el sujeto son los elementos clave de información necesarios para configurar la relación de confianza. La combinación deissuer y subject debe ser única en la aplicación. Cuando la carga de trabajo de software externo solicita una plataforma de identidad de Microsoft para intercambiar el token externo por un token de acceso, los valores de emisor y sujeto de la credencial de identidad federada se comprueban con las notificaciones issuer y subject proporcionadas en el token externo. Si se supera la comprobación de validación, la plataforma de identidad de Microsoft emite un token de acceso a la carga de trabajo de software externo.

  • issuer es la dirección URL del proveedor de identidades externo y debe coincidir con la notificación issuer del token externo que se intercambia. Necesario. Si la notificación issuer incluye espacios en blanco iniciales o finales en el valor, el intercambio de tokens se bloquea. Este campo tiene un límite de 600 caracteres.

  • subject es el identificador de la carga de trabajo de software externo y debe coincidir con la notificación sub (subject) del token externo que se intercambia. subject no tiene ningún formato fijo, ya que cada IdP usa uno propio: a veces un GUID, a veces un identificador delimitado por dos puntos y, a veces, cadenas arbitrarias. Este campo tiene un límite de 600 caracteres.

    Importante

    Los valores de configuración del asunto deben coincidir exactamente con la configuración del flujo de trabajo de GitHub. De lo contrario, la plataforma de identidad de Microsoft examinará el token externo entrante y rechazará el intercambio por un token de acceso. No se producirá un error, se producirá un error en el intercambio sin errores.

    Importante

    Si agrega accidentalmente la información de carga de trabajo externa incorrecta en la configuración del subject, la credencial de identidad federada se crea correctamente sin errores. El error no se hace evidente hasta que se produce un error en el intercambio de tokens.

  • audiences enumera las audiencias que pueden aparecer en el token externo. Necesario. Debe agregar un único valor de audiencia, que tiene un límite de 600 caracteres. El valor recomendado es "api://AzureADTokenExchange". Indica qué plataforma de identidad de Microsoft debe aceptar en la notificación aud en el token entrante.

  • name es el identificador único para la credencial de identidad federada. Necesario. Este campo tiene un límite de 3-120 caracteres y debe ser apto para direcciones URL. Se admiten caracteres alfanuméricos, guiones o caracteres de subrayado; el primer carácter solo debe ser alfanumérico.  Una vez creado, es inmutable.

  • description es la descripción facilitada por el usuario para la credencial de identidad federada. Opcional. Microsoft Entra ID no valida ni comprueba la descripción. Este campo tiene un límite de 600 caracteres.

Los caracteres comodín no se admiten en ningún valor de propiedad de credencial de identidad federada.

Para más información sobre las regiones admitidas, tiempo para propagar actualizaciones de credenciales federadas, emisores admitidos y mucho más, lea Consideraciones y restricciones importantes para las credenciales de identidad federada.

Requisitos previos

Creación de un registro de aplicación en Microsoft Entra ID. Conceda a su aplicación acceso a los recursos de Azure destinados a la carga de trabajo de software externo.

Busque el id. de objeto de la aplicación (no el id. de aplicación (cliente)) que necesita en los pasos siguientes. Puede encontrar el identificador de objeto de la aplicación en el centro de administración de Microsoft Entra. Vaya a la lista de registros de aplicaciones y seleccione el registro de su aplicación. En Información general->Essentials, busque el id. de objeto.

Obtenga la información de subject e issuer para el IdP externo y la carga de trabajo de software, que necesitará en los pasos siguientes.

Configuración de una credencial de identidad federada en una aplicación

Acciones de GitHub

Para agregar una identidad federada para acciones de GitHub, siga estos pasos:

  1. Encuentre el registro de su aplicación en la experiencia de registros de aplicaciones del centro de administración de Microsoft Entra. Seleccione Certificados y secretos en el panel de navegación izquierdo, seleccione la pestaña Credenciales federadas y, a continuación, Agregar credencial.

  2. En el cuadro desplegable Escenario de credencial federada, seleccioneAcciones de GitHub que implementan recursos de Azure.

  3. Especifique la organización y el repositorio para el flujo de trabajo de las acciones de GitHub.

  4. En Tipo de entidad, seleccione Entorno, Rama, Solicitud de incorporación de cambios o Etiqueta y especifique el valor. Los valores deben coincidir exactamente con la configuración del flujo de trabajo de GitHub. No se admite la coincidencia de patrones para ramas y etiquetas. Especifique un entorno si el flujo de trabajo de inserción se ejecuta en varias ramas o etiquetas. Para más información, consulte los ejemplos.

  5. Agregue un Nombre a la credencial federada.

  6. Los campos de Emisor, Audiencias e Identificador de sujeto se rellenarán automáticamente en función de los valores especificados.

  7. Seleccione Agregar para configurar la credencial federada.

    Screenshot of the Add a credential window, showing sample values.

Use los valores siguientes del registro de aplicación de Microsoft Entra para el flujo de trabajo de GitHub:

  • AZURE_CLIENT_ID: el identificador de la aplicación (cliente)

  • AZURE_TENANT_ID: el identificador del directorio (inquilino)

    En la captura de pantalla siguiente se muestra cómo copiar el identificador de la aplicación y el del inquilino.

    Screenshot that demonstrates how to copy the application ID and tenant ID from Microsoft Entra admin center.

  • AZURE_SUBSCRIPTION_ID: el identificador de la suscripción Para obtener el identificador de la suscripción, abra Suscripciones en Azure Portal y busque la suscripción. A continuación, copie el valor de Id. de suscripción.

Ejemplos de tipo de entidad

Ejemplo de rama

Para un flujo de trabajo desencadenado por un evento de envío de cambios o de solicitud de incorporación de cambios en la rama principal:

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

Especifique Rama en Tipo de entidad y "main" en Nombre de rama de GitHub.

Ejemplo de entorno

Para trabajos vinculados a un entorno llamado "production":

on:
  push:
    branches:
      - main

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: deploy
        # ...deployment-specific steps

Especifique Entorno en Tipo de entidad y "production" en Nombre del entorno de GitHub.

Ejemplo de etiqueta

Por ejemplo, para un flujo de trabajo desencadenado por un envío de cambios en la etiqueta llamada "v2":

on:
  push:
    # Sequence of patterns matched against refs/heads
    branches:
      - main
      - 'mona/octocat'
      - 'releases/**'
    # Sequence of patterns matched against refs/tags
    tags:
      - v2
      - v1.*

Especifique Etiqueta en Tipo de entidad y "v2" en Nombre de etiqueta de GitHub.

Ejemplo de solicitud de incorporación de cambios

En el caso de los flujos de trabajo desencadenados por un evento de solicitud de incorporación de cambios, especifique un tipo de entidad en Solicitud de incorporación de cambios.

Kubernetes

Encuentre el registro de su aplicación en la experiencia de registros de aplicaciones del centro de administración de Microsoft Entra. Seleccione Certificados y secretos en el panel de navegación izquierdo, seleccione la pestaña Credenciales federadas y, a continuación, Agregar credencial.

Seleccione el escenario Acceso de Kubernetes a recursos de Azure en el menú desplegable.

Rellene los campos Dirección URL del emisor del clúster, Espacio de nombres, Nombre de la cuenta de servicio y Nombre:

  • El campo Dirección URL del emisor del clúster es la dirección URL del emisor de OIDC para el clúster administrado o la dirección URL del emisor de OIDC para un clúster autoadministrado.
  • El campo Nombre de la cuenta de servicio es el nombre de la cuenta de servicio de Kubernetes, que proporciona una identidad para los procesos que se ejecutan en un pod.
  • El campo Espacio de nombres es el espacio de nombres de la cuenta de servicio.
  • El campo Nombre indica el nombre de la credencial federada, que no se puede cambiar más adelante.

Otros proveedores de identidades

Encuentre el registro de su aplicación en la experiencia de registros de aplicaciones del centro de administración de Microsoft Entra. Seleccione Certificados y secretos en el panel de navegación izquierdo, seleccione la pestaña Credenciales federadas y, a continuación, Agregar credencial.

Seleccione el escenario Otro emisor en el menú desplegable.

Especifique los campos siguientes (mediante una carga de trabajo de software que se ejecuta en Google Cloud como ejemplo):

  • El campo Nombre indica el nombre de la credencial federada, que no se puede cambiar más adelante.
  • Identificador de sujeto: debe coincidir con la notificación sub del token emitido por el proveedor de identidades externo. En este ejemplo con Google Cloud, subject es el identificador único de la cuenta de servicio que tiene pensado usar.
  • Emisor: debe coincidir con la notificación iss del token emitido por el proveedor de identidades externo. Dirección URL que cumple con la especificación de detección de OIDC. Microsoft Entra ID usa esta dirección URL del emisor para capturar las claves que son necesarias para validar el token. En el caso de Google Cloud, el valor de issuer es "https://accounts.google.com".

Enumeración de credenciales de identidad federada en una aplicación

Encuentre el registro de su aplicación en la experiencia de registros de aplicaciones del centro de administración de Microsoft Entra. Seleccione Certificados y secretos en el panel de navegación izquierdo y seleccione la pestaña Credenciales federadas. Se enumeran las credenciales federadas configuradas en la aplicación.

Eliminación de una credencial de identidad federada desde una aplicación

Encuentre el registro de su aplicación en la experiencia de registros de aplicaciones del centro de administración de Microsoft Entra. Seleccione Certificados y secretos en el panel de navegación izquierdo y seleccione la pestaña Credenciales federadas. Se enumeran las credenciales federadas configuradas en la aplicación.

Para eliminar una credencial de identidad federada, seleccione el icono de eliminación de la credencial.

Requisitos previos

  • Creación de un registro de aplicación en Microsoft Entra ID. Conceda a su aplicación acceso a los recursos de Azure destinados a la carga de trabajo de software externo.
  • Busque el identificador de objeto, el identificador de aplicación (cliente) o el identificador URI de la aplicación, que necesitará en los pasos siguientes. Puede encontrar estos valores en el centro de administración de Microsoft Entra. Vaya a la lista de aplicaciones registradas y seleccione el registro de la aplicación. En Información general:>Essentials, obtenga el identificador de objeto, el identificador de aplicación (cliente) o el valor de URI de Id. de aplicación, que necesitará en los pasos siguientes.
  • Obtenga la información de subject e issuer para el IdP externo y la carga de trabajo de software, que necesitará en los pasos siguientes.

Configuración de una credencial de identidad federada en una aplicación

Ejecute el comando az ad app federated-credential create para crear una nueva credencial de identidad federada en la aplicación.

El parámetro id especifica el identificador URI, el identificador de aplicación o el identificador de objeto de la aplicación. El parámetro parameters especifica los parámetros, en formato JSON, para crear la credencial de identidad federada.

Ejemplo de Acciones de GitHub

El nombre especifica el nombre de su credencial de identidad federada.

El emisor identifica la ruta de acceso al proveedor OIDC de GitHub: https://token.actions.githubusercontent.com/. La aplicación de Azure confiará en este emisor.

subject identifica la organización GitHub, el repositorio y el entorno del flujo de trabajo GitHub Actions. Cuando el flujo de trabajo de Acciones de GitHub solicita a la plataforma de identidad de Microsoft intercambiar un token de GitHub por un token de acceso, los valores de la credencial de identidad federada se comprueban con el token de GitHub proporcionado. Para que Azure conceda un token de acceso, la solicitud debe coincidir con las condiciones definidas aquí.

  • Para trabajos vinculados a un entorno: repo:< Organization/Repository >:environment:< Name >
  • En el caso de los trabajos no vinculados a un entorno, incluya la ruta de acceso de referencia para una rama o etiqueta en función de la ruta de acceso de referencia usada para desencadenar el flujo de trabajo: repo:< Organization/Repository >:ref:< ref path>. Por ejemplo, repo:n-username/ node_express:ref:refs/heads/my-branch o repo:n-username/ node_express:ref:refs/tags/my-tag.
  • En el caso de los flujos de trabajo desencadenados por un evento de solicitud de incorporación de cambios: repo:< Organization/Repository >:pull-request.
az ad app federated-credential create --id f6475511-fd81-4965-a00e-41e7792b7b9c --parameters credential.json
("credential.json" contains the following content)
{
    "name": "Testing",
    "issuer": "https://token.actions.githubusercontent.com",
    "subject": "repo:octo-org/octo-repo:environment:Production",
    "description": "Testing",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

Ejemplo de Kubernetes

issuer es la dirección URL del emisor de la cuenta de servicio (la dirección URL del emisor de OIDC para el clúster administrado o la dirección URL del emisor de OIDC para un clúster autoadministrado).

subject es el nombre del firmante en los tokens emitidos para la cuenta de servicio. Kubernetes usa el formato siguiente para los nombres de firmante: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>.

El nombre indica el nombre de la credencial federada, que no se podrá cambiar posteriormente.

audiences enumera las audiencias que pueden aparecer en el token externo. Este campo es obligatorio. El valor recomendado es "api://AzureADTokenExchange".

az ad app federated-credential create --id f6475511-fd81-4965-a00e-41e7792b7b9c --parameters credential.json
("credential.json" contains the following content)
{
    "name": "Kubernetes-federated-credential",
    "issuer": "https://aksoicwesteurope.blob.core.windows.net/9d80a3e1-2a87-46ea-ab16-e629589c541c/",
    "subject": "system:serviceaccount:erp8asle:pod-identity-sa",
    "description": "Kubernetes service account federated credential",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

Otro ejemplo de proveedores de identidades

Es posible configurar una credencial de identidad federada en una aplicación y crear una relación de confianza con un proveedor de identidades externo. El ejemplo siguiente utiliza una carga de trabajo de software que se ejecuta en Google Cloud:

El nombre indica el nombre de la credencial federada, que no se podrá cambiar posteriormente.

El id es el identificador de objeto, id. de aplicación (cliente) o el identificador URI de la aplicación.

subject: debe coincidir con la notificación sub del token emitido por el proveedor de identidades externo. En este ejemplo con Google Cloud, subject es el identificador único de la cuenta de servicio que tiene pensado usar.

issuer: debe coincidir con la notificación iss del token emitido por el proveedor de identidades externo. Dirección URL que cumple con la especificación de detección de OIDC. Microsoft Entra ID usa esta dirección URL del emisor para capturar las claves que son necesarias para validar el token. En el caso de Google Cloud, el valor de issuer es "https://accounts.google.com".

Las audiencias muestran los valores que pueden aparecer en el token externo. Este campo es obligatorio. El valor recomendado es "api://AzureADTokenExchange".

az ad app federated-credential create --id f6475511-fd81-4965-a00e-41e7792b7b9c --parameters credential.json
("credential.json" contains the following content)
{
    "name": "GcpFederation",
    "issuer": "https://accounts.google.com",
    "subject": "112633961854638529490",
    "description": "Test GCP federation",
    "audiences": [
        "api://AzureADTokenExchange"
    ]
}

Enumeración de credenciales de identidad federada en una aplicación

Ejecute el comando az ad app federated-credential list para mostrar las credenciales de identidad federada en la aplicación.

El parámetro id especifica el identificador URI, el identificador de aplicación o el identificador de objeto de la aplicación.

az ad app federated-credential list --id f6475511-fd81-4965-a00e-41e7792b7b9c

Obtención de una credencial de identidad federada en una aplicación

Ejecute el comando az ad app federated-credential show para obtener una credencial de identidad federada en la aplicación.

El parámetro id especifica el identificador URI, el identificador de aplicación o el identificador de objeto de la aplicación.

Federated-credential-id especifica el identificador o el nombre de la credencial de identidad federada.

az ad app federated-credential show --id f6475511-fd81-4965-a00e-41e7792b7b9c --federated-credential-id c79f8feb-a9db-4090-85f9-90d820caa0eb

Eliminación de una credencial de identidad federada desde una aplicación

Ejecute el comando az ad app federated-credential delete para retirar una credencial de identidad federada de la aplicación.

El parámetro id especifica el identificador URI, el identificador de aplicación o el identificador de objeto de la aplicación.

Federated-credential-id especifica el identificador o el nombre de la credencial de identidad federada.

az ad app federated-credential delete --id f6475511-fd81-4965-a00e-41e7792b7b9c --federated-credential-id c79f8feb-a9db-4090-85f9-90d820caa0eb

Requisitos previos

  • Para ejecutar los scripts de ejemplo, tiene dos opciones:
    • Use Azure Cloud Shell, que puede abrir mediante el botón Probar, ubicado en la esquina superior derecha de los bloques de código.
    • Ejecute los scripts localmente con Azure PowerShell, tal como se describe en la sección siguiente.
  • Creación de un registro de aplicación en Microsoft Entra ID. Conceda a su aplicación acceso a los recursos de Azure destinados a la carga de trabajo de software externo.
  • Busque el id. de objeto de la aplicación (no el id. de aplicación (cliente)) que necesita en los pasos siguientes. Puede encontrar el identificador de objeto de la aplicación en el centro de administración de Microsoft Entra. Vaya a la lista de aplicaciones registradas y seleccione el registro de la aplicación. En Información general->Essentials, busque el id. de objeto.
  • Obtenga la información de subject e issuer para el IdP externo y la carga de trabajo de software, que necesitará en los pasos siguientes.

Configuración de Azure PowerShell de forma local

Para usar Azure PowerShell localmente con este artículo en lugar de usar Cloud Shell:

  1. Instale la versión más reciente de Azure PowerShell si aún no lo ha hecho.

  2. Inicie sesión en Azure.

    Connect-AzAccount
    
  3. Instalar la versión más reciente de PowerShellGet.

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    Es posible que necesite Exit fuera de la sesión de PowerShell actual después de ejecutar este comando para el siguiente paso.

  4. Instale la versión preliminar del módulo Az.Resources para llevar a cabo las operaciones de identidad asignadas por el usuario que se indican en este artículo.

    Install-Module -Name Az.Resources -AllowPrerelease
    

Configuración de una credencial de identidad federada en una aplicación

Ejecute el cmdlet New-AzADAppFederatedCredential para crear una nueva credencial de identidad federada en una aplicación.

Ejemplo de Acciones de GitHub

  • ApplicationObjectId: El id. de objeto de la aplicación (no el id. de aplicación [cliente]) que registró anteriormente en Microsoft Entra ID.
  • Issuer identifica a GitHub como el emisor del token externo.
  • Subject identifica la organización GitHub, el repositorio y el entorno del flujo de trabajo de Acciones de GitHub. Cuando el flujo de trabajo de Acciones de GitHub solicita a la plataforma de identidad de Microsoft intercambiar un token de GitHub por un token de acceso, los valores de la credencial de identidad federada se comprueban con el token de GitHub proporcionado.
    • Para trabajos vinculados a un entorno: repo:< Organization/Repository >:environment:< Name >
    • En el caso de los trabajos no vinculados a un entorno, incluya la ruta de acceso de referencia para una rama o etiqueta en función de la ruta de acceso de referencia usada para desencadenar el flujo de trabajo: repo:< Organization/Repository >:ref:< ref path>. Por ejemplo, repo:n-username/ node_express:ref:refs/heads/my-branch o repo:n-username/ node_express:ref:refs/tags/my-tag.
    • En el caso de los flujos de trabajo desencadenados por un evento de solicitud de incorporación de cambios: repo:< Organization/Repository >:pull-request.
  • Name indica el nombre de la credencial federada, que no se puede cambiar posteriormente.
  • Las audiencias muestran los valores que pueden aparecer en el token externo. Este campo es obligatorio. El valor recomendado es "api://AzureADTokenExchange".
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://token.actions.githubusercontent.com/' -Name 'GitHub-Actions-Test' -Subject 'repo:octo-org/octo-repo:environment:Production'

Ejemplo de Kubernetes

  • ApplicationObjectId: El id. de objeto de la aplicación (no el id. de aplicación [cliente]) que registró anteriormente en Microsoft Entra ID.
  • Issuer es su URL de emisor de la cuenta de servicio (la URL de emisor de OIDC para el clúster administrado o la URL de emisor de OIDC para un clúster autoadministrado).
  • Subject indica el nombre del sujeto en los tokens emitidos para la cuenta de servicio. Kubernetes usa el formato siguiente para los nombres de firmante: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>.
  • Name indica el nombre de la credencial federada, que no se puede cambiar posteriormente.
  • Audience muestra los valores que pueden aparecer en la solicitud aud del token externo.
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://aksoicwesteurope.blob.core.windows.net/9d80a3e1-2a87-46ea-ab16-e629589c541c/' -Name 'Kubernetes-federated-credential' -Subject 'system:serviceaccount:erp8asle:pod-identity-sa'

Otro ejemplo de proveedores de identidades

Especifique los parámetros siguientes (mediante una carga de trabajo de software que se ejecuta en Google Cloud como ejemplo):

  • ObjectId: El id. de objeto de la aplicación (no el id. de aplicación [cliente]) que registró anteriormente en Microsoft Entra ID.
  • Name indica el nombre de la credencial federada, que no se puede cambiar posteriormente.
  • Subject: debe coincidir con la notificación sub del token emitido por el proveedor de identidades externo. En este ejemplo con Google Cloud, subject es el identificador único de la cuenta de servicio que tiene pensado usar.
  • Emisor: debe coincidir con la notificación iss del token emitido por el proveedor de identidades externo. Dirección URL que cumple con la especificación de detección de OIDC. Microsoft Entra ID usa esta dirección URL del emisor para capturar las claves que son necesarias para validar el token. En el caso de Google Cloud, el valor de issuer es "https://accounts.google.com".
  • Audiences: debe coincidir con la notificación aud del token externo. Por motivos de seguridad, debe elegir un valor que sea único para los tokens diseñados para Microsoft Entra ID. El valor recomendado es "api://AzureADTokenExchange".
New-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -Audience api://AzureADTokenExchange -Issuer 'https://accounts.google.com' -Name 'GcpFederation' -Subject '112633961854638529490'

Enumeración de credenciales de identidad federada en una aplicación

Ejecute el cmdlet Get-AzADAppFederatedCredential para mostrar las credenciales de identidad federada de una aplicación.

Get-AzADApplication -ObjectId $app | Get-AzADAppFederatedCredential

Obtención de una credencial de identidad federada en una aplicación

Ejecute el cmdlet Get-AzADAppFederatedCredential para obtener la credencial de identidad federada por identificador desde una aplicación.

Get-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

Eliminación de una credencial de identidad federada desde una aplicación

Ejecute el cmdlet Remove-AzADAppFederatedCredential para eliminar una credencial de identidad federada de una aplicación.

Remove-AzADAppFederatedCredential -ApplicationObjectId $appObjectId -FederatedCredentialId $credentialId

Requisitos previos

Creación de un registro de aplicación en Microsoft Entra ID. Conceda a su aplicación acceso a los recursos de Azure destinados a la carga de trabajo de software externo.

Busque el id. de objeto de la aplicación (no el id. de aplicación (cliente)) que necesita en los pasos siguientes. Puede encontrar el identificador de objeto de la aplicación en el centro de administración de Microsoft Entra. Vaya a la lista de aplicaciones registradas y seleccione el registro de la aplicación. En Información general->Essentials, busque el id. de objeto.

Obtenga la información de subject e issuer para el IdP externo y la carga de trabajo de software, que necesitará en los pasos siguientes.

El punto de conexión beta de Microsoft Graph (https://graph.microsoft.com) muestra las API REST para crear, actualizar y eliminar federatedIdentityCredentials en las aplicaciones. Inicie Azure Cloud Shell e inicie sesión en el inquilino para ejecutar comandos de Microsoft Graph desde la CLI de AZ.

Configuración de una credencial de identidad federada en una aplicación

Acciones de GitHub

Utilice el método siguiente para crear una nueva credencial de identidad federada en la aplicación (según el identificador de objeto de la aplicación). El issuer identifica a GitHub como el emisor del token externo. subject identifica la organización GitHub, el repositorio y el entorno del flujo de trabajo GitHub Actions. Cuando el flujo de trabajo de Acciones de GitHub solicita a la plataforma de identidad de Microsoft intercambiar un token de GitHub por un token de acceso, los valores de la credencial de identidad federada se comprueban con el token de GitHub proporcionado.

az rest --method POST --uri 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c/federatedIdentityCredentials' --body '{"name":"Testing","issuer":"https://token.actions.githubusercontent.com","subject":"repo:octo-org/octo-repo:environment:Production","description":"Testing","audiences":["api://AzureADTokenExchange"]}'

Y obtiene la respuesta:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Testing",
  "id": "1aa3e6a7-464c-4cd2-88d3-90db98132755",
  "issuer": "https://token.actions.githubusercontent.com",
  "name": "Testing",
  "subject": "repo:octo-org/octo-repo:environment:Production"
}

name: el nombre de la aplicación de Azure.

issuer: ruta de acceso al proveedor OIDC de GitHub: https://token.actions.githubusercontent.com. La aplicación de Azure confiará en este emisor.

subject: antes de que Azure conceda un token de acceso, la solicitud debe coincidir con las condiciones definidas aquí.

  • Para trabajos vinculados a un entorno: repo:< Organization/Repository >:environment:< Name >
  • En el caso de los trabajos no vinculados a un entorno, incluya la ruta de acceso de referencia para una rama o etiqueta en función de la ruta de acceso de referencia usada para desencadenar el flujo de trabajo: repo:< Organization/Repository >:ref:< ref path>. Por ejemplo, repo:n-username/ node_express:ref:refs/heads/my-branch o repo:n-username/ node_express:ref:refs/tags/my-tag.
  • En el caso de los flujos de trabajo desencadenados por un evento de solicitud de incorporación de cambios: repo:< Organization/Repository >:pull-request.

audiences enumera las audiencias que pueden aparecer en el token externo. Este campo es obligatorio. El valor recomendado es "api://AzureADTokenExchange".

Ejemplo de Kubernetes

Utilice el método siguiente para configurar una credencial de identidad federada en una aplicación y crear una relación de confianza con una cuenta de servicio de Kubernetes. Especifique los parámetros siguientes:

  • issuer es la dirección URL del emisor de la cuenta de servicio (la dirección URL del emisor de OIDC para el clúster administrado o la dirección URL del emisor de OIDC para un clúster autoadministrado).
  • subject es el nombre del firmante en los tokens emitidos para la cuenta de servicio. Kubernetes usa el formato siguiente para los nombres de firmante: system:serviceaccount:<SERVICE_ACCOUNT_NAMESPACE>:<SERVICE_ACCOUNT_NAME>.
  • El nombre indica el nombre de la credencial federada, que no se podrá cambiar posteriormente.
  • audiences enumera las audiencias que pueden aparecer en el token externo. Este campo es obligatorio. El valor recomendado es "api://AzureADTokenExchange".
az rest --method POST --uri 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c/federatedIdentityCredentials' --body '{"name":"Kubernetes-federated-credential","issuer":"https://aksoicwesteurope.blob.core.windows.net/9d80a3e1-2a87-46ea-ab16-e629589c541c/","subject":"system:serviceaccount:erp8asle:pod-identity-sa","description":"Kubernetes service account federated credential","audiences":["api://AzureADTokenExchange"]}'

Y obtiene la respuesta:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Kubernetes service account federated credential",
  "id": "51ecf9c3-35fc-4519-a28a-8c27c6178bca",
  "issuer": "https://aksoicwesteurope.blob.core.windows.net/9d80a3e1-2a87-46ea-ab16-e629589c541c/",
  "name": "Kubernetes-federated-credential",
  "subject": "system:serviceaccount:erp8asle:pod-identity-sa"
}

Otro ejemplo de proveedores de identidades

Utilice el método siguiente para configurar una credencial de identidad federada en una aplicación y crear una relación de confianza con un proveedor de identidades externo. Especifique los parámetros siguientes (mediante una carga de trabajo de software que se ejecuta en Google Cloud como ejemplo):

  • El nombre indica el nombre de la credencial federada, que no se podrá cambiar posteriormente.
  • ObjectId: El id. de objeto de la aplicación (no el id. de aplicación [cliente]) que registró anteriormente en Microsoft Entra ID.
  • subject: debe coincidir con la notificación sub del token emitido por el proveedor de identidades externo. En este ejemplo con Google Cloud, subject es el identificador único de la cuenta de servicio que tiene pensado usar.
  • issuer: debe coincidir con la notificación iss del token emitido por el proveedor de identidades externo. Dirección URL que cumple con la especificación de detección de OIDC. Microsoft Entra ID usa esta dirección URL del emisor para capturar las claves que son necesarias para validar el token. En el caso de Google Cloud, el valor de issuer es "https://accounts.google.com".
  • audiences enumera las audiencias que pueden aparecer en el token externo. Este campo es obligatorio. El valor recomendado es "api://AzureADTokenExchange".
az rest --method POST --uri 'https://graph.microsoft.com/applications/<ObjectID>/federatedIdentityCredentials' --body '{"name":"GcpFederation","issuer":"https://accounts.google.com","subject":"112633961854638529490","description":"Testing","audiences":["api://AzureADTokenExchange"]}'

Y obtiene la respuesta:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials/$entity",
  "audiences": [
    "api://AzureADTokenExchange"
  ],
  "description": "Testing",
  "id": "51ecf9c3-35fc-4519-a28a-8c27c6178bca",
  "issuer": "https://accounts.google.com"",
  "name": "GcpFederation",
  "subject": "112633961854638529490"
}

Enumeración de credenciales de identidad federada en una aplicación

Utilice el método siguiente para mostrar las credenciales de identidad federada de una aplicación (según el id. de objeto de la aplicación):

az rest -m GET -u 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c/federatedIdentityCredentials'

Y obtiene una respuesta similar a la siguiente:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials",
  "value": [
    {
      "audiences": [
        "api://AzureADTokenExchange"
      ],
      "description": "Testing",
      "id": "1aa3e6a7-464c-4cd2-88d3-90db98132755",
      "issuer": "https://token.actions.githubusercontent.com/",
      "name": "Testing",
      "subject": "repo:octo-org/octo-repo:environment:Production"
    }
  ]
}

Obtención de una credencial de identidad federada en una aplicación

Utilice el método siguiente para obtener una credencial de identidad federada para una aplicación (según el id. de objeto de la aplicación):

az rest -m GET -u 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c//federatedIdentityCredentials/1aa3e6a7-464c-4cd2-88d3-90db98132755'

Y obtiene una respuesta similar a la siguiente:

{
  "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials",
  "value": {
      "@odata.context": "https://graph.microsoft.com/$metadata#applications('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials/$entity",
      "@odata.id": "https://graph.microsoft.com/v2/3d1e2be9-a10a-4a0c-8380-7ce190f98ed9/directoryObjects/$/Microsoft.DirectoryServices.Application('f6475511-fd81-4965-a00e-41e7792b7b9c')/federatedIdentityCredentials('f6475511-fd81-4965-a00e-41e7792b7b9c')/f6475511-fd81-4965-a00e-41e7792b7b9c",
    "audiences": [
        "api://AzureADTokenExchange"
      ],
      "description": "Testing",
      "id": "1aa3e6a7-464c-4cd2-88d3-90db98132755",
      "issuer": "https://token.actions.githubusercontent.com/",
      "name": "Testing",
      "subject": "repo:octo-org/octo-repo:environment:Production"
    }
}

Eliminación de una credencial de identidad federada desde una aplicación

Utilice el siguiente comando para eliminar una credencial de identidad federada de una aplicación (según el id. de objeto de la aplicación):

az rest -m DELETE  -u 'https://graph.microsoft.com/applications/f6475511-fd81-4965-a00e-41e7792b7b9c/federatedIdentityCredentials/1aa3e6a7-464c-4cd2-88d3-90db98132755'

Pasos siguientes