Delen via


Azure RBAC gebruiken in Kubernetes-clusters met Azure Arc

Kubernetes ClusterRoleBinding- en RoleBinding-objecttypen helpen bij het definiëren van autorisatie in Kubernetes. Met deze functie kunt u Microsoft Entra-id en roltoewijzingen in Azure gebruiken om autorisatiecontroles op het cluster te beheren. Met Azure-roltoewijzingen kunt u nauwkeurig bepalen welke gebruikers Kubernetes-objecten kunnen lezen, schrijven en verwijderen, zoals implementatie, pod en service.

Zie Azure RBAC in Kubernetes met Azure Arc voor een conceptueel overzicht van deze functie.

Vereisten

  • Installeer of upgrade de Azure CLI naar de nieuwste versie.

  • Installeer de nieuwste versie van connectedk8s de Azure CLI-extensie:

    az extension add --name connectedk8s
    

    Als de extensie al is geïnstalleerd, kunt u deze connectedk8s bijwerken naar de nieuwste versie met behulp van de volgende opdracht:

    az extension update --name connectedk8s
    
  • Verbind een bestaand door Azure Arc-ingeschakeld Kubernetes-cluster:

Notitie

U kunt deze functie niet instellen voor Red Hat OpenShift of voor beheerde Kubernetes-aanbiedingen van cloudproviders, zoals Elastic Kubernetes Service of Google Kubernetes Engine, waar de gebruiker geen toegang heeft tot de API-server van het cluster. Voor AKS-clusters (Azure Kubernetes Service) is deze functie systeemeigen beschikbaar en hoeft het AKS-cluster niet te worden verbonden met Azure Arc.

Azure RBAC inschakelen in het cluster

  1. Haal de MSI-identiteit van het cluster op door de volgende opdracht uit te voeren:

    az connectedk8s show -g <resource-group> -n <connected-cluster-name>
    
  2. Haal de id (identity.principalId) op uit de uitvoer en voer de volgende opdracht uit om de rol managed identity CheckAccess Reader van het Verbinding maken cluster toe te wijzen aan de msi van het cluster:

    az role assignment create --role "Connected Cluster Managed Identity CheckAccess Reader" --assignee "<Cluster MSI ID>" --scope <cluster ARM ID>
    
  3. Schakel op rollen gebaseerd toegangsbeheer van Azure (RBAC) in op uw Kubernetes-cluster met Azure Arc door de volgende opdracht uit te voeren:

    az connectedk8s enable-features -n <clusterName> -g <resourceGroupName> --features azure-rbac
    

    Notitie

    Voordat u de voorgaande opdracht uitvoert, moet u ervoor zorgen dat het kubeconfig bestand op de computer verwijst naar het cluster waarop u de Azure RBAC-functie inschakelt.

    Gebruik --skip-azure-rbac-list deze opdracht met de voorgaande opdracht voor een door komma's gescheiden lijst met gebruikersnamen, e-mailberichten en OpenID-verbindingen die autorisatiecontroles ondergaan met behulp van Systeemeigen ClusterRoleBinding Kubernetes en RoleBinding objecten in plaats van Azure RBAC.

Algemeen cluster waarop geen afstemmingsroutine wordt uitgevoerd op de apiserver specificatie

  1. SSH in elk hoofdknooppunt van het cluster en voer de volgende stappen uit:

    Als uw kube-apiserver een statische pod is:

    1. Het azure-arc-guard-manifests geheim in de kube-system naamruimte bevat twee bestanden: guard-authn-webhook.yaml en guard-authz-webhook.yaml. Kopieer deze bestanden naar de /etc/guard map van het knooppunt.

      sudo mkdir -p /etc/guard
      kubectl get secrets azure-arc-guard-manifests -n kube-system -o json | jq -r '.data."guard-authn-webhook.yaml"' | base64 -d > /etc/guard/guard-authn-webhook.yaml
      kubectl get secrets azure-arc-guard-manifests -n kube-system -o json | jq -r '.data."guard-authz-webhook.yaml"' | base64 -d > /etc/guard/guard-authz-webhook.yaml
      
    2. Open het apiserver manifest in de bewerkingsmodus:

      sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
      
    3. Voeg de volgende specificatie toe onder volumes:

      - name: azure-rbac
          hostPath:
          path: /etc/guard
          type: Directory
      
    4. Voeg de volgende specificatie toe onder volumeMounts:

      - mountPath: /etc/guard
          name: azure-rbac
          readOnly: true
      

    Als uw kube-apiserver een niet-statische pod is:

    1. Open het apiserver manifest in de bewerkingsmodus:

      sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
      
    2. Voeg de volgende specificatie toe onder volumes:

      - name: azure-rbac
          secret:
          secretName: azure-arc-guard-manifests
      
    3. Voeg de volgende specificatie toe onder volumeMounts:

      - mountPath: /etc/guard
          name: azure-rbac
          readOnly: true
      
  2. Voeg de volgende apiserver argumenten toe:

    - --authentication-token-webhook-config-file=/etc/guard/guard-authn-webhook.yaml
    - --authentication-token-webhook-cache-ttl=5m0s
    - --authorization-webhook-cache-authorized-ttl=5m0s
    - --authorization-webhook-config-file=/etc/guard/guard-authz-webhook.yaml
    - --authorization-webhook-version=v1
    - --authorization-mode=Node,RBAC,Webhook
    

    Als het Kubernetes-cluster versie 1.19.0 of hoger is, moet u ook het volgende apiserver argument instellen:

    - --authentication-token-webhook-version=v1
    
  3. Sla de editor op en sluit deze om de apiserver pod bij te werken.

Cluster gemaakt met behulp van cluster-API

  1. Kopieer het beveiligingsgeheim dat verificatie- en autorisatiewebhookconfiguratiebestanden van het workloadcluster op uw computer bevat:

    kubectl get secret azure-arc-guard-manifests -n kube-system -o yaml > azure-arc-guard-manifests.yaml
    
  2. Wijzig het namespace veld in het bestand azure-arc-guard-manifests.yaml in de naamruimte in het beheercluster waarin u de aangepaste resources toepast voor het maken van workloadclusters.

  3. Dit manifest toepassen:

    kubectl apply -f azure-arc-guard-manifests.yaml
    
  4. Bewerk het object door het KubeadmControlPlane volgende uit te voeren kubectl edit kcp <clustername>-control-plane:

    1. Voeg het volgende fragment toe onder files:

      - contentFrom:
          secret:
            key: guard-authn-webhook.yaml
            name: azure-arc-guard-manifests
        owner: root:root
        path: /etc/kubernetes/guard-authn-webhook.yaml
        permissions: "0644"
      - contentFrom:
          secret:
            key: guard-authz-webhook.yaml
            name: azure-arc-guard-manifests
        owner: root:root
        path: /etc/kubernetes/guard-authz-webhook.yaml
        permissions: "0644"
      
    2. Voeg het volgende fragment toe onder apiServer>extraVolumes:

      - hostPath: /etc/kubernetes/guard-authn-webhook.yaml
          mountPath: /etc/guard/guard-authn-webhook.yaml
          name: guard-authn
          readOnly: true
      - hostPath: /etc/kubernetes/guard-authz-webhook.yaml
          mountPath: /etc/guard/guard-authz-webhook.yaml
          name: guard-authz
          readOnly: true
      
    3. Voeg het volgende fragment toe onder apiServer>extraArgs:

      authentication-token-webhook-cache-ttl: 5m0s
      authentication-token-webhook-config-file: /etc/guard/guard-authn-webhook.yaml
      authentication-token-webhook-version: v1
      authorization-mode: Node,RBAC,Webhook
      authorization-webhook-cache-authorized-ttl: 5m0s
      authorization-webhook-config-file: /etc/guard/guard-authz-webhook.yaml
      authorization-webhook-version: v1
      
    4. Sla het object op en sluit het KubeadmControlPlane bij. Wacht tot deze wijzigingen worden weergegeven in het workloadcluster.

Roltoewijzingen maken voor gebruikers voor toegang tot het cluster

