Configurar una identidad administrada asignada por el usuario para confiar en un proveedor de identidades externo

En este artículo se describe cómo administrar una credencial de identidad federada en una identidad administrada asignada por el usuario en el Id. de Microsoft Entra. La credencial de identidad federada crea una relación de confianza entre una identidad administrada asignada por el usuario y un proveedor de identidades externo (IdP). No se admite la configuración de una credencial de identidad federada en una identidad administrada asignada por el sistema.

Después de configurar la identidad administrada asignada por el usuario para confiar en un IdP externo, configure la carga de trabajo de software externo para intercambiar un token del IdP externo por un token de acceso de la plataforma de identidad de Microsoft. La carga de trabajo externa usa el token de acceso para 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 identidad administrada asignada por el usuario.

Consideraciones y restricciones importantes

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.

Prerrequisitos

Configurar una credencial de identidad federada en una identidad administrada asignada por el usuario

En el centro de administración de Microsoft Entra, vaya a la identidad administrada asignada por el usuario que creó. En Configuración en la barra de navegación izquierda, seleccione Credenciales federadas y luego Agregar credencial.

En el cuadro desplegable Escenario de credenciales federadas, seleccione el escenario.

Acciones de GitHub que implementan recursos de Azure

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

  1. 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. Para más información, consulte los ejemplos.

  2. Agregue un Nombre a la credencial federada.

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

  4. Seleccione Agregar para configurar la credencial federada.

Use los valores siguientes de la identidad administrada de Microsoft Entra para el flujo de trabajo de GitHub:

  • AZURE_CLIENT_ID la identidad administrada Id. de cliente

  • AZURE_SUBSCRIPTION_ID el identificador de la suscripción.

    En la captura de pantalla siguiente se muestra cómo copiar el identificador de identidad administrada y el identificador de suscripción.

    Screenshot that demonstrates how to copy the managed identity ID and subscription ID from Azure portal.

  • AZURE_TENANT_IDel identificador de directorio (inquilino). Obtenga información sobre cómo encontrar el identificador de inquilino de Microsoft Entra.

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.

Acceso de Kubernetes a recursos de Azure

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.

Seleccione Agregar para configurar la credencial federada.

Otros

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

Seleccione Agregar para configurar la credencial federada.

Enumerar credenciales de identidad federada en una identidad administrada asignada por el usuario

En el centro de administración de Microsoft Entra, vaya a la identidad administrada asignada por el usuario que creó. En Configuración, en la barra de navegación izquierda, seleccione Credenciales federadas.

Se muestran las credenciales de identidad federada configuradas en esa identidad administrada asignada por el usuario.

Eliminar una credencial de identidad federada de una identidad administrada asignada por el usuario

En el centro de administración de Microsoft Entra, vaya a la identidad administrada asignada por el usuario que creó. En Configuración, en la barra de navegación izquierda, seleccione Credenciales federadas.

Se muestran las credenciales de identidad federada configuradas en esa identidad administrada asignada por el usuario.

Para eliminar una credencial de identidad federada específica, seleccione el icono de Eliminar de la credencial.

Requisitos previos

Configurar una credencial de identidad federada en una identidad administrada asignada por el usuario

Ejecute el comando az identity federated-credential create para crear una nueva credencial de identidad federada en la identidad administrada asignada por el usuario (especificada por el nombre). Especifique los parámetros name, issuer y subject, entre otros.

az login

# set variables
location="centralus"
subscription="{subscription-id}"
rg="fic-test-rg"

# user assigned identity name
uaId="fic-test-ua"

# federated identity credential name
ficId="fic-test-fic-name"

# create prerequisites if required.
# otherwise make sure that existing resources names are set in variables above
az account set --subscription $subscription
az group create --location $location --name $rg
az identity create --name $uaId --resource-group $rg --location $location --subscription $subscription

