Usare il controllo degli accessi in base al ruolo di Azure per l'autorizzazione Kubernetes
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.
Nota
Quando si usa l’autenticazione integrata tra Microsoft Entra ID e il servizio Azure Kubernetes (AKS), è possibile usare utenti, gruppi o entità servizio di Microsoft Entra come soggetti in controllo degli accessi in base al ruolo di Kubernetes (RBAC di Kubernetes). Con questa funzionalità non è necessario gestire le identità utente e le credenziali per Kubernetes in modo separato. Tuttavia, è comunque necessario configurare e gestire separatamente il controllo degli accessi in base al ruolo di Azure e il controllo degli accessi in base al ruolo di 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 esempioMicrosoft.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
.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATION
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
.export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keys
L'output dovrebbe essere simile all'esempio di output 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
Abilitare il controllo degli accessi in base al ruolo di Azure per l'autorizzazione Kubernetes su un cluster del servizio Azure Kubernetes esistente usando il comando
az aks update
con il flag--enable-azure-rbac
.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --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 --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
Ruoli predefiniti del servizio Azure Kubernetes
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. |
Creare assegnazioni di ruolo per l'accesso al cluster
Ottenere l'ID risorsa del servizio Azure Kubernetes usando il comando
az aks show
.AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output 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. L'esempio seguente crea un'assegnazione di ruolo per il ruolo amministratore del controllo degli accessi in base al ruolo del servizio Azure Kubernetes.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>
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 comedeploy-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 filedeploy-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 --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Ora è possibile usare
kubectl
per gestire il cluster. Ad esempio, è possibile elencare i nodi nel cluster usandokubectl get nodes
.kubectl get nodes
Output di esempio:
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 gli 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.
Usare il plug-in
kubelogin
eseguendo il comando seguente:export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig
Ora è possibile usare
kubectl
per gestire il cluster. Ad esempio, è possibile elencare i nodi nel cluster usandokubectl get nodes
.kubectl get nodes
Output di esempio:
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
Usando il comando
az role assignment list
, elencare le assegnazioni di ruolo.az role assignment list --scope $AKS_ID --query [].id --output tsv
Usando il comando
az role assignment delete
, eliminare le assegnazioni di ruolo.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Eliminare la definizione del ruolo
Usando il comando
az role definition delete
, eliminare la definizione di ruolo personalizzato.az role definition delete --name "AKS Deployment Reader"
Eliminare un gruppo di risorse e un cluster del servizio Azure Kubernetes
Usando il comando
az group delete
, eliminare il gruppo di risorse e il cluster del servizio Azure Kubernetes.az group delete --name $RESOURCE_GROUP --yes --no-wait
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:
Azure Kubernetes Service