Kurz: Použití identity úloh s aplikací ve službě Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) je spravovaná služba Kubernetes, která umožňuje rychle nasazovat a spravovat clustery Kubernetes. V tomto kurzu se naučíte:

  • Nasaďte cluster AKS pomocí Azure CLI s vystavitelem a spravovanou identitou openID Připojení (OIDC).
  • Vytvoření služby Azure Key Vault a tajného kódu
  • Vytvořte ID úloh Microsoft Entra a účet služby Kubernetes.
  • Nakonfigurujte spravovanou identitu pro federaci tokenů.
  • Nasaďte úlohu a ověřte ověřování pomocí identity úlohy.

Než začnete

Požadavky

Vytvoření skupiny zdrojů

Skupina prostředků Azure je logická skupina, ve které se nasazují a spravují prostředky Azure. Při vytváření skupiny prostředků se zobrazí výzva k zadání umístění. Toto umístění je umístění úložiště metadat vaší skupiny prostředků a místo, kde vaše prostředky běží v Azure, pokud během vytváření prostředků nezadáte jinou oblast.

Následující příklad vytvoří skupinu prostředků myResourceGroup v umístění eastus.

  • Vytvořte skupinu prostředků pomocí příkazu az group create .

    az group create --name myResourceGroup --location eastus
    

    Následující příklad výstupu se podobá úspěšnému vytvoření skupiny prostředků:

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    

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.

  • Vytvořte tyto proměnné pomocí následujících příkazů. 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"
    export KEYVAULT_NAME="azwi-kv-tutorial"
    export KEYVAULT_SECRET_NAME="my-secret"
    

Vytvoření clusteru AKS

  1. Vytvořte cluster AKS pomocí příkazu az aks create s parametrem --enable-oidc-issuer pro použití vystavitele OIDC.

    az aks create --resource-group "${RESOURCE_GROUP}" --name myAKSCluster --node-count 1 --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.

  2. Pomocí následujícího příkazu získejte adresu URL vystavitele OIDC a uložte ji do proměnné prostředí. Nahraďte výchozí hodnotu argumentů -n, 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/00000000-0000-0000-0000-000000000000/
    

    Ve výchozím nastavení je vystavitel nastaven na použití základní adresy URL https://{region}.oic.prod-aks.azure.com, kde hodnota pro {region} shodu s umístěním clusteru AKS je nasazena.

Vytvoření služby Azure Key Vault a tajného kódu

  1. Pomocí příkazu az keyvault create vytvořte službu Azure Key Vault ve skupině prostředků, kterou jste vytvořili v tomto kurzu.

    az keyvault create --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --name "${KEYVAULT_NAME}" --enable-rbac-authorization false
    

    Výstup tohoto příkazu zobrazuje vlastnosti nově vytvořeného trezoru klíčů. Poznamenejte si hodnoty dvou vlastností uvedených níže:

    • Name: Název trezoru, který jste zadali do parametru --name .
    • vaultUri: V příkladu je https://<your-unique-keyvault-name>.vault.azure.net/to . Aplikace, které používají váš trezor prostřednictvím REST API musí používat tento identifikátor URI.

    V tuto chvíli je váš účet Azure jediným účtem s oprávněním provádět jakékoli operace s tímto novým trezorem.

  2. Přidejte do trezoru tajný klíč pomocí příkazu az keyvault secret set . Heslo je hodnota, kterou jste zadali pro proměnnou KEYVAULT_SECRET_NAME prostředí, a uloží do ní hodnotu Hello! .

    az keyvault secret set --vault-name "${KEYVAULT_NAME}" --name "${KEYVAULT_SECRET_NAME}" --value 'Hello!'
    
  3. Přidejte adresu URL služby Key Vault do proměnné KEYVAULT_URL prostředí pomocí příkazu az keyvault show .

    export KEYVAULT_URL="$(az keyvault show --resource-group "${RESOURCE_GROUP}" --name ${KEYVAULT_NAME} --query properties.vaultUri -o tsv)"
    

Vytvoření spravované identity a udělení oprávnění pro přístup k tajnému kódu

  1. Pomocí příkazu az account set nastavte konkrétní předplatné jako aktuální aktivní předplatné.

    az account set --subscription "${SUBSCRIPTION}"
    
  2. Vytvořte spravovanou identitu pomocí příkazu az identity create .

    az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
    
  3. Pomocí následujících příkazů nastavte zásadu přístupu pro spravovanou identitu pro přístup k tajnému kódu služby Key Vault.

    export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -otsv)"
    
    az keyvault set-policy --name "${KEYVAULT_NAME}" --secret-permissions get --spn "${USER_ASSIGNED_CLIENT_ID}"
    

Vytvoření účtu služby Kubernetes

  1. Vytvořte účet služby Kubernetes a pomocí příkazu az aks get-credentials ho označte ID klienta spravované identity vytvořené v předchozím kroku. Nahraďte výchozí hodnotu názvu clusteru a název skupiny prostředků.

    az aks get-credentials --name myAKSCluster --resource-group "${RESOURCE_GROUP}"
    
  2. Zkopírujte následující víceřádkový vstup do terminálu a spuštěním příkazu vytvořte účet služby.

    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}
    

    Poznámka:

    Rozšíření přihlašovacích údajů federované identity po jeho počátečním přidání trvá několik sekund. Pokud je žádost o token okamžitě dostupná po přidání přihlašovacích údajů federované identity, může docházet k selhání po dobu několika minut, protože mezipaměť se naplní v adresáři starými daty. 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í úlohy

  1. Pomocí následujícího příkazu nasaďte pod, který odkazuje na účet služby vytvořený v předchozím kroku.

    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
    

    Následující výstup se podobá úspěšnému vytvoření podu:

    pod/quick-start created
    
  2. Pomocí příkazu kubectl describe zkontrolujte, jestli se všechny vlastnosti správně vloží do webhooku.

    kubectl describe pod quick-start
    
  3. Pomocí příkazu kubectl logs ověřte, že pod může získat token a získat přístup k tajnému kódu ze služby Key Vault.

    kubectl logs quick-start
    

    Následující výstup se podobá úspěšnému přístupu tokenu:

    I1013 22:49:29.872708       1 main.go:30] "successfully got secret" secret="Hello!"
    

Vyčištění prostředků

Tyto prostředky můžete nechat na místě. Pokud už tyto prostředky nepotřebujete, odstraňte je pomocí následujících příkazů.

  1. Odstraňte pod pomocí kubectl delete pod příkazu.

    kubectl delete pod quick-start
    
  2. Pomocí příkazu odstraňte účet kubectl delete sa služby.

    kubectl delete sa "${SERVICE_ACCOUNT_NAME}" --namespace "${SERVICE_ACCOUNT_NAMESPACE}"
    
  3. Pomocí příkazu az group delete odstraňte skupinu prostředků Azure a všechny její prostředky.

    az group delete --name "${RESOURCE_GROUP}"
    

Další kroky

V tomto kurzu jste nasadili cluster Kubernetes a pak nasadili jednoduchou aplikaci kontejneru pro testování práce s ID úloh Microsoft Entra.

Tento kurz je určený pro úvodní účely. Pokyny k vytváření úplných řešení pomocí AKS pro produkční prostředí najdete v pokynech k řešení AKS.