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 eller kubelogin.
  • 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

  1. Skapa en Azure-resursgrupp.
# Create an Azure resource group
az group create --name myResourceGroup --location centralus
  1. 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.

  1. Hämta användarautentiseringsuppgifterna för att komma åt klustret.
 az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
  1. Följ anvisningarna för att logga in.

  2. 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
  1. 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 och properties.disableLocalAccounts inställt på truemisslyckas 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:

  1. Gå till sidan Azure Active Directory i Azure Portal.
  2. Välj Företagsprogram i det vänstra fönstret.
  3. På sidan Företagsprogram går du till den vänstra rutan och väljer Villkorsstyrd åtkomst.
  4. På sidan Villkorlig åtkomst går du till den vänstra rutan och väljer Principer och sedan Ny princip. Lägga till en princip för villkorsstyrd åtkomst
  5. Ange ett namn för principen, till exempel aks-policy.
  6. 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. Välja användare eller grupper för att tillämpa principen för villkorsstyrd åtkomst
  7. 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. Välja Azure Kubernetes Service AD-server för att tillämpa principen för villkorsstyrd åtkomst
  8. Under Åtkomstkontroller > Bevilja väljer du Bevilja åtkomst, Kräv att enheten markeras som kompatibel och väljer Välj. Välja att endast tillåta kompatibla enheter för principen för villkorsstyrd åtkomst
  9. Bekräfta inställningarna och ange Aktivera princip till . Aktivera principen för villkorsstyrd åtkomst
  10. 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.

  1. 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
    
  2. Följ anvisningarna för att logga in.

  3. Visa noder i klustret med kubectl get nodes kommandot :

    kubectl get nodes
    
  4. 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.

  5. 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. Skärmbild som visar misslyckad inloggningspost på grund av principen för villkorsstyrd åtkomst.

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:

  1. I Azure Portal går du till Azure Active Directory.
  2. 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 en webbläsare visas Azure Portal-skärmen för Azure Active Directory med klientorganisationens ID markerat.
  3. I det vänstra fönstret under Hantera väljer du Grupper och sedan Ny grupp. Visar skärmen Azure Portal Active Directory-grupper med alternativet Ny grupp markerat.
  4. 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. Visar skärmen Azure Portal nya gruppskapande.
  5. 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>. Visar skärmen Azure Portal för gruppen som just skapats och markerar objekt-ID:t
  6. 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>
    
  7. 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. Sidan Azure Portal Privilegierad åtkomst (förhandsversion) visas med
  8. Om du vill bevilja åtkomst väljer du Lägg till tilldelningar. Skärmen Azure Portal Privilegierad åtkomst (förhandsversion) efter aktivering visas. Alternativet Lägg till tilldelningar är markerat.
  9. 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. Skärmen Lägg till tilldelningar i Azure Portal visas, där en exempelanvändare har valt att läggas till som medlem. Alternativet Nästa är markerat.
  10. 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. Skärmen Lägg till tilldelningar i Azure Portal visas. En tilldelningstyp av

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å

  1. Integrera ditt AKS-kluster med Azure RBAC.
  2. 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>
  1. 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