Använda en hanterad identitet i Azure Kubernetes Service (AKS)

Azure Kubernetes Service-kluster (AKS) kräver en identitet för åtkomst till Azure-resurser som lastbalanserare och hanterade diskar. Identiteten kan vara en hanterad identitet eller ett huvudnamn för tjänsten.

Den här artikeln innehåller information om hur du aktiverar följande hanterade identitetstyper i ett nytt eller befintligt AKS-kluster:

  • Systemtilldelad hanterad identitet
  • Ta med din egen användartilldelade hanterade identitet
  • Fördefinierad Kubelet-hanterad identitet

Översikt

När du distribuerar ett AKS-kluster skapas en systemtilldelad hanterad identitet automatiskt och hanteras av Azure-plattformen, så det kräver inte att du etablerar eller roterar några hemligheter. Mer information finns i Hanterade identiteter för Azure-resurser.

AKS skapar inte automatiskt ett huvudnamn för tjänsten, så du måste skapa ett. Kluster som använder ett huvudnamn för tjänsten upphör så småningom att gälla och tjänstens huvudnamn måste förnyas för att undvika att påverka klusterautentiseringen med identiteten. Att hantera tjänstens huvudnamn ökar komplexiteten, så det är enklare att använda hanterade identiteter i stället. Samma behörighetskrav gäller för både tjänstens huvudnamn och hanterade identiteter. Hanterade identiteter använder certifikatbaserad autentisering. Varje hanterad identitets autentiseringsuppgifter har en giltighetstid på 90 dagar och distribueras efter 45 dagar.

AKS använder både systemtilldelade och användartilldelade hanterade identitetstyper, och dessa identiteter är oföränderliga. Dessa identitetstyper bör inte förväxlas med en Microsoft Entra-arbetsbelastningsidentitet, som är avsedd att användas av ett program som körs på en podd.

Viktigt!

Den öppen källkod Microsoft Entra-poddhanterade identiteten (förhandsversion) i Azure Kubernetes Service blev inaktuell den 24 september 2022 och projektet arkiverades i september 2023. Mer information finns i utfasningsmeddelandet. AKS Managed-tillägget börjar fasas ut i september 2024.

Vi rekommenderar att du först läser översikten över Microsoft Entra-arbetsbelastnings-ID . Entra-arbetsbelastnings-ID-autentisering ersätter Microsoft Entra-poddhanterad identitet (förhandsversion) och är den rekommenderade metoden för att aktivera ett program som körs på en podd för att autentisera sig mot andra Azure-tjänster som stöder det.

Innan du börjar

Begränsningar

  • Klienter som flyttar eller migrerar ett hanterat identitetsaktiverat kluster stöds inte.
  • Om klustret har Microsoft Entra poddhanterad identitet (aad-pod-identity) aktiverad ändrar NMI-poddar (Node-Managed Identity) iptables för noderna för att fånga upp anrop till IMDS-slutpunkten (Azure Instance Metadata). Den här konfigurationen innebär att alla begäranden som görs till metadataslutpunkten fångas upp av NMI, även om podden inte använder aad-pod-identity. AzurePodIdentityException CRD kan konfigureras för att informera om aad-pod-identity begäranden till metadataslutpunkten som kommer från en podd som matchar etiketter som definierats i CRD bör vara proxied utan någon bearbetning i NMI. Systempoddar med kubernetes.azure.com/managedby: aks etikett i kube-system-namnområdet bör undantas genom aad-pod-identity att konfigurera AzurePodIdentityException CRD.
  • AKS stöder inte användning av en systemtilldelad hanterad identitet när du använder en anpassad privat DNS-zon.

Sammanfattning av hanterade identiteter

AKS använder flera hanterade identiteter för inbyggda tjänster och tillägg.

Identitet Name Användningsfall Standardbehörigheter Ta med din egen identitet
Kontrollplan AKS-klusternamn Används av AKS-kontrollplanskomponenter för att hantera klusterresurser, inklusive inkommande lastbalanserare och AKS-hanterade offentliga IP-adresser, Autoskalning av kluster, Azure Disk, Fil, Blob CSI-drivrutiner. Deltagarroll för nodresursgrupp Stöds
Kubelet AKS-klusternamn-agentpool Autentisering med Azure Container Registry (ACR). N/A (för kubernetes v1.15+) Stöds
Tillägg AzureNPM Ingen identitet krävs. Ej tillämpligt Nej
Tillägg Nätverksövervakning i AzureCNI Ingen identitet krävs. Ej tillämpligt Nej
Tillägg azure-policy (gatekeeper) Ingen identitet krävs. Ej tillämpligt Nej
Tillägg azure-policy Ingen identitet krävs. Ej tillämpligt Nej
Tillägg Kalikå Ingen identitet krävs. Ej tillämpligt Nej
Tillägg Instrumentpanel Ingen identitet krävs. Ej tillämpligt Nej
Tillägg programroutning Hanterar Azure DNS- och Azure Key Vault-certifikat Key Vault Secrets User-roll för Key Vault, DNZ-zondeltagareroll för DNS-zoner, Privat DNS zondeltagareroll för privata DNS-zoner Nej
Tillägg HTTPApplicationRouting Hanterar nödvändiga nätverksresurser. Läsarroll för nodresursgrupp, deltagarroll för DNS-zon Nej
Tillägg Inkommande programgateway Hanterar nödvändiga nätverksresurser. Deltagarroll för nodresursgrupp Nej
Tillägg omsagent Används för att skicka AKS-mått till Azure Monitor. Övervaka utgivarrollen för mått Nej
Tillägg Virtual-Node (ACI Anslut or) Hanterar nödvändiga nätverksresurser för Azure Container Instances (ACI). Deltagarroll för nodresursgrupp Nej
Tillägg Kostnadsanalys Används för att samla in kostnadsallokeringsdata
Arbetsbelastningsidentitet Microsoft Entra-arbetsbelastnings-ID Gör att program kan komma åt molnresurser på ett säkert sätt med Microsoft Entra-arbetsbelastnings-ID. Ej tillämpligt Nej

Aktivera hanterade identiteter i ett nytt AKS-kluster

Kommentar

AKS skapar en användartilldelad kubelet-identitet i nodresursgruppen om du inte anger en egen kubelet-hanterad identitet.

Kommentar

Om klustret redan använder hanterad identitet och identiteten har ändrats, till exempel om du uppdaterar klusteridentitetstypen från systemtilldelad till användartilldelad, finns det en fördröjning för kontrollplanskomponenter att växla till den nya identiteten. Kontrollplanskomponenter fortsätter att använda den gamla identiteten tills dess token upphör att gälla. När token har uppdaterats växlar de till den nya identiteten. Den här processen kan ta flera timmar.

  1. Skapa en Azure-resursgrupp med kommandot az group create .

    az group create --name myResourceGroup --location westus2
    
  2. Skapa ett AKS-kluster med kommandot az aks create .

    az aks create -g myResourceGroup -n myManagedCluster --enable-managed-identity
    
  3. Hämta autentiseringsuppgifter för att komma åt klustret med hjälp av az aks get-credentials kommandot .

    az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
    

Aktivera hanterade identiteter i ett befintligt AKS-kluster

Kör kommandot för att uppdatera ditt befintliga AKS-kluster som använder tjänstens huvudnamn för att använda en systemtilldelad hanterad identitet az aks update .

az aks update -g myResourceGroup -n myManagedCluster --enable-managed-identity

När du har uppdaterat klustret använder kontrollplanet och poddarna den hanterade identiteten. Kubelet fortsätter att använda ett huvudnamn för tjänsten tills du uppgraderar din agentpool. Du kan använda az aks nodepool upgrade --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --node-image-only kommandot på noderna för att uppdatera till en hanterad identitet. En uppgradering av nodpoolen orsakar stilleståndstid för ditt AKS-kluster eftersom noderna i nodpoolerna är avspärrade/tömda och omskapade.

Kommentar

Tänk på följande när du uppdaterar klustret:

  • En uppdatering fungerar bara om det finns en VHD-uppdatering att använda. Om du kör den senaste virtuella hårddisken måste du vänta tills nästa virtuella hårddisk är tillgänglig för att kunna utföra uppdateringen.

  • Azure CLI säkerställer att tilläggets behörighet har angetts korrekt efter migreringen. Om du inte använder Azure CLI för att utföra migreringsåtgärden måste du hantera addon-identitetens behörighet själv. Ett exempel på hur du använder en ARM-mall (Azure Resource Manager) finns i Tilldela Azure-roller med ARM-mallar.

  • Om klustret använde --attach-acr för att hämta från avbildningar från Azure Container Registry måste du köra az aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR resource ID> kommandot efter uppdateringen av klustret så att den nyligen skapade kubelet som används för hanterad identitet får behörighet att hämta från ACR. Annars kan du inte hämta från ACR efter uppdateringen.

Lägga till rolltilldelning för hanterad identitet

När du skapar och använder ett eget virtuellt nätverk, kopplar Azure-diskar, statiska IP-adresser, routningstabeller eller användartilldelade kubelet-identiteter där resurserna ligger utanför resursgruppen för arbetsnoden lägger Azure CLI till rolltilldelningen automatiskt. Om du använder en ARM-mall eller en annan metod måste du använda huvud-ID:t för den klusterhanterade identiteten för att utföra en rolltilldelning.

Om du inte använder Azure CLI, men du använder ditt eget virtuella nätverk, ansluter Azure-diskar, statiska IP-adresser, routningstabeller eller användartilldelade kubelet-identiteter som ligger utanför resursgruppen för arbetsnoden, rekommenderar vi att du använder användartilldelad hanterad identitet för kontrollplanet. För att kontrollplanet ska använda en systemtilldelad hanterad identitet kan vi inte hämta identitets-ID:t innan klustret skapas, vilket gör att rolltilldelningen inte börjar gälla.

Hämta huvud-ID för hanterad identitet

  • Hämta den befintliga identitetens huvud-ID med kommandot az identity show .

    az identity show --ids <identity-resource-id>
    

    Dina utdata bör likna följande exempelutdata:

    {
      "clientId": "<client-id>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity",
      "location": "eastus",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Lägg till rolltilldelning

För ett VNet, en ansluten Azure-disk, en statisk IP-adress eller en routningstabell utanför standardresursgruppen för arbetsnoden Contributor måste du tilldela rollen för den anpassade resursgruppen.

  • Tilldela rollen för Contributor den anpassade resursgruppen med kommandot az role assignment create .

    az role assignment create --assignee <control-plane-identity-principal-id> --role "Contributor" --scope "<custom-resource-group-resource-id>"
    

För en användartilldelad kubelet-identitet utanför standardresursgruppen för arbetsnoden måste du tilldela rollen Hanterad identitetsoperator på kubelet-identiteten för kontrollplanets hanterade identitet.

  • Managed Identity Operator Tilldela rollen på kubelet-identiteten az role assignment create med kommandot .

    az role assignment create --assignee  <control-plane-identity-principal-id> --role "Managed Identity Operator" --scope "<kubelet-identity-resource-id>"
    

Kommentar

Det kan ta upp till 60 minuter innan de behörigheter som beviljas till klustrets hanterade identitet fylls i.

Ta med din egen hanterade identitet

Skapa ett kluster med användartilldelad hanterad identitet

En anpassad användartilldelad hanterad identitet för kontrollplanet ger åtkomst till den befintliga identiteten innan klustret skapas. Den här funktionen möjliggör scenarier som att använda ett anpassat VNet eller utgåendeTyp av UDR med en i förväg skapad hanterad identitet.

Kommentar

Regionerna USDOD Central, USDOD East och USGov Iowa i Azure US Government-molnet stöds inte.

AKS skapar en användartilldelad kubelet-identitet i nodresursgruppen om du inte anger en egen kubelet-hanterad identitet.

  • Om du inte har en hanterad identitet skapar du en med kommandot az identity create .

    az identity create --name myIdentity --resource-group myResourceGroup
    

    Dina utdata bör likna följande exempelutdata:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
      "location": "westus2",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Kommentar

Det kan ta upp till 60 minuter innan de behörigheter som beviljas till klustrets hanterade identitet fylls i.

  • Innan du skapar klustret lägger du till rolltilldelningen för hanterad identitet med kommandot az role assignment create .

  • Skapa klustret med användartilldelad hanterad identitet.

    az aks create \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --network-plugin azure \
        --vnet-subnet-id <subnet-id> \
        --dns-service-ip 10.2.0.10 \
        --service-cidr 10.2.0.0/24 \
        --enable-managed-identity \
        --assign-identity <identity-resource-id>
    

Uppdatera hanterad identitet i ett befintligt kluster

Kommentar

Att migrera en hanterad identitet för kontrollplanet, från systemtilldelad till användartilldelad, orsakar ingen stilleståndstid för kontrollplanet och agentpoolerna. Under tiden fortsätter kontrollplanskomponenterna att använda den gamla systemtilldelade identiteten i flera timmar tills nästa token uppdateras.

  • Om du inte har en hanterad identitet skapar du en med kommandot az identity create .

    az identity create --name myIdentity --resource-group myResourceGroup
    

    Dina utdata bör likna följande exempelutdata:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
      "location": "westus2",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    
  • När du har skapat den anpassade användartilldelade hanterade identiteten för kontrollplanet lägger du till rolltilldelningen för den hanterade identitetenaz role assignment create med kommandot .

  • Uppdatera klustret med dina befintliga identiteter med hjälp av az aks update kommandot . Se till att ange resurs-ID för den hanterade identiteten för kontrollplanet genom att inkludera assign-identity argumentet.

    az aks update \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> 
    

    Dina utdata för en lyckad klusteruppdatering med din egen kubelet-hanterade identitet bör likna följande exempelutdata:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
    

Använda en i förväg skapad kubelet-hanterad identitet

En kubelet-identitet ger åtkomst till den befintliga identiteten innan klustret skapas. Den här funktionen möjliggör scenarier som anslutning till ACR med en i förväg skapad hanterad identitet.

Förskapade kubelet-identitetsbegränsningar

  • Fungerar bara med ett användartilldelat hanterat kluster.
  • Regionerna Kina, östra och Kina, norra i Microsoft Azure som drivs av 21Vianet stöds inte.

Skapa användartilldelade hanterade identiteter

Hanterad identitet för kontrollplan

  • Om du inte har någon hanterad identitet för kontrollplanet skapar du en med hjälp av az identity create.

    az identity create --name myIdentity --resource-group myResourceGroup
    

    Dina utdata bör likna följande exempelutdata:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
      "location": "westus2",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

kubelet managed identity

  • Om du inte har en kubelet-hanterad identitet skapar du en med kommandot az identity create .

    az identity create --name myKubeletIdentity --resource-group myResourceGroup
    

    Dina utdata bör likna följande exempelutdata:

    {
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity", 
      "location": "westus2",
      "name": "myKubeletIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Skapa ett kluster med användartilldelad kubelet-identitet

Nu kan du skapa ditt AKS-kluster med dina befintliga identiteter. Ange resurs-ID för den hanterade identiteten för kontrollplanet genom att inkludera assign-identity argumentet och den kubelet-hanterade identiteten assign-kubelet-identity med argumentet .

  • Skapa ett AKS-kluster med dina befintliga identiteter med kommandot az aks create .

    az aks create \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --network-plugin azure \
        --vnet-subnet-id <subnet-id> \
        --dns-service-ip 10.2.0.10 \
        --service-cidr 10.2.0.0/24 \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> \
        --assign-kubelet-identity <kubelet-identity-resource-id>
    

    Ett lyckat AKS-kluster som skapas med din egen kubelet-hanterade identitet bör likna följande exempelutdata:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity"
        }
      },
    

Uppdatera ett befintligt kluster med kubelet-identitet

Varning

Uppdatering av kubelet-hanterad identitet uppgraderar nodpooler, vilket orsakar stilleståndstid för AKS-klustret eftersom noderna i nodpoolerna är avspärrade/tömda och omskapade.

Kommentar

Om klustret använde --attach-acr för att hämta från avbildningar från Azure Container Registry måste du köra az aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR Resource ID> kommandot efter uppdateringen av klustret så att den nyligen skapade kubelet som används för hanterad identitet får behörighet att hämta från ACR. Annars kan du inte hämta från ACR efter uppgraderingen.

Hämta den aktuella hanterade identiteten för kontrollplanet för ditt AKS-kluster

  1. Bekräfta att AKS-klustret använder den användartilldelade hanterade identiteten az aks show med hjälp av kommandot .

    az aks show -g <RGName> -n <ClusterName> --query "servicePrincipalProfile"
    

    Om klustret använder en hanterad identitet visas clientId utdata med värdet msi. Ett kluster som använder tjänstens huvudnamn visar ett objekt-ID. Till exempel:

    {
      "clientId": "msi"
    }
    
  2. När du har bekräftat att klustret använder en hanterad identitet letar du reda på den hanterade identitetens resurs-ID med kommandot az aks show .

    az aks show -g <RGName> -n <ClusterName> --query "identity"
    

    För en användartilldelad hanterad identitet bör dina utdata se ut ungefär som i följande exempelutdata:

    {
      "principalId": null,
      "tenantId": null,
      "type": "UserAssigned",
      "userAssignedIdentities": <identity-resource-id>
          "clientId": "<client-id>",
          "principalId": "<principal-id>"
    },
    

Uppdatera klustret med kubelet-identitet

  1. Om du inte har en kubelet-hanterad identitet skapar du en med kommandot az identity create .

    az identity create --name myKubeletIdentity --resource-group myResourceGroup
    

    Dina utdata bör likna följande exempelutdata:

    {
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity",
      "location": "westus2",
      "name": "myKubeletIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    
  2. Uppdatera klustret med dina befintliga identiteter med hjälp av az aks update kommandot . Se till att ange resurs-ID för den hanterade identiteten för kontrollplanet genom att inkludera assign-identity argumentet och den kubelet-hanterade identiteten för assign-kubelet-identity argumentet.

    az aks update \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> \
        --assign-kubelet-identity <kubelet-identity-resource-id>
    

    Dina utdata för en lyckad klusteruppdatering med din egen kubelet-hanterade identitet bör likna följande exempelutdata:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity"
        }
      },
    

Nästa steg