Konfigurace identity úloh v clusteru AKS Edge Essentials (Preview)
Azure Kubernetes Service (AKS) Edge Essentials je místní implementace Kubernetes služby Azure Kubernetes Service (AKS), která automatizuje spouštění kontejnerizovaných aplikací ve velkém měřítku. Tento článek popisuje, jak provádět následující úlohy:
- 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 v Kubernetes 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. Verze Preview služby Azure Kubernetes Service Essentials jsou částečně pokryté zákaznickou podporou na základě maximálního úsilí.
Poznámka:
V této verzi Public Preview vám AKS Edge Essentials umožňuje povolit identitu úloh během počátečního nasazení skriptu Rychlého startu pro operace Azure IoT. Tato funkce není dostupná pro jiné scénáře AKS Edge Essentials.
Požadavky
Před použitím federace identit úloh pro cluster AKS Edge Essentials musíte nasadit skript rychlého startu operace Azure IoT, jak je popsáno v tématu Vytvoření a konfigurace clusteru AKS Edge Essentials, který může spouštět operace Azure IoT. Skript automaticky povolí funkci federace identit úloh v clusteru AKS Edge Essentials.
Po nasazení clusteru AKS Edge Essentials můžete pomocí následujícího příkazu zkontrolovat 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/",
# workloadIdentity "enabled": true
"securityProfile": {
"workloadIdentity": {
"enabled": true
Na webu Azure Portal můžete rozšíření zobrazit wiextension
v části Vlastnosti vašeho clusteru Kubernetes.
Export proměnných prostředí
Pro zjednodušení kroků pro konfiguraci požadovaných identit definuje následující kroky proměnné prostředí, na které se odkazuje v příkladech v tomto článku. Nezapomeňte nahradit hodnoty zobrazené 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"
# Include these variables to access key vault secrets from a pod in the cluster.
$KVName = "KV-workload-id"
$KVSecretName= "KV-secret"
Uložení adresy URL vystavitele OIDC do proměnné prostředí
Pokud chcete získat adresu URL vystavitele OIDC a uložit ji 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 1: Vytvoření účtu služby Kubernetes a jeho vytvoření vazby ke spravované identitě Azure
Nejprve zavolejte příkaz az identity create a vytvořte spravovanou identitu:
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
Vytvořte účet služby Kubernetes a označte ho ID klienta spravované identity, kterou jste vytvořili v předchozím kroku. Zkopírujte a vložte následující příkazy Azure CLI:
$yaml = @"
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
azure.workload.identity/client-id: $MSIId
name: $SERVICE_ACCOUNT_NAME
namespace: $SERVICE_ACCOUNT_NAMESPACE
"@
# Replace variables within the YAML content
$yaml = $yaml -replace '\$MSIId', $MSIId `
-replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME `
-replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE
# Apply the YAML content to Kubernetes
$yaml | kubectl apply -f -
Následující výstup ukazuje úspěšně vytvořenou identitu úlohy:
serviceaccount/workload-identity-sa created
Krok 2: Vytvoření federovaných přihlašovacích údajů pro spravovanou identitu pro vztah důvěryhodnosti vystavitele OIDC
Pokud chcete vytvořit přihlašovací údaje federované identity mezi spravovanou identitou, vystavitelem účtu služby a předmětem, zavolejte příkaz az identity federated-credential create . 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 3: 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 $aks_cluster_name apply -f -
Další kroky
V tomto článku jste ho nakonfigurovali tak, aby používala identitu úlohy při přípravě úloh aplikace 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.