Usare il controllo degli accessi in base al ruolo di Azure per l'autorizzazione Kubernetes

Quando si sfrutta l'autenticazione integrata tra Microsoft Entra ID e il servizio Azure Kubernetes, è possibile usare utenti, gruppi o entità servizio di Microsoft Entra come soggetti in Controllo degli accessi in base al ruolo di Kubernetes (RBAC Kubernetes. Questa funzionalità consente di gestire separatamente le identità utente e le credenziali per Kubernetes. Tuttavia, è comunque necessario configurare e gestire il controllo degli accessi in base al ruolo di Azure e il controllo degli accessi in base al ruolo di Kubernetes separatamente.

Questo articolo illustra come usare il controllo degli accessi in base al ruolo di Azure per l'autorizzazione kubernetes, che consente la gestione unificata e il controllo di accesso tra risorse di Azure, servizio Azure Kubernetes e risorse Kubernetes. Per altre informazioni, vedere Controllo degli accessi in base al ruolo di Azure per l'autorizzazione Kubernetes.

Operazioni preliminari

  • È necessario che sia installata e configurata l'interfaccia della riga di comando di Azure 2.24.0 o versione successiva. 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.
  • È necessario kubectl, con una versione minima di 1.18.3.
  • È necessaria l'integrazione gestita di Microsoft Entra abilitata nel cluster prima di poter aggiungere l'autorizzazione di Controllo degli accessi in base al ruolo di Azure per Kubernetes. Se è necessario abilitare l'integrazione gestita di Microsoft Entra, vedere Usare Microsoft Entra ID nel servizio Azure Kubernetes.
  • Se si dispone di Definizioni di risorse personalizzate (CRD) e si creano definizioni di ruolo personalizzate, attualmente l'unico modo per coprire le CRD è usare Microsoft.ContainerService/managedClusters/*/read. Per gli oggetti rimanenti, è possibile usare i gruppi di API specifici, ad esempio Microsoft.ContainerService/apps/deployments/read.
  • La propagazione delle nuove assegnazioni di ruolo può richiedere fino a cinque minuti, e possono essere aggiornate dal server di autorizzazione.
  • Il controllo degli accessi in base al ruolo di Azure per l'autorizzazione di Kubernetes richiede che il tenant di Microsoft Entra configurato per l'autenticazione corrisponda al tenant per la sottoscrizione che contiene il cluster del servizio Azure Kubernetes.

Creare un nuovo cluster del servizio Azure Kubernetes con l'integrazione gestita di Microsoft Entra e il controllo degli accessi in base al ruolo di Azure per l'autorizzazione di Kubernetes

Creare un gruppo di risorse di Azure usando il comando az group create.

az group create --name myResourceGroup --location westus2

Creare un cluster del servizio Azure Kubernetes con l'integrazione gestita di Microsoft Entra e il controllo degli accessi in base al ruolo di Azure per l'autorizzazione kubernetes usando il comando az aks create.

az aks create -g myResourceGroup -n myManagedCluster --enable-aad --enable-azure-rbac

L'output sarà simile all'output di esempio seguente:

"AADProfile": {
    "adminGroupObjectIds": null,
    "clientAppId": null,
    "enableAzureRbac": true,
    "managed": true,
    "serverAppId": null,
    "serverAppSecret": null,
    "tenantId": "****-****-****-****-****"
}

Abilitare il controllo degli accessi in base al ruolo di Azure in un cluster del servizio Azure Kubernetes esistente

Aggiungere il controllo degli accessi in base al ruolo di Azure per l'autorizzazione Kubernetes in un cluster del servizio Azure Kubernetes esistente usando il comando az aks update con il flag enable-azure-rbac.

az aks update -g myResourceGroup -n myAKSCluster --enable-azure-rbac

Disabilitare il controllo degli accessi in base al ruolo di Azure per l'autorizzazione Kubernetes da un cluster del servizio Azure Kubernetes

Rimuovere il controllo degli accessi in base al ruolo di Azure per l'autorizzazione kubernetes da un cluster del servizio Azure Kubernetes esistente usando il comando az aks update con il flag disable-azure-rbac.

az aks update -g myResourceGroup -n myAKSCluster --disable-azure-rbac

Creare assegnazioni di ruolo agli utenti per accedere al cluster

Il servizio Azure Kubernetes fornisce i ruoli predefiniti seguenti:

Ruolo Descrizione
Ruolo con autorizzazioni di lettura per il Controllo degli accessi in base al ruolo del servizio Azure Kubernetes Consente l'accesso in sola lettura per visualizzare la maggior parte degli oggetti in uno spazio dei nomi. Non consente la visualizzazione di ruoli o associazioni di ruolo. Questo ruolo non consente la visualizzazione di Secrets, poiché la lettura del contenuto dei segreti consente l'accesso alle credenziali ServiceAccount nello spazio dei nomi, che consentirebbe l'accesso alle API come qualsiasi ServiceAccount nello spazio dei nomi (una forma di escalation dei privilegi).
Ruolo con autorizzazioni di scrittura per il Controllo degli accessi in base al ruolo del servizio Azure Kubernetes Consente l'accesso in lettura/scrittura alla maggior parte degli oggetti in uno spazio dei nomi. Questo ruolo non consente la visualizzazione o la modifica di ruoli o associazioni di ruoli. Tuttavia, questo ruolo consente di accedere a Secrets ed eseguire pod come qualsiasi ServiceAccount nello spazio dei nomi, in modo che possa essere usato per ottenere i livelli di accesso API di qualsiasi ServiceAccount nello spazio dei nomi.
Amministratore del Controllo degli accessi in base al ruolo del servizio Azure Kubernetes Consente l'accesso amministratore, destinato a essere concesso all'interno di uno spazio dei nomi. Consente l'accesso in lettura/scrittura alla maggior parte delle risorse in uno spazio dei nomi (o ambito del cluster), inclusa la possibilità di creare ruoli e associazioni di ruolo all'interno dello spazio dei nomi. Questo ruolo non consente l'accesso in scrittura alla quota di risorse o allo spazio dei nomi stesso.
Amministratore dei cluster del Controllo degli accessi in base al ruolo del servizio Azure Kubernetes Consente all'utente con privilegi avanzati di eseguire qualsiasi azione su qualsiasi risorsa. Offre il controllo completo su ogni risorsa nel cluster e in tutti gli spazi dei nomi.