# Create/update a federated identity credential
az identity federated-credential create --name $ficId --identity-name $uaId --resource-group $rg --issuer 'https://aks.azure.com/issuerGUID' --subject 'system:serviceaccount:ns:svcaccount' --audiences 'api://AzureADTokenExchange'

Enumerar credenciales de identidad federada en una identidad administrada asignada por el usuario

Ejecute el comando az identity federated-credential list para leer todas las credenciales de identidad federada configuradas en una identidad administrada asignada por el usuario:

az login

# Set variables
rg="fic-test-rg"

# User assigned identity name
uaId="fic-test-ua"

# Read all federated identity credentials assigned to the user-assigned managed identity
az identity federated-credential list --identity-name $uaId --resource-group $rg

Obtener una credencial de identidad federada en una identidad administrada asignada por el usuario

Ejecute el comando az identity federated-credential show para mostrar una credencial de identidad federada (por id.):

az login

# Set variables
rg="fic-test-rg"

# User assigned identity name
uaId="fic-test-ua"

# Federated identity credential name
ficId="fic-test-fic-name"

# Show the federated identity credential
az identity federated-credential show --name $ficId --identity-name $uaId --resource-group $rg

Eliminar una credencial de identidad federada de una identidad administrada asignada por el usuario

Ejecute el comando az identity federated-credential delete para eliminar una credencial de identidad federada en una identidad asignada por el usuario existente.

az login

# Set variables
# in Linux shell remove $ from set variable statement
$rg="fic-test-rg"

# User assigned identity name
$uaId="fic-test-ua"

# Federated identity credential name
$ficId="fic-test-fic-name"

az identity federated-credential delete --name $ficId --identity-name $uaId --resource-group $rg

Requisitos previos

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 el módulo Az.ManagedServiceIdentity con el fin de realizar las operaciones con identidades administradas asignadas por el usuario que se indican en este artículo.

    Install-Module -Name Az.ManagedServiceIdentity
    

Configurar una credencial de identidad federada en una identidad administrada asignada por el usuario

Ejecute el comando New-AzFederatedIdentityCredentials para crear una nueva credencial de identidad federada en la identidad administrada asignada por el usuario (especificada por el nombre). Especifique los parámetros name, issuer y subject, entre otros.

