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.
Nastavte vazby identit v clusterech Azure Kubernetes Service (AKS) pro mapování spravované identity přiřazené uživatelem (UAMI) napříč několika clustery při použití jednoho přihlašovacích údajů federované identity (FIC). Toto nastavení vám pomůže škálovat ověřování Microsoft Entra pro úlohy bez dosažení limitů FIC.
Požadavky
- Projděte si koncepty vazeb identit a zjistěte, jak fungují vazby identit.
- Azure CLI verze 2.73.0 nebo novější Pokud chcete zkontrolovat svou verzi, použijte
az versionpříkaz. Pokud chcete nainstalovat nebo aktualizovat Azure CLI, přečtěte si téma Instalace Azure CLI. - Pro obor identity a clusteru potřebujete následující oprávnění Azure:
Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/writeaMicrosoft.ContainerService/managedClusters/write. - K vytváření
ClusterRoleaClusterRoleBindingprostředků potřebujete oprávnění správce clusteru Kubernetes (nebo ekvivalentní).
Omezení
- Vazby identit se zatím nepodporují v clusterech nakonfigurovaných s integrací virtuální sítě serveru API.
Vytvoření testovacích prostředků
Pomocí příkazu vytvořte skupinu
az group createprostředků Azure.export RESOURCE_GROUP="ib-test" export LOCATION="westus2" az group create --name $RESOURCE_GROUP --location $LOCATIONVytvořte cluster AKS s identitou úloh a vystavitelem OIDC povoleným pomocí
az aks createpříkazu s příznaky--enable-workload-identitya--enable-oidc-issuer.export CLUSTER_NAME="ib-test-cluster" az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --location $LOCATION --no-ssh-key --enable-workload-identity --enable-oidc-issuerPomocí příkazu
az identity createvytvořte uživatelsky přiřazenou spravovanou identitu (UAMI).export MI_NAME="ib-test-mi" az identity create --resource-group $RESOURCE_GROUP --name $MI_NAME
Získání ID UAMI
Získejte ID prostředku, objektu zabezpečení, klienta a tenanta UAMI a nastavte je jako proměnné prostředí pomocí následujících
az identity showpříkazů:export MI_RESOURCE_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query id --output tsv) export MI_PRINCIPAL_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query principalId --output tsv) export MI_CLIENT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query clientId --output tsv) export MI_TENANT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query tenantId --output tsv)
Vytvořte vazbu identity
Namapujte UAMI na cluster AKS s vazbou identity příkazem
az aks identity-binding create.az aks identity-binding create --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib" --managed-identity-resource-id $MI_RESOURCE_IDPoznámka:
Když vytvoříte vazbu identity, AKS automaticky vytvoří přihlašovací údaje federované identity (FIC) pojmenované
aks-identity-bindingv rámci UAMI. Tyto přihlašovací údaje spravuje AKS. Neupravujte ani neodstraňujte, když se používají vazby identit. FIC vytvořený pro vazby identit je sdílen mezi všemi vazbami identit, které odkazují na stejné UAMI.
Získejte adresu URL vystavitele OIDC pro UAMI
Získejte adresu URL vystavitele OIDC přidruženou k UAMI kontrolou vazby identity pomocí
az aks identity-binding showpříkazu.az aks identity-binding show --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib"Zhuštěný ukázkový výstup:
{ "oidcIssuer": { "oidcIssuerUrl": "https://ib.oic.prod-aks.azure.com/<MI-tenant-id>/<MI-client-id>" } }
Připojení ke clusteru AKS
Pomocí příkazu získejte přihlašovací údaje
az aks get-credentialsclusteru AKS a uložte je do samostatného souboru kubeconfig:az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME -a -f "${CLUSTER_NAME}.kubeconfig"Nastavte proměnnou
KUBECONFIGprostředí, aby odkazovala na nový soubor kubeconfig.export KUBECONFIG="$(pwd)/${CLUSTER_NAME}.kubeconfig"
Autorizujte obory názvů a účty služeb
Nakonfigurujte řízení přístupu podle role (RBAC) tak, aby udělil konkrétním subjektům oprávnění používat spravovanou identitu prostřednictvím vazby identity pomocí aplikace tohoto manifestu s následujícím příkazem
kubectl apply.Poznámka:
Následující příklad explicitně odkazuje na
demoúčet služby vdemojmenném prostoru. I když je možné explicitně odkázat na konkrétní služební účet, je také možné odkazovat na kolekci účtů služeb podsubjects. Další informace najdete v tématu Odkazování na témata v dokumentaci Kubernetes.kubectl apply -f - <<EOF apiVersion: v1 kind: Namespace metadata: name: demo --- apiVersion: v1 kind: ServiceAccount metadata: name: demo namespace: demo --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: use-mi-${MI_CLIENT_ID} rules: - verbs: ["use-managed-identity"] apiGroups: ["cid.wi.aks.azure.com"] resources: ["${MI_CLIENT_ID}"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: use-mi-${MI_CLIENT_ID} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: use-mi-${MI_CLIENT_ID} subjects: - kind: ServiceAccount name: demo namespace: demo EOF
Vytvoření trezoru klíčů s ochranou před vymazáním a autorizací Azure RBAC
Vytvořte trezor klíčů s povolenou ochranou před vymazáním a autorizací Azure RBAC pomocí příkazu
az keyvault creates příznaky--enable-purge-protectiona--enable-rbac-authorization. Existující trezor klíčů můžete použít také v případě, že je nakonfigurovaný pro ochranu před vymazáním i autorizaci Azure RBAC.export KEY_VAULT_NAME="ib-test" az keyvault create \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --enable-purge-protection \ --enable-rbac-authorization
Získejte ID prostředku a adresu URL trezoru klíčů
Získejte ID prostředku pro Key Vault pomocí příkazu
az keyvault showa nastavte ho jako proměnnou prostředí:export KEY_VAULT_RESOURCE_ID=$(az keyvault show --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query id \ --output tsv)Získejte adresu URL trezoru
az keyvault showklíčů pomocí příkazu a nastavte ji jako proměnnou prostředí:export KEYVAULT_URL="$(az keyvault show \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query properties.vaultUri \ --output tsv)"
Konfigurace přístupu k trezoru klíčů a vytvoření tajného kódu
Následující kroky ukazují, jak získat přístup k tajným klíčům, klíčům nebo certifikátům ve službě Azure Key Vault z podu. Příklady v této části konfigurují přístup k tajemstvím v trezoru klíčů pro identitu pracovního zatížení, ale můžete realizovat 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í Azure RBAC 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 ke službě Azure Key Vault pomocí Azure RBAC.
Získejte ID objektu přihlášeného uživatele pomocí
az ad signed-in-user showpříkazu a nastavte ho jako proměnnou prostředí:export CALLER_OBJECT_ID=$(az ad signed-in-user show --query id --output tsv)Přiřaďte si roli důstojníka pro tajemství Azure RBAC Key Vault v trezoru klíčů pomocí příkazu
az role assignment create.az role assignment create --assignee $CALLER_OBJECT_ID \ --role "Key Vault Secrets Officer" \ --scope $KEY_VAULT_RESOURCE_IDPomocí příkazu
az keyvault secret setvytvořte v trezoru klíčů tajný kód.export KEY_VAULT_SECRET_NAME="my-secret" az keyvault secret set \ --vault-name $KEY_VAULT_NAME \ --name $KEY_VAULT_SECRET_NAME \ --value "Hello\!"Pomocí příkazu přiřaďte roli uživatele tajných kódů služby Key Vault do UAMI
az role assignment create.az role assignment create \ --assignee-object-id $MI_PRINCIPAL_ID \ --role "Key Vault Secrets User" \ --scope $KEY_VAULT_RESOURCE_ID \ --assignee-principal-type ServicePrincipal
Přidávání poznámek k účtu služby
Označte účet služby identifikátorem tenanta spravované identity pomocí příkazu
kubectl annotate.kubectl annotate sa demo -n demo azure.workload.identity/tenant-id=$MI_TENANT_IDPomocí příkazu poznamenejte účet služby identifikátorem klienta spravované identity
kubectl annotate.kubectl annotate sa demo -n demo azure.workload.identity/client-id=$MI_CLIENT_ID
Nasazení ukázkové aplikace
Nasaďte ukázkový pod, který používá vazbu identit k získání přístupového tokenu pro spravovanou identitu pro přístup ke službě Azure Key Vault pomocí následujícího
kubectl applypříkazu:kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: demo namespace: demo labels: azure.workload.identity/use: "true" annotations: azure.workload.identity/use-identity-binding: "true" spec: serviceAccount: demo containers: - name: azure-sdk # source code: https://github.com/Azure/azure-workload-identity/blob/feature/custom-token-endpoint/examples/identitybinding-msal-go/main.go image: ghcr.io/bahe-msft/azure-workload-identity/identitybinding-msal-go:latest-linux-amd64 env: - name: KEYVAULT_URL value: ${KEYVAULT_URL} - name: SECRET_NAME value: ${KEY_VAULT_SECRET_NAME} restartPolicy: Never EOF
Ověření přístupu k trezoru klíčů z ukázkové aplikace
Popis podu a potvrzení proměnných prostředí a připojení svazků s projektovaným tokenem jsou k dispozici pomocí
kubectl describe podpříkazu.kubectl describe pod demo -n demoOčekávaný výstup by měl obsahovat hodnoty pro
AZURE_CLIENT_ID,AZURE_TENANT_IDAZURE_FEDERATED_TOKEN_FILE, , .AZURE_AUTHORITY_HOSTAZURE_KUBERNETES_TOKEN_PROXYAZURE_KUBERNETES_SNI_NAME, aAZURE_KUBERNETES_CA_FILE.Pomocí příkazu ověřte, že pod může získat token a získat přístup k prostředku
kubectl logs.kubectl logs demo -n demoV případě úspěchu by měl být výstup podobný následujícímu příkladu:
I1107 20:03:42.865180 1 main.go:77] "successfully got secret" secret="Hello!"
Škálování vazeb identit napříč několika clustery
Vazby identit umožňují mapování více clusterů AKS na stejné rozhraní UAMI, zatímco stále používají jeden FIC. Pokud chcete škálovat vazby identit napříč několika clustery, můžete zopakovat kroky z části Vytvoření vazby identity prostřednictvím ověření přístupu k trezoru klíčů z ukázkové aplikace pro každý další cluster, který chcete namapovat na stejný UAMI (vytvoření nové vazby identit na cluster).
Vyčistěte zdroje
Pokud už prostředky vytvořené v tomto článku nepotřebujete, můžete je vyčistit, abyste se vyhnuli vzniku budoucích nákladů.
Odstraňte pod pomocí
kubectl delete podpříkazu.kubectl delete pod demo -n demoOdstraňte obor názvů pomocí
kubectl delete nspříkazu.kubectl delete ns demoSmažte skupinu prostředků a všechny související prostředky pomocí příkazu
az group delete.az group delete --name $RESOURCE_GROUP --yes --no-wait