Nasazení a konfigurace identity úloh v AKS povoleném clusterem Azure Arc (Preview)
Platí pro: Azure Local, verze 23H2
Federace identit úloh umožňuje nakonfigurovat spravovanou identitu přiřazenou uživatelem nebo registraci aplikace v Microsoft Entra ID tak, aby důvěřovala tokenům od externího zprostředkovatele identity (IDP), jako je Kubernetes, což umožňuje přístup k prostředkům chráněným microsoftem Entra, jako je Azure Key Vault nebo Azure Blob Storage.
Služba Azure Kubernetes Service (AKS) povolená službou Azure Arc je spravovaná služba Kubernetes, která umožňuje snadno nasazovat clustery Kubernetes s povolenou identitou úloh. Tento článek popisuje, jak provádět následující úlohy:
- Vytvoření clusteru AKS Arc s povolenou identitou úloh (Preview)
- Vytvořte účet služby Kubernetes a svážete ho se spravovanou identitou Azure.
- Vytvořte pro spravovanou identitu federované přihlašovací údaje, které důvěřují vystaviteli OIDC.
- Nasaďte aplikaci.
- Příklad: Udělte podu v clusteru přístup k tajným kódům v trezoru klíčů Azure.
Koncepční přehled federace identit úloh najdete v tématu Federace identit úloh vKubernetes s podporou Azure Arc (Preview).
Důležité
Tyto funkce ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Služba Azure Kubernetes Service, která je povolená ve verzi Preview služby Azure Arc, se částečně vztahuje na zákaznickou podporu na základě maximálního úsilí.
Poznámka:
Ve veřejné verzi preview AKS na místním prostředí Azure ve verzi 23H2 podporuje povolení identity úloh během vytváření clusteru AKS. Povolení identity úloh po vytvoření nebo zakázání clusteru je ale v současné době nepodporované.
Požadavky
Než nasadíte cluster Kubernetes s povolenou službou Azure Arc, musíte mít následující požadavky:
- Pokud nemáte předplatné Azure, vytvořte si bezplatný účet ještě před začátkem.
- Tento článek vyžaduje verzi 1.4.23 nebo novější azure CLI. Pokud používáte Azure Cloud Shell, je už nainstalovaná nejnovější verze.
Export proměnných prostředí
Pro zjednodušení kroků pro konfiguraci požadovaných identit definují následující příkazy proměnné prostředí, na které odkazují příklady v tomto článku. Nahraďte následující hodnoty vlastními hodnotami:
$AZSubscriptionID = "00000000-0000-0000-0000-000000000000"
$Location = "westeurope"
$resource_group_name = "myResourceGroup"
$aks_cluster_name = "myAKSCluster"
$SERVICE_ACCOUNT_NAMESPACE = "default"
$SERVICE_ACCOUNT_NAME = "workload-identity-sa"
$FedIdCredentialName = "myFedIdentity"
$MSIName = "myIdentity"
# To access key vault secrets from a pod in the cluster, include these variables:
$KVName = "KV-workload-id"
$KVSecretName= "KV-secret"
Nastavení aktivního předplatného
Nejprve nastavte své předplatné jako aktuální aktivní předplatné. Spusťte příkaz az account set s ID předplatného:
az login
az account set -s $AZSubscriptionID
Vytvoření skupiny zdrojů
Skupina prostředků Azure je logická skupina, ve které se nasazují a spravují prostředky Azure. Při vytváření skupiny prostředků se zobrazí výzva k zadání umístění. Toto umístění je umístění úložiště metadat vaší skupiny prostředků a místo, kde vaše prostředky běží v Azure, pokud během vytváření prostředků nezadáte jinou oblast.
Skupinu prostředků vytvoříte pomocí příkazu az group create:
az group create --name $resource_group_name --location $Location
Následující příklad výstupu ukazuje úspěšné vytvoření skupiny prostředků:
{
"id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
"location": "westeurope",
"managedBy": null,
"name": "$resource_group_name",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Krok 1: Vytvoření clusteru AKS Arc s povolenou identitou úloh
K vytvoření clusteru AKS Arc potřebujete hodnoty i $customlocation_ID
$logicnet_Id
hodnoty.
-
$customlocation_ID
: ID Azure Resource Manageru vlastního umístění. Vlastní umístění se konfiguruje během místního nasazení clusteru Azure verze 23H2. Správce infrastruktury by vám měl poskytnout ID Resource Manageru vlastního umístění. ID Resource Manageru můžete získat také pomocí$customlocation_ID = $(az customlocation show --name "<your-custom-location-name>" --resource-group $resource_group_name --query "id" -o tsv)
, pokud správce infrastruktury poskytne název vlastního umístění a název skupiny prostředků. -
$logicnet_Id
: ID Azure Resource Manageru místní logické sítě Azure vytvořené podle těchto kroků. Správce infrastruktury by vám měl poskytnout ID Resource Manageru logické sítě. ID Resource Manageru můžete získat také pomocí$logicnet_Id = $(az stack-hci-vm network lnet show --name "<your-lnet-name>" --resource-group $resource_group_name --query "id" -o tsv)
, pokud správce infrastruktury poskytne název logické sítě a název skupiny prostředků.
Spusťte příkaz az aksarc create s parametrem --enable-oidc-issuer --enable-workload-identity
. Zadejte id entra-admin-group-object-ids a ujistěte se, že jste členem skupiny pro správu Microsoft Entra ID pro přístup k režimu proxy serveru:
az aksarc create
-n $aks_cluster_name -g $resource_group_name
--custom-location $customlocation_ID --vnet-ids $logicnet_Id
--aad-admin-group-object-ids <entra-admin-group-object-ids>
--generate-ssh-keys
--enable-oidc-issuer --enable-workload-identity
Po několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON.
Po úspěšném vytvoření zřízeného clusteru může trvat nějakou dobu, než se rozšíření identity úlohy nasadí. Pomocí následujícího příkazu zkontrolujte stav rozšíření identity úlohy:
az connectedk8s show -n $aks_cluster_name -g $resource_group_name
# agentState = "Succeeded"
"agentPublicKeyCertificate": "",
"agentVersion": "1.21.10",
"arcAgentProfile": {
"agentAutoUpgrade": "Enabled",
"agentErrors": [],
"agentState": "Succeeded",
"desiredAgentVersion": "",
"systemComponents": null
# oidcIssuerProfile "enabled": true and "issuerUrl" present
"oidcIssuerProfile": {
"enabled": true,
"issuerUrl": "https://oidcdiscovery-{location}-endpoint-1111111111111111.000.azurefd.net/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/"}
Na webu Azure Portal můžete zobrazit rozšíření wiextension v části Vlastnosti vašeho clusteru Kubernetes.
Důležité
V rámci vylepšení zabezpečení clusterů AKS Arc aktivuje povolení identity úloh dvě změny. Za prvé, podpisový klíč účtu služby Kubernetes se automaticky obměňuje každých 45 dnů a zůstane platný po dobu 90 dnů. Za druhé, příznak je zakázán, --service-account-extend-token-expiration
což snižuje platnost tokenu z jednoho roku na maximálně 24 hodin.
Uložení adresy URL vystavitele OIDC do proměnné prostředí
Po úspěšném vytvoření clusteru AKS můžete získat adresu URL vystavitele OIDC a uložit ho do proměnné prostředí. Spusťte následující příkaz:
$SERVICE_ACCOUNT_ISSUER =$(az connectedk8s show --n $aks_cluster_name --resource-group $resource_group_name --query "oidcIssuerProfile.issuerUrl" --output tsv)
Krok 2: Vytvoření účtu služby Kubernetes a jeho vytvoření vazby ke spravované identitě Azure
Nejprve vytvořte spravovanou identitu. Spusťte příkaz az identity create:
az identity create --name $MSIName --resource-group $resource_group_name --location $Location --subscription $AZSubscriptionID
Dále vytvořte proměnné pro ID klienta spravované identity:
$MSIId=$(az identity show --resource-group $resource_group_name --name $MSIName --query 'clientId' --output tsv)
$MSIPrincipalId=$(az identity show --resource-group $resource_group_name --name $MSIName --query 'principalId' --output tsv)
Vytvoření účtu služby Kubernetes
V tomto kroku vytvoříte účet služby Kubernetes a označíte ho ID klienta spravované identity, kterou jste vytvořili v předchozím kroku.
Připojení ke clusteru použijte pro přístup ke clusteru z klientského zařízení. Další informace najdete v tématu Přístup ke clusteru z klientského zařízení:
az connectedk8s proxy -n $aks_cluster_name -g $resource_group_name
Otevřete nové příkazové okno CLI. Zkopírujte a vložte následující příkazy:
$yaml = @"
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
azure.workload.identity/client-id: $MSIId
name: $SERVICE_ACCOUNT_NAME
namespace: $SERVICE_ACCOUNT_NAMESPACE
"@
$yaml = $yaml -replace '\$MSIId', $MSIId `
-replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME `
-replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE
$yaml | kubectl apply -f -
Následující výstup ukazuje úspěšné vytvoření účtu služby:
serviceaccount/workload-identity-sa created
Krok 3: Vytvoření federovaných přihlašovacích údajů pro spravovanou identitu pro vztah důvěryhodnosti vystavitele OIDC
Nejprve vytvořte přihlašovací údaje federované identity. Voláním příkazu az identity federated-credential create vytvořte přihlašovací údaje federované identity mezi spravovanou identitou, vystavitelem účtu služby a předmětem. Další informace o přihlašovacích údajích federované identity v Microsoft Entra najdete v tématu Přehled přihlašovacích údajů federované identity v Microsoft Entra ID.
# Create a federated credential
az identity federated-credential create --name $FedIdCredentialName --identity-name $MSIName --resource-group $resource_group_name --issuer $SERVICE_ACCOUNT_ISSUER --subject "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}"
# Show the federated credential
az identity federated-credential show --name $FedIdCredentialName --resource-group $resource_group_name --identity-name $MSIName
Poznámka:
Po přidání přihlašovacích údajů federované identity trvá šíření několik sekund. Žádosti o tokeny provedené okamžitě poté můžou selhat, dokud se mezipaměť neaktualizuje. Pokud chcete tomuto problému zabránit, zvažte přidání krátkého zpoždění po vytvoření přihlašovacích údajů federované identity.
Krok 4: Nasazení aplikace
Když nasadíte pody aplikace, měl by manifest odkazovat na účet služby vytvořený v kroku Vytvoření účtu služby Kubernetes. Následující manifest ukazuje, jak odkazovat na účet, konkrétně na metadata\namespace
vlastnosti a spec\serviceAccountName
vlastnosti. Nezapomeňte zadat image pro image
a název kontejneru pro containerName
:
$image = "<image>" # Replace <image> with the actual image name
$containerName = "<containerName>" # Replace <containerName> with the actual container name
$yaml = @"
apiVersion: v1
kind: Pod
metadata:
name: sample-quick-start
namespace: $SERVICE_ACCOUNT_NAMESPACE
labels:
azure.workload.identity/use: "true" # Required. Only pods with this label can use workload identity.
spec:
serviceAccountName: $SERVICE_ACCOUNT_NAME
containers:
- image: $image
name: $containerName
"@
# Replace variables within the YAML content
$yaml = $yaml -replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE `
-replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME
# Apply the YAML configuration
$yaml | kubectl apply -f -
Důležité
Ujistěte se, že pody aplikací používající identitu úloh obsahují popisek azure.workload.identity/use: "true"
ve specifikaci podu. Jinak se pody po restartování nezdaří.
Příklad: Udělení oprávnění pro přístup ke službě Azure Key Vault
Pokyny v tomto kroku popisují, jak získat přístup k tajným kódům, klíčům nebo certifikátům v trezoru klíčů Azure z podu. Příklady v této části konfiguruje přístup k tajným kódům v trezoru klíčů pro identitu úlohy, ale můžete provést podobné kroky ke konfiguraci přístupu ke klíčům nebo certifikátům.
Následující příklad ukazuje, jak pomocí modelu oprávnění řízení přístupu na základě role (Azure RBAC) Azure udělit podu přístup k trezoru klíčů. Další informace o modelu oprávnění Azure RBAC pro Azure Key Vault najdete v tématu Udělení oprávnění aplikacím pro přístup k trezoru klíčů Azure pomocí Azure RBAC.
Vytvořte trezor klíčů s povolenou ochranou před vymazáním a autorizací RBAC. Existující trezor klíčů můžete použít také v případě, že je nakonfigurovaný pro ochranu před vymazáním i autorizaci RBAC:
az keyvault create --name $KVName --resource-group $resource_group_name --location $Location --enable-purge-protection --enable-rbac-authorization # retrieve the key vault ID for role assignment $KVId=$(az keyvault show --resource-group $resource_group_name --name $KVName --query id --output tsv)
Přiřaďte roli Správce tajných kódů RBAC služby Key Vault sami sobě, abyste mohli vytvořit tajný kód v novém trezoru klíčů. Rozšíření nových přiřazení rolí může trvat až pět minut, než se autorizační server aktualizuje.
az role assignment create --assignee-object-id $MSIPrincipalId --role "Key Vault Secrets Officer" --scope $KVId --assignee-principal-type ServicePrincipal
Vytvořte tajný klíč v trezoru klíčů:
az keyvault secret set --vault-name $KVName --name $KVSecretName --value "Hello!"
Přiřaďte roli uživatele tajných kódů služby Key Vault spravované identitě přiřazené uživatelem, kterou jste vytvořili dříve. Tento krok poskytuje spravované identitě oprávnění ke čtení tajných kódů z trezoru klíčů:
az role assignment create --assignee-object-id $MSIPrincipalId --role "Key Vault Secrets User" --scope $KVId --assignee-principal-type ServicePrincipal
Vytvořte proměnnou prostředí pro adresu URL trezoru klíčů:
$KVUrl=$(az keyvault show --resource-group $resource_group_name --name $KVName --query properties.vaultUri --output tsv)
Nasaďte pod, který odkazuje na účet služby a adresu URL trezoru klíčů:
$yaml = @" apiVersion: v1 kind: Pod metadata: name: sample-quick-start namespace: $SERVICE_ACCOUNT_NAMESPACE labels: azure.workload.identity/use: "true" spec: serviceAccountName: $SERVICE_ACCOUNT_NAME containers: - image: ghcr.io/azure/azure-workload-identity/msal-go name: oidc env: - name: KEYVAULT_URL value: $KVUrl - name: SECRET_NAME value: $KVSecretName nodeSelector: kubernetes.io/os: linux "@ # Replace variables within the YAML content $yaml = $yaml -replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE ` -replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME ` -replace '\$KVUrl', $KVUrl ` -replace '\$KVSecretName', $KVSecretName # Apply the YAML configuration $yaml | kubectl --kubeconfig <path-to-aks-cluster-kubeconfig> apply -f -
Odstranění clusteru AKS Arc
Pokud chcete odstranit cluster AKS Arc, použijte příkaz az aksarc delete:
az aksarc delete -n $aks_cluster_name -g $resource_group_name
Poznámka:
Při odstraňování clusteru AKS Arc s prostředky PodDisruptionBudget (PDB) došlo k známému problému: Odstranění může selhat odebrání těchto prostředků PDB. Společnost Microsoft o problému ví a pracuje na opravě.
PdB se ve výchozím nastavení instaluje v clusterech AKS Arc s podporou identit úloh. Pokud chcete odstranit cluster AKS Arc s identitou úloh, prohlédněte si průvodce řešením potíží .
Další kroky
V tomto článku jste nasadili cluster Kubernetes a nakonfigurovali ho tak, aby používal identitu úloh při přípravě úloh na úlohy aplikací k ověření pomocí těchto přihlašovacích údajů. Teď jste připraveni nasadit aplikaci a nakonfigurovat ji tak, aby používala identitu úloh s nejnovější verzí klientské knihovny Azure Identity.