Le assegnazioni di ruoli con ambito per l'intero cluster del servizio Azure Kubernetes possono essere eseguite nel pannello Controllo di accesso (IAM) della risorsa cluster nel portale di Azure o usando i comandi seguenti dell'interfaccia della riga di comando di Azure:

Ottenere l'ID risorsa del servizio Azure Kubernetes usando il comando az aks show.

AKS_ID=$(az aks show -g myResourceGroup -n myManagedCluster --query id -o tsv)

Creare un'assegnazione di ruolo usando il comando az role assignment create. <AAD-ENTITY-ID> può essere un nome utente o l'ID client di un'entità servizio.

az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID

Nota

È possibile creare il lettore di controllo degli accessi in base al ruolo del servizio Azure Kubernetes e il writer di controllo degli accessi in base al ruolo del servizio Azure Kubernetes con ambito di uno spazio dei nomi specifico all'interno del cluster usando il comando az role assignment create e impostando l'ambito sullo spazio dei nomi desiderato.

az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>

Nota

Nel portale di Azure, dopo aver creato assegnazioni di ruolo con ambito a uno spazio dei nomi desiderato, non sarà possibile visualizzare le "assegnazioni di ruolo" per lo spazio dei nomi in un ambito. È possibile trovarla usando il comando az role assignment list, oppure elencare le assegnazioni di ruolo per un utente o un gruppo, a cui è stato assegnato il ruolo.

az role assignment list --scope $AKS_ID/namespaces/<namespace-name>

Creare definizioni di ruoli personalizzati

La definizione di ruolo personalizzata di esempio seguente consente a un utente di leggere solo le distribuzioni e nient'altro. Per l'elenco completo delle possibili azioni, vedere Operazioni di Microsoft.ContainerService.

Per creare definizioni di ruolo personalizzate, copiare il file seguente, sostituendo <YOUR SUBSCRIPTION ID> con il proprio ID sottoscrizione e quindi salvarlo come deploy-view.json.

{
    "Name": "AKS Deployment Reader",
    "Description": "Lets you view all deployments in cluster/namespace.",
    "Actions": [],
    "NotActions": [],
    "DataActions": [
        "Microsoft.ContainerService/managedClusters/apps/deployments/read"
    ],
    "NotDataActions": [],
    "assignableScopes": [
        "/subscriptions/<YOUR SUBSCRIPTION ID>"
    ]
}

Creare la definizione del ruolo usando il comando az role definition create, impostando --role-definition sul file deploy-view.json creato nel passaggio precedente.

az role definition create --role-definition @deploy-view.json 

Assegnare la definizione di ruolo a un utente o a un'altra identità usando il comando az role assignment create.

az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID

Usare il controllo degli accessi in base al ruolo di Azure per l'autorizzazione Kubernetes con kubectl

Assicurarsi di avere il ruolo predefinito dell'utente del cluster del servizio Azure Kubernetes e quindi ottenere kubeconfig del cluster del servizio Azure Kubernetes usando il comando az aks get-credentials.

az aks get-credentials -g myResourceGroup -n myManagedCluster

È ora possibile usare kubectl gestire il cluster. Ad esempio, è possibile elencare i nodi nel cluster usando kubectl get nodes. La prima volta che viene eseguito, è necessario accedere, come illustrato nell'esempio seguente:

kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

NAME                                STATUS   ROLES   AGE    VERSION
aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11

Usare il controllo degli accessi in base al ruolo di Azure per l'autorizzazione Kubernetes con kubelogin

Il servizio Azure Kubernetes ha creato il plug-in kubelogin per sbloccare altri scenari, ad esempio account di accesso non interattivi, versioni kubectl precedenti o sfruttare l'accesso SSO tra più cluster senza la necessità di accedere a un nuovo cluster.

È possibile usare il plug-in kubelogin eseguendo il comando seguente:

export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig

Analogamente a kubectl, è necessario accedere la prima volta che viene eseguita, come illustrato nell'esempio seguente:

kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

NAME                                STATUS   ROLES   AGE    VERSION
aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11

Pulire le risorse

Elimina assegnazione ruolo

# List role assignments
az role assignment list --scope $AKS_ID --query [].id -o tsv

# Delete role assignments
az role assignment delete --ids <LIST OF ASSIGNMENT IDS>

Eliminare la definizione del ruolo

az role definition delete -n "AKS Deployment Reader"

Eliminare un gruppo di risorse e un cluster del servizio Azure Kubernetes

az group delete -n myResourceGroup

Passaggi successivi

Per altre informazioni sull'autenticazione, l'autorizzazione, il controllo degli accessi in base al ruolo di Kubernetes e il controllo degli accessi in base al ruolo di Azure, vedere: