Toegang beheren met Microsoft Entra ID en Kubernetes RBAC voor Windows Server
Van toepassing op: AKS op Azure Stack HCI 22H2, AKS op Windows Server
Azure Kubernetes Service (AKS) kan worden geconfigureerd 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 Arc. 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, hebt u de volgende vereisten nodig:
- Een Kubernetes-cluster dat is gemaakt in AKS Arc. Als u uw cluster wilt instellen, raadpleegt u de instructies voor het gebruik van Windows Admin Center of PowerShell om AKS te implementeren.
- Azure Arc-verbinding. U moet een Azure Arc-verbinding met uw Kubernetes-cluster hebben. Zie Een Azure Kubernetes-service in azure lokaal cluster verbinden met Kubernetes met Azure Arc voor meer informatie over het inschakelen van Azure Arc.
- U hebt toegang nodig tot de volgende opdrachtregelprogramma's:
- Azure CLI en de connectedk8s-extensie. Azure CLI is een set opdrachten die worden gebruikt voor het maken en beheren van Azure-resources. 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 Azure CLI installeren voor installatie-instructies. - Kubectl. Met dit opdrachtregelprogramma van Kubernetes kunt u opdrachten uitvoeren die gericht zijn op uw Kubernetes-clusters. Als u wilt controleren of u kubectl hebt geïnstalleerd, opent u een opdrachtprompt en typt u:
kubectl version --client
. Zorg ervoor dat uw kubectl-clientversie ten minste versie v1.24.0 is. Zie kubectl voor installatie-instructies. - PowerShell en de AksHci PowerShell-module. PowerShell is een platformoverschrijdende oplossing voor taakautomatisering die bestaat uit een opdrachtregelshell, een scripttaal en een framework voor configuratiebeheer. Als u AKS Arc hebt geïnstalleerd, hebt u toegang tot de AksHci PowerShell-module.
- 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.
- Azure CLI en de connectedk8s-extensie. Azure CLI is een set opdrachten die worden gebruikt voor het maken en beheren van Azure-resources. Als u wilt controleren of u de Azure CLI hebt, opent u een opdrachtregelprogramma en typt u:
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.
Haal de referenties van de clusterbeheerder op met behulp van de
Get-AksHciCredential
opdracht:Get-AksHciCredential -name <name-of-your-cluster>
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 als hetgroupObjectId
volgende gebruikt: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>
Werken met clusterbronnen met behulp van Microsoft Entra-id's
Test nu de verwachte machtigingen wanneer u resources in een Kubernetes-cluster maakt en beheert. In deze voorbeelden plant en bekijkt u pods in de toegewezen naamruimte van de gebruiker. Vervolgens probeert u pods buiten de toegewezen naamruimte te plannen en weer te geven.
Meld u aan bij Azure met het
$AKSDEV_ID
gebruikersaccount dat u hebt opgegeven als invoer voor deaz ad group member add
opdracht. Voer deaz connectedk8s proxy
opdracht uit om een kanaal naar het cluster te openen:az connectedk8s proxy -n <cluster-name> -g <resource-group>
Nadat het proxykanaal tot stand is gebracht, opent u een andere sessie en plant u een NGINX-pod met behulp van de
kubectl run
opdracht in de dev-naamruimte :kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
Wanneer NGINX is gepland, ziet u de volgende uitvoer:
pod/nginx-dev created
Gebruik nu de
kubectl get pods
opdracht om pods in dedev
naamruimte weer te geven:kubectl get pods --namespace dev
Wanneer NGINX wordt uitgevoerd, ziet u de volgende uitvoer:
NAME READY STATUS RESTARTS AGE nginx-dev 1/1 Running 0 4m
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