Dela via


Använd en tjänstens huvudnamn med Azure Kubernetes Service (AKS)

Ett AKS-kluster kräver antingen ett Microsoft Entra-tjänsthuvudnamn eller en hanterad identitet för att dynamiskt skapa och hantera andra Azure-resurser, till exempel en Azure Load Balancer eller Azure Container Registry (ACR).

För optimal säkerhet och användarvänlighet rekommenderar Microsoft att du använder hanterade identiteter i stället för tjänstens huvudnamn för att auktorisera åtkomst från ett AKS-kluster till andra resurser i Azure. En hanterad identitet är en särskild typ av tjänstens huvudnamn som kan användas för att hämta Microsoft Entra-autentiseringsuppgifter utan att behöva hantera och skydda autentiseringsuppgifter. Mer information om hur du använder en hanterad identitet med klustret finns i Använda en hanterad identitet i AKS.

Den här artikeln visar hur du skapar och använder ett huvudnamn för tjänsten med dina AKS-kluster.

Innan du börjar

Om du vill skapa ett Huvudnamn för Microsoft Entra-tjänsten måste du ha behörighet att registrera ett program med din Microsoft Entra-klientorganisation och tilldela programmet till en roll i din prenumeration. Om du inte har de behörigheter som krävs måste du be ditt Microsoft Entra-ID eller prenumerationsadministratör att tilldela nödvändiga behörigheter eller i förväg skapa ett huvudnamn för tjänsten för användning med ditt AKS-kluster.

Om du använder ett huvudnamn för tjänsten från en annan Microsoft Entra-klientorganisation finns det andra överväganden kring de behörigheter som är tillgängliga när du distribuerar klustret. Du kanske inte har rätt behörighet att läsa och skriva kataloginformation. Mer information finns i Vilka är standardanvändarbehörigheterna i Microsoft Entra-ID?

Förutsättningar

  • Om du använder Azure CLI behöver du Azure CLI version 2.0.59 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
  • Om du använder Azure PowerShell behöver du Azure PowerShell version 5.0.0 eller senare. Kör Get-InstalledModule -Name Az för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure Az PowerShell-modulen.

Skapa ett huvudnamn för tjänsten

Skapa ett huvudnamn för tjänsten innan du skapar klustret.

  1. Skapa ett huvudnamn för az ad sp create-for-rbac tjänsten med kommandot .

    az ad sp create-for-rbac --name myAKSClusterServicePrincipal
    

    Dina utdata bör likna följande exempelutdata:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "myAKSClusterServicePrincipal",
      "name": "http://myAKSClusterServicePrincipal",
      "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Kopiera värdena för appId och password från utdata. Du använder dessa när du skapar ett AKS-kluster i nästa avsnitt.

Ange ett tjänstens huvudnamn för ett AKS-kluster

  • Använd ett befintligt huvudnamn för tjänsten för ett nytt AKS-kluster med kommandot az aks create och använd parametrarna --service-principal och --client-secret för att ange appId och password från utdata som du fick föregående avsnitt.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --service-principal <appId> \
        --client-secret <password> \
        --generate-ssh-keys
    

    Kommentar

    Om du använder ett befintligt huvudnamn för tjänsten med anpassad hemlighet kontrollerar du att hemligheten inte är längre än 190 byte.

Delegera åtkomst till andra Azure-resurser

Du kan använda tjänstens huvudnamn för AKS-klustret för att få åtkomst till andra resurser. Om du till exempel vill distribuera ditt AKS-kluster till ett befintligt undernät för virtuella Azure-nätverk, ansluta till Azure Container Registry (ACR) eller komma åt nycklar eller hemligheter i ett nyckelvalv från klustret måste du delegera åtkomsten till dessa resurser till tjänstens huvudnamn. Om du vill delegera åtkomst tilldelar du tjänstens huvudnamn en roll för rollbaserad åtkomstkontroll (Azure RBAC).

Viktigt!

Behörigheter som beviljas till ett tjänsthuvudnamn som är associerat med ett kluster kan ta upp till 60 minuter att sprida.

  • Skapa en rolltilldelning med kommandot az role assignment create . Ange värdet för tjänstens huvudnamns appID för parametern appId . Ange omfånget för rolltilldelningen, till exempel en resursgrupp eller en virtuell nätverksresurs. Rolltilldelningen avgör vilka behörigheter tjänstens huvudnamn har för resursen och i vilket omfång.

    Om du till exempel vill tilldela tjänstens huvudnamn behörigheter för åtkomst till hemligheter i ett nyckelvalv kan du använda följande kommando:

    az role assignment create \
        --assignee <appId> \
        --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>" \
        --role "Key Vault Secrets User"
    

    Kommentar

    --scope För en resurs måste vara ett fullständigt resurs-ID, till exempel /subscriptions/<guid>/resourceGroups/myResourceGroup eller /subscriptions/<guid>/resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet.

I följande avsnitt beskrivs vanliga delegeringar som du kan behöva tilldela till ett huvudnamn för tjänsten.

Azure Container Registry

Om du använder Azure Container Registry (ACR) som containeravbildningsarkiv måste du bevilja behörighet till tjänstens huvudnamn för aks-klustret för att läsa och hämta avbildningar. Vi rekommenderar att du använder az aks create kommandot eller az aks update för att integrera med ett register och tilldela lämplig roll för tjänstens huvudnamn. Detaljerade steg finns i Autentisera med Azure Container Registry från Azure Kubernetes Service.

Nätverk

Du kan använda avancerade nätverk där det virtuella nätverket och undernätet eller offentliga IP-adresser finns i en annan resursgrupp. Tilldela den inbyggda rollen Nätverksdeltagare i undernätet i det virtuella nätverket. Du kan också skapa en anpassad roll med behörighet att komma åt nätverksresurserna i resursgruppen. Mer information finns i BEHÖRIGHETer för AKS-tjänsten.

Storage

Om du behöver komma åt befintliga diskresurser i en annan resursgrupp tilldelar du någon av följande uppsättningar rollbehörigheter:

Azure Container Instances

Om du använder Virtual Kubelet för att integrera med AKS och väljer att köra Azure Container Instances (ACI) i resursgruppen separat från AKS-klustret, måste AKS-klustertjänstens huvudnamn beviljas deltagarbehörigheter för ACI-resursgruppen.

Övriga beaktanden

Tänk på följande när du använder AKS och microsoft entra-tjänstens huvudnamn:

  • Tjänstens huvudnamn för Kubernetes är en del av klusterkonfigurationen, men använd inte den här identiteten för att distribuera klustret.
  • Som standard är autentiseringsuppgifterna för tjänstens huvudnamn giltiga i ett år. Du kan uppdatera eller rotera autentiseringsuppgifterna för tjänstens huvudnamn när som helst.
  • Varje huvudnamn för tjänsten är associerat med ett Microsoft Entra-program. Du kan associera tjänstens huvudnamn för ett Kubernetes-kluster med valfritt giltigt Microsoft Entra-programnamn (till exempel: https://www.contoso.org/example). URL:en för programmet behöver inte vara en verklig slutpunkt.
  • När du anger Klient-ID för tjänstens huvudnamn använder du värdet för appId.
  • På de virtuella agentnoddatorerna i Kubernetes-klustret lagras autentiseringsuppgifterna för tjänstens huvudnamn i /etc/kubernetes/azure.json filen.
  • När du tar bort ett AKS-kluster som skapades med kommandot az aks create tas inte tjänstens huvudnamn som skapats bort automatiskt.
    • Om du vill ta bort tjänstens huvudnamn frågar du efter klustrets servicePrincipalProfile.clientId och tar bort det med hjälp av az ad sp delete kommandot . Ersätt värdena för parametern -g för resursgruppens namn och -n parameter för klusternamnet:

      az ad sp delete --id $(az aks show \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --query servicePrincipalProfile.clientId \
        --output tsv)
      

Felsöka

Azure CLI cachelagrar autentiseringsuppgifterna för tjänstens huvudnamn för AKS-kluster. Om dessa autentiseringsuppgifter upphör att gälla kan du stöta på fel under AKS-klusterdistributionen. Om du kör az aks create kommandot och får ett felmeddelande som liknar följande kan det tyda på ett problem med autentiseringsuppgifterna för den cachelagrade tjänstens huvudnamn:

Operation failed with status: 'Bad Request'.
Details: The credentials in ServicePrincipalProfile were invalid. Please see https://aka.ms/aks-sp-help for more details.
(Details: adal: Refresh request failed. Status Code = '401'.

Du kan kontrollera förfallodatumet för autentiseringsuppgifterna för tjänstens huvudnamn med hjälp av az ad app credential list kommandot med frågan "[].endDateTime" .

az ad app credential list \
    --id <app-id> \
    --query "[].endDateTime" \
    --output tsv

Standardförfallotiden för autentiseringsuppgifter för tjänstens huvudnamn är ett år. Om dina autentiseringsuppgifter är äldre än ett år kan du återställa befintliga autentiseringsuppgifter eller skapa ett nytt huvudnamn för tjänsten.

Allmän Azure CLI-felsökning

Azure CLI kan köras i flera gränssnittsmiljöer, men med små formatvariationer. Om du har oväntade resultat med Azure CLI-kommandon kan du läsa Så här använder du Azure CLI.

Nästa steg

Mer information om Microsoft Entra-tjänstens huvudnamn finns i Objekt för program och tjänstens huvudnamn.

Information om hur du uppdaterar autentiseringsuppgifterna finns i Uppdatera eller rotera autentiseringsuppgifterna för tjänstens huvudnamn i AKS.