AKS-hanterad Azure Active Directory-integrering
AKS-hanterad Azure Active Directory-integrering (Azure AD) förenklar Azure AD integrationsprocessen. Tidigare var du tvungen att skapa en klient- och serverapp, och den Azure AD klientorganisationen var tvungen att bevilja katalogläsningsbehörigheter. Nu hanterar AKS-resursprovidern klient- och serverapparna åt dig.
översikt över Azure AD autentisering
Klusteradministratörer kan konfigurera rollbaserad åtkomstkontroll i Kubernetes (Kubernetes RBAC) baserat på en användares identitets- eller kataloggruppsmedlemskap. Azure AD autentisering tillhandahålls till AKS-kluster med OpenID Connect. OpenID Connect är ett identitetslager som bygger på OAuth 2.0-protokollet. Mer information om OpenID Connect finns i dokumentationen för Open ID Connect.
Läs mer om Azure AD integrationsflödet i Azure AD-dokumentationen.
Begränsningar
- AKS-hanterad Azure AD integrering kan inte inaktiveras.
- Det går inte att ändra ett AKS-hanterat Azure AD integrerat kluster till äldre Azure AD.
- Kluster utan Kubernetes RBAC aktiverat stöds inte med AKS-hanterad Azure AD integrering.
Förutsättningar
Kontrollera att du har följande förutsättningar innan du börjar:
- Azure CLI version 2.29.0 eller senare.
kubectl
, med en lägsta version av 1.18.1 ellerkubelogin
.- Om du använder helm behöver du en lägsta version av helm 3.3.
Viktigt
Du måste använda kubectl
med en lägsta version av 1.18.1 eller kubelogin
. Skillnaden mellan delversionerna av Kubernetes och kubectl
bör inte vara mer än 1 version. Du får autentiseringsproblem om du inte använder rätt version.
Använd följande kommandon för att installera kubectl och kubelogin:
sudo az aks install-cli
kubectl version --client
kubelogin --version
Använd dessa instruktioner för andra operativsystem.
Innan du börjar
Du behöver en Azure AD grupp för klustret. Den här gruppen registreras som en administratörsgrupp i klustret för att ge klusteradministratörsbehörigheter. Du kan använda en befintlig Azure AD grupp eller skapa en ny. Se till att registrera objekt-ID:t för din Azure AD grupp.
# List existing groups in the directory
az ad group list --filter "displayname eq '<group-name>'" -o table
Använd följande kommando för att skapa en ny Azure AD grupp för klusteradministratörer:
# Create an Azure AD group
az ad group create --display-name myAKSAdminGroup --mail-nickname myAKSAdminGroup
Skapa ett AKS-kluster med Azure AD aktiverat
- Skapa en Azure-resursgrupp.
# Create an Azure resource group
az group create --name myResourceGroup --location centralus
- Skapa ett AKS-kluster och aktivera administrationsåtkomst för din Azure AD grupp.
# Create an AKS-managed Azure AD cluster
az aks create -g myResourceGroup -n myManagedCluster --enable-aad --aad-admin-group-object-ids <id> [--aad-tenant-id <id>]
När ett AKS-hanterat Azure AD kluster har skapats har följande avsnitt i svarstexten:
"AADProfile": {
"adminGroupObjectIds": [
"5d24****-****-****-****-****afa27aed"
],
"clientAppId": null,
"managed": true,
"serverAppId": null,
"serverAppSecret": null,
"tenantId": "72f9****-****-****-****-****d011db47"
}
Få åtkomst till ett Azure AD aktiverat kluster
Innan du kommer åt klustret med hjälp av en Azure AD definierad grupp behöver du den inbyggda rollen Azure Kubernetes Service klusteranvändare.
- Hämta användarautentiseringsuppgifterna för att komma åt klustret.
az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
Följ anvisningarna för att logga in.
Använd kommandot kubectl
get nodes
för att visa noder i klustret.
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-15306047-0 Ready agent 102m v1.15.10
aks-nodepool1-15306047-1 Ready agent 102m v1.15.10
aks-nodepool1-15306047-2 Ready agent 102m v1.15.10
- Konfigurera rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att konfigurera andra säkerhetsgrupper för dina kluster.
Felsöka åtkomstproblem med Azure AD
Viktigt
Stegen som beskrivs i det här avsnittet kringgår normal Azure AD gruppautentisering. Använd dem bara i en nödsituation.
Om du är permanent blockerad genom att inte ha åtkomst till en giltig Azure AD grupp med åtkomst till klustret kan du fortfarande hämta administratörsautentiseringsuppgifterna för att komma åt klustret direkt.
För att kunna utföra de här stegen måste du ha åtkomst till Azure Kubernetes Service kluster Admin inbyggda rollen.
az aks get-credentials --resource-group myResourceGroup --name myManagedCluster --admin
Aktivera AKS-hanterad Azure AD integrering i ditt befintliga kluster
Du kan aktivera AKS-hanterad Azure AD integrering i ditt befintliga Kubernetes RBAC-aktiverade kluster. Se till att ange din administratörsgrupp så att den behåller åtkomsten till klustret.
az aks update -g MyResourceGroup -n MyManagedCluster --enable-aad --aad-admin-group-object-ids <id-1> [--aad-tenant-id <id>]
En lyckad aktivering av ett AKS-hanterat Azure AD kluster har följande avsnitt i svarstexten:
"AADProfile": {
"adminGroupObjectIds": [
"5d24****-****-****-****-****afa27aed"
],
"clientAppId": null,
"managed": true,
"serverAppId": null,
"serverAppSecret": null,
"tenantId": "72f9****-****-****-****-****d011db47"
}
Ladda ned användarautentiseringsuppgifter igen för att komma åt klustret genom att följa stegen här.
Uppgradera till AKS-hanterad Azure AD-integrering
Om klustret använder äldre Azure AD integrering kan du uppgradera till AKS-hanterad Azure AD integrering genom att köra följande kommando:
az aks update -g myResourceGroup -n myManagedCluster --enable-aad --aad-admin-group-object-ids <id> [--aad-tenant-id <id>]
En lyckad migrering av ett AKS-hanterat Azure AD kluster har följande avsnitt i svarstexten:
"AADProfile": {
"adminGroupObjectIds": [
"5d24****-****-****-****-****afa27aed"
],
"clientAppId": null,
"managed": true,
"serverAppId": null,
"serverAppSecret": null,
"tenantId": "72f9****-****-****-****-****d011db47"
}
Följ stegen här för att uppdatera kubeconfig för att få åtkomst till klustret.
Icke-interaktiv inloggning med kubelogin
Det finns vissa icke-interaktiva scenarier, till exempel pipelines för kontinuerlig integrering, som för närvarande inte är tillgängliga med kubectl
. Du kan använda kubelogin
för att ansluta till klustret med en icke-interaktiv autentiseringsuppgift för tjänstens huvudnamn.
Inaktivera lokala konton
När du distribuerar ett AKS-kluster aktiveras lokala konton som standard. Även när du aktiverar RBAC eller Azure AD integrering finns --admin
åtkomst fortfarande som ett alternativ för icke-granskningsbar bakdörr. Du kan inaktivera lokala konton med hjälp av parametern disable-local-accounts
. Fältet properties.disableLocalAccounts
har lagts till i API:et för det hanterade klustret för att ange om funktionen är aktiverad eller inte i klustret.
Anteckning
I kluster med Azure AD integrering aktiverat kan användare som tilldelats till en Azure AD administratörsgrupp som anges av
aad-admin-group-object-ids
fortfarande få åtkomst med autentiseringsuppgifter som inte är administratör. I kluster utan Azure AD integrering aktiverat ochproperties.disableLocalAccounts
inställt påtrue
misslyckas alla försök att autentisera med autentiseringsuppgifter för användare eller administratörer.När du har inaktiverat lokala användarkonton i ett befintligt AKS-kluster där användare kan ha autentiserats med lokala konton, måste administratören rotera klustercertifikaten för att återkalla certifikat som de kan ha haft åtkomst till. Om det här är ett nytt kluster krävs ingen åtgärd.
Skapa ett nytt kluster utan lokala konton
Om du vill skapa ett nytt AKS-kluster utan några lokala konton använder du az aks create
kommandot med disable-local-accounts
flaggan .
az aks create -g <resource-group> -n <cluster-name> --enable-aad --aad-admin-group-object-ids <aad-group-id> --disable-local-accounts
I utdata bekräftar du att lokala konton har inaktiverats genom att kontrollera att fältet properties.disableLocalAccounts
är inställt på true
.
"properties": {
...
"disableLocalAccounts": true,
...
}
Försök att hämta administratörsautentiseringsuppgifter misslyckas med ett felmeddelande som anger att funktionen förhindrar åtkomst:
az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin
Operation failed with status: 'Bad Request'. Details: Getting static credential isn't allowed because this cluster is set to disable local accounts.
Inaktivera lokala konton i ett befintligt kluster
Om du vill inaktivera lokala konton i ett befintligt AKS-kluster använder du az aks update
kommandot med parametern disable-local-accounts
.
az aks update -g <resource-group> -n <cluster-name> --enable-aad --aad-admin-group-object-ids <aad-group-id> --disable-local-accounts
I utdata bekräftar du att lokala konton har inaktiverats genom att kontrollera att fältet properties.disableLocalAccounts
är inställt på true
.
"properties": {
...
"disableLocalAccounts": true,
...
}
Försök att hämta administratörsautentiseringsuppgifter misslyckas med ett felmeddelande som anger att funktionen förhindrar åtkomst:
az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin
Operation failed with status: 'Bad Request'. Details: Getting static credential isn't allowed because this cluster is set to disable local accounts.
Återaktivera lokala konton i ett befintligt kluster
AKS stöder aktivering av ett inaktiverat lokalt konto i ett befintligt kluster med parametern enable-local
.
az aks update -g <resource-group> -n <cluster-name> --enable-aad --aad-admin-group-object-ids <aad-group-id> --enable-local
I utdata bekräftar du att lokala konton har återaktiverats genom att kontrollera att fältet properties.disableLocalAccounts
är inställt på false
.
"properties": {
...
"disableLocalAccounts": false,
...
}
Försök att hämta administratörsautentiseringsuppgifter kommer att lyckas:
az aks get-credentials --resource-group <resource-group> --name <cluster-name> --admin
Merged "<cluster-name>-admin" as current context in C:\Users\<username>\.kube\config
Använda villkorlig åtkomst med Azure AD och AKS
När du integrerar Azure AD med ditt AKS-kluster kan du också använda villkorsstyrd åtkomst för att styra åtkomsten till klustret.
Anteckning
Azure AD villkorlig åtkomst är en Azure AD Premium-funktion.
Slutför följande steg för att skapa ett exempel på en princip för villkorsstyrd åtkomst som ska användas med AKS:
- Gå till sidan Azure Active Directory i Azure Portal.
- Välj Företagsprogram i det vänstra fönstret.
- På sidan Företagsprogram går du till den vänstra rutan och väljer Villkorsstyrd åtkomst.
- På sidan Villkorlig åtkomst går du till den vänstra rutan och väljer Principer och sedan Ny princip.
- Ange ett namn för principen, till exempel aks-policy.
- Under Tilldelningar väljer du Användare och grupper. Välj de användare och grupper som du vill tillämpa principen på. I det här exemplet väljer du samma Azure AD grupp som har administratörsåtkomst till klustret.
- Under Molnappar eller åtgärder > Inkludera väljer du Välj appar. Sök efter Azure Kubernetes Service och välj sedan Azure Kubernetes Service AAD Server.
- Under Åtkomstkontroller > Bevilja väljer du Bevilja åtkomst, Kräv att enheten markeras som kompatibel och väljer Välj.
- Bekräfta inställningarna och ange Aktivera princip till På.
- Välj Skapa för att skapa och aktivera principen.
När du har skapat principen för villkorsstyrd åtkomst utför du följande steg för att kontrollera att den har listats.
Kör följande kommando för att hämta användarautentiseringsuppgifterna för att komma åt klustret:
az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
Följ anvisningarna för att logga in.
Visa noder i klustret med
kubectl get nodes
kommandot :kubectl get nodes
I Azure Portal går du till Azure Active Directory. I det vänstra fönstret väljer du Företagsprogram och sedan Under Aktivitet väljer du Inloggningar.
Observera överst i resultatet en händelse med statusen Misslyckades, och under kolumnen Villkorsstyrd åtkomst visas statusen Lyckades. Välj händelsen och välj sedan fliken Villkorsstyrd åtkomst . Observera att principen för villkorsstyrd åtkomst visas.
Konfigurera just-in-time-klusteråtkomst med Azure AD och AKS
Ett annat alternativ för klusteråtkomstkontroll är att använda Privileged Identity Management (PIM) för just-in-time-begäranden.
Anteckning
PIM är en Azure AD Premium-funktion som kräver en Premium P2 SKU. Mer information om Azure AD SKU:er finns i prisguiden.
Utför följande steg för att integrera just-in-time-åtkomstbegäranden med ett AKS-kluster med hjälp av AKS-hanterad Azure AD-integrering:
- I Azure Portal går du till Azure Active Directory.
- Välj Egenskaper. Rulla ned till fältet Klientorganisations-ID . Ditt klientorganisations-ID finns i rutan. Observera det här värdet eftersom det refereras senare i ett steg som
<tenant-id>
. - I det vänstra fönstret under Hantera väljer du Grupper och sedan Ny grupp.
- Kontrollera att grupptypen Säkerhet har valts och ange ett gruppnamn, till exempel myJITGroup. Under alternativet Azure AD roller kan tilldelas till den här gruppen (förhandsversion) väljer du Ja och sedan Skapa.
- På sidan Grupper väljer du den grupp som du nyss skapade och noterar objekt-ID:t. Detta refereras i ett senare steg som
<object-id>
. - Skapa AKS-klustret med AKS-hanterad Azure AD integrering med
az aks create
kommandot med--aad-admin-group-objects-ids
och--aad-tenant-id parameters
inkludera värdena som angavs i stegen tidigare.az aks create -g myResourceGroup -n myManagedCluster --enable-aad --aad-admin-group-object-ids <object-id> --aad-tenant-id <tenant-id>
- I Azure Portal väljer du Aktivitet i det vänstra fönstret. Välj Privilegierad åtkomst (förhandsversion) och välj sedan Aktivera privilegierad åtkomst.
- Om du vill bevilja åtkomst väljer du Lägg till tilldelningar.
- I listrutan Välj roll väljer du de användare och grupper som du vill bevilja klusteråtkomst. Dessa tilldelningar kan när som helst ändras av en gruppadministratör. Välj sedan Nästa.
- Under Tilldelningstyp väljer du Aktiv och anger sedan önskad varaktighet. Ange en motivering och välj sedan Tilldela. Mer information om tilldelningstyper finns i Tilldela berättigande för en privilegierad åtkomstgrupp (förhandsversion) i Privileged Identity Management.
När tilldelningarna har gjorts kontrollerar du att just-in-time-åtkomst fungerar genom att komma åt klustret. Ett exempel:
az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
Följ stegen för att logga in.
kubectl get nodes
Använd kommandot för att visa noder i klustret:
kubectl get nodes
Observera autentiseringskravet och följ stegen för att autentisera. Om det lyckas bör du se utdata som liknar följande utdata:
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
aks-nodepool1-61156405-vmss000000 Ready agent 6m36s v1.18.14
aks-nodepool1-61156405-vmss000001 Ready agent 6m42s v1.18.14
aks-nodepool1-61156405-vmss000002 Ready agent 6m33s v1.18.14
Använd just-in-time-åtkomst på namnområdesnivå
- Integrera ditt AKS-kluster med Azure RBAC.
- Associera den grupp som du vill integrera med just-in-time-åtkomst med ett namnområde i klustret via rolltilldelning.
az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
- Associera den grupp som du konfigurerade på namnområdesnivå med PIM för att slutföra konfigurationen.
Felsökning
Om kubectl get nodes
returnerar ett fel som liknar följande fel:
Error from server (Forbidden): nodes is forbidden: User "aaaa11111-11aa-aa11-a1a1-111111aaaaa" cannot list resource "nodes" in API group "" at the cluster scope
Kontrollera att administratören för säkerhetsgruppen har gett ditt konto en aktiv tilldelning.
Nästa steg
- Läs mer om Azure RBAC-integrering för Kubernetes-auktorisering.
- Läs mer om Azure AD integrering med Kubernetes RBAC.
- Använd kubelogin för att komma åt funktioner för Azure-autentisering som inte är tillgängliga i kubectl.
- Läs mer om aks- och Kubernetes-identitetsbegrepp.
- Använd ARM-mallar (Azure Resource Manager) för att skapa AKS-hanterade Azure AD aktiverade kluster.