Eigenaren van de Kubernetes-resource met Azure Arc kunnen ingebouwde rollen of aangepaste rollen gebruiken om andere gebruikers toegang te verlenen tot het Kubernetes-cluster.

Ingebouwde rollen

Rol Beschrijving
Azure Arc Kubernetes Viewer Staat alleen-lezentoegang toe om de meeste objecten in een naamruimte te zien. Deze rol staat het weergeven van geheimen niet toe, omdat read machtigingen voor geheimen toegang tot ServiceAccount referenties in de naamruimte mogelijk maken. Met deze referenties wordt op zijn beurt API-toegang via die ServiceAccount waarde toegestaan (een vorm van escalatie van bevoegdheden).
Azure Arc Kubernetes Writer 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 elke ServiceAccount waarde in de naamruimte, zodat deze kan worden gebruikt om de API-toegangsniveaus van elke ServiceAccount waarde in de naamruimte te verkrijgen.
Azure Arc Kubernetes-Beheer Hiermee staat u beheerderstoegang toe. Het is bedoeld om te worden verleend binnen een naamruimte via RoleBinding. Als u deze functie gebruikt RoleBinding, wordt lees-/schrijftoegang tot de meeste resources in een naamruimte toegestaan, 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.
Azure Arc Kubernetes-cluster Beheer Hiermee kan superuser elke actie op elke resource uitvoeren. Wanneer u deze gebruikt ClusterRoleBinding, krijgt u volledige controle over elke resource in het cluster en in alle naamruimten. Wanneer u deze gebruikt RoleBinding, krijgt u volledige controle over elke resource in de naamruimte van de rolbinding, inclusief de naamruimte zelf.

U kunt roltoewijzingen maken die zijn gericht op het Kubernetes-cluster met Azure Arc in Azure Portal in het deelvenster Toegangsbeheer (IAM) van de clusterresource. U kunt ook de volgende Azure CLI-opdrachten gebruiken:

az role assignment create --role "Azure Arc Kubernetes Cluster Admin" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID

In deze opdrachten AZURE-AD-ENTITY-ID kan een gebruikersnaam (bijvoorbeeld testuser@mytenant.onmicrosoft.com) of zelfs de appId waarde van een service-principal zijn.

Hier volgt een ander voorbeeld van het maken van een roltoewijzing die is gericht op een specifieke naamruimte binnen het cluster:

az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID/namespaces/<namespace-name>

Notitie

U kunt roltoewijzingen maken die zijn gericht op het cluster met behulp van Azure Portal of De Azure CLI. Alleen Azure CLI kan echter worden gebruikt voor het maken van roltoewijzingen binnen het bereik van naamruimten.

Aangepaste rollen

U kunt ervoor kiezen om uw eigen roldefinitie te maken voor gebruik in roltoewijzingen.

Doorloop het volgende voorbeeld van een roldefinitie waarmee een gebruiker alleen implementaties kan lezen. Zie de volledige lijst met gegevensacties die u kunt gebruiken om een roldefinitie te maken voor meer informatie.

Kopieer het volgende JSON-object naar een bestand met de naam custom-role.json. Vervang de <subscription-id> tijdelijke aanduiding door de werkelijke abonnements-id. De aangepaste rol maakt gebruik van een van de gegevensacties en stelt u in staat om alle implementaties in het bereik (cluster of naamruimte) weer te geven waar de roltoewijzing wordt gemaakt.

{
    "Name": "Arc Deployment Viewer",
    "Description": "Lets you view all deployments in cluster/namespace.",
    "Actions": [],
    "NotActions": [],
    "DataActions": [
        "Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
    ],
    "NotDataActions": [],
    "assignableScopes": [
        "/subscriptions/<subscription-id>"
    ]
}
  1. Maak de roldefinitie door de volgende opdracht uit te voeren vanuit de map waarin u custom-role.json hebt opgeslagen:

    az role definition create --role-definition @custom-role.json
    
  2. Maak een roltoewijzing met behulp van deze aangepaste roldefinitie:

    az role assignment create --role "Arc Deployment Viewer" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID/namespaces/<namespace-name>
    

Kubectl configureren met gebruikersreferenties

Er zijn twee manieren om het kubeconfig-bestand op te halen dat u nodig hebt voor toegang tot het cluster:

  • U gebruikt het cluster Verbinding maken functie (az connectedk8s proxy) van het Kubernetes-cluster met Azure Arc.
  • De clusterbeheerder deelt het kubeconfig-bestand met elke andere gebruiker.

Clusterverbinding gebruiken

Voer de volgende opdracht uit om het proxyproces te starten:

az connectedk8s proxy -n <clusterName> -g <resourceGroupName>

Nadat het proxyproces is uitgevoerd, kunt u een ander tabblad in de console openen om uw aanvragen naar het cluster te verzenden.

Een gedeeld kubeconfig-bestand gebruiken

Voor het gebruik van een gedeelde kubeconfig zijn enigszins verschillende stappen vereist, afhankelijk van uw Kubernetes-versie.

  1. Voer de volgende opdracht uit om de referenties voor de gebruiker in te stellen. Geef serverApplicationId op als 6256c85f-0aad-4d50-b960-e6e9b21efe35 en clientApplicationId als 3f4439ff-e698-4d6d-84fe-09c9d574f06b:

    kubectl config set-credentials <testuser>@<mytenant.onmicrosoft.com> \
    --auth-provider=azure \
    --auth-provider-arg=environment=AzurePublicCloud \
    --auth-provider-arg=client-id=<clientApplicationId> \
    --auth-provider-arg=tenant-id=<tenantId> \
    --auth-provider-arg=apiserver-id=<serverApplicationId>
    
  2. Open het kubeconfig-bestand dat u eerder hebt gemaakt. Controleer onder contextsof de context die is gekoppeld aan het cluster verwijst naar de gebruikersreferenties die u in de vorige stap hebt gemaakt. Voer de volgende opdracht uit om de huidige context in te stellen op deze gebruikersreferenties:

    kubectl config set-context --current=true --user=<testuser>@<mytenant.onmicrosoft.com>
    
  3. Voeg de instelling voor de configuratiemodus toe onderconfig>user:

    name: testuser@mytenant.onmicrosoft.com
    user:
        auth-provider:
        config:
            apiserver-id: $SERVER_APP_ID
            client-id: $CLIENT_APP_ID
            environment: AzurePublicCloud
            tenant-id: $TENANT_ID
            config-mode: "1"
        name: azure
    

    Notitie

    Exec-invoegtoepassing is een Kubernetes-verificatiestrategie waarmee u een externe opdracht kunt kubectl uitvoeren om gebruikersreferenties te ontvangen waarnaar moet worden verzonden apiserver. Vanaf Kubernetes versie 1.26 is de standaard-invoegtoepassing voor Azure-autorisatie niet meer opgenomen in client-go en kubectl. Als u met latere versies de exec-invoegtoepassing wilt gebruiken om gebruikersreferenties te ontvangen, moet u Azure Kubelogin gebruiken, een client-go referentie-invoegtoepassing (exec) waarmee Azure-verificatie wordt geïmplementeerd.

  4. Installeer Azure Kubelogin:

    • Volg de installatie-instructies voor Azure Kubelogin voor Windows of Mac.

    • Voor Linux of Ubuntu downloadt u de nieuwste versie van kubelogin en voert u vervolgens de volgende opdrachten uit:

      curl -LO https://github.com/Azure/kubelogin/releases/download/"$KUBELOGIN_VERSION"/kubelogin-linux-amd64.zip 
      
      unzip kubelogin-linux-amd64.zip 
      
      sudo mv bin/linux_amd64/kubelogin /usr/local/bin/ 
      
      sudo chmod +x /usr/local/bin/kubelogin 
      
  5. Kubelogin kan worden gebruikt voor verificatie met clusters met Azure Arc door een PoP-token (Proof-Of-Possession) aan te vragen. Converteer de kubeconfig met behulp van kubelogin om de juiste aanmeldingsmodus te gebruiken. Voor aanmelding met apparaatcode met een Microsoft Entra-gebruiker zijn de opdrachten bijvoorbeeld als volgt:

    export KUBECONFIG=/path/to/kubeconfig
    
    kubelogin convert-kubeconfig --pop-enabled --pop-claims 'u=<ARM ID of cluster>"
    

