Toegang beheren met Microsoft Entra ID en Kubernetes RBAC
Van toepassing op: AKS op Azure Local, versie 23H2
U kunt Azure Kubernetes Service (AKS) configureren voor het gebruik van Microsoft Entra-id voor gebruikersverificatie. In deze configuratie meldt u zich aan bij een Kubernetes-cluster met behulp van een Microsoft Entra-verificatietoken. Zodra de verificatie is uitgevoerd, kunt u het ingebouwde op rollen gebaseerde toegangsbeheer van Kubernetes (Kubernetes RBAC) gebruiken om de toegang tot naamruimten en clusterbronnen te beheren op basis van de identiteit of groepslidmaatschap van een gebruiker.
In dit artikel wordt beschreven hoe u de toegang kunt beheren met Kubernetes RBAC in een Kubernetes-cluster op basis van microsoft Entra-groepslidmaatschap in AKS. U maakt een demogroep en gebruikers in Microsoft Entra ID. Vervolgens maakt u rollen en rolbindingen in het cluster om de juiste machtigingen te verlenen om resources te maken en weer te geven.
Vereisten
Voordat u Kubernetes RBAC instelt met behulp van Microsoft Entra-id, moet u aan de volgende vereisten voldoen:
- Een AKS die is ingeschakeld door een Azure Arc-cluster. Als u uw cluster wilt instellen, raadpleegt u de instructies voor het gebruik van Azure Portal of Azure CLI.
- Azure CLI geïnstalleerd en geconfigureerd. Zie Azure CLI installeren als u CLI wilt installeren of een upgrade wilt uitvoeren.
- Azure CLI en de connectedk8s-extensie. De Azure-opdrachtregelinterface (Azure CLI) is een set opdrachten die wordt gebruikt om Azure-resources te maken en te beheren. Als u wilt controleren of u de Azure CLI hebt, opent u een opdrachtregelprogramma en typt u:
az -v
Installeer ook de connectedk8s-extensie om een kanaal te openen naar uw Kubernetes-cluster. Zie De Azure CLI installeren voor installatie-instructies. - Kubectl. Met het opdrachtregelprogramma Kubernetes, kubectl, kunt u opdrachten uitvoeren die zijn gericht op uw Kubernetes-clusters. Als u wilt controleren of u kubectl hebt geïnstalleerd, opent u een opdrachtregelprogramma en typt u:
kubectl version --client
. Zorg ervoor dat uw kubectl-clientversie ten minstev1.24.0
is. Zie kubectl voor installatie-instructies. - U hebt toegang tot uw Kubernetes-cluster met de opgegeven machtigingen met de directe modus of proxymodus.
- Als u rechtstreeks toegang wilt krijgen tot het Kubernetes-cluster met behulp van de
az aksarc get-credentials
opdracht, hebt u de rolmachtigingen Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action nodig, die is opgenomen in de rol gebruikersmachtigingen voor Azure Kubernetes Service Arc - Voor toegang tot het Kubernetes-cluster vanaf elke locatie met een proxymodus met behulp van
az connectedk8s proxy
de opdracht hebt u de machtiging Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action nodig, die is opgenomen in de machtiging Kubernetes-clustergebruiker met Azure Arc. Ondertussen moet u controleren of de agents en de computer die het onboardingproces uitvoeren, voldoen aan de netwerkvereisten in Kubernetes-netwerkvereisten met Azure Arc.
- Als u rechtstreeks toegang wilt krijgen tot het Kubernetes-cluster met behulp van de
Optionele eerste stappen
Als u nog geen Microsoft Entra-groep met leden hebt, kunt u een groep maken en enkele leden toevoegen, zodat u de instructies in dit artikel kunt volgen.
Als u wilt laten zien hoe u werkt met Microsoft Entra ID en Kubernetes RBAC, kunt u een Microsoft Entra-groep maken voor toepassingsontwikkelaars die kunnen worden gebruikt om te laten zien hoe Kubernetes RBAC en Microsoft Entra ID de toegang tot clusterbronnen beheren. In productieomgevingen kunt u bestaande gebruikers en groepen in een Microsoft Entra-tenant gebruiken.
Een demogroep maken in Microsoft Entra-id
Maak eerst de groep in Microsoft Entra ID in uw tenant voor de toepassingsontwikkelaars met behulp van de az ad group create
opdracht. In het volgende voorbeeld wordt u gevraagd u aan te melden bij uw Azure-tenant en vervolgens een groep met de naam appdev te maken:
az login
az ad group create --display-name appdev --mail-nickname appdev
Gebruikers toevoegen aan uw groep
Voeg met de voorbeeldgroep die is gemaakt in Microsoft Entra ID voor toepassingsontwikkelaars een gebruiker toe aan de appdev
groep. U gebruikt dit gebruikersaccount om u aan te melden bij het AKS-cluster en de Kubernetes RBAC-integratie te testen.
Voeg een gebruiker toe aan de appdev-groep die in de vorige sectie is gemaakt met behulp van de az ad group member add
opdracht. Als u uw sessie afsluit, maakt u opnieuw verbinding met Azure met behulp van az login
.
$AKSDEV_ID = az ad user create --display-name <name> --password <strongpassword> --user-principal-name <name>@contoso.onmicrosoft.com
az ad group member add --group appdev --member-id $AKSDEV_ID
Een aangepaste Kubernetes RBAC-rolbinding maken op de AKS-clusterresource voor de Microsoft Entra-groep
Configureer het AKS-cluster zodat uw Microsoft Entra-groep toegang heeft tot het cluster. Als u een groep en gebruikers wilt toevoegen, raadpleegt u Demogroepen maken in Microsoft Entra-id.
Gebruik de
az aksarc get-credentials
opdracht om de referenties van de clusterbeheerder op te halen:az aksarc get-credentials --name "$aks_cluster_name" --resource-group "$resource_group_name" --admin
Maak een naamruimte in het Kubernetes-cluster met behulp van de
kubectl create namespace
opdracht. In het volgende voorbeeld wordt een naamruimte met de naamdev
gemaakt:kubectl create namespace dev
In Kubernetes definiëren rollen de machtigingen die moeten worden verleend en RoleBindings passen de machtigingen toe op de gewenste gebruikers of groepen. Deze toewijzingen kunnen worden toegepast op een bepaalde naamruimte of in een heel cluster. Zie Kubernetes RBAC-autorisatie gebruiken voor meer informatie.
Maak een rol voor de ontwikkelnaamruimte . Deze rol verleent volledige machtigingen aan de naamruimte. In productieomgevingen wilt u mogelijk gedetailleerdere machtigingen opgeven voor verschillende gebruikers of groepen.
Maak een bestand met de naam role-dev-namespace.yaml en kopieer/plak het volgende YAML-manifest:
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-full-access namespace: dev rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["*"] - apiGroups: ["batch"] resources: - jobs - cronjobs verbs: ["*"]
Maak de rol met behulp van de
kubectl apply
opdracht en geef de bestandsnaam van uw YAML-manifest op:kubectl apply -f role-dev-namespace.yaml
Haal de resource-id voor de appdev-groep op met behulp van de
az ad group show
opdracht. Deze groep wordt in de volgende stap ingesteld als het onderwerp van een RoleBinding:az ad group show --group appdev --query objectId -o tsv
De
az ad group show
opdracht retourneert de waarde die u gebruikt alsgroupObjectId
:38E5FA30-XXXX-4895-9A00-050712E3673A
Maak een bestand met de naam rolebinding-dev-namespace.yaml en kopieer/plak het volgende YAML-manifest. U stelt de rolbinding vast waarmee de appdev-groep de
role-dev-namespace
rol kan gebruiken voor toegang tot naamruimten. Vervang op de laatste regel doorgroupObjectId
de groepsobject-id die door deaz ad group show
opdracht is geproduceerd:kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-access namespace: dev roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: dev-user-full-access subjects: - kind: Group namespace: dev name: groupObjectId
Tip
Als u de RoleBinding voor één gebruiker wilt maken, geeft u
kind: User
de UPN (User Principal Name) op en vervangtgroupObjectId
u deze in het voorbeeld.Maak de RoleBinding met behulp van de
kubectl apply
opdracht en geef de bestandsnaam van uw YAML-manifest op:kubectl apply -f rolebinding-dev-namespace.yaml
rolebinding.rbac.authorization.k8s.io/dev-user-access created
Ingebouwde Kubernetes RBAC-rollen gebruiken voor uw AKS-clusterresource
Kubernetes biedt ook ingebouwde gebruikersrollen. Deze ingebouwde rollen zijn onder andere:
- Supergebruikersrollen (clusterbeheerder)
- Rollen die zijn bedoeld om clusterbreed te worden verleend met behulp van ClusterRoleBindings
- Rollen die zijn bedoeld om te worden verleend binnen bepaalde naamruimten met behulp van RoleBindings (beheerder, bewerken, weergeven)
Zie Kubernetes RBAC-gebruikersrollen voor meer informatie over ingebouwde Kubernetes RBAC-rollen.
Gebruikersgerichte rollen
Standaardclusterrole | StandaardclusterRoleBinding | Beschrijving |
---|---|---|
clusterbeheerder | system:masters group | Hiermee kan supergebruiker toegang krijgen tot elke actie op elke resource. Wanneer deze rol wordt gebruikt in een ClusterRoleBinding, krijgt deze rol volledige controle over elke resource in het cluster en in alle naamruimten. Wanneer deze wordt gebruikt in een RoleBinding, krijgt deze volledige controle over elke resource in de naamruimte van de rolbinding, inclusief de naamruimte zelf. |
beheerder | Geen | Hiermee staat u beheerderstoegang toe, die is bedoeld om binnen een naamruimte te worden verleend met behulp van een rolbinding. Als deze wordt gebruikt in een rolbinding, heeft u lees-/schrijftoegang tot de meeste resources in een naamruimte, inclusief de mogelijkheid om rollen en rolbindingen in de naamruimte te maken. Met deze rol is schrijftoegang tot het resourcequotum of de naamruimte zelf niet toegestaan. Deze rol staat ook geen schrijftoegang toe tot eindpunten in clusters die zijn gemaakt met Kubernetes v1.22+. Zie Schrijftoegang voor eindpunten voor meer informatie. |
Bewerken | Geen | Hiermee staat u lees-/schrijftoegang toe tot de meeste objecten in een naamruimte. Deze rol staat het weergeven of wijzigen van rollen of rolbindingen niet toe. Deze rol biedt echter toegang tot geheimen en actieve pods als een ServiceAccount in de naamruimte, zodat deze kan worden gebruikt om de API-toegangsniveaus van een ServiceAccount in de naamruimte te verkrijgen. Deze rol staat ook geen schrijftoegang toe tot eindpunten in clusters die zijn gemaakt met Kubernetes v1.22+. Zie Schrijftoegang voor eindpunten voor meer informatie. |
weergeven | Geen | Staat alleen-lezentoegang toe om de meeste objecten in een naamruimte te zien. Het is niet toegestaan om rollen of rolbindingen weer te geven. Deze rol staat het weergeven van geheimen niet toe, omdat het lezen van de inhoud van geheimen toegang biedt tot ServiceAccount-referenties in de naamruimte, waardoor API-toegang wordt toegestaan als een ServiceAccount in de naamruimte (een vorm van escalatie van bevoegdheden). |
Een ingebouwde Kubernetes RBAC-rol gebruiken met Microsoft Entra-id
Als u een ingebouwde Kubernetes RBAC-rol wilt gebruiken met Microsoft Entra ID, voert u de volgende stappen uit:
Pas de ingebouwde Kubernetes RBAC-rol toe op uw Microsoft Entra-groep
view
:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
Pas de ingebouwde Kubernetes RBAC-rol toe op elk van uw Microsoft Entra-gebruikers
view
:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --user=<Azure AD user object ID>
Toegang tot het Kubernetes-cluster
U hebt nu toegang tot uw Kubernetes-cluster met de opgegeven machtigingen, met behulp van de directe modus of proxymodus.
Toegang tot uw cluster met kubectl (directe modus)
Voor toegang tot het Kubernetes-cluster met de opgegeven machtigingen heeft de Kubernetes-operator de Microsoft Entra kubeconfig nodig, die u kunt krijgen met behulp van de az aksarc get-credentials
opdracht. Deze opdracht biedt toegang tot de kubeconfig op basis van beheerders, evenals een kubeconfig op basis van een gebruiker. Het kubeconfig-bestand op basis van een beheerder bevat geheimen en moet veilig worden opgeslagen en periodiek worden gedraaid. Aan de andere kant bevat de kubeconfig van de Microsoft Entra-id op basis van de gebruiker geen geheimen en kan deze worden gedistribueerd naar gebruikers die verbinding maken vanaf hun clientcomputers.
Als u deze Azure CLI-opdracht wilt uitvoeren, hebt u de rolmachtigingen microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action nodig. Deze is opgenomen in de rolmachtigingen van de Azure Kubernetes Service Arc-cluster :
az aksarc get-credentials -g $resource_group_name -n $aks_cluster_name --file <file-name>
U kunt nu kubectl gebruiken om uw cluster te beheren. U kunt bijvoorbeeld de knooppunten in uw cluster vermelden met behulp van kubectl get nodes
. De eerste keer dat u het uitvoert, moet u zich aanmelden, zoals wordt weergegeven in het volgende voorbeeld:
kubectl get nodes
Toegang tot uw cluster vanaf een clientapparaat (proxymodus)
Voor toegang tot het Kubernetes-cluster vanaf elke locatie met een proxymodus met behulp van az connectedk8s proxy
de opdracht hebt u de machtiging Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action nodig, die is opgenomen in de machtiging Kubernetes-clustergebruiker met Azure Arc.
Voer de volgende stappen uit op een ander clientapparaat:
Meld u aan met Microsoft Entra-verificatie.
Haal de clusterverbinding
kubeconfig
op die nodig is om vanaf elke locatie met het cluster te communiceren (van zelfs buiten de firewall rondom het cluster):az connectedk8s proxy -n $aks_cluster_name -g $resource_group_name
Notitie
Met deze opdracht wordt de proxy geopend en wordt de huidige shell geblokkeerd.
Gebruik
kubectl
in een andere shellsessie om aanvragen naar het cluster te verzenden:kubectl get pods -A
U ziet nu een antwoord van het cluster met de lijst met alle pods onder de default
naamruimte.
Zie Toegang tot uw cluster vanaf een clientapparaat voor meer informatie
Clusterbronnen buiten de toegewezen naamruimte maken en weergeven
Gebruik de kubectl get pods
opdracht met de --all-namespaces
vlag om pods buiten de dev-naamruimte weer te geven:
kubectl get pods --all-namespaces
Het groepslidmaatschap van de gebruiker heeft geen Kubernetes-rol die deze actie toestaat. Zonder de machtiging genereert de opdracht een fout:
Error from server (Forbidden): pods is forbidden: User cannot list resource "pods" in API group "" at the cluster scope