Nasazení a konfigurace identity úloh v clusteru Azure Kubernetes Service (AKS)
Azure Kubernetes Service (AKS) je spravovaná služba Kubernetes, která umožňuje rychle nasazovat a spravovat clustery Kubernetes. V tomto článku provedete následující:
- Nasazení clusteru AKS pomocí Azure CLI, který zahrnuje vystavitele OpenID Připojení a ID úloh Microsoft Entra
- Udělení přístupu ke službě Azure Key Vault
- Vytvoření ID úloh Microsoft Entra a účtu služby Kubernetes
- Nakonfigurujte spravovanou identitu pro federaci tokenů.
Tento článek předpokládá, že máte základní znalosti konceptů Kubernetes. Další informace najdete v tématu Základní koncepty Kubernetes pro Službu Azure Kubernetes Service (AKS). Pokud ID úloh Microsoft Entra neznáte, přečtěte si následující článek s přehledem.
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.
Identita, kterou používáte k vytvoření clusteru, má odpovídající minimální oprávnění. Další informace o přístupu a identitě pro AKS najdete v tématu Možnosti přístupu a identit 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í příkazu az account .
Poznámka:
Místo ruční konfigurace všech kroků existuje další implementace s názvem Service Připojení or, která vám pomůže nakonfigurovat některé kroky automaticky a dosáhnout stejného výsledku. Viz také: Kurz: Připojení k účtu úložiště Azure ve službě Azure Kubernetes Service (AKS) s využitím služby Připojení or s využitím identity úloh.
Export proměnných prostředí
Chcete-li zjednodušit kroky konfigurace požadovaných identit, následující postup definuje proměnné prostředí pro referenci v clusteru.
Spuštěním následujících příkazů vytvořte tyto proměnné. Nahraďte výchozí hodnoty pro RESOURCE_GROUP
, LOCATION
, SERVICE_ACCOUNT_NAME
, SUBSCRIPTION
, USER_ASSIGNED_IDENTITY_NAME
a FEDERATED_IDENTITY_CREDENTIAL_NAME
.
export RESOURCE_GROUP="myResourceGroup"
export LOCATION="westcentralus"
export SERVICE_ACCOUNT_NAMESPACE="default"
export SERVICE_ACCOUNT_NAME="workload-identity-sa"
export SUBSCRIPTION="$(az account show --query id --output tsv)"
export USER_ASSIGNED_IDENTITY_NAME="myIdentity"
export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity"
Vytvoření clusteru AKS
Vytvořte cluster AKS pomocí příkazu az aks create s parametrem --enable-oidc-issuer
pro použití vystavitele OIDC. Následující příklad vytvoří cluster myAKSCluster s jedním uzlem v myResourceGroup:
az aks create --resource-group "${RESOURCE_GROUP}" --name myAKSCluster --enable-oidc-issuer --enable-workload-identity --generate-ssh-keys
Po několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON.
Poznámka:
Při vytváření clusteru AKS se automaticky vytvoří druhá skupina prostředků pro uložení prostředků AKS. Další informace najdete v tématu Proč jsou dvě skupiny prostředků vytvořené pomocí AKS?.
Aktualizace existujícího clusteru AKS
Cluster AKS můžete aktualizovat pomocí příkazu az aks update pomocí --enable-oidc-issuer
parametru --enable-workload-identity
a použít vystavitele OIDC a povolit identitu úlohy. Následující příklad aktualizuje cluster s názvem myAKSCluster:
az aks update --resource-group "${RESOURCE_GROUP}" --name myAKSCluster --enable-oidc-issuer --enable-workload-identity
Načtení adresy URL vystavitele OIDC
Pokud chcete získat adresu URL vystavitele OIDC a uložit ji do proměnné prostředí, spusťte následující příkaz. Nahraďte výchozí hodnotu argumentů --name
, což je název clusteru:
export AKS_OIDC_ISSUER="$(az aks show --name myAKSCluster --resource-group "${RESOURCE_GROUP}" --query "oidcIssuerProfile.issuerUrl" -o tsv)"
Proměnná by měla obsahovat adresu URL vystavitele podobnou následujícímu 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 na použití základní adresy URL https://{region}.oic.prod-aks.azure.com/{tenant_id}/{uuid}
, kde hodnota pro {region}
shodu s umístěním clusteru AKS je nasazena. Hodnota {uuid}
představuje klíč OIDC, což je náhodně vygenerovaný identifikátor GUID pro každý cluster, který je neměnný.
Vytvoření spravované identity
Pomocí příkazu az account set v Azure CLI nastavte konkrétní předplatné, které bude aktuálním aktivním předplatným. Pak pomocí příkazu az identity create vytvořte spravovanou identitu.
az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
V dalším kroku vytvoříme proměnnou pro ID spravované identity.
export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -o tsv)"
Vytvoření účtu služby Kubernetes
Vytvořte účet služby Kubernetes a označte ho ID klienta spravované identity vytvořené v předchozím kroku. Použijte příkaz az aks get-credentials a nahraďte hodnoty názvu clusteru a názvu skupiny prostředků.
az aks get-credentials --name myAKSCluster --resource-group "${RESOURCE_GROUP}"
Zkopírujte a vložte následující víceřádkový vstup do Azure CLI.
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}"
EOF
Následující výstup se podobá úspěšnému vytvoření identity:
serviceaccount/workload-identity-sa created
Vytvoření přihlašovacích údajů federované identity
Pomocí 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.
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://AzureADTokenExchange
Poznámka:
Rozšíření přihlašovacích údajů federované identity po počátečním přidání trvá několik sekund. Pokud se žádost o token provede okamžitě po přidání přihlašovacích údajů federované identity, může dojít k selhání po dobu několika minut, protože mezipaměť je naplněná starými daty v adresáři. 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í.
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ě metadata\obor názvů a spec\serviceAccountName vlastnosti:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: your-pod
namespace: "${SERVICE_ACCOUNT_NAMESPACE}"
labels:
azure.workload.identity/use: "true" # Required, only the pods with this label can use workload identity
spec:
serviceAccountName: "${SERVICE_ACCOUNT_NAME}"
containers:
- image: <your image>
name: <containerName>
EOF
Důležité
Ujistěte se, že pody aplikace používající identitu úloh přidaly do specifikace podu následující popisek azure.workload.identity/use: "true"
, jinak se pody po restartování nezdaří.
Volitelné – Udělení oprávnění pro přístup ke službě Azure Key Vault
Tento krok je nezbytný, pokud potřebujete získat přístup k tajným kódům, klíčům a certifikátům připojeným ve službě Azure Key Vault z podu. Pokud chcete nakonfigurovat přístup se spravovanou identitou, proveďte následující kroky. V těchto krocích se předpokládá, že už máte službu Azure Key Vault vytvořenou a nakonfigurovanou ve vašem předplatném. Pokud ho nemáte, přečtěte si téma Vytvoření služby Azure Key Vault pomocí Azure CLI.
Než budete pokračovat, budete potřebovat následující informace:
- Název služby Key Vault
- Skupina prostředků se službou Key Vault
Tyto informace můžete načíst pomocí příkazu Azure CLI: az keyvault list.
Spuštěním následujících příkazů nastavte zásadu přístupu pro spravovanou identitu pro přístup k tajným kódům ve službě Key Vault:
export KEYVAULT_RESOURCE_GROUP="myResourceGroup" export KEYVAULT_NAME="myKeyVault" export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -o tsv)" az keyvault set-policy --name "${KEYVAULT_NAME}" --secret-permissions get --spn "${USER_ASSIGNED_CLIENT_ID}"
Vytvoření tajného kódu ve službě Key Vault:
export KEYVAULT_SECRET_NAME="my-secret" az keyvault secret set --vault-name "${KEYVAULT_NAME}" \ --name "${KEYVAULT_SECRET_NAME}" \ --value "Hello\!"
Export adresy URL služby Key Vault:
export KEYVAULT_URL="$(az keyvault show --resource-group ${KEYVAULT_RESOURCE_GROUP} --name ${KEYVAULT_NAME} --query properties.vaultUri -o tsv)"
Nasaďte pod, který odkazuje na účet služby a adresu URL služby Key Vault výše:
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: 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: ${KEYVAULT_URL} - name: SECRET_NAME value: ${KEYVAULT_SECRET_NAME} nodeSelector: kubernetes.io/os: linux EOF
Pokud chcete zkontrolovat, jestli webhook správně vloží všechny vlastnosti, použijte příkaz kubectl describe :
kubectl describe pod quick-start | grep "SECRET_NAME:"
V případě úspěchu by měl být výstup podobný následujícímu:
SECRET_NAME: ${KEYVAULT_SECRET_NAME}
Pokud chcete ověřit, že pod dokáže získat token a získat přístup k prostředku, použijte příkaz kubectl logs:
kubectl logs quick-start
V případě úspěchu by měl být výstup podobný následujícímu:
I0114 10:35:09.795900 1 main.go:63] "successfully got secret" secret="Hello\\!"
Zakázání identity úloh
Pokud chcete zakázat ID úloh Microsoft Entra v clusteru AKS, kde je povolený a nakonfigurovaný, můžete spustit následující příkaz:
az aks update --resource-group "${RESOURCE_GROUP}" --name myAKSCluster --disable-workload-identity
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 . 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.