Aanvragen verzenden naar het cluster

  1. Voer een kubectl opdracht uit. Voorbeeld:

    • kubectl get nodes
    • kubectl get pods
  2. Nadat u wordt gevraagd om verificatie op basis van een browser, kopieert u de aanmeldings-URL van het apparaat (https://microsoft.com/devicelogin) en opent u deze in uw webbrowser.

  3. Voer de code in die op de console wordt afgedrukt. Kopieer en plak de code op uw terminal in de prompt voor verificatie-invoer van het apparaat.

  4. Voer de gebruikersnaam (testuser@mytenant.onmicrosoft.com) en het bijbehorende wachtwoord in.

  5. Als er een foutbericht als volgt wordt weergegeven, betekent dit dat u niet gemachtigd bent om toegang te krijgen tot de aangevraagde resource:

    Error from server (Forbidden): nodes is forbidden: User "testuser@mytenant.onmicrosoft.com" cannot list resource "nodes" in API group "" at the cluster scope: User doesn't have access to the resource in Azure. Update role assignment to allow access.
    

    Een beheerder moet een nieuwe roltoewijzing maken waarmee deze gebruiker toegang heeft tot de resource.

Voorwaardelijke toegang gebruiken met Microsoft Entra-id

Wanneer u Microsoft Entra ID integreert met uw Kubernetes-cluster met Azure Arc, kunt u ook voorwaardelijke toegang gebruiken om de toegang tot uw cluster te beheren.

Notitie

Voorwaardelijke toegang van Microsoft Entra is een Microsoft Entra ID P2-mogelijkheid.

Een voorbeeld van beleid voor voorwaardelijke toegang maken voor gebruik met het cluster:

  1. Zoek en selecteer microsoft Entra-id boven aan De Azure-portal.

  2. Selecteer Bedrijfstoepassingen in het menu voor Microsoft Entra-id aan de linkerkant.

  3. Selecteer Voorwaardelijke toegang in het menu voor bedrijfstoepassingen aan de linkerkant.

  4. Selecteer Beleid>nieuw beleid in het menu voor voorwaardelijke toegang aan de linkerkant.

    Schermopname die laat zien hoe u beleid voor voorwaardelijke toegang toevoegt in Azure Portal.

  5. Voer een naam in voor het beleid, zoals arc-k8s-policy.

  6. Selecteer Gebruikers en groepen. Kies Onder Opnemen de optie Gebruikers en groepen selecteren. Kies vervolgens de gebruikers en groepen waarop u het beleid wilt toepassen. Kies voor dit voorbeeld dezelfde Microsoft Entra-groep met beheerderstoegang tot uw cluster.

    Schermopname van het selecteren van gebruikers of groepen om het beleid voor voorwaardelijke toegang toe te passen.

  7. Selecteer Cloud-apps of -acties. Kies bij Opnemen Apps selecteren. Zoek en selecteer vervolgens de servertoepassing die u eerder hebt gemaakt.

    Schermopname die laat zien hoe u een servertoepassing selecteert in Azure Portal.

  8. Selecteer Verlenen onder Besturingselementen voor toegang. Selecteer Toegang verlenen>Vereisen dat het apparaat moet worden gemarkeerd als compatibel.

    Schermopname van het toestaan van alleen compatibele apparaten in Azure Portal.

  9. Selecteer onder Beleid inschakelen de optie Maken>.

    Schermopname van het inschakelen van beleid voor voorwaardelijke toegang in Azure Portal.

Open het cluster opnieuw. Voer bijvoorbeeld de kubectl get nodes opdracht uit om knooppunten in het cluster weer te geven:

kubectl get nodes

Volg de instructies om u opnieuw aan te melden. In een foutbericht wordt aangegeven dat u bent aangemeld, maar uw beheerder vereist dat het apparaat dat toegang aanvraagt, wordt beheerd door Microsoft Entra ID om toegang te krijgen tot de resource. Volg vervolgens deze stappen:

  1. Ga in Azure Portal naar Microsoft Entra-id.

  2. Selecteer Enterprise-toepassingen. Selecteer vervolgens onder Activiteit aanmeldingen.

  3. Een vermelding bovenaan toont Mislukt voor status en geslaagd voor voorwaardelijke toegang. Selecteer de vermelding en selecteer vervolgens Voorwaardelijke toegang in Details. U ziet dat uw beleid voor voorwaardelijke toegang wordt vermeld.

    Schermopname van een mislukte aanmeldingsvermelding in Azure Portal.

Just-In-Time-clustertoegang configureren met Microsoft Entra-id

Een andere optie voor clustertoegangsbeheer is het gebruik van Privileged Identity Management (PIM) voor Just-In-Time-aanvragen.

Notitie

Microsoft Entra PIM is een Microsoft Entra ID P2-mogelijkheid. Zie de prijshandleiding voor meer informatie over Microsoft Entra ID-SKU's.

Voer de volgende stappen uit om Just-In-Time-toegangsaanvragen voor uw cluster te configureren:

  1. Zoek en selecteer microsoft Entra-id boven aan De Azure-portal.

  2. Noteer de tenant-id. Voor de rest van deze instructies verwijzen we naar die id als <tenant-id>.

    Schermopname van details van Microsoft Entra-id in Azure Portal.

  3. Selecteer in het menu voor Microsoft Entra-id aan de linkerkant onder Beheren de optie Nieuwe groep groepen>.

  4. Zorg ervoor dat Beveiliging is geselecteerd voor groepstype. Voer een groepsnaam in, zoals myJITGroup. Selecteer Ja onder Microsoft Entra-rollen die aan deze groep (preview) kunnen worden toegewezen. Selecteer Ten slotte Maken.

    Schermopname met details voor de nieuwe groep in Azure Portal.

  5. U gaat terug naar de pagina Groepen . Selecteer de zojuist gemaakte groep en noteer de object-id. Voor de rest van deze instructies verwijzen we naar deze id als <object-id>.

    Schermopname van de object-id voor de nieuwe groep in Azure Portal.

  6. Terug in Azure Portal selecteert u in het menu voor Activiteit aan de linkerkant Privileged Access (preview). Selecteer vervolgens Privileged Access inschakelen.

    Schermopname van selecties voor het inschakelen van bevoegde toegang in Azure Portal.

  7. Selecteer Opdrachten toevoegen om toegang te verlenen.

    Schermopname die laat zien hoe u actieve toewijzingen toevoegt in Azure Portal.

  8. Selecteer een rol van Lid en selecteer de gebruikers en groepen aan wie u clustertoegang wilt verlenen. Een groepsbeheerder kan deze toewijzingen op elk gewenst moment wijzigen. Wanneer u klaar bent om verder te gaan, selecteert u Volgende.

    Schermopname die laat zien hoe u toewijzingen toevoegt in Azure Portal.

  9. Kies een toewijzingstype Actief, kies de gewenste duur en geef een reden op. Wanneer u klaar bent om door te gaan, selecteert u Toewijzen. Zie Geschiktheid toewijzen voor een bevoorrechte toegangsgroep (preview) in Privileged Identity Management voor meer informatie over toewijzingstypen.

    Schermopname van toewijzingseigenschappen in Azure Portal.

Nadat u de toewijzingen hebt gemaakt, controleert u of Just-In-Time-toegang werkt door toegang te krijgen tot het cluster. Gebruik bijvoorbeeld de kubectl get nodes opdracht om knooppunten in het cluster weer te geven:

kubectl get nodes

Noteer de verificatievereiste en volg de stappen om te verifiëren. Als de verificatie is geslaagd, ziet u uitvoer die er ongeveer als volgt uit ziet:

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

NAME      STATUS   ROLES    AGE      VERSION
node-1    Ready    agent    6m36s    v1.18.14
node-2    Ready    agent    6m42s    v1.18.14
node-3    Ready    agent    6m33s    v1.18.14

Volgende stappen