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.
V tomto článku se dozvíte, jak nasadit a nakonfigurovat cluster Azure Kubernetes Service (AKS) s ID úlohy Microsoft Entra. Kroky v tomto článku zahrnují:
- Vytvořte nový cluster AKS nebo aktualizujte existující pomocí Azure CLI s povoleným vydavatelem OpenID Connect (OIDC) a ID pracovního zatížení Microsoft Entra.
- Vytvořte identitu úlohy a účet služby Kubernetes.
- Nakonfigurujte spravovanou identitu pro federaci tokenů.
- Nasaďte úlohu a ověřte ověřování pomocí identity úlohy.
- Volitelně můžete podu v clusteru udělit přístup k tajným kódům v trezoru klíčů Azure.
Požadavky
- Pokud nemáte účet Azure, vytvořte si bezplatný účet před tím, než začnete.
- Tento článek vyžaduje verzi 2.47.0 nebo novější azure CLI. Pokud používáte Azure Cloud Shell, je už nainstalovaná nejnovější verze.
- Ujistěte se, že identita, kterou používáte k vytvoření clusteru, má odpovídající minimální oprávnění. Další informace najdete v tématu Možnosti přístupu a identity pro Službu Azure Kubernetes Service (AKS).
- Pokud máte více předplatných Azure, vyberte příslušné ID předplatného, ve kterém se mají prostředky fakturovat pomocí
az account setpříkazu.
Poznámka:
Pomocí konektoru Service Connector můžete automaticky nakonfigurovat některé kroky. Další informace najdete v tématu Kurz: Připojení k účtu úložiště Azure ve službě Azure Kubernetes Service (AKS) pomocí Service Connector s ID Microsoft Entra Workload.
Vytvoření skupiny zdrojů
Vytvořte skupinu prostředků pomocí příkazu
az group create.export RANDOM_ID="$(openssl rand -hex 3)" export RESOURCE_GROUP="myResourceGroup$RANDOM_ID" export LOCATION="<your-preferred-region>" az group create --name "${RESOURCE_GROUP}" --location "${LOCATION}"
Povolit vydavatele OIDC a Workload ID Microsoft Entra v clusteru AKS
Můžete povolit poskytovatele OIDC a ID pracovní zátěže Microsoft Entra v novém nebo existujícím clusteru AKS.
Vytvořte cluster AKS pomocí příkazu
az aks creates parametrem--enable-oidc-issuer, který povolí vystavitele OIDC, a s parametrem--enable-workload-identity, který aktivuje Microsoft Entra Workload ID. Následující příklad vytvoří cluster s jedním uzlem:export CLUSTER_NAME="myAKSCluster$RANDOM_ID" az aks create \ --resource-group "${RESOURCE_GROUP}" \ --name "${CLUSTER_NAME}" \ --enable-oidc-issuer \ --enable-workload-identity \ --generate-ssh-keysPo několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON.
Načtení adresy URL vystavitele OIDC
Získejte URL poskytovatele OIDC a uložte ji do proměnné prostředí pomocí příkazu [
az aks show][az-aks-show].export AKS_OIDC_ISSUER="$(az aks show --name "${CLUSTER_NAME}" \ --resource-group "${RESOURCE_GROUP}" \ --query "oidcIssuerProfile.issuerUrl" \ --output tsv)"Proměnná prostředí by měla obsahovat adresu URL vystavitele, podobně jako v následujícím příkladu:
https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/Ve výchozím nastavení je vystavitel nastavený tak, aby používal základní adresu URL
https://{region}.oic.prod-aks.azure.com/{tenant_id}/{uuid}, kde hodnota odpovídá{region}umístění, do kterého je cluster AKS nasazený. Hodnota{uuid}představuje klíč OIDC, což je náhodně vygenerovaný a neměnný identifikátor GUID pro každý cluster.
Vytvoření spravované identity
Získejte ID předplatného a uložte ho do proměnné prostředí pomocí příkazu [
az account show][az-account-show].export SUBSCRIPTION="$(az account show --query id --output tsv)"Vytvořte spravovanou identitu přiřazenou uživatelem pomocí příkazu
az identity create.export USER_ASSIGNED_IDENTITY_NAME="myIdentity$RANDOM_ID" az identity create \ --name "${USER_ASSIGNED_IDENTITY_NAME}" \ --resource-group "${RESOURCE_GROUP}" \ --location "${LOCATION}" \ --subscription "${SUBSCRIPTION}"Následující příklad výstupu ukazuje úspěšné vytvoření spravované identity:
{ "clientId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroupxxxxxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentityxxxxxx", "location": "eastus", "name": "myIdentityxxxxxx", "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "resourceGroup": "myResourceGroupxxxxxx", "systemData": null, "tags": {}, "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }Získejte ID klienta spravované identity a uložte ji do proměnné prostředí pomocí příkazu [
az identity show][az-identity-show].export USER_ASSIGNED_CLIENT_ID="$(az identity show \ --resource-group "${RESOURCE_GROUP}" \ --name "${USER_ASSIGNED_IDENTITY_NAME}" \ --query 'clientId' \ --output tsv)"
Vytvoření účtu služby Kubernetes
Připojte se ke clusteru AKS pomocí
az aks get-credentialspříkazu.az aks get-credentials --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}"Vytvořte účet služby Kubernetes a označte ho ID klienta spravované identity použitím následujícího manifestu
kubectl applypomocí příkazu:export SERVICE_ACCOUNT_NAME="workload-identity-sa$RANDOM_ID" export SERVICE_ACCOUNT_NAMESPACE="default" cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: "${USER_ASSIGNED_CLIENT_ID}" name: "${SERVICE_ACCOUNT_NAME}" namespace: "${SERVICE_ACCOUNT_NAMESPACE}" EOFNásledující výstup ukazuje úspěšné vytvoření identity úlohy:
serviceaccount/workload-identity-sa created
Vytvoření přihlašovacích údajů federované identity
Pomocí příkazu
az identity federated-credential createvytvořte přihlašovací údaje federované identity mezi spravovanou identitou, vystavitelem účtu služby a předmětem.export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity$RANDOM_ID" az identity federated-credential create \ --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} \ --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \ --resource-group "${RESOURCE_GROUP}" \ --issuer "${AKS_OIDC_ISSUER}" \ --subject system:serviceaccount:"${SERVICE_ACCOUNT_NAMESPACE}":"${SERVICE_ACCOUNT_NAME}" \ --audience api://AzureADTokenExchangePoznámka:
Přihlašovací údaje federované identity se po přidání rozšíří během několika sekund. Pokud se žádost o token provede okamžitě po přidání přihlašovacích údajů federované identity, může požadavek selhat, dokud se mezipaměť neaktualizuje. Abyste se tomuto problému vyhnuli, můžete po přidání přihlašovacích údajů federované identity přidat mírné zpoždění.
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.
Vytvoření trezoru klíčů s autorizací Azure RBAC
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.
Pomocí příkazu [
az keyvault create][az-keyvault-create] vytvořte trezor klíčů s povolenou ochranou před vymazáním a autorizací Azure 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 Azure RBAC:export KEYVAULT_NAME="keyvault-workload-id$RANDOM_ID" # Ensure the key vault name is between 3-24 characters az keyvault create \ --name "${KEYVAULT_NAME}" \ --resource-group "${RESOURCE_GROUP}" \ --location "${LOCATION}" \ --enable-purge-protection \ --enable-rbac-authorizationZískejte ID prostředku trezoru klíčů a uložte ho do proměnné prostředí pomocí příkazu [
az keyvault show][az-keyvault-show].export KEYVAULT_RESOURCE_ID=$(az keyvault show --resource-group "${RESOURCE_GROUP}" \ --name "${KEYVAULT_NAME}" \ --query id \ --output tsv)
Přiřazení oprávnění RBAC pro správu trezoru klíčů
Získejte ID objektu volajícího a uložte ho do proměnné prostředí pomocí příkazu [
az ad signed-in-user show][az-ad-signed-in-user-show].export CALLER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)Přiřaďte si roli Důstojník pro tajemství ve službě Azure RBAC Key Vault, abyste mohli v novém úložišti klíčů vytvořit tajemství pomocí příkazu [
az role assignment create][az-role-assignment-create].az role assignment create --assignee "${CALLER_OBJECT_ID}" \ --role "Key Vault Secrets Officer" \ --scope "${KEYVAULT_RESOURCE_ID}"
Vytvoření a konfigurace přístupu k tajným kódům
Vytvořte v trezoru klíčů tajný klíč pomocí příkazu [
az keyvault secret set][az-keyvault-secret-set].export KEYVAULT_SECRET_NAME="my-secret$RANDOM_ID" az keyvault secret set \ --vault-name "${KEYVAULT_NAME}" \ --name "${KEYVAULT_SECRET_NAME}" \ --value "Hello\!"Získejte ID spravované identity přiřazené uživatelem a pomocí příkazu [
az identity show][az-identity-show] ho uložte do proměnné prostředí.export IDENTITY_PRINCIPAL_ID=$(az identity show \ --name "${USER_ASSIGNED_IDENTITY_NAME}" \ --resource-group "${RESOURCE_GROUP}" \ --query principalId \ --output tsv)Přiřaďte roli uživatele tajných kódů Key Vault k uživatelem přiřazené spravované identitě pomocí příkazu [
az role assignment create][az-role-assignment-create]. Tento krok poskytuje spravované identitě oprávnění ke čtení tajných kódů z trezoru klíčů.az role assignment create \ --assignee-object-id "${IDENTITY_PRINCIPAL_ID}" \ --role "Key Vault Secrets User" \ --scope "${KEYVAULT_RESOURCE_ID}" \ --assignee-principal-type ServicePrincipalVytvořte proměnnou prostředí pro adresu URL trezoru klíčů pomocí příkazu [
az keyvault show][az-keyvault-show]:export KEYVAULT_URL="$(az keyvault show \ --resource-group "${RESOURCE_GROUP}" \ --name ${KEYVAULT_NAME} \ --query properties.vaultUri \ --output tsv)"
Nasazení ověřovacího podu a testovacího přístupu
Nasaďte pod, abyste ověřili, že identita úlohy má přístup k tajnému kódu v trezoru klíčů. Následující příklad používá
ghcr.io/azure/azure-workload-identity/msal-goimage, která obsahuje ukázkovou aplikaci, která načítá tajný kód ze služby Azure Key Vault pomocí ID úlohy Microsoft Entra:kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: sample-workload-identity-key-vault 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: ${KEYVAULT_URL} - name: SECRET_NAME value: ${KEYVAULT_SECRET_NAME} nodeSelector: kubernetes.io/os: linux EOFPočkejte, až bude pod ve stavu
Readypomocí příkazukubectl wait.kubectl wait --namespace ${SERVICE_ACCOUNT_NAMESPACE} --for=condition=Ready pod/sample-workload-identity-key-vault --timeout=120sPomocí příkazu
kubectl describezkontrolujte, zda je v podu nastavena proměnná prostředíSECRET_NAME.kubectl describe pod sample-workload-identity-key-vault | grep "SECRET_NAME:"V případě úspěchu by měl být výstup podobný následujícímu příkladu:
SECRET_NAME: ${KEYVAULT_SECRET_NAME}Pomocí příkazu
kubectl logsověřte, že pody můžou získat token a přistoupit k prostředku.kubectl logs sample-workload-identity-key-vaultV případě úspěchu by měl být výstup podobný následujícímu příkladu:
I0114 10:35:09.795900 1 main.go:63] "successfully got secret" secret="Hello\\!"Důležité
Šíření přiřazení rolí Azure RBAC může zabrat až 10 minut. Pokud pod nemůže získat přístup k tajnému kódu, možná budete muset počkat, až se přiřazení role rozšíří. Další informace najdete v tématu Řešení potíží s Azure RBAC.
Zakázání ID úlohy Microsoft Entra v clusteru AKS
Zakázat Workload ID Microsoft Entra na clusteru AKS, kde bylo povoleno a nakonfigurováno, a poté aktualizovat cluster AKS pomocí příkazu
az aks updates parametrem--disable-workload-identity.az aks update \ --resource-group "${RESOURCE_GROUP}" \ --name "${CLUSTER_NAME}" \ --disable-workload-identity
Související obsah
V tomto článku jste nasadili cluster Kubernetes a nakonfigurovali ho tak, aby používalo ID úlohy Microsoft Entra při přípravě 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 . Pokud nemůžete aplikaci přepsat tak, aby používala nejnovější verzi klientské knihovny, můžete nastavit pod aplikace tak, aby se ověřil pomocí spravované identity s identitou úloh jako krátkodobé řešení migrace.
Integrace konektoru služby pomáhá zjednodušit konfiguraci připojení pro úlohy AKS a backingové služby Azure. Bezpečně zpracovává konfiguraci ověřování a sítě a dodržuje osvědčené postupy pro připojení ke službám Azure. Další informace najdete v tématu Připojení k Azure OpenAI v modelech Foundry v AKS pomocí identity úloh Microsoft Entra a úvodu ke konektoru služby.