New-AzFederatedIdentityCredentials -ResourceGroupName azure-rg-test -IdentityName uai-pwsh01 `
    -Name fic-pwsh01 -Issuer "https://kubernetes-oauth.azure.com" -Subject "system:serviceaccount:ns:svcaccount"

Enumerar credenciales de identidad federada en una identidad administrada asignada por el usuario

Ejecute el comando Get-AzFederatedIdentityCredentials para leer todas las credenciales de identidad federada configuradas en una identidad administrada asignada por el usuario:

Get-AzFederatedIdentityCredentials -ResourceGroupName azure-rg-test -IdentityName uai-pwsh01

Obtener una credencial de identidad federada en una identidad administrada asignada por el usuario

Ejecute el comando Get-AzFederatedIdentityCredentials para mostrar una credencial de identidad federada (por nombre):

Get-AzFederatedIdentityCredentials -ResourceGroupName azure-rg-test -IdentityName uai-pwsh01 -Name fic-pwsh01

Eliminar una credencial de identidad federada de una identidad administrada asignada por el usuario

Ejecute el comando Remove-AzFederatedIdentityCredentials para eliminar una credencial de identidad federada en una identidad asignada por el usuario existente.

Remove-AzFederatedIdentityCredentials -ResourceGroupName azure-rg-test -IdentityName uai-pwsh01 -Name fic-pwsh01

Requisitos previos

Creación y edición de una plantilla

Las plantillas de Resource Manager le ayudan a implementar recursos nuevos o modificados definidos por un grupo de recursos de Azure. Hay disponibles varias opciones para editar e implementar plantillas, tanto locales como basadas en el portal. Puede:

Configurar una credencial de identidad federada en una identidad administrada asignada por el usuario

La credencial de identidad federada y la identidad asignada por el usuario primario se pueden crear o actualizar mediante la plantilla siguiente. Puede implementar plantillas de ARM desde el Azure Portal.

Todos los parámetros de la plantilla son obligatorios.

Hay un límite de 3-120 caracteres para una longitud de nombre de credencial de identidad federada. Debe ser alfanumérico, guion, subrayado. El primer símbolo es solo alfanumérico.

Debe agregar exactamente una audiencia a una credencial de identidad federada. Esta se comprueba durante el intercambio de tokens. Use "api://AzureADTokenExchange" como valor predeterminado.

Las operaciones Enumerar, Obtener y Eliminar no están disponibles con la plantilla. Consulte la CLI de Azure para ver estas operaciones. De forma predeterminada, todas las credenciales de identidad federada secundarias se crean en paralelo, lo que desencadena la lógica de detección de simultaneidad y hace que se produzca un error en la implementación con un código de estado HTTP de conflicto 409. Para crearlas secuencialmente, especifique una cadena de dependencias mediante la propiedad dependsOn.

Asegúrese de que cualquier tipo de automatización crea credenciales de identidad federada en la misma identidad primaria secuencialmente. Las credenciales de identidad federada en distintas identidades administradas se pueden crear en paralelo sin restricciones.

{

    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "variables": {},
    "parameters": {
        "location": {
            "type": "string",
            "defaultValue": "westcentralus",
            "metadata": {
                "description": "Location for identities resources. FIC should be enabled in this region."
            }
        },
        "userAssignedIdentityName": {
            "type": "string",
            "defaultValue": "FIC_UA",
            "metadata": {
                "description": "Name of the User Assigned identity (parent identity)"
            }
        },
        "federatedIdentityCredential": {
            "type": "string",
            "defaultValue": "testCredential",
            "metadata": {
                "description": "Name of the Federated Identity Credential"
            }
        },
        "federatedIdentityCredentialIssuer": {
            "type": "string",
            "defaultValue": "https://aks.azure.com/issuerGUID",
            "metadata": {
                "description": "Federated Identity Credential token issuer"
            }
        },
        "federatedIdentityCredentialSubject": {
            "type": "string",
            "defaultValue": "system:serviceaccount:ns:svcaccount",
            "metadata": {
                "description": "Federated Identity Credential token subject"
            }
        },
        "federatedIdentityCredentialAudience": {
            "type": "string",
            "defaultValue": " api://AzureADTokenExchange",
            "metadata": {
                "description": "Federated Identity Credential audience. Single value is only supported."
            }
        }
    },
    "resources": [
        {
            "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
            "apiVersion": "2018-11-30",
            "name": "[parameters('userAssignedIdentityName')]",
            "location": "[parameters('location')]",
            "tags": {
                "firstTag": "ficTest"
            },
            "resources": [
                {
                    "type": "Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials",
                    "apiVersion": "2022-01-31-PREVIEW",
                    "name": "[concat(parameters('userAssignedIdentityName'), '/', parameters('federatedIdentityCredential'))]",
                    "dependsOn": [
                      "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('userAssignedIdentityName'))]"
                    ],
                    "properties": {
                        "issuer": "[parameters('federatedIdentityCredentialIssuer')]",
                        "subject": "[parameters('federatedIdentityCredentialSubject')]",
                        "audiences": [
                            "[parameters('federatedIdentityCredentialAudience')]"
                        ]
                    }
                }
            ]
        }
    ]
}

Requisitos previos

Obtención de un token de acceso de portador

  1. Si se ejecuta localmente, inicie sesión en Azure a través de la CLI.

    az login
    
  2. Para obtener un token de acceso, use az account get-access-token.

    az account get-access-token
    

Configurar una credencial de identidad federada en una identidad administrada asignada por el usuario

Cree o actualice una credencial de identidad federada en la identidad especificada administrada asignada por el usuario.

curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/provider
s/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/federatedIdenti
tyCredentials/<FEDERATED IDENTITY CREDENTIAL NAME>?api-version=2022-01-31-preview' -X PUT -d '{"properties": "{ "properties": { "issuer": "<ISSUER>", "subject": "<SUBJECT>", "audiences": [ "api://AzureADTokenExchange" ] }}"}' -H "Content-Type: application/json" -H "Authorization: Bearer <ACCESS TOKEN>"
PUT https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/federatedIdentityCredentials/<FEDERATED IDENTITY CREDENTIAL NAME>?api-version=2022-01-31-preview

{
 "properties": {
 "issuer": "https://oidc.prod-aks.azure.com/IssuerGUID",
 "subject": "system:serviceaccount:ns:svcaccount",
 "audiences": [
 "api://AzureADTokenExchange"
 ]
 }
}

Encabezados de solicitud

Encabezado de solicitud Descripción
Content-Type Necesario. Establézcalo en application/json.
Autorización Necesario. Establézcalo en un token de acceso Bearer válido.

Cuerpo de la solicitud

Nombre Descripción
properties.audiences Necesario. La lista de audiencias que pueden aparecer en el token emitido.
properties.issuer Necesario. La dirección URL del emisor en que se va a confiar.
properties.subject Necesario. El identificador de la identidad externa.

Enumerar credenciales de identidad federada en una identidad administrada asignada por el usuario

Enumere todas las credenciales de identidad federada en la identidad especificada administrada asignada por el usuario.

curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/<RESOURCE NAME>/federatedIdentityCredentials?api-version=2022-01-31-preview' -H "Content-Type: application/json" -X GET -H "Authorization: Bearer <ACCESS TOKEN>"
GET
https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/<RESOURCE NAME>/federatedIdentityCredentials?api-version=2022-01-31-preview

Encabezados de solicitud

Encabezado de solicitud Descripción
Content-Type Necesario. Establézcalo en application/json.
Autorización Necesario. Establézcalo en un token de acceso Bearer válido.

Obtener una credencial de identidad federada en una identidad administrada asignada por el usuario

Obtenga una credencial de identidad federada en la identidad especificada administrada asignada por el usuario.

curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/<RESOURCE NAME>/federatedIdentityCredentials/<FEDERATED IDENTITY CREDENTIAL RESOURCENAME>?api-version=2022-01-31-preview' -X GET -H "Content-Type: application/json" -H "Authorization: Bearer <ACCESS TOKEN>"
GET
https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/<RESOURCE NAME>/federatedIdentityCredentials/<FEDERATED IDENTITY CREDENTIAL RESOURCENAME>?api-version=2022-01-31-preview

Encabezados de solicitud

Encabezado de solicitud Descripción
Content-Type Necesario. Establézcalo en application/json.
Autorización Necesario. Establézcalo en un token de acceso Bearer válido.

Eliminar una credencial de identidad federada de una identidad administrada asignada por el usuario

Elimine la credencial de identidad federada en la identidad especificada administrada asignada por el usuario.

curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/<RESOURCE NAME>/federatedIdentityCredentials/<FEDERATED IDENTITY CREDENTIAL RESOURCENAME>?api-version=2022-01-31-preview' -X DELETE -H "Content-Type: application/json" -H "Authorization: Bearer <ACCESS TOKEN>"
DELETE
https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>/<RESOURCE NAME>/federatedIdentityCredentials/<FEDERATED IDENTITY CREDENTIAL RESOURCENAME>?api-version=2022-01-31-preview

Encabezados de solicitud

Encabezado de solicitud Descripción
Content-Type Necesario. Establézcalo en application/json.
Autorización Necesario. Establézcalo en un token de acceso Bearer válido.

Pasos siguientes

  • Para obtener información sobre el formato necesario de los JWT creados por proveedores de identidades externos, consulte la información sobre el formato de aserción.