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:
- Als u nog geen cluster hebt verbonden, gebruikt u onze quickstart.
- Werk uw agents bij naar de nieuwste versie.
Notitie
Azure RBAC is niet beschikbaar voor Red Hat OpenShift of beheerde Kubernetes-aanbiedingen waarbij gebruikerstoegang tot de API-server is beperkt (bijvoorbeeld Amazon Elastic Kubernetes Service (EKS), Google Kubernetes Engine (GKE)).
Azure RBAC biedt momenteel geen ondersteuning voor Kubernetes-clusters die werken op ARM64-architectuur. Gebruik Kubernetes RBAC voor het beheren van toegangsbeheer voor Kubernetes-clusters op basis van ARM64.
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
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>
Haal de id (
identity.principalId
) op uit de uitvoer en voer de volgende opdracht uit om de rol Managed Identity CheckAccess Reader voor verbonden clusters toe te wijzen aan de cluster-MSI:az role assignment create --role "Connected Cluster Managed Identity CheckAccess Reader" --assignee "<Cluster MSI ID>" --scope <cluster ARM ID>
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 SysteemeigenClusterRoleBinding
Kubernetes enRoleBinding
objecten in plaats van Azure RBAC.
Algemeen cluster waarop geen afstemmingsroutine wordt uitgevoerd op de apiserver
specificatie
SSH in elk hoofdknooppunt van het cluster en voer de volgende stappen uit:
Als uw
kube-apiserver
een statische pod is:Het
azure-arc-guard-manifests
geheim in dekube-system
naamruimte bevat twee bestanden:guard-authn-webhook.yaml
enguard-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
Open het
apiserver
manifest in de bewerkingsmodus:sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
Voeg de volgende specificatie toe onder
volumes
:- hostPath path: /etc/guard type: Directory name: azure-rbac
Voeg de volgende specificatie toe onder
volumeMounts
:- mountPath: /etc/guard name: azure-rbac readOnly: true
Als uw
kube-apiserver
een niet-statische pod is:Open het
apiserver
manifest in de bewerkingsmodus:sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
Voeg de volgende specificatie toe onder
volumes
:- name: azure-rbac secret: secretName: azure-arc-guard-manifests
Voeg de volgende specificatie toe onder
volumeMounts
:- mountPath: /etc/guard name: azure-rbac readOnly: true
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
Sla de editor op en sluit deze om de
apiserver
pod bij te werken.
Cluster gemaakt met behulp van cluster-API
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
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.Dit manifest toepassen:
kubectl apply -f azure-arc-guard-manifests.yaml
Bewerk het object door het
KubeadmControlPlane
volgende uit te voerenkubectl edit kcp <clustername>-control-plane
: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"
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
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
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-beheerder | 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-clusterbeheerder | 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>"
]
}
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
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 de functie Cluster Connect (
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.
Voer de volgende opdracht uit om de referenties voor de gebruiker in te stellen. Geef
serverApplicationId
op als6256c85f-0aad-4d50-b960-e6e9b21efe35
enclientApplicationId
als3f4439ff-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>
Open het kubeconfig-bestand dat u eerder hebt gemaakt. Controleer onder
contexts
of 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>
Voeg de instelling voor de configuratiemodus toe onder
config
>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 verzondenapiserver
. Vanaf Kubernetes versie 1.26 is de standaard-invoegtoepassing voor Azure-autorisatie niet meer opgenomen inclient-go
enkubectl
. Als u met latere versies de exec-invoegtoepassing wilt gebruiken om gebruikersreferenties te ontvangen, moet u Azure Kubelogin gebruiken, eenclient-go
referentie-invoegtoepassing (exec) waarmee Azure-verificatie wordt geïmplementeerd.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
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
Voer een
kubectl
opdracht uit. Voorbeeld:kubectl get nodes
kubectl get pods
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.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.
Voer de gebruikersnaam (
testuser@mytenant.onmicrosoft.com
) en het bijbehorende wachtwoord in.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:
Zoek en selecteer microsoft Entra-id boven aan De Azure-portal.
Selecteer Bedrijfstoepassingen in het menu voor Microsoft Entra-id aan de linkerkant.
Selecteer Voorwaardelijke toegang in het menu voor bedrijfstoepassingen aan de linkerkant.
Selecteer Beleid>nieuw beleid in het menu voor voorwaardelijke toegang aan de linkerkant.
Voer een naam in voor het beleid, zoals arc-k8s-policy.
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.
Selecteer Cloud-apps of -acties. Kies bij Opnemen Apps selecteren. Zoek en selecteer vervolgens de servertoepassing die u eerder hebt gemaakt.
Selecteer Verlenen onder Besturingselementen voor toegang. Selecteer Toegang verlenen>Vereisen dat het apparaat moet worden gemarkeerd als compatibel.
Selecteer onder Beleid inschakelen de optie Maken>.
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:
Ga in Azure Portal naar Microsoft Entra-id.
Selecteer Enterprise-toepassingen. Selecteer vervolgens onder Activiteit aanmeldingen.
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.
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:
Zoek en selecteer microsoft Entra-id boven aan De Azure-portal.
Noteer de tenant-id. Voor de rest van deze instructies verwijzen we naar die id als
<tenant-id>
.Selecteer in het menu voor Microsoft Entra-id aan de linkerkant onder Beheren de optie Nieuwe groep groepen>.
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.
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>
.Terug in Azure Portal selecteert u in het menu voor Activiteit aan de linkerkant Privileged Access (preview). Selecteer vervolgens Privileged Access inschakelen.
Selecteer Opdrachten toevoegen om toegang te verlenen.
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.
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.
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
- Maak veilig verbinding met het cluster met behulp van Cluster Connect.
- Lees meer over de architectuur van Azure RBAC in Kubernetes met Arc.