Delen via


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.

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.

  1. Haal de referenties van de clusterbeheerder op met behulp van de Get-AksHciCredential opdracht:

    Get-AksHciCredential -name <name-of-your-cluster>
    
  2. Maak een naamruimte in het Kubernetes-cluster met behulp van de kubectl create namespace opdracht. In het volgende voorbeeld wordt een naamruimte met de naam devgemaakt:

    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.

  3. 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: ["*"]
    
  4. 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
    
  5. 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 het groupObjectIdvolgende gebruikt:

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  6. 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 door groupObjectId de groepsobject-id die door de az 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 vervangt groupObjectId u deze in het voorbeeld.

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

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

  1. Meld u aan bij Azure met het $AKSDEV_ID gebruikersaccount dat u hebt opgegeven als invoer voor de az ad group member add opdracht. Voer de az connectedk8s proxy opdracht uit om een kanaal naar het cluster te openen:

    az connectedk8s proxy -n <cluster-name> -g <resource-group>
    
  2. 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
    
  3. Gebruik nu de kubectl get pods opdracht om pods in de dev 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

Volgende stappen