Integrare Microsoft Entra ID con servizio Azure Kubernetes (servizio Azure Kubernetes) usando l'interfaccia della riga di comando di Azure (legacy)

Avviso

La funzionalità descritta in questo documento, Microsoft Entra Integration (legacy) è stata deprecata il 1° giugno 2023. Al momento, non è possibile creare nuovi cluster con Microsoft Entra Integration (legacy).

Il servizio Azure Kubernetes offre una nuova esperienza dell'ID Microsoft Entra gestita dal servizio Azure Kubernetes che non richiede la gestione di applicazioni client o server. Se si vuole eseguire la migrazione, seguire le istruzioni riportate qui.

servizio Azure Kubernetes (servizio Azure Kubernetes) può essere configurato per l'uso dell'ID Entra Di Microsoft per l'autenticazione utente. In questa configurazione è possibile accedere a un cluster del servizio Azure Kubernetes usando un token di autenticazione Di Microsoft Entra. Gli operatori del cluster possono anche configurare il controllo degli accessi in base al ruolo di Kubernetes in base all'identità o all'appartenenza al gruppo di directory di un utente.

Questo articolo illustra come creare i componenti di Microsoft Entra necessari, quindi distribuire un cluster abilitato per Microsoft Entra ID e creare un ruolo Kubernetes di base nel cluster del servizio Azure Kubernetes.

Limiti

  • Microsoft Entra ID può essere abilitato solo nel cluster abilitato per il controllo degli accessi in base al ruolo di Kubernetes.
  • L'integrazione legacy di Microsoft Entra può essere abilitata solo durante la creazione del cluster.

Operazioni preliminari

È necessario che sia installata e configurata l'interfaccia della riga di comando di Azure 2.0.61 o versioni successive. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Passare a https://shell.azure.com per aprire Cloud Shell nel browser.

Per coerenza e per facilitare l'esecuzione dei comandi in questo articolo, creare una variabile per il nome del cluster del servizio Azure Kubernetes desiderato. L'esempio seguente usa il nome myakscluster:

aksname="myakscluster"

Panoramica dell'autenticazione di Microsoft Entra

L'autenticazione Di Microsoft Entra viene fornita ai cluster del servizio Azure Kubernetes con OpenID Connessione. OpenID Connect è un livello di gestione delle identità basato sul protocollo OAuth 2.0. Per altre informazioni su OpenID Connessione, vedere la documentazione di OpenID Connessione.

Dall'interno del cluster Kubernetes viene usata l'autenticazione del token del webhook per verificare i token di autenticazione. L'autenticazione del token del webhook viene configurata e gestita come parte del cluster servizio Azure Kubernetes. Per altre informazioni sull'autenticazione del token del webhook, consulta documentazione dell'autenticazione del webhook.

Nota

Quando si configura Microsoft Entra ID per l'autenticazione del servizio Azure Kubernetes, vengono configurate due applicazioni Microsoft Entra. Questa operazione deve essere completata da un amministratore tenant di Azure.

Creare il componente server Microsoft Entra

Per l'integrazione con il servizio Azure Kubernetes, si crea e si usa un'applicazione Microsoft Entra che funge da endpoint per le richieste di identità. La prima applicazione Microsoft Entra necessaria ottiene l'appartenenza al gruppo Microsoft Entra per un utente.

Creare il componente dell'applicazione server usando il comando az ad app create , quindi aggiornare le attestazioni di appartenenza al gruppo usando il comando az ad app update . Nell'esempio seguente viene usata la variabile aksname definita nella sezione Prima di iniziare e viene creata una variabile

# Create the Azure AD application
serverApplicationId=$(az ad app create \
    --display-name "${aksname}Server" \
    --identifier-uris "https://${aksname}Server" \
    --query appId -o tsv)

# Update the application group membership claims
az ad app update --id $serverApplicationId --set groupMembershipClaims=All

Creare ora un'entità servizio per l'app server usando il comando az ad sp create . Questa entità servizio viene usata per autenticarsi all'interno della piattaforma Azure. Ottenere quindi il segreto dell'entità servizio usando il comando az ad sp credential reset e assegnarlo alla variabile denominata serverApplicationSecret da usare in uno dei passaggi seguenti:

