Använda rollbaserad åtkomstkontroll i Azure för att definiera åtkomst till Kubernetes-konfigurationsfilen i Azure Kubernetes Service (AKS)
Du kan interagera med Kubernetes-kluster med hjälp av kubectl
verktyget. Azure CLI är ett enkelt sätt att hämta åtkomstautentiseringsuppgifterna och kubeconfig-konfigurationsfilen för att ansluta till dina AKS-kluster med hjälp av kubectl
. Du kan använda rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att begränsa vem som kan få åtkomst till kubeconfig-filen och de behörigheter de har.
Den här artikeln visar hur du tilldelar Azure-roller som begränsar vem som kan hämta konfigurationsinformationen för ett AKS-kluster.
Innan du börjar
- Den här artikeln förutsätter att du har ett befintligt AKS-kluster. Om du behöver ett AKS-kluster skapar du ett med Hjälp av Azure CLI, Azure PowerShell eller Azure Portal.
- Den här artikeln kräver också att du kör Azure CLI version 2.0.65 eller senare. Kör
az --version
för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
Tillgängliga behörigheter för klusterroller
När du interagerar med ett AKS-kluster med verktyget kubectl
definierar en konfigurationsfil, som kallas kubeconfig, klusteranslutningsinformation. Den här konfigurationsfilen lagras vanligtvis i ~/.kube/config. Flera kluster kan definieras i den här kubeconfig-filen . Du kan växla mellan kluster med hjälp av kubectl config use-context
kommandot .
Med az aks get-credentials
kommandot kan du hämta autentiseringsuppgifterna för ett AKS-kluster och sammanfoga dessa autentiseringsuppgifter i kubeconfig-filen . Du kan använda Azure RBAC för att styra åtkomsten till dessa autentiseringsuppgifter. Med de här Azure-rollerna kan du definiera vem som kan hämta kubeconfig-filen och vilka behörigheter de har i klustret.
Det finns två Azure-roller som du kan använda för en Microsoft Entra-användare eller -grupp:
Administratörsroll för Azure Kubernetes-tjänstkluster
- Tillåter åtkomst till
Microsoft.ContainerService/managedClusters/listClusterAdminCredential/action
API-anrop. Det här API-anropet visar autentiseringsuppgifterna för klusteradministratören. - Laddar ned kubeconfig för klustretAdmin-rollen.
- Tillåter åtkomst till
Användarroll för Azure Kubernetes Service-kluster
- Tillåter åtkomst till
Microsoft.ContainerService/managedClusters/listClusterUserCredential/action
API-anrop. Det här API-anropet visar autentiseringsuppgifterna för klustrets användare. - Laddar ned kubeconfig för clusterUser-rollen.
- Tillåter åtkomst till
Kommentar
I kluster som använder Microsoft Entra-ID har användare med rollen clusterUser en tom kubeconfig-fil som uppmanar till en inloggning. När de har loggat in har användarna åtkomst baserat på sina användar- eller gruppinställningar för Microsoft Entra. Användare med klustretAdmin-rollen har administratörsåtkomst.
På kluster som inte använder Microsoft Entra-ID har rollen clusterUser samma effekt av clusterAdmin-rollen .
Tilldela rollbehörigheter till en användare eller grupp
Om du vill tilldela en av de tillgängliga rollerna måste du hämta resurs-ID:t för AKS-klustret och ID:t för Microsoft Entra-användarkontot eller -gruppen med hjälp av följande steg:
- Hämta klusterresurs-ID
az aks show
:t med kommandot för klustret med namnet myAKSCluster i resursgruppen myResourceGroup . Ange ett eget kluster- och resursgruppnamn efter behov. - Använd kommandona
az account show
ochaz ad user show
för att hämta ditt användar-ID. - Tilldela en roll med kommandot
az role assignment create
.
I följande exempel tilldelas administratörsrollen för Azure Kubernetes-tjänstkluster till ett enskilt användarkonto:
# 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"
Om du vill tilldela behörigheter till en Microsoft Entra-grupp uppdaterar du parametern --assignee
som visas i föregående exempel med objekt-ID:t för gruppen i stället för användaren.
Använd kommandot för att hämta objekt-ID:t för en grupp az ad group show
. Följande kommando hämtar objekt-ID:t för Microsoft Entra-gruppen med namnet appdev:
az ad group show --group appdev --query objectId -o tsv
Viktigt!
I vissa fall, till exempel Microsoft Entra-gästanvändare, skiljer sig user.name i kontot från 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
I det här fallet anger du värdet för ACCOUNT_UPN till userPrincipalName från Microsoft Entra-användaren. Om ditt konto till exempel user.name är user@contoso.comser den här åtgärden ut som i följande exempel:
ACCOUNT_UPN=$(az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv)
Hämta och verifiera konfigurationsinformationen
När rollerna har tilldelats använder du az aks get-credentials
kommandot för att hämta kubeconfig-definitionen för ditt AKS-kluster. I följande exempel hämtas autentiseringsuppgifterna --admin , som fungerar korrekt om användaren har beviljats rollen Klusteradministratör:
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin
Du kan sedan använda kubectl config view
kommandot för att kontrollera att kontexten för klustret visar att administratörskonfigurationsinformationen har tillämpats.
$ kubectl config view
Dina utdata bör se ut ungefär som följande exempelutdata:
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
Ta bort rollbehörigheter
Om du vill ta bort rolltilldelningar använder du az role assignment delete
kommandot . Ange det konto-ID och klusterresurs-ID som du fick i föregående steg. Om du har tilldelat rollen till en grupp i stället för en användare anger du lämpligt gruppobjekt-ID i stället för kontoobjekt-ID för parametern --assignee
.
az role assignment delete --assignee $ACCOUNT_ID --scope $AKS_CLUSTER
Nästa steg
För förbättrad säkerhet vid åtkomst till AKS-kluster, integrera Microsoft Entra-autentisering.
Azure Kubernetes Service