Configurare un'identità gestita assegnata dall'utente per considerare attendibile un provider di identità esterno

Questo articolo descrive come gestire una credenziale di identità federata in un'identità gestita assegnata dall'utente in Microsoft Entra ID. La credenziale dell'identità federata crea una relazione di trust tra un'identità gestita assegnata dall'utente e un provider di identità esterno (IdP). La configurazione di credenziali di identità federate in un'identità gestita assegnata dal sistema non è supportata.

Dopo aver configurato l'identità gestita assegnata dall'utente per considerare attendibile un IdP esterno, configurare il carico di lavoro del software esterno per scambiare un token dal provider di identità esterno per un token di accesso da Microsoft Identity Platform. Il carico di lavoro esterno usa il token di accesso per accedere alle risorse protette di Microsoft Entra senza dover gestire i segreti (in scenari supportati). Per altre informazioni sul flusso di lavoro di scambio di token, vedere Federazione delle identità del carico di lavoro.

Questo articolo illustra come creare, elencare ed eliminare le credenziali di identità federate in un'identità gestita assegnata dall'utente.

Considerazioni e restrizioni importanti

È possibile aggiungere al massimo 20 credenziali di identità federate a un'applicazione o a un'identità gestita assegnata dall'utente.

Quando si configura una credenziale di identità federata, sono disponibili diverse informazioni importanti da fornire:

  • l'autorità emittente e l'oggetto sono le informazioni chiave necessarie per configurare la relazione di trust. La combinazione di issuer e subject deve essere univoca nell'app. Quando il carico di lavoro del software esterno richiede a Microsoft Identity Platform di scambiare il token esterno per un token di accesso, i valori dell'autorità di certificazione e dell'oggetto delle credenziali dell'identità federata vengono controllati rispetto alle issuer attestazioni e subject fornite nel token esterno. Se il controllo di convalida supera, Microsoft Identity Platform rilascia un token di accesso al carico di lavoro software esterno.

  • issuer è l'URL del provider di identità esterno e deve corrispondere all'attestazione issuer del token esterno scambiato. Obbligatorio. Se l'attestazione issuer contiene spazi vuoti iniziali o finali nel valore, lo scambio di token viene bloccato. Questo campo ha un limite di caratteri di 600 caratteri.

  • subject è l'identificatore del carico di lavoro software esterno e deve corrispondere all'attestazione sub (subject) del token esterno scambiato. subject non ha un formato fisso, perché ogni IdP usa il proprio , a volte un GUID, a volte un identificatore delimitato da due punti, talvolta stringhe arbitrarie. Questo campo ha un limite di caratteri di 600 caratteri.

    Importante

    I valori dell'impostazione dell'oggetto devono corrispondere esattamente alla configurazione nella configurazione del flusso di lavoro GitHub. In caso contrario, Microsoft Identity Platform esaminerà il token esterno in ingresso e rifiuterà lo scambio per un token di accesso. Non verrà visualizzato un errore, lo scambio non riesce senza errori.

    Importante

    Se si aggiungono accidentalmente le informazioni errate sul carico di lavoro esterno nell'impostazione dell'oggetto, la credenziale dell'identità federata viene creata correttamente senza errori. L'errore non diventa evidente fino a quando lo scambio di token non riesce.

  • i gruppi di destinatari elencano i gruppi di destinatari che possono essere visualizzati nel token esterno. Obbligatorio. È necessario aggiungere un singolo valore del gruppo di destinatari, con un limite di 600 caratteri. Il valore consigliato è "api://AzureADTokenExchange". Indica ciò che Microsoft Identity Platform deve accettare nell'attestazione aud nel token in ingresso.

  • name è l'identificatore univoco per le credenziali di identità federate. Obbligatorio. Questo campo ha un limite di caratteri di 3-120 caratteri e deve essere descrittivo per l'URL. Sono supportati caratteri alfanumerici, trattini o caratteri di sottolineatura, il primo carattere deve essere solo alfanumerico.  Una volta creato, non è modificabile.

  • description è la descrizione fornita dall'utente della credenziale di identità federata. Facoltativo. La descrizione non viene convalidata o controllata da Microsoft Entra ID. Questo campo ha un limite di 600 caratteri.

