Usare il controllo degli accessi in base al ruolo di Azure per l'autorizzazione kubernetes
Si applica a: Servizio Azure Kubernetes in Locale di Azure, versione 23H2
Gli amministratori dell'infrastruttura possono usare il controllo degli accessi in base al ruolo di Azure per controllare chi può accedere al file kubeconfig e alle autorizzazioni di cui dispone. Gli operatori Kubernetes possono interagire con i cluster Kubernetes usando lo strumento kubectl in base alle autorizzazioni indicate. L'interfaccia della riga di comando di Azure offre un modo semplice per ottenere le credenziali di accesso e il file di configurazione kubeconfig per connettersi ai cluster del servizio Azure Kubernetes usando kubectl.
Quando si usa l'autenticazione integrata tra Microsoft Entra ID e servizio Azure Kubernetes, è possibile usare utenti, gruppi o entità servizio di Microsoft Entra come soggetti nel controllo degli accessi in base al ruolo di 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 descrive come usare il controllo degli accessi in base al ruolo di Azure per l'autorizzazione del cluster Kubernetes con l'ID Microsoft Entra e le assegnazioni di ruolo di Azure.
Per una panoramica concettuale, vedere Controllo degli accessi in base al ruolo di Azure per l'autorizzazione kubernetes per il servizio Azure Kubernetes abilitato da Azure Arc.
Operazioni preliminari
Prima di iniziare, verificare di aver soddisfatto i prerequisiti seguenti:
Il servizio Azure Kubernetes nella versione 23H2 supporta attualmente l'abilitazione del controllo degli accessi in base al ruolo di Azure solo durante la creazione del cluster Kubernetes. Non è possibile abilitare il controllo degli accessi in base al ruolo di Azure dopo la creazione del cluster Kubernetes.
Installare la versione più recente delle estensioni dell'interfaccia della riga di comando di Azure aksarc e connectedk8s . Si noti che è necessario eseguire l'estensione aksarc versione 1.1.1 o successiva per abilitare il controllo degli accessi in base al ruolo di Azure. Eseguire
az --version
per trovare la versione corrente. Se è necessario installare o aggiornare l'interfaccia della riga di comando di Azure, vedere Installare l'interfaccia della riga di comando di Azure.az extension add --name aksarc az extension add --name connectedk8s
Se l'estensione
aksarc
è già stata installata, aggiornare l'estensione alla versione più recente:az extension update --name aksarc az extension update --name connectedk8s
Per interagire con i cluster Kubernetes, è necessario installare kubectl e kubelogin.
Sono necessarie le autorizzazioni seguenti per abilitare il controllo degli accessi in base al ruolo di Azure durante la creazione di un cluster Kubernetes:
- Per creare un cluster Kubernetes, è necessario il ruolo collaboratore servizio Azure Kubernetes Arc.
- Per usare il
--enable-azure-rbac
parametro, è necessario il ruolo Amministratore Controllo di accesso basato su ruoli per l'accesso all'autorizzazione Microsoft.Authorization/roleAssignments/write. Per altre informazioni, vedere Ruoli predefiniti di Azure. - La propagazione delle nuove assegnazioni di ruolo può richiedere fino a cinque minuti, e possono essere aggiornate dal server di autorizzazione.
Dopo aver abilitato il controllo degli accessi in base al ruolo di Azure, è possibile accedere al cluster Kubernetes con le autorizzazioni fornite usando la modalità diretta o la modalità proxy.
- Per accedere al cluster Kubernetes direttamente usando il
az aksarc get-credentials
comando, è necessaria l'autorizzazione Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, inclusa nell'autorizzazione del ruolo utente del cluster arc di servizio Azure Kubernetes. - Per accedere al cluster Kubernetes da qualsiasi posizione con una modalità proxy usando il
az connectedk8s proxy
comando o dalla portale di Azure, è necessaria l'azione Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, inclusa nell'autorizzazione ruolo utente del cluster Kubernetes con abilitazione di Azure Arc. Nel frattempo, è necessario verificare che gli agenti e il computer che eseguono il processo di onboarding soddisfino i requisiti di rete specificati nei requisiti di rete kubernetes abilitati per Azure Arc.
- Per accedere al cluster Kubernetes direttamente usando il
Per usare kubectl, è possibile accedervi usando il controllo degli accessi in base al ruolo di Azure o il gruppo di amministratori di AAD.
- Per usare kubectl con il controllo degli accessi in base al ruolo di Azure, è necessario il ruolo Visualizzatore Kubernetes di Azure Arc con ambito alla risorsa cluster connessa.
- Per usare kubectl con il gruppo di amministrazione di AAD, non è necessario alcun ruolo specifico, ma è necessario assicurarsi di essere in uno dei gruppi nell'elenco dei gruppi di componenti aggiuntivi amministratore della risorsa cluster connessa.
Passaggio 1: Creare un cluster Kubernetes abilitato per il controllo degli accessi in base al ruolo di Azure
È possibile creare un cluster Kubernetes abilitato per il controllo degli accessi in base al ruolo di Azure per l'autorizzazione e un ID Microsoft Entra per l'autenticazione.
az aksarc create -n $aks_cluster_name -g $resource_group_name --custom-location $customlocation_ID --vnet-ids $logicnet_Id --generate-ssh-keys --enable-azure-rbac
Il comando viene completato dopo pochi minuti e vengono restituite informazioni in formato JSON sul cluster.
Passaggio 2: Creare assegnazioni di ruolo per consentire agli utenti di accedere al cluster
Il servizio Azure Kubernetes abilitato da Arc fornisce i cinque ruoli predefiniti seguenti. Sono simili ai ruoli predefiniti di Kubernetes con alcune differenze, ad esempio il supporto dei CRL. Vedi l'elenco completo delle azioni consentite da ogni ruolo predefinito di Azure.
Ruolo | Descrizione |
---|---|
Utente del cluster Kubernetes abilitato per Azure Arc | Consente di recuperare il file kubeconfig basato su Cluster Connect per gestire i cluster da qualsiasi posizione. |
Visualizzatore di Kubernetes con abilitazione di Azure Arc | Consente l'accesso in sola lettura per visualizzare la maggior parte degli oggetti in uno spazio dei nomi. Non consente la visualizzazione dei segreti, perché l'autorizzazione di lettura per i segreti consente l'accesso alle credenziali ServiceAccount nello spazio dei nomi. Queste credenziali a loro volta consentono l'accesso all'API tramite tale valore ServiceAccount (una forma di escalation dei privilegi). |
Ruolo con autorizzazioni di scrittura per Kubernetes con abilitazione di Azure Arc | Consente l'accesso in lettura/scrittura alla maggior parte degli oggetti in uno spazio dei nomi. Non consente la visualizzazione o la modifica di ruoli o associazioni di ruolo. Tuttavia, questo ruolo consente l'accesso ai segreti e l'esecuzione di pod come qualsiasi valore ServiceAccount nello spazio dei nomi, in modo che possa essere usato per ottenere i livelli di accesso api di qualsiasi valore ServiceAccount nello spazio dei nomi. |
Amministratore di Kubernetes con abilitazione di Azure Arc | Consente l'accesso amministratore. Deve essere concesso all'interno di uno spazio dei nomi tramite RoleBinding. Se viene usato in RoleBinding, consente l'accesso in lettura/scrittura alla maggior parte delle risorse in uno spazio dei nomi, 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 del cluster di Kubernetes con abilitazione di Azure Arc | Consente l'accesso "superuser" per eseguire qualsiasi azione su qualsiasi risorsa. Quando viene usato in ClusterRoleBinding, offre il controllo completo su ogni risorsa nel cluster e in tutti gli spazi dei nomi. Quando lo si usa in RoleBinding, fornisce il controllo completo su ogni risorsa nello spazio dei nomi dell'associazione di ruoli, incluso lo spazio dei nomi stesso. |
È possibile usare il az role assignment create
comando per creare assegnazioni di ruolo.
Ottenere prima di tutto per $ARM-ID
il cluster di destinazione a cui si vuole assegnare un ruolo.
$ARM_ID = (az connectedk8s show -g "$resource_group_name" -n $aks_cluster_name --query id -o tsv)
Usare quindi il az role assignment create
comando per assegnare ruoli al cluster Kubernetes. È necessario specificare dal $ARM_ID
primo passaggio e per assignee-object-id
questo passaggio. assignee-object-id
Può essere un ID Microsoft Entra o un ID client dell'entità servizio.
L'esempio seguente assegna il ruolo Visualizzatore Kubernetes di Azure Arc al cluster Kubernetes:
az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <assignee-object-id> --scope $ARM_ID
In questo esempio l'ambito è l'ID di Azure Resource Manager del cluster. Può anche essere il gruppo di risorse che contiene il cluster Kubernetes.
Creare definizioni del ruolo personalizzate
È possibile scegliere di creare una definizione di ruolo personalizzata da usare nelle assegnazioni di ruolo.
L'esempio seguente mostra una definizione di ruolo che consente a un utente di leggere solo le distribuzioni. Per altre informazioni, vedere l'elenco completo delle azioni sui dati che è possibile usare per costruire una definizione del ruolo. Per altre informazioni sulla creazione di un ruolo personalizzato, vedere Passaggi per creare un ruolo personalizzato
Per creare definizioni di ruolo personalizzate, copiare l'oggetto JSON seguente in un file denominato custom-role.json. Sostituire il segnaposto <subscription-id>
con l'ID della sottoscrizione effettivo. Il ruolo personalizzato usa una delle azioni di dati e consente di visualizzare tutte le distribuzioni nell'ambito (cluster o spazio dei nomi) in cui viene creata l'assegnazione di ruolo.
{
"Name": "AKS Arc Deployment Reader",
"Description": "Lets you view all deployments in cluster/namespace.",
"Actions": [],
"NotActions": [],
"DataActions": [
"Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
],
"NotDataActions": [],
"assignableScopes": [
"/subscriptions/<YOUR SUBSCRIPTION ID>"
]
}
Per informazioni sui ruoli personalizzati e su come crearli, vedere Ruoli personalizzati di Azure.
Creare la definizione del ruolo usando il az role definition create
comando , impostando il --role-definition
parametro 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 az role assignment create
comando :
az role assignment create --role "AKS Arc Deployment Reader" --assignee <assignee-object-id> --scope $ARM_ID
Passaggio 3: Accedere al cluster Kubernetes
È ora possibile accedere al cluster Kubernetes con le autorizzazioni fornite, usando la modalità diretta o la modalità proxy.
Accedere al cluster con kubectl (modalità diretta)
Per accedere al cluster Kubernetes con le autorizzazioni fornite, l'operatore Kubernetes necessita di Microsoft Entra kubeconfig, che è possibile ottenere usando il az aksarc get-credentials
comando . Questo comando fornisce l'accesso a kubeconfig basato su amministratore, nonché a kubeconfig basato sull'utente. Il file kubeconfig basato sull'amministratore contiene segreti e deve essere archiviato e ruotato periodicamente in modo sicuro. D'altra parte, microsoft Entra ID kubeconfig basato sull'utente non contiene segreti e può essere distribuito agli utenti che si connettono dai computer client.
Per eseguire questo comando dell'interfaccia della riga di comando di Azure, è necessaria l'autorizzazione Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, inclusa nell'autorizzazione del ruolo utente del cluster arc servizio Azure Kubernetes:
az aksarc get-credentials -g "$resource_group_name" -n $aks_cluster_name --file <file-name>
È ora possibile usare kubectl per gestire il cluster. Ad esempio, è possibile elencare i nodi nel cluster usando kubectl get nodes
. La prima volta che viene eseguita, è necessario eseguire l'accesso, come illustrato nell'esempio seguente:
kubectl get nodes
Accedere al cluster da un dispositivo client (modalità proxy)
Per accedere al cluster Kubernetes da qualsiasi posizione con una modalità proxy usando az connectedk8s proxy
il comando , è necessaria l'autorizzazione ruolo utente del cluster Kubernetes/connectedClusters/listClusterUserCredential/action inclusa in Ruolo utente del cluster Kubernetes abilitato per Azure Arc.
Eseguire i passaggi seguenti in un altro dispositivo client:
Accedere con l'autenticazione di Microsoft Entra
Ottenere il cluster connect kubeconfig necessario per comunicare con il cluster ovunque (anche dall'esterno del firewall che circonda il cluster):
az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
Nota
Questo comando apre il proxy e blocca la shell corrente.
In una sessione diversa della shell, usare
kubectl
per inviare richieste al cluster:kubectl get pods -A
Verrà visualizzata una risposta dal cluster contenente l'elenco di tutti i pod nello spazio dei nomi default
.
Per altre informazioni, vedere Accedere al cluster da un dispositivo client.
Pulire le risorse
Elimina assegnazione ruolo
# List role assignments
az role assignment list --scope $ARM_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 Arc Deployment Reader"
Passaggi successivi
- Controllo degli accessi in base al ruolo di Azure
- Opzioni di accesso e identità per il servizio Azure Kubernetes abilitato da Azure Arc
- Creare un'entità servizio di Azure con l'interfaccia della riga di comando Azure
- Autorizzazioni di Azure disponibili per Hybrid + Multicloud