Usare il controllo degli accessi in base al ruolo di Azure per definire l'accesso al file di configurazione di Kubernetes nel servizio Azure Kubernetes

È possibile interagire con i cluster Kubernetes tramite lo strumento kubectl. L'interfaccia della riga di comando di Azure offre un modo semplice per ottenere le credenziali di accesso e il file di configurazione kubeconfigper la connessione ai cluster del servizio Azure Kubernetes tramite kubectl. È possibile usare il controllo degli accessi in base al ruolo di Azure per limitare gli utenti autorizzati ad accedere al file kubeconfig e alle autorizzazioni di cui dispongono.

Questo articolo illustra come assegnare ruoli di controllo degli accessi in base al ruolo che limitano gli utenti in grado di ottenere le informazioni di configurazione per un cluster del servizio Azure Kubernetes.

Operazioni preliminari

Autorizzazioni disponibili per i ruoli del cluster

Quando si interagisce con un cluster del servizio Azure Kubernetes tramite lo strumento kubectl, viene usato un file di configurazione chiamato kubeconfig che definisce le informazioni di connessione del cluster. Questo file di configurazione è in genere archiviato in ~/.kube/config. In questo file kubeconfig possono essere definiti più cluster. È possibile passare da un cluster all'altro usando il comando kubectl config use-context.

Il comando az aks get-credentials consente di ottenere le credenziali di accesso per un cluster del servizio Azure Kubernetes e di unirle nel file kubeconfig. È possibile usare il controllo degli accessi in base al ruolo di Azure per controllare l'accesso a queste credenziali. Questi ruoli Azure consentono di definire chi può recuperare il file kubeconfig e le autorizzazioni disponibili all'interno del cluster.

Esistono due ruoli di Azure che è possibile applicare a un utente o a un gruppo di Microsoft Entra:

  • Ruolo di amministratore del cluster del servizio Azure Kubernetes

  • Ruolo di utente del cluster del servizio Azure Kubernetes

    • Consente l'accesso alla Microsoft.ContainerService/managedClusters/listClusterUserCredential/actionchiamata API. Questa chiamata API elenca le credenziali di utente del cluster.
    • Scarica kubeconfig per il ruolo clusterUser.

Nota

Nei cluster che usano l'ID Microsoft Entra, gli utenti con il ruolo clusterUser hanno un file kubeconfig vuoto che richiede un account di accesso. Dopo l'accesso, gli utenti hanno accesso in base alle impostazioni utente o gruppo di Microsoft Entra. Gli utenti con il ruolo clusterAdmin hanno accesso amministratore.

Nei cluster che non usano Microsoft Entra ID, il ruolo clusterUser ha lo stesso effetto del ruolo clusterAdmin.

Assegnare le autorizzazioni del ruolo a un utente o a un gruppo

Per assegnare uno dei ruoli disponibili, è necessario ottenere l'ID risorsa del cluster del servizio Azure Kubernetes e l'ID dell'account utente o del gruppo Microsoft Entra seguendo questa procedura:

  1. Ottenere l'ID della risorsa del cluster tramite il comando az aks showper il cluster denominato myAKSCluster nel gruppo di risorse myResourceGroup. Specificare il nome del cluster e del gruppo di risorse in base alle esigenze.
  2. Usare i comandi az account show e az ad user show per ottenere l'ID utente.
  3. Assegnare un ruolo usando il comando az role assignment create.

L'esempio seguente assegna il ruolo di amministratore del cluster del servizio Azure Kubernetes a un singolo account utente:

# Get the resource ID of your AKS cluster
AKS_CLUSTER=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query id -o tsv)

# Get the account credentials for the logged in user
ACCOUNT_UPN=$(az account show --query user.name -o tsv)
ACCOUNT_ID=$(az ad user show --id $ACCOUNT_UPN --query objectId -o tsv)

# Assign the 'Cluster Admin' role to the user
az role assignment create \
    --assignee $ACCOUNT_ID \
    --scope $AKS_CLUSTER \
    --role "Azure Kubernetes Service Cluster Admin Role"

Se si desidera assegnare autorizzazioni a un gruppo di Microsoft Entra, aggiornare il --assignee parametro mostrato nell'esempio precedente con l'ID oggetto per il gruppo anziché l'utente .

Per ottenere l'ID oggetto per un gruppo, usare il az ad group show comando. Il comando seguente ottiene l'ID oggetto per il gruppo Microsoft Entra denominato appdev:

az ad group show --group appdev --query objectId -o tsv

Importante

In alcuni casi, ad esempio gli utenti guest di Microsoft Entra, il user.name nell'account è diverso da userPrincipalName.

$ az account show --query user.name -o tsv
user@contoso.com

$ az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv
user_contoso.com#EXT#@contoso.onmicrosoft.com

In questo caso, impostare il valore di ACCOUNT_UPN su userPrincipalName dall'utente di Microsoft Entra. Ad esempio, se l'account user.name è user@contoso.com, questa azione sarà simile all'esempio seguente:

ACCOUNT_UPN=$(az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv)

Ottenere e verificare le informazioni di configurazione

Dopo aver assegnato i ruoli, usare il comando az aks get-credentials per ottenere la definizione kubeconfig per il cluster del servizio Azure Kubernetes. L'esempio seguente ottiene le credenziali --admin, che funzionano correttamente se all'utente è stato assegnato il Ruolo amministratore del cluster:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin

È quindi possibile usare il comando kubectl config view per verificare che context per il cluster indichino che sono state applicate le informazioni di configurazione per l'amministratore.

$ kubectl config view

L'output dovrebbe essere simile all'esempio di output seguente:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://myaksclust-myresourcegroup-19da35-4839be06.hcp.eastus.azmk8s.io:443
  name: myAKSCluster
contexts:
- context:
    cluster: myAKSCluster
    user: clusterAdmin_myResourceGroup_myAKSCluster
  name: myAKSCluster-admin
current-context: myAKSCluster-admin
kind: Config
preferences: {}
users:
- name: clusterAdmin_myResourceGroup_myAKSCluster
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: e9f2f819a4496538b02cefff94e61d35

Rimuovere le autorizzazioni per i ruoli

Per rimuovere le assegnazioni di ruolo, usare il comando az role assignment delete. Specificare l'ID dell'account e l'ID della risorsa del cluster ottenuti nei passaggi precedenti. Se il ruolo è stato assegnato a un gruppo anziché a un utente, specificare l'ID oggetto gruppo appropriato anziché l'ID oggetto account per il parametro --assignee.

az role assignment delete --assignee $ACCOUNT_ID --scope $AKS_CLUSTER

Passaggi successivi

Per una maggiore sicurezza sull'accesso ai cluster del servizio Azure Kubernetes, integrare l'autenticazione di Microsoft Entra .