I caratteri jolly non sono supportati in alcun valore della proprietà delle credenziali dell'identità federata.

Per altre informazioni sulle aree supportate, tempo necessario per propagare gli aggiornamenti delle credenziali federate, le autorità emittenti supportate e altro ancora, vedere Considerazioni importanti e restrizioni per le credenziali di identità federate.

Prerequisiti

Configurare una credenziale di identità federata in un'identità gestita assegnata dall'utente

Nell'interfaccia di amministrazione di Microsoft Entra passare all'identità gestita assegnata dall'utente creata. In Impostazioni nella barra di spostamento a sinistra selezionare Credenziali federate e quindi Aggiungi credenziali.

Nell'elenco a discesa Scenario credenziali federate selezionare lo scenario.

GitHub Actions che distribuisce le risorse di Azure

Per aggiungere un'identità federata per GitHub actions, seguire questa procedura:

  1. Per Tipo di entità selezionare Ambiente, Ramo, Richiesta pull o Tag e specificare il valore. I valori devono corrispondere esattamente alla configurazione nel flusso di lavoro GitHub. Per altre info, leggi gli esempi.

  2. Aggiungere un nome per le credenziali federate.

  3. I campi Issuer, Audiences e Subject identifier vengono popolati automaticamente in base ai valori immessi.

  4. Selezionare Aggiungi per configurare le credenziali federate.

Usare i valori seguenti dell'identità gestita di Microsoft Entra per il flusso di lavoro GitHub:

  • AZURE_CLIENT_ID ID client dell'identità gestita

  • AZURE_SUBSCRIPTION_IDID sottoscrizione.

    Lo screenshot seguente illustra come copiare l'ID identità gestita e l'ID sottoscrizione.

    Screenshot che illustra come copiare l'ID identità gestita e l'ID sottoscrizione da portale di Azure.

  • AZURE_TENANT_IDID directory (tenant). Informazioni su come trovare l'ID tenant di Microsoft Entra.

Esempi di tipi di entità

Esempio di ramo

Per un flusso di lavoro attivato da un evento di richiesta push o pull nel ramo main:

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

Specificare un tipo di entità di Branch e un nome di ramo GitHub "main".

Esempio di ambiente

Per Processi associati a un ambiente denominato "produzione":

on:
  push:
    branches:
      - main

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

Specificare un tipo di entità di Ambiente e un nome di ambiente GitHub "production".

Esempio di tag

Ad esempio, per un flusso di lavoro attivato da un push al tag denominato "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.*

Specificare un tipo di entità di Tag e un nome di tag GitHub "v2".

Esempio di richiesta pull

Per un flusso di lavoro attivato da un evento di richiesta pull, specificare un tipo di entità di richiesta pull

Kubernetes che accede alle risorse di Azure

Compilare i campi URL autorità di certificazione cluster, Spazio dei nomi, Nome account del servizio e Nome :

  • L'URL dell'autorità di certificazione del cluster è l'URL dell'autorità di certificazione OIDC per il cluster gestito o l'URL dell'autorità di certificazione OIDC per un cluster autogestito.
  • Il nome dell'account del servizio è il nome dell'account del servizio Kubernetes, che fornisce un'identità per i processi eseguiti in un pod.
  • Lo spazio dei nomi è lo spazio dei nomi dell'account del servizio.
  • Name è il nome della credenziale federata, che non può essere modificata in un secondo momento.

Selezionare Aggiungi per configurare le credenziali federate.

Altro

Selezionare lo scenario Altro autorità emittente dal menu a discesa.

Specificare i campi seguenti (usando un carico di lavoro software in esecuzione in Google Cloud come esempio):

  • Name è il nome della credenziale federata, che non può essere modificata in un secondo momento.
  • Identificatore del soggetto: deve corrispondere all'attestazionesub nel token rilasciato dal provider di identità esterno. In questo esempio che usa Google Cloud, subject è l'ID univoco dell'account del servizio che si intende usare.
  • Autorità emittente: deve corrispondere all'attestazione iss nel token emesso dal provider di identità esterno. URL conforme alla specifica di individuazione OIDC. Microsoft Entra ID usa questo URL dell'autorità di certificazione per recuperare le chiavi necessarie per convalidare il token. Per Google Cloud, l'autorità emittente è "https://accounts.google.com".

Selezionare Aggiungi per configurare le credenziali federate.

Elencare le credenziali di identità federate in un'identità gestita assegnata dall'utente

Nell'interfaccia di amministrazione di Microsoft Entra passare all'identità gestita assegnata dall'utente creata. In Impostazioni nella barra di spostamento a sinistra e selezionare Credenziali federate.

Vengono elencate le credenziali di identità federate configurate per l'identità gestita assegnata dall'utente.

Eliminare una credenziale di identità federata da un'identità gestita assegnata dall'utente

Nell'interfaccia di amministrazione di Microsoft Entra passare all'identità gestita assegnata dall'utente creata. In Impostazioni nella barra di spostamento a sinistra e selezionare Credenziali federate.

Vengono elencate le credenziali di identità federate configurate per l'identità gestita assegnata dall'utente.

Per eliminare una credenziale di identità federata specifica, selezionare l'icona Elimina per tale credenziale.

Prerequisiti

Configurare una credenziale di identità federata in un'identità gestita assegnata dall'utente

Eseguire il comando az identity federated-credential create per creare una nuova credenziale di identità federata nell'identità gestita assegnata dall'utente (specificata dal nome). Specificare il nome, l'emittente, l'oggetto e altri parametri.

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'

Elencare le credenziali di identità federate in un'identità gestita assegnata dall'utente

Eseguire il comando az identity federated-credential list per leggere tutte le credenziali di identità federate configurate in un'identità gestita assegnata dall'utente:

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

Ottenere una credenziale di identità federata in un'identità gestita assegnata dall'utente

Eseguire il comando az identity federated-credential show per visualizzare una credenziale di identità federata (per 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

Eliminare una credenziale di identità federata da un'identità gestita assegnata dall'utente

Eseguire il comando az identity federated-credential delete per eliminare una credenziale di identità federata con un'identità assegnata dall'utente esistente.

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

Prerequisiti

Configurare Azure PowerShell in locale

Per usare Azure PowerShell in locale per questo articolo invece di usare Cloud Shell:

  1. Installare la versione più recente di Azure PowerShell, se non è già installata.

  2. Accedere ad Azure.

    Connect-AzAccount
    
  3. Installare la versione più recente di PowerShellGet.

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    Potrebbe essere necessario uscire (Exit) dalla sessione corrente di PowerShell dopo aver eseguito questo comando per il passaggio successivo.

  4. Installare il Az.ManagedServiceIdentity modulo per eseguire le operazioni di identità gestite assegnate dall'utente in questo articolo.

    Install-Module -Name Az.ManagedServiceIdentity
    

Configurare una credenziale di identità federata in un'identità gestita assegnata dall'utente

Eseguire il comando New-AzFederatedIdentityCredentials per creare una nuova credenziale di identità federata sull'identità gestita assegnata dall'utente (specificata dal nome). Specificare il nome, l'emittente, l'oggetto e altri parametri.

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

Elencare le credenziali di identità federate in un'identità gestita assegnata dall'utente

Eseguire il comando Get-AzFederatedIdentityCredentials per leggere tutte le credenziali di identità federate configurate in un'identità gestita assegnata dall'utente:

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

Ottenere una credenziale di identità federata in un'identità gestita assegnata dall'utente

Eseguire il comando Get-AzFederatedIdentityCredentials per visualizzare una credenziale di identità federata (per nome):

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

Eliminare una credenziale di identità federata da un'identità gestita assegnata dall'utente

Eseguire il comando Remove-AzFederatedIdentityCredentials per eliminare una credenziale di identità federata con un'identità assegnata dall'utente esistente.

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

Prerequisiti

Creazione e modifica del modello

I modelli di Resource Manager consentono di implementare risorse nuove o modificate definite da un gruppo di risorse di Azure. Diverse opzioni sono disponibili per la modifica e la distribuzione dei modelli, sia in locale che basati sul portale. È possibile:

Configurare una credenziale di identità federata in un'identità gestita assegnata dall'utente

Le credenziali dell'identità federata e l'identità assegnata dall'utente padre possono essere create o aggiornate come mezzo del modello riportato di seguito. È possibile distribuire modelli di Resource Manager dalla portale di Azure.

Tutti i parametri del modello sono obbligatori.

È previsto un limite di 3-120 caratteri per una lunghezza del nome delle credenziali di identità federata. Deve essere alfanumerico, trattino, carattere di sottolineatura. Il primo simbolo è solo alfanumerico.

È necessario aggiungere esattamente un gruppo di destinatari a una credenziale di identità federata. Il gruppo di destinatari viene verificato durante lo scambio di token. Usare "api://AzureADTokenExchange" come valore predefinito.

Le operazioni Elenco, Get ed Eliminazione non sono disponibili con il modello. Per queste operazioni, vedere l'interfaccia della riga di comando di Azure. Per impostazione predefinita, tutte le credenziali dell'identità federata figlio vengono create in parallelo, che attiva la logica di rilevamento della concorrenza e fa sì che la distribuzione non riesca con un codice di stato HTTP in conflitto 409. Per crearli in sequenza, specificare una catena di dipendenze usando la proprietà dependsOn .

Assicurarsi che qualsiasi tipo di automazione crei le credenziali di identità federate nella stessa identità padre in sequenza. Le credenziali di identità federate in identità gestite diverse possono essere create in parallelo senza restrizioni.

{

    "$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')]"
                        ]
                    }
                }
            ]
        }
    ]
}

