Kontrollera åtkomst med hjälp av Azure AD och Kubernetes RBAC-Azure Kubernetes Service på Azure Stack HCI och Windows Server
Gäller för: AKS på Azure Stack HCI och Windows Server
Azure Kubernetes Service (AKS) på Azure Stack HCI och Windows Server kan konfigureras att använda Azure Active Directory (Azure AD) för användarautentisering. I den här konfigurationen loggar du in på ett AKS-kluster med en Azure AD autentiseringstoken. När du har autentiserats kan du använda den inbyggda rollbaserade åtkomstkontrollen för Kubernetes (Kubernetes RBAC) för att hantera åtkomst till namnrymder och klusterresurser baserat på en användares identitets- eller gruppmedlemskap.
Den här artikeln visar hur du styr åtkomsten med Kubernetes RBAC i ett AKS-kluster baserat på Azure AD gruppmedlemskap. Du skapar en demogrupp och användare i Azure AD. Sedan skapar du roller och rollbindningar i AKS-klustret för att bevilja rätt behörigheter för att skapa och visa resurser.
Förutsättningar
Innan du konfigurerar Kubernetes RBAC med hjälp av Azure AD identitet behöver du:
Ett AKS-kluster med AKS på Azure Stack HCI och Windows Server
Du behöver ett AKS-kluster med AKS på Azure Stack HCI och Windows Server. Om du behöver konfigurera klustret hittar du instruktioner för hur du använder Windows Admin Center eller PowerShell för att distribuera AKS på Azure Stack HCI och Windows Server.
Azure Arc-anslutning
Du måste ha en Azure Arc-anslutning till ditt AKS-kluster på Azure Stack HCI och Windows Server. Anvisningar om hur du aktiverar Azure Arc finns i Ansluta en Azure Kubernetes Service på Azure Stack HCI-kluster till Azure Arc-aktiverade Kubernetes.
Du behöver åtkomst till följande kommandoradsverktyg:
Azure CLI
Kommandoradsgränssnitt för Azure (CLI) är en uppsättning kommandon som används för att skapa och hantera Azure-resurser. Om du vill kontrollera om du har Azure CLI öppnar du ett kommandoradsverktyg och skriver:
az -v
.Anvisningar om hur du installerar finns i Så här installerar du Azure CLI.
Kubectl
Med kommandoradsverktyget Kubernetes, kubectl, kan du köra kommandon som riktar sig mot dina Kubernetes-kluster. Om du vill kontrollera om du har kubectl öppnar du ett kommandoradsverktyg och skriver:
kubectl version --client
. Kontrollera att kubectl-klientversionen är minstv1.24.0
.Anvisningar finns i kubectl.
PowerShell och AksHci PowerShell-modulen
PowerShell är en plattformsoberoende lösning för uppgiftsautomatisering som består av ett kommandoradsgränssnitt, ett skriptspråk och ett ramverk för konfigurationshantering. Om du har installerat AKS på Azure Stack HCI och Windows Server har du åtkomst till AksHci PowerShell-modulen.
Valfria första steg
Om du inte redan har en Azure AD grupp som innehåller medlemmar kanske du vill skapa en grupp och lägga till några medlemmar för att följa anvisningarna i den här artikeln.
Om du vill demonstrera hur du arbetar med Azure AD och Kubernetes RBAC kan du skapa en Azure AD grupp för programutvecklare som kan användas för att visa hur Kubernetes RBAC och Azure AD styra åtkomsten till klusterresurser. I produktionsmiljöer kan du använda befintliga användare och grupper i en Azure AD klientorganisation.
Skapa en demogrupp i Azure AD
Skapa först gruppen i Azure AD i klientorganisationen för programutvecklare med kommandot az ad group create. I följande exempel loggar du in på din Azure-klient och skapar sedan en grupp med namnet appdev:
az login
az ad group create --display-name appdev --mail-nickname appdev
Lägga till användare i din grupp
När exempelgruppen har skapats i Azure AD för våra programutvecklare ska vi lägga till en användare i appdev
gruppen. Om du vill testa Kubernetes RBAC-integreringen i slutet av artikeln loggar du in på AKS-klustret med det här användarkontot.
Lägg till en användare i appdev-gruppen som skapades i föregående avsnitt med kommandot az ad group member add . Om du har avslutat sessionen måste du återansluta till Azure med .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
Skapa en anpassad Kubernetes RBAC-rollbindning på AKS-klusterresursen för gruppen Azure AD
Konfigurera AKS-klustret så att din Azure AD grupp får åtkomst till AKS-klustret. Om du vill lägga till en grupp och användare för att följa stegen i den här guiden kan du läsa Skapa demogrupper i Azure AD.
Hämta autentiseringsuppgifterna för klusteradministratören med hjälp av kommandot Get-AksHciCredential .
Get-AksHciCredential -name <name-of-your-cluster>
Skapa ett namnområde i AKS-klustret med hjälp av kommandot kubectl create namespace . I följande exempel skapas ett namnutvecklingsnamn för namnområdet:
kubectl create namespace dev
I Kubernetes definierar roller de behörigheter som ska beviljas och Rollbindningar tillämpar behörigheterna på önskade användare eller grupper. Dessa tilldelningar kan tillämpas på ett visst namnområde eller i ett helt kluster. Mer information finns i Använda Kubernetes RBAC-auktorisering.
Skapa en roll för utvecklingsnamnområdet . Den här rollen ger namnområdet fullständiga behörigheter. I produktionsmiljöer kanske du vill ange mer detaljerade behörigheter för olika användare eller grupper.
Skapa en fil med namnet
role-dev-namespace.yaml
och klistra in följande 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: ["*"]
Skapa rollen med kommandot kubectl apply och ange filnamnet för YAML-manifestet:
kubectl apply -f role-dev-namespace.yaml
Hämta resurs-ID:t för appdev-gruppen med kommandot az ad group show . Den här gruppen anges som ämnet för en Rollbindning i nästa steg.
az ad group show --group appdev --query objectId -o tsv
Az ad-gruppen returnerar det värde som du ska använda som
groupObjectId
.38E5FA30-XXXX-4895-9A00-050712E3673A
Skapa en fil med namnet
rolebinding-dev-namespace.yaml
och klistra in följande YAML-manifest. Du etablerar Rollbindning för appdev-gruppen för att användarole-dev-namespace
rollen för namnområdesåtkomst. På den sista raden ersättergroupObjectId
du med gruppobjekt-ID:t som genereras avaz ad group show
kommandot :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
Tips
Om du vill skapa Rollbindning för en enskild användare anger
kind: User
och ersättergroupObjectId
du med användarens huvudnamn (UPN) i exemplet.Skapa RoleBinding med kommandot kubectl apply och ange filnamnet för YAML-manifestet:
kubectl apply -f rolebinding-dev-namespace.yaml
rolebinding.rbac.authorization.k8s.io/dev-user-access created
Använda inbyggda Kubernetes RBAC-roller för din AKS-klusterresurs
Kubernetes tillhandahåller också inbyggda användarinriktade roller. Dessa inbyggda roller omfattar:
- Superanvändarroller (klusteradministratör)
- Roller som är avsedda att beviljas klusteromfattande med Hjälp av ClusterRoleBindings
- Roller som är avsedda att beviljas inom vissa namnområden med hjälp av rollbindningar (administratör, redigera, visa)
Mer information om inbyggda Kubernetes RBAC-roller finns i Användarinriktade Kubernetes RBAC-roller
Användarriktade roller
Standardklusterroll | StandardklusterRoleBinding | Beskrivning |
---|---|---|
klusteradministratör | system:masters group | Tillåter superanvändaråtkomst att utföra alla åtgärder på alla resurser. När den används i en ClusterRoleBinding ger den fullständig kontroll över varje resurs i klustret och i alla namnområden. När den används i en Rollbindning ger den fullständig kontroll över varje resurs i rollbindningens namnområde, inklusive själva namnområdet. |
administratör | Ingen | Tillåter administratörsåtkomst, avsedd att beviljas inom ett namnområde med hjälp av ett rollbindning. Om det används i en Rollbindning, tillåter läs-/skrivåtkomst till de flesta resurser i ett namnområde, inklusive möjligheten att skapa roller och rollbindningar inom namnområdet. Den här rollen tillåter inte skrivåtkomst till resurskvoten eller till själva namnområdet. Den här rollen tillåter inte heller skrivåtkomst till slutpunkter i kluster som skapats med Kubernetes v1.22+. Mer information finns i avsnittet Skrivåtkomst för slutpunkter . |
redigera | Ingen | Tillåter läs-/skrivåtkomst till de flesta objekt i ett namnområde. Den här rollen tillåter inte visning eller ändring av roller eller rollbindningar. Den här rollen tillåter dock åtkomst till hemligheter och poddar som alla ServiceAccount i namnområdet, så den kan användas för att få API-åtkomstnivåerna för alla ServiceAccount i namnområdet. Den här rollen tillåter inte heller skrivåtkomst till slutpunkter i kluster som skapats med Kubernetes v1.22+. Mer information finns i avsnittet Skrivåtkomst för slutpunkter . |
visa | Ingen | Tillåter skrivskyddad åtkomst för att se de flesta objekt i ett namnområde. Det tillåter inte visning av roller eller rollbindningar. Den här rollen tillåter inte visning av hemligheter, eftersom läsning av innehållet i Hemligheter ger åtkomst till ServiceAccount-autentiseringsuppgifter i namnområdet, vilket skulle tillåta API-åtkomst som alla ServiceAccount i namnområdet (en form av behörighetseskalering). |
Använda en inbyggd Kubernetes RBAC-roll med Azure AD
Använd den inbyggda Kubernetes RBAC-rollen
view
för din Azure AD grupp:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
Använd den inbyggda
view
Kubernetes RBAC-rollen för var och en av dina Azure AD användare:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --user=<Azure AD user object ID>
Arbeta med klusterresurser med Azure AD identiteter
Testa de förväntade behörigheterna när du skapar och hanterar resurser i ett AKS-kluster. I de här exemplen schemalägger och visar du poddar i användarens tilldelade namnområde. Sedan försöker du schemalägga och visa poddar utanför det tilldelade namnområdet.
Logga in på Azure med det
$AKSDEV_ID
användarkonto som du skickade som indata tillaz ad group member add
kommandot.az connectedk8s proxy
Kör kommandot för att öppna en kanal till AKS-klustret:az connectedk8s proxy -n <cluster-name> -g <resource-group>
När proxykanalen har upprättats öppnar du en annan session och schemalägger en NGINX-podd med kommandot kubectl run i dev-namnområdet :
kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
När NGINX har schemalagts visas följande utdata:
pod/nginx-dev created
Använd nu kommandot kubectl get pods för att visa poddar i dev-namnområdet .
kubectl get pods --namespace dev
När NGINX har körts visas följande utdata:
$ kubectl get pods --namespace dev NAME READY STATUS RESTARTS AGE nginx-dev 1/1 Running 0 4m
Skapa och visa klusterresurser utanför det tilldelade namnområdet
Försök att visa poddar utanför dev-namnområdet . Använd kommandot kubectl get pods till med --all-namespaces
flaggan .
kubectl get pods --all-namespaces
Användarens gruppmedlemskap har inte en Kubernetes-roll som tillåter den här åtgärden. Utan behörighet genererar kommandot ett fel.
Error from server (Forbidden): pods is forbidden: User cannot list resource "pods" in API group "" at the cluster scope
Nästa steg
Läs mer om säkerheten med AKS på Azure Stack HCI och Windows Server, se Säkerhet i AKS på Azure Stack HCI och Windows Server