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.
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" }
Kopiera värdena för
appId
ochpassword
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 angeappId
ochpassword
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 parameternappId
. 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:
- Skapa en anpassad roll och definiera behörigheterna Microsoft.Compute/disks/read och Microsoft.Compute/disks/write , eller
- Tilldela den inbyggda rollen Virtuell datordeltagare i resursgruppen.
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.
Azure Kubernetes Service