Prerequisiti

Ottenere un token di accesso di connessione

  1. Se si esegue in locale, accedere ad Azure tramite l'interfaccia della riga di comando di Azure.

    az login
    
  2. Ottenere un token di accesso usando az account get-access-token.

    az account get-access-token
    

Configurare una credenziale di identità federata in un'identità gestita assegnata dall'utente

Creare o aggiornare una credenziale di identità federata nell'identità gestita assegnata dall'utente specificata.

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"
 ]
 }
}

Intestazioni delle richieste

Intestazione della richiesta Descrizione
Content-Type Obbligatorio. Impostare su application/json.
Autorizzazione Obbligatorio. Impostare su un token di accesso Bearer valido.

Testo della richiesta

Nome Descrizione
properties.audiences Obbligatorio. Elenco di gruppi di destinatari che possono essere visualizzati nel token rilasciato.
properties.issuer Obbligatorio. URL dell'autorità emittente da considerare attendibile.
properties.subject Obbligatorio. Identificatore dell'identità esterna.

Elencare le credenziali di identità federate in un'identità gestita assegnata dall'utente

Elencare tutte le credenziali dell'identità federata nell'identità gestita assegnata dall'utente specificata.

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

Intestazioni delle richieste

Intestazione della richiesta Descrizione
Content-Type Obbligatorio. Impostare su application/json.
Autorizzazione Obbligatorio. Impostare su un token di accesso Bearer valido.

Ottenere una credenziale di identità federata in un'identità gestita assegnata dall'utente

Ottenere una credenziale di identità federata nell'identità gestita assegnata dall'utente specificata.

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

Intestazioni delle richieste

Intestazione della richiesta Descrizione
Content-Type Obbligatorio. Impostare su application/json.
Autorizzazione Obbligatorio. Impostare su un token di accesso Bearer valido.

Eliminare una credenziale di identità federata da un'identità gestita assegnata dall'utente

Eliminare una credenziale di identità federata nell'identità gestita assegnata dall'utente specificata.

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

Intestazioni delle richieste

Intestazione della richiesta Descrizione
Content-Type Obbligatorio. Impostare su application/json.
Autorizzazione Obbligatorio. Impostare su un token di accesso Bearer valido.

Passaggi successivi

  • Per informazioni sul formato richiesto di JWT creati da provider di identità esterni, vedere il formato di asserzione.