# Create a service principal for the Azure AD application
az ad sp create --id $serverApplicationId

# Get the service principal secret
serverApplicationSecret=$(az ad sp credential reset \
    --name $serverApplicationId \
    --credential-description "AKSPassword" \
    --query password -o tsv)

L'entità servizio Microsoft Entra deve disporre delle autorizzazioni per eseguire le azioni seguenti:

  • Leggi i dati della directory
  • Eseguire l'accesso e leggere il profilo utente

Assegnare queste autorizzazioni usando il comando az ad app permission add :

az ad app permission add \
    --id $serverApplicationId \
    --api 00000003-0000-0000-c000-000000000000 \
    --api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope 06da0dbc-49e2-44d2-8312-53f166ab848a=Scope 7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role

Infine, concedere le autorizzazioni assegnate nel passaggio precedente per l'applicazione server usando il comando az ad app permission grant . Questo passaggio ha esito negativo se l'account corrente non è un amministratore tenant. È anche necessario aggiungere autorizzazioni per l'applicazione Microsoft Entra per richiedere informazioni che potrebbero altrimenti richiedere il consenso amministrativo usando az ad app permission admin-consent:

az ad app permission grant --id $serverApplicationId --api 00000003-0000-0000-c000-000000000000
az ad app permission admin-consent --id  $serverApplicationId

Creare il componente client Microsoft Entra

La seconda applicazione Microsoft Entra viene usata quando un utente accede al cluster del servizio Azure Kubernetes con l'interfaccia della riga di comando di Kubernetes (kubectl). Questa applicazione client accetta la richiesta di autenticazione dall'utente e ne verifica le credenziali e le autorizzazioni. Creare l'app Microsoft Entra per il componente client usando il comando az ad app create :

clientApplicationId=$(az ad app create \
    --display-name "${aksname}Client" \
    --native-app \
    --reply-urls "https://${aksname}Client" \
    --query appId -o tsv)

Creare un'entità servizio per l'applicazione client usando il comando az ad sp create :

az ad sp create --id $clientApplicationId

Ottenere l'ID oAuth2 per l'app server per consentire il flusso di autenticazione tra i due componenti dell'app usando il comando az ad app show . Questo ID oAuth2 viene usato nel passaggio successivo.

oAuthPermissionId=$(az ad app show --id $serverApplicationId --query "oauth2Permissions[0].id" -o tsv)

Aggiungere le autorizzazioni per i componenti dell'applicazione client e dell'applicazione server per usare il flusso di comunicazione oAuth2 usando il comando az ad app permission add . Concedere quindi le autorizzazioni per l'applicazione client per la comunicazione con l'applicazione server usando il comando az ad app permission grant :

az ad app permission add --id $clientApplicationId --api $serverApplicationId --api-permissions ${oAuthPermissionId}=Scope
az ad app permission grant --id $clientApplicationId --api $serverApplicationId

Distribuire il cluster

Con le due applicazioni Microsoft Entra create, creare ora il cluster del servizio Azure Kubernetes stesso. Creare prima di tutto un gruppo di risorse usando il comando az group create . L'esempio seguente crea il gruppo di risorse nell'area EastUS :

Creare un gruppo di risorse per il cluster:

az group create --name myResourceGroup --location EastUS

Ottenere l'ID tenant della sottoscrizione di Azure usando il comando az account show . Creare quindi il cluster del servizio Azure Kubernetes usando il comando az aks create . Il comando per creare il cluster del servizio Azure Kubernetes fornisce gli ID applicazione server e client, il segreto dell'entità servizio applicazione server e l'ID tenant:

tenantId=$(az account show --query tenantId -o tsv)

az aks create \
    --resource-group myResourceGroup \
    --name $aksname \
    --node-count 1 \
    --generate-ssh-keys \
    --aad-server-app-id $serverApplicationId \
    --aad-server-app-secret $serverApplicationSecret \
    --aad-client-app-id $clientApplicationId \
    --aad-tenant-id $tenantId

Infine, ottenere le credenziali di amministratore del cluster usando il comando az aks get-credentials . In uno dei passaggi seguenti si ottengono le credenziali normali del cluster utente per visualizzare il flusso di autenticazione di Microsoft Entra in azione.

az aks get-credentials --resource-group myResourceGroup --name $aksname --admin

Creare l'associazione del controllo degli accessi in base al ruolo di Kubernetes

Prima di poter usare un account Microsoft Entra con il cluster del servizio Azure Kubernetes, è necessario creare un'associazione di ruoli o un'associazione di ruoli del cluster. I ruoli definiscono le autorizzazioni da concedere e le associazioni le applicano agli utenti desiderati. Queste assegnazioni possono essere applicate a uno spazio dei nomi specifico o all'intero cluster. Per altre informazioni, vedere Uso dell'autorizzazione del controllo degli accessi in base al ruolo di Kubernetes.

Ottenere il nome dell'entità utente (UPN) per l'utente attualmente connesso usando il comando az ad signed-in-user show . Questo account utente è abilitato per l'integrazione di Microsoft Entra nel passaggio successivo.

az ad signed-in-user show --query userPrincipalName -o tsv

Importante

Se l'utente a cui si concede l'associazione di controllo degli accessi in base al ruolo di Kubernetes si trova nello stesso tenant di Microsoft Entra, assegnare le autorizzazioni in base all'attributo userPrincipalName. Se l'utente si trova in un tenant Microsoft Entra diverso, eseguire una query per e usare invece la proprietà objectId .

Creare un manifesto YAML denominato basic-azure-ad-binding.yaml e incollare il contenuto seguente. Nell'ultima riga sostituire userPrincipalName_or_objectId con l'output DELL'UPN o dell'ID oggetto del comando precedente:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: contoso-cluster-admins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: userPrincipalName_or_objectId

Creare ClusterRoleBinding usando il comando kubectl apply e specificare il nome file del manifesto YAML:

kubectl apply -f basic-azure-ad-binding.yaml

Accedere al cluster con Microsoft Entra ID

Verrà ora testata l'integrazione dell'autenticazione di Microsoft Entra per il cluster del servizio Azure Kubernetes. Impostare il kubectl contesto di configurazione per usare le credenziali utente normali. Questo contesto passa di nuovo tutte le richieste di autenticazione tramite Microsoft Entra ID.

az aks get-credentials --resource-group myResourceGroup --name $aksname --overwrite-existing

Usare ora il comando kubectl get pods per visualizzare i pod in tutti gli spazi dei nomi:

kubectl get pods --all-namespaces

Viene visualizzato un prompt di accesso per eseguire l'autenticazione usando le credenziali di Microsoft Entra tramite un Web browser. Dopo l'autenticazione, il kubectl comando visualizza i pod nel cluster del servizio Azure Kubernetes, come illustrato nell'output di esempio seguente:

kubectl get pods --all-namespaces
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code BYMK7UXVD to authenticate.

NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE
kube-system   coredns-754f947b4-2v75r                 1/1     Running   0          23h
kube-system   coredns-754f947b4-tghwh                 1/1     Running   0          23h
kube-system   coredns-autoscaler-6fcdb7d64-4wkvp      1/1     Running   0          23h
kube-system   heapster-5fb7488d97-t5wzk               2/2     Running   0          23h
kube-system   kube-proxy-2nd5m                        1/1     Running   0          23h
kube-system   kube-svc-redirect-swp9r                 2/2     Running   0          23h
kube-system   kubernetes-dashboard-847bb4ddc6-trt7m   1/1     Running   0          23h
kube-system   metrics-server-7b97f9cd9-btxzz          1/1     Running   0          23h
kube-system   tunnelfront-6ff887cffb-xkfmq            1/1     Running   0          23h

Il token di autenticazione ricevuto per kubectl viene memorizzato nella cache. L'accesso viene eseguito di nuovo solo quando il token è scaduto o il file di configurazione kubernetes viene ricreato.

Se viene visualizzato un messaggio di errore di autorizzazione dopo aver eseguito l'accesso con un Web browser come nell'output di esempio seguente, verificare i possibili problemi seguenti:

error: You must be logged in to the server (Unauthorized)
  • È stato definito l'ID oggetto o l'UPN appropriati, a seconda che l'account utente si trovi nello stesso tenant di Microsoft Entra o meno.
  • L'utente non deve essere membro di più di 200 gruppi.
  • Il segreto definito nella registrazione dell'applicazione per il server corrisponde al valore configurato usando --aad-server-app-secret
  • Assicurarsi che nel computer sia installata una sola versione di kubectl alla volta. Le versioni in conflitto possono causare problemi durante l'autorizzazione. Per installare la versione più recente, usare az aks install-cli.

Domande frequenti sulla migrazione da Microsoft Entra Integration a Microsoft Entra ID microsoft gestito dal servizio Azure Kubernetes

1. Qual è il piano per la migrazione?

Microsoft Entra Integration (legacy) sarà deprecato il 1° giugno 2023. Dopo questa data, non sarà possibile creare nuovi cluster con Microsoft Entra ID (legacy). Verrà eseguita la migrazione automatica di tutti i cluster del servizio Azure Kubernetes gestiti dal servizio Azure Kubernetes a partire dal 1° agosto 2023. Vengono inviati messaggi di posta elettronica di notifica agli amministratori delle sottoscrizioni interessati per ricordare loro la migrazione.

2. Cosa succederà se non faccio alcuna azione?

I cluster del servizio Azure Kubernetes Microsoft Entra Integration (legacy) continueranno a funzionare dopo il 1° giugno 2023. Verrà eseguita automaticamente la migrazione dei cluster all'ID Microsoft Entra gestito dal servizio Azure Kubernetes a partire dal 1° agosto 2023. È possibile che si verifichino tempi di inattività del server API durante la migrazione.

Il contenuto kubeconfig cambia dopo la migrazione. È necessario unire le nuove credenziali nel file kubeconfig usando .az aks get-credentials --resource-group <AKS resource group name> --name <AKS cluster name>

È consigliabile aggiornare manualmente il cluster del servizio Azure Kubernetes all'ID Microsoft Entra gestito dal servizio Azure Kubernetes prima del 1° agosto. In questo modo è possibile gestire i tempi di inattività durante gli orari non lavorativi quando è più conveniente.

3. Perché ricevo ancora il messaggio di posta elettronica di notifica dopo la migrazione manuale?

L'invio del messaggio di posta elettronica richiede diversi giorni. Se il cluster non è stato migrato prima di avviare il processo di invio tramite posta elettronica, è comunque possibile ricevere una notifica.

4. Come è possibile verificare se è stata eseguita la migrazione del cluster a Microsoft Entra ID gestito dal servizio Azure Kubernetes?

Verificare che la migrazione del cluster del servizio Azure Kubernetes sia stata eseguita nell'ID Microsoft Entra gestito dal servizio Azure Kubernetes usando il az aks show comando .

az aks show -g <RGName> -n <ClusterName>  --query "aadProfile"

Se il cluster usa l'ID Microsoft Entra gestito dal servizio Azure Kubernetes, l'output visualizzato managed è true. Ad esempio:

    {
      "adminGroupObjectIDs": [
        "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      ],
      "adminUsers": null,
      "clientAppId": null,
      "enableAzureRbac": null,
      "managed": true,
      "serverAppId": null,
      "serverAppSecret": null,
      "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }

Passaggi successivi

Per lo script completo che contiene i comandi illustrati in questo articolo, vedere lo [script di integrazione di Microsoft Entra nel repository degli esempi del servizio Azure Kubernetes][complete-script].

Per usare utenti e gruppi di Microsoft Entra per controllare l'accesso alle risorse del cluster, vedere Controllare l'accesso alle risorse del cluster usando il controllo degli accessi in base al ruolo kubernetes e le identità di Microsoft Entra nel servizio Azure Kubernetes.

Per altre informazioni su come proteggere i cluster Kubernetes, vedere Opzioni di accesso e identità per il servizio Azure Kubernetes.

Per le procedure consigliate relative all'identità e al controllo delle risorse, vedere Procedure consigliate per l'autenticazione e l'autorizzazione nel servizio Azure Kubernetes.