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_NAMEa 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.

  1. 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}"
    
  2. 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\!"
    
  3. 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)"
    
  4. 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.