Delen via


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 minste v1.24.0is. 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.

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

  1. 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: ["*"]
    
  2. 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
    
  3. 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 als groupObjectId:

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  4. 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.

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

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:

  1. Meld u aan met Microsoft Entra-verificatie.

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

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

Volgende stappen