Op rollen gebaseerd toegangsbeheer van Azure gebruiken om toegang tot het Kubernetes-configuratiebestand in Azure Kubernetes Service (AKS) te definiƫren

U kunt communiceren met Kubernetes-clusters met behulp van het kubectl hulpprogramma . De Azure CLI biedt een eenvoudige manier om de toegangsreferenties en configuratiegegevens op te halen om verbinding te maken met uw AKS-clusters met behulp van kubectl . Als u wilt beperken wie die Kubernetes-configuratiegegevens (kubeconfig) kan ontvangen en de machtigingen die ze vervolgens hebben, wilt beperken, kunt u op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) gebruiken.

In dit artikel wordt beschreven hoe u Azure-rollen toewijst die beperken wie de configuratiegegevens voor een AKS-cluster kan krijgen.

Voordat u begint

In dit artikel wordt ervan uitgenomen dat u een bestaand AKS-cluster hebt. Als u een AKS-cluster nodig hebt, bekijkt u de AKS-quickstart met behulp van de Azure CLI of met behulp van de Azure Portal.

Voor dit artikel moet u ook Azure CLI versie 2.0.65 of hoger uitvoeren. Voer az --version uit om de versie te bekijken. Zie Azure CLI installeren als u de CLI wilt installeren of een upgrade wilt uitvoeren.

Beschikbare machtigingen voor clusterrollen

Wanneer u met een AKS-cluster communiceert met behulp van het hulpprogramma , wordt een configuratiebestand gebruikt waarmee informatie over de kubectl clusterverbinding wordt bepaald. Dit configuratiebestand wordt doorgaans opgeslagen in ~/.kube/config. In dit kubeconfig-bestand kunnen meerdere clusters worden gedefinieerd. U schakelt tussen clusters met behulp van de opdracht kubectl config use-context.

Met de opdracht az aks get-credentials kunt u de toegangsreferenties voor een AKS-cluster op halen en deze samenvoegen in het kubeconfig-bestand. U kunt op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) gebruiken om de toegang tot deze referenties te controleren. Met deze Azure-rollen kunt u definiƫren wie het kubeconfig-bestand kan ophalen en welke machtigingen ze vervolgens binnen het cluster hebben.

De twee ingebouwde rollen zijn:

Deze Azure-rollen kunnen worden toegepast op een Azure Active Directory (AD)-gebruiker of -groep.

Notitie

Op clusters die gebruikmaken van Azure AD hebben gebruikers met de rol clusterUser een leeg kubeconfig-bestand dat om een aanmeldprompt vraagt. Nadat gebruikers zijn aangemeld, hebben ze toegang op basis van hun Azure AD-gebruikers- of -groepsinstellingen. Gebruikers met de rol clusterAdmin hebben beheerderstoegang.

Clusters die niet gebruikmaken van Azure AD, gebruiken alleen de rol clusterAdmin.

Rolmachtigingen toewijzen aan een gebruiker of groep

Als u een van de beschikbare rollen wilt toewijzen, moet u de resource-id van het AKS-cluster en de id van het Azure AD-gebruikersaccount of -groep verkrijgen. De volgende voorbeeldopdrachten:

In het volgende voorbeeld wordt de Azure Kubernetes Service clusterbeheerdersrol toegewezen aan een afzonderlijk gebruikersaccount:

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

Belangrijk

In sommige gevallen is de user.name in het account anders dan de userPrincipalName, zoals bij Gastgebruikers van Azure AD:

$ 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

In dit geval stelt u de waarde van ACCOUNT_UPN in op de userPrincipalName van de Azure AD-gebruiker. Als uw account bijvoorbeeld user.name gebruiker is, contoso.com @:

ACCOUNT_UPN=$(az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv)

Tip

Als u machtigingen wilt toewijzen aan een Azure AD-groep, moet u de parameter uit het vorige voorbeeld bijwerken met de object-id voor de groep in plaats van --assignee een gebruiker. Gebruik de opdracht az ad group show om de object-id voor een groep op te halen. In het volgende voorbeeld wordt de object-id voor de Azure AD-groep met de naam appdev opgeslagen:az ad group show --group appdev --query objectId -o tsv

U kunt de vorige toewijzing naar behoefte wijzigen in de clustergebruikersrol.

In de volgende voorbeelduitvoer ziet u dat de roltoewijzing is gemaakt:

{
  "canDelegate": null,
  "id": "/subscriptions/<guid>/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/providers/Microsoft.Authorization/roleAssignments/b2712174-5a41-4ecb-82c5-12b8ad43d4fb",
  "name": "b2712174-5a41-4ecb-82c5-12b8ad43d4fb",
  "principalId": "946016dd-9362-4183-b17d-4c416d1f8f61",
  "resourceGroup": "myResourceGroup",
  "roleDefinitionId": "/subscriptions/<guid>/providers/Microsoft.Authorization/roleDefinitions/0ab01a8-8aac-4efd-b8c2-3ee1fb270be8",
  "scope": "/subscriptions/<guid>/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster",
  "type": "Microsoft.Authorization/roleAssignments"
}

De configuratiegegevens op halen en controleren

Als Azure-rollen zijn toegewezen, gebruikt u de opdracht az aks get-credentials om de kubeconfig-definitie voor uw AKS-cluster op te halen. In het volgende voorbeeld worden de referenties --admin opgeslagen, die correct werken als aan de gebruiker de rol Clusterbeheerder is verleend:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin

U kunt vervolgens de opdracht kubectl config view gebruiken om te controleren of de context voor het cluster laat zien dat de configuratiegegevens van de beheerder zijn toegepast:

$ kubectl config view

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

Rolmachtigingen verwijderen

Als u roltoewijzingen wilt verwijderen, gebruikt u de opdracht az role assignment delete. Geef de account-id en clusterresource-id op, zoals verkregen in de vorige opdrachten. Als u de rol hebt toegewezen aan een groep in plaats van een gebruiker, geeft u de juiste groepsobject-id op in plaats van accountobject-id voor de --assignee parameter:

az role assignment delete --assignee $ACCOUNT_ID --scope $AKS_CLUSTER

Volgende stappen

Voor verbeterde beveiliging bij toegang tot AKS-clusters integreert u Azure Active Directory verificatie.