Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Clustery Azure Kubernetes Service (AKS) vyžadují buď služební objekt Microsoft Entra; nebo spravovanou identitu k dynamickému vytváření a správě dalších prostředků Azure. Tento článek popisuje, jak vytvořit instanční objekt Microsoft Entra a použít ho s clusterem AKS.
Poznámka:
Pro zajištění optimálního zabezpečení a snadného použití doporučujeme používat spravované identity místo instančních objektů k autorizaci přístupu z clusteru AKS k jiným prostředkům v Azure. Spravovaná identita je speciální typ služebního hlavního objektu, který můžete použít k získání přihlašovacích údajů pro Microsoft Entra bez nutnosti spravovat a zabezpečit tyto údaje. Další informace najdete v tématu Použití spravované identity v AKS.
Požadavky
- Potřebujete Azure CLI verze 2.0.59 nebo vyšší. Pomocí příkazu najděte svoji verzi
az --version. Pokud potřebujete instalovat nebo upgradovat, podívejte se na Install Azure CLI.
- Pokud používáte Azure PowerShell, potřebujete Azure PowerShell verze 5.0.0 nebo vyšší. Najděte svou verzi pomocí rutiny
Get-InstalledModule -Name Az(cmdlet). Pokud potřebujete nainstalovat nebo upgradovat, přečtěte si téma Instalace modulu Azure Az PowerShell.
- Potřebujete oprávnění k registraci aplikace u tenanta Microsoft Entra a k přiřazení aplikace k roli ve vašem předplatném. Pokud nemáte potřebná oprávnění, musíte požádat správce Microsoft Entra ID nebo správce předplatného, aby přiřadil potřebná oprávnění nebo vytvořil služební principál pro vás.
Úvahy o používání služebního účtu
Při používání služebního principálu Microsoft Entra s AKS mějte na paměti následující skutečnosti:
- Službový principál pro Kubernetes je součástí konfigurace clusteru, ale tuto identitu nepoužívejte k nasazení clusteru. Místo toho nejprve vytvořte instanční objekt a pak tento instanční objekt použijte k vytvoření clusteru AKS.
- Každý principál služby je přidružený k aplikaci Microsoft Entra. Instanční objekt pro cluster Kubernetes můžete přidružit k libovolnému platnému názvu aplikace Microsoft Entra (například:
https://www.contoso.org/example). Adresa URL aplikace nemusí být skutečným koncovým bodem. - Když zadáte ID klienta služebního principálu, použijte hodnotu ID aplikace (
appIdpro Azure CLI neboApplicationIdpro Azure PowerShell). - Na virtuálních počítačích v uzlech agenta v clusteru AKS jsou přihlašovací údaje zástupce služby uloženy v souboru
/etc/kubernetes/azure.json. - Při odstranění clusteru AKS, který jste vytvořili pomocí příkazu
az aks createnebo rutinyNew-AzAksCluster, se služební hlavní objekt vytvořený během procesu automaticky neodstraní. Podívejte se na kroky k odstranění entity zabezpečení. - Pokud používáte službu principal z jiného tenanta Microsoft Entra, je třeba zvážit jiné aspekty oprávnění dostupné při nasazování clusteru. Možná nemáte příslušná oprávnění ke čtení a zápisu informací o adresáři. Další informace naleznete v tématu Jaké jsou výchozí uživatelská oprávnění v Microsoft Entra ID?
Vytvořte služebního principála
Vytvořte objekt služby pomocí příkazu
az ad sp create-for-rbac.# Set environment variable SERVICE_PRINCIPAL_NAME=<your-service-principal-name> # Create the service principal az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAMEVýstup by se měl podobat následujícímu příkladu výstupu:
{ "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "displayName": "myAKSClusterServicePrincipal", "name": "http://myAKSClusterServicePrincipal", "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }Zkopírujte hodnoty pro
appIdapasswordz výstupu, které se mají použít při vytváření clusteru AKS.
Vytvořte objekt služby pomocí příkazu
New-AzADServicePrincipal.# Set environment variable $SpName = <your-service-principal-name> # Create the service principal New-AzADServicePrincipal -DisplayName $SpName -OutVariable spVýstup by se měl podobat následujícímu příkladu výstupu:
Secret : System.Security.SecureString ServicePrincipalNames : {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, http://myAKSClusterServicePrincipal} ApplicationId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ObjectType : ServicePrincipal DisplayName : myAKSClusterServicePrincipal Id : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Type :Hodnoty se ukládají do proměnné, kterou použijete při vytváření clusteru AKS.
Dešifrujte hodnotu uloženou v zabezpečeném řetězci tajného klíče pomocí následujícího příkazu.
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sp.Secret) [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
Vytvoření clusteru AKS s existujícím instančním objektem
Vytvořte cluster AKS s existující služební identitou pomocí příkazu
az aks creates parametry--service-principala--client-secretnastavenými na určení hodnotappIdapassword.# Set environment variables RESOURCE_GROUP=<your-resource-group-name> CLUSTER_NAME=<your-aks-cluster-name> APP_ID=<app-id> CLIENT_SECRET=<password-value> # Create the AKS cluster az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --service-principal $APP_ID \ --client-secret $CLIENT_SECRET \ --generate-ssh-keys
Pomocí následujícího příkazu převeďte instanční objekt
ApplicationIdaSecretna objekt PSCredential .$Cred = New-Object -TypeName System.Management.Automation.PSCredential ($sp.ApplicationId, $sp.Secret)Vytvořte cluster AKS s existujícím instančním objektem pomocí
New-AzAksClusterrutiny a jako jeho hodnotu zadejteServicePrincipalIdAndSecretparametr s objektem PSCredential .# Set environment variables $ResourceGroupName = <your-resource-group-name> $ClusterName = <your-aks-cluster-name> # Create the AKS cluster New-AzAksCluster -ResourceGroupName $ResourceGroupName -Name $ClusterName -ServicePrincipalIdAndSecret $Cred
Poznámka:
Pokud používáte existující service principal s přizpůsobeným heslem, ujistěte se, že heslo není delší než 190 bajtů.
Delegování přístupu k jiným prostředkům Azure
Aplikační identitu AKS clusteru můžete použít pro přístup k dalším prostředkům. Pokud například chcete cluster AKS nasadit do existující podsítě virtuální sítě Azure, připojit se k ACR nebo přistupovat k klíčům nebo tajným klíčům v trezoru klíčů z vašeho clusteru, musíte přístup k těmto prostředkům delegovat na instanční objekt. Pokud chcete delegovat přístup, přiřaďte k instančnímu objektu roli řízení přístupu na základě role (Azure RBAC).
Při přiřazování rolí určíte obor pro přiřazení role, například skupina prostředků nebo prostředek virtuální sítě. Přiřazení role určuje, jaká oprávnění má služební principal pro prostředek a v jakém rozsahu.
Důležité
Oprávnění udělená služebnímu principalu přidruženému ke clusteru může trvat až 60 minut, než se rozmnoží.
Vytvořte přiřazení role
Poznámka:
Rozsah prostředku musí být úplné ID prostředku, například /subscriptions/\<guid\>/resourceGroups/myResourceGroup nebo /subscriptions/\<guid\>/resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet.
Vytvořte přiřazení role pomocí příkazu
az role assignment create. Zadejte hodnotu ID aplikace pro parametr--assigneea rozsah přiřazení role pro parametr--scope. Následující příklad přiřadí služby aplikačního objektu oprávnění pro přístup k tajemstvím v Klíčovém trezoru:az role assignment create \ --assignee <app-id> \ --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>" \ --role "Key Vault Secrets User"
Vytvořte přiřazení role pomocí cmdletu
New-AzRoleAssignment. Zadejte hodnotu ID aplikace instančního objektu pro parametr-ApplicationIda určete rozsah přiřazení role pro parametr-Scope. Následující příklad přiřadí aplikační identitě oprávnění pro přístup k tajemstvím v úložišti klíčů.New-AzRoleAssignment -ApplicationId <app-id> ` -Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>" ` -RoleDefinitionName "Key Vault Secrets User"
Udělení přístupu ke službě Azure Container Registry
Pokud jako úložiště imagí kontejneru používáte Službu Azure Container Registry (ACR), musíte instančnímu objektu pro cluster AKS udělit oprávnění ke čtení a načítání imagí. Doporučujeme postupovat podle kroků v části Ověřování pomocí služby Azure Container Registry ze služby Azure Kubernetes Service k integraci s registrem a přiřazení odpovídající role pro služební objekt.
Udělení přístupu k síťovým prostředkům
Pokud používáte pokročilé sítě s virtuální sítí a podsítí nebo s veřejnými IP adresami umístěnými v jiné skupině prostředků, můžete přiřadit vestavěnou roli Přispěvatel sítě v podsíti v rámci virtuální sítě. Případně můžete vytvořit vlastní roli s oprávněními pro přístup k síťovým prostředkům v této skupině prostředků. Další informace najdete v tématu Oprávnění služby AKS.
Udělení přístupu k diskům úložiště
Pokud potřebujete získat přístup k existujícím prostředkům disku v jiné skupině prostředků, přiřaďte jednu z následujících sad oprávnění role:
- Vytvořte vlastní roli a definujte oprávnění role Microsoft.Compute/disks/read a Microsoft.Compute/disks/write .
- Přiřaďte předdefinovanou roli Přispěvatel virtuálních počítačů ke skupině prostředků.
Udělení přístupu ke službě Azure Container Instances
Pokud použijete virtuální kubelet k integraci s AKS a spuštění služby Azure Container Instances (ACI) ve skupině prostředků odděleně od clusteru AKS, musíte přiřadit oprávnění přispěvatele instančnímu objektu clusteru AKS pro skupinu prostředků ACI.
Odstranit objekt služby
Získejte ID klienta služebního principálu (
servicePrincipalProfile.clientId) a odstraňte služebního principála pomocí příkazuaz ad sp deletes parametrem--id. Příkaz [az aks show][az-aks-show] načte ID klienta pro zadaný cluster AKS.# Set environment variables RESOURCE_GROUP=<your-resource-group-name> CLUSTER_NAME=<your-aks-cluster-name> # Delete the service principal az ad sp delete --id $(az aks show \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query servicePrincipalProfile.clientId \ --output tsv)
Zadejte dotaz na ID klienta služebního hlavního objektu (
ServicePrincipalProfile.ClientId) a odstraňte služební hlavní objekt pomocí rutinyRemove-AzADServicePrincipals parametrem-ApplicationId. Příkaz cmdlet [Get-AzAksCluster][get-azakscluster] načte ID klienta pro zadaný cluster AKS.# Set environment variables $ResourceGroupName = <your-resource-group-name> $ClusterName = <your-aks-cluster-name> $ClientId = (Get-AzAksCluster -ResourceGroupName myResourceGroup -Name myAKSCluster ).ServicePrincipalProfile.ClientId # Delete the service principal Remove-AzADServicePrincipal -ApplicationId $ClientId
Řešení problémů s přihlašovacími údaji aplikačního objektu
Azure CLI ukládá přihlašovací údaje service principal do mezipaměti pro clustery AKS.
Azure PowerShell ukládá do mezipaměti přihlašovací údaje služebního principu pro clustery AKS.
Pokud platnost těchto přihlašovacích údajů vyprší, může dojít k chybám při nasazování clusteru AKS. Pokud dojde k problému s přihlašovacími údaji uloženými v mezipaměti, může se zobrazit chybová zpráva podobná následující chybové zprávě:
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'.
Pomocí příkazu az ad app credential list s dotazem "[].endDateTime" můžete zkontrolovat datum vypršení platnosti přihlašovacích údajů objektu service principal. Výstup ukazuje hodnotu endDateTime vašich přihlašovacích údajů.
az ad app credential list \
--id <app-id> \
--query "[].endDateTime" \
--output tsv
- Pomocí rutiny
Get-AzADAppCredentialcmdlet zkontrolujte datum vypršení platnosti přihlašovacích údajů klientské hlavní identity. Výstup ukazuje hodnotuEndDatevašich přihlašovacích údajů.
Get-AzADAppCredential -ApplicationId <app-id>
Výchozí doba vypršení platnosti přihlašovacích údajů hlavní služby je jeden rok. Pokud jsou vaše přihlašovací údaje starší než jeden rok, můžete stávající přihlašovací údaje resetovat nebo vytvořit nový instanční objekt.