Condividi tramite


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 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

  1. 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
    
  2. 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

  1. 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)
    
  2. 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.

  1. 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>"
        ]
    }
    
  2. 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 
    
  3. 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

  1. 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
    
  2. Ora è possibile usare kubectl per gestire il cluster. Ad esempio, è possibile elencare i nodi nel cluster usando kubectl 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.

  1. Usare il plug-in kubelogin eseguendo il comando seguente:

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. Ora è possibile usare kubectl per gestire il cluster. Ad esempio, è possibile elencare i nodi nel cluster usando kubectl 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

  1. Usando il comando az role assignment list, elencare le assegnazioni di ruolo.

    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. 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: