Condividi tramite


Integrare Microsoft Entra ID con il servizio Azure Kubernetes (AKS) 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 Microsoft Entra ID gestita dal servizio Azure Kubernetes che non richiede la gestione di applicazioni server o client. Se si vuole eseguire la migrazione, seguire le istruzioni qui.

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

Questo articolo illustra come creare i componenti Microsoft Entra necessari, quindi a distribuire un cluster abilitato a 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. Nell'esempio seguente viene usato il nome myakscluster:

aksname="myakscluster"

Panoramica sull'autenticazione di Microsoft Entra

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

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 di 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 richieste 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 crea 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

A questo punto, creare 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 assegnare 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 necessità di 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

Concedere infine 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 del tenant. È anche necessario aggiungere le 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 di Microsoft Entra

La seconda applicazione di 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

Dopo aver creato le due applicazioni Microsoft Entra, 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 normali credenziali utente del cluster 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 del controllo degli accessi in base al ruolo di Kubernetes si trova nello stesso tenant di Microsoft Entra, assegnare le autorizzazioni in base a userPrincipalName. Se l'utente si trova in un tenant Microsoft Entra diverso, eseguire una query e usare 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 il 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 contesto di configurazione kubectl 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 comando kubectl 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 appropriato, a seconda che l'account utente si trovi o meno nello stesso tenant di Microsoft Entra.
  • 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, vedere Installare l'interfaccia della riga di comando di Azure.

Domande frequenti sulla migrazione da Microsoft Entra Integration a Microsoft Entra ID 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 di tutti i cluster del servizio Azure Kubernetes di Microsoft Entra Integration (legacy) a Microsoft Entra ID gestito dal servizio Azure Kubernetes automaticamente a partire dal 1° agosto 2023. Vengono inviati messaggi di posta elettronica di notifica agli amministratori delle sottoscrizioni interessate con cadenza bisettimanale per ricordare loro la migrazione.

2. Cosa succede se non si interviene?

I cluster del servizio Azure Kubernetes di Microsoft Entra Integration (legacy) continueranno a funzionare anche 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 durante la migrazione si verifichino tempi di inattività del server API.

Il contenuto di 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 per l'ID Microsoft Entra gestito dal servizio Azure Kubernetes prima del 1° agosto. In questo modo è possibile gestire i tempi di inattività in orari non di ufficio, quando è più conveniente.

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

L'invio del messaggio di posta elettronica richiede diversi giorni. Se non è stata eseguita la migrazione del cluster prima dell'avvio del processo di invio tramite posta elettronica, è comunque possibile ricevere una notifica.

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

Verificare che il cluster del servizio Azure Kubernetes sia stato migrato all'ID Microsoft Entra gestito dal servizio Azure Kubernetes usando il comando az aks show.

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

Se il cluster usa l'ID Microsoft Entra gestito dal servizio Azure Kubernetes, l'output mostra 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 per il controllo delle identità e delle risorse, vedere Procedure consigliate per l'autenticazione e l'autorizzazione nel servizio Azure Kubernetes.