Megosztás a következőn keresztül:


Számítási feladatok identitásának üzembe helyezése és konfigurálása Egy Azure Kubernetes Service-fürtön

Az Azure Kubernetes Service (AKS) egy felügyelt Kubernetes-szolgáltatás, amely lehetővé teszi a Kubernetes-fürtök gyors üzembe helyezését és kezelését. Ez a cikk bemutatja, hogyan:

  • AKS-fürt üzembe helyezése az Azure CLI használatával az OpenID Csatlakozás kiállítóval és egy Microsoft Entra Számítási feladat ID.
  • Hozzon létre egy Microsoft Entra Számítási feladat ID és Egy Kubernetes-szolgáltatásfiókot.
  • Konfigurálja a felügyelt identitást a jogkivonat-összevonáshoz.
  • Telepítse a számítási feladatot, és ellenőrizze a hitelesítést a számítási feladat identitásával.
  • Ha szeretné, a fürt egyik podjának hozzáférést adhat egy Azure-kulcstartó titkos kulcsaihoz.

Ez a cikk feltételezi, hogy alapszintű ismereteket szerzett a Kubernetes-fogalmakról. További információkért tekintse meg az Azure Kubernetes Service (AKS) Kubernetes alapfogalmait. Ha nem ismeri a Microsoft Entra Számítási feladat ID, tekintse meg az alábbi Áttekintés cikket.

Előfeltételek

  • Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.
  • Ez a cikk az Azure CLI 2.47.0-s vagy újabb verzióját igényli. Az Azure Cloud Shell használata esetén a legújabb verzió már telepítve van.
  • Győződjön meg arról, hogy a fürt létrehozásához használt identitás rendelkezik a megfelelő minimális engedélyekkel. Az AKS-hez való hozzáféréssel és identitással kapcsolatos további információkért lásd az Azure Kubernetes Service (AKS) hozzáférési és identitásbeállításait.
  • Ha több Azure-előfizetéssel rendelkezik, válassza ki a megfelelő előfizetés-azonosítót, amelyben az erőforrásokat az az account set paranccsal kell számlázni.

Feljegyzés

A Service Csatlakozás or segítségével automatikusan konfigurálhat néhány lépést. Lásd még: Oktatóanyag: Csatlakozás azure-tárfiókba az Azure Kubernetes Service-ben (AKS) a Service Csatlakozás or használatával számítási feladat identitásával.

Az aktív előfizetés beállítása

Először állítsa be az előfizetést az aktuális aktív előfizetésként az az account set parancs meghívásával és az előfizetés azonosítójának átadásával.

az account set --subscription <subscription-id>

Környezeti változók exportálása

A szükséges identitások konfigurálásához szükséges lépések egyszerűsítése érdekében az alábbi lépések meghatározzák a cikkben szereplő példákban hivatkozott környezeti változókat. Ne felejtse el lecserélni a megjelenített értékeket a saját értékeire:

export RESOURCE_GROUP="myResourceGroup"
export LOCATION="eastus"
export CLUSTER_NAME="myAKSCluster"
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"
# Include these variables to access key vault secrets from a pod in the cluster.
export KEYVAULT_NAME="keyvault-workload-id"
export KEYVAULT_SECRET_NAME="my-secret"

Erőforráscsoport létrehozása

Az Azure-erőforráscsoportok olyan logikai csoportok, amelyekben az Azure-erőforrások üzembe helyezése és kezelése történik. Erőforráscsoport létrehozásakor a rendszer kérni fogja, hogy adjon meg egy helyet. Ez a hely az erőforráscsoport metaadatainak tárolási helye, és ahol az erőforrások az Azure-ban futnak, ha nem ad meg egy másik régiót az erőforrás létrehozása során.

Hozzon létre egy erőforráscsoportot az az group create parancs meghívásával:

az group create --name "${RESOURCE_GROUP}" --location "${LOCATION}"

Az alábbi kimeneti példa egy erőforráscsoport sikeres létrehozását mutatja be:

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

AKS-fürt létrehozása

Hozzon létre egy AKS-fürtöt az az aks create paranccsal a paraméterrel az --enable-oidc-issuer OIDC-kiállító engedélyezéséhez. Az alábbi példa egyetlen csomóponttal rendelkező fürtöt hoz létre:

az aks create \
    --resource-group "${RESOURCE_GROUP}" \
    --name "${CLUSTER_NAME}" \
    --enable-oidc-issuer \
    --enable-workload-identity \
    --generate-ssh-keys

Néhány perc elteltével a parancs befejeződik, és JSON formátumú információkat ad vissza a fürtről.

Feljegyzés

AKS-fürt létrehozásakor a rendszer automatikusan létrehoz egy második erőforráscsoportot az AKS-erőforrások tárolásához. További információ: Miért jön létre két erőforráscsoport az AKS-sel?

Meglévő AKS-fürt frissítése

Az AKS-fürtöket frissítheti az OIDC-kiállító használatára, és engedélyezheti a számítási feladatok identitását az az aks update parancs és a --enable-workload-identity--enable-oidc-issuer paraméterek meghívásával. Az alábbi példa egy meglévő fürtöt frissít:

az aks update \
    --resource-group "${RESOURCE_GROUP}" \
    --name "${CLUSTER_NAME}" \
    --enable-oidc-issuer \
    --enable-workload-identity

Az OIDC-kiállító URL-címének lekérése

Az OIDC-kiállító URL-címének lekéréséhez és egy környezeti változóba való mentéséhez futtassa a következő parancsot:

export AKS_OIDC_ISSUER="$(az aks show --name "${CLUSTER_NAME}" \
    --resource-group "${RESOURCE_GROUP}" \
    --query "oidcIssuerProfile.issuerUrl" \
    --output tsv)"

A környezeti változónak tartalmaznia kell a kiállító URL-címét az alábbi példához hasonlóan:

https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/

Alapértelmezés szerint a kiállító az alap URL-címet https://{region}.oic.prod-aks.azure.com/{tenant_id}/{uuid}használja, ahol az érték {region} megegyezik az AKS-fürt üzembe helyezésének helyével. Az érték {uuid} az OIDC-kulcsot jelöli, amely véletlenszerűen generált guid minden egyes nem módosítható fürthöz.

Felügyelt identitás létrehozása

A felügyelt identitás létrehozásához hívja meg az az identity create parancsot.

az identity create \
    --name "${USER_ASSIGNED_IDENTITY_NAME}" \
    --resource-group "${RESOURCE_GROUP}" \
    --location "${LOCATION}" \
    --subscription "${SUBSCRIPTION}"

Ezután hozzon létre egy változót a felügyelt identitás ügyfélazonosítójának.

export USER_ASSIGNED_CLIENT_ID="$(az identity show \
    --resource-group "${RESOURCE_GROUP}" \
    --name "${USER_ASSIGNED_IDENTITY_NAME}" \
    --query 'clientId' \
    --output tsv)"

Kubernetes-szolgáltatásfiók létrehozása

Hozzon létre egy Kubernetes-szolgáltatásfiókot, és jegyzetelje meg az előző lépésben létrehozott felügyelt identitás ügyfélazonosítójával. Használja az az aks get-credentials parancsot , és cserélje le a fürt nevének és az erőforráscsoport nevének értékeit.

az aks get-credentials --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}"

Másolja és illessze be a következő többsoros bemenetet az Azure CLI-ben.

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

Az alábbi kimenet a számítási feladat identitásának sikeres létrehozását mutatja be:

serviceaccount/workload-identity-sa created

Az összevont identitás hitelesítő adatainak létrehozása

Hívja meg az az identity federated-credential create parancsot az összevont identitás hitelesítő adatainak létrehozásához a felügyelt identitás, a szolgáltatásfiók kiállítója és a tulajdonos között. A Microsoft Entra összevont identitás-hitelesítő adatairól további információt a Microsoft Entra-azonosítóban található összevont identitás hitelesítő adatainak áttekintése című témakörben talál.

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

Feljegyzés

Az összevont identitás hitelesítő adatainak propagálása a hozzáadás után néhány másodpercet vesz igénybe. Ha a jogkivonat-kérés közvetlenül az összevont identitás hitelesítő adatainak hozzáadása után történik, a kérés meghiúsulhat a gyorsítótár frissítéséig. A probléma elkerülése érdekében az összevont identitás hitelesítő adatainak hozzáadása után némi késést adhat hozzá.

Az alkalmazás üzembe helyezése

Az alkalmazás podok telepítésekor a jegyzéknek hivatkoznia kell a Kubernetes-szolgáltatásfiók létrehozása lépésben létrehozott szolgáltatásfiókra . Az alábbi jegyzék bemutatja, hogyan hivatkozhat a fiókra, különösen a metaadatok\névtér és a spec\serviceAccountName tulajdonságokra. Mindenképpen adjon meg egy lemezképet <image> és egy tárolónevet a következőhöz <containerName>:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: sample-workload-identity
  namespace: ${SERVICE_ACCOUNT_NAMESPACE}
  labels:
    azure.workload.identity/use: "true"  # Required. Only pods with this label can use workload identity.
spec:
  serviceAccountName: ${SERVICE_ACCOUNT_NAME}
  containers:
    - image: <image>
      name: <containerName>
EOF

Fontos

Győződjön meg arról, hogy a számítási feladat identitását használó alkalmazás podjai tartalmazzák a pod specifikációjában szereplő címkét azure.workload.identity/use: "true" . Ellenkező esetben a podok újraindításuk után sikertelenek lesznek.

Engedélyek megadása az Azure Key Vault eléréséhez

Az ebben a lépésben ismertetett utasítások bemutatják, hogyan férhet hozzá titkos kulcsokhoz, kulcsokhoz vagy tanúsítványokhoz egy Azure-kulcstartóban a podról. Az ebben a szakaszban szereplő példák a számítási feladat identitásának kulcstartójában lévő titkos kulcsokhoz való hozzáférést konfigurálják, de hasonló lépéseket hajthat végre a kulcsokhoz vagy tanúsítványokhoz való hozzáférés konfigurálásához.

Az alábbi példa bemutatja, hogyan használhatja az Azure szerepköralapú hozzáférés-vezérlési (Azure RBAC) engedélymodellt a pod hozzáférésének a kulcstartóhoz való biztosításához. Az Azure Key VaultHoz készült Azure RBAC-engedélymodellről további információt az Azure RBAC-t használó Azure-kulcstartók elérésére vonatkozó alkalmazások engedélyének megadása című témakörben talál.

  1. Hozzon létre egy kulcstartót, amelyen engedélyezve van a törlés elleni védelem és az RBAC-engedélyezés. Meglévő kulcstartót akkor is használhat, ha a törlés elleni védelemhez és az RBAC-engedélyezéshez is konfigurálva van:

    export KEYVAULT_RESOURCE_GROUP="myResourceGroup"
    export KEYVAULT_NAME="myKeyVault"
    
    az keyvault create \
        --name "${KEYVAULT_NAME}" \
        --resource-group "${KEYVAULT_RESOURCE_GROUP}" \
        --location "${LOCATION}" \
        --enable-purge-protection \
        --enable-rbac-authorization
    
  2. Rendelje hozzá saját magának az RBAC Key Vault titkos kulcstartó-tisztviselői szerepkört, hogy létrehozhasson egy titkos kulcsot az új kulcstartóban:

    export KEYVAULT_RESOURCE_ID=$(az keyvault show --resource-group "${KEYVAULT_RESOURCE_GROUP}" \
        --name "${KEYVAULT_NAME}" \
        --query id \
        --output tsv)
    
    az role assignment create --assignee "\<user-email\>" \
        --role "Key Vault Secrets Officer" \
        --scope "${KEYVAULT_RESOURCE_ID}"
    
  3. Hozzon létre egy titkos kulcsot a kulcstartóban:

    export KEYVAULT_SECRET_NAME="my-secret"
    
    az keyvault secret set \
        --vault-name "${KEYVAULT_NAME}" \
        --name "${KEYVAULT_SECRET_NAME}" \
        --value "Hello\!"
    
  4. Rendelje hozzá a Key Vault titkos kulcsfelhasználói szerepkörét a korábban létrehozott, felhasználó által hozzárendelt felügyelt identitáshoz. Ez a lépés engedélyezi a felügyelt identitásnak, hogy titkos kulcsokat olvasson be a kulcstartóból:

    export IDENTITY_PRINCIPAL_ID=$(az identity show \
        --name "${USER_ASSIGNED_IDENTITY_NAME}" \
        --resource-group "${RESOURCE_GROUP}" \
        --query principalId \
        --output tsv)
    
    az role assignment create \
        --assignee-object-id "${IDENTITY_PRINCIPAL_ID}" \
        --role "Key Vault Secrets User" \
        --scope "${KEYVAULT_RESOURCE_ID}" \
        --assignee-principal-type ServicePrincipal
    
  5. Hozzon létre egy környezeti változót a Key Vault URL-címéhez:

    export KEYVAULT_URL="$(az keyvault show \
        --resource-group ${KEYVAULT_RESOURCE_GROUP} \
        --name ${KEYVAULT_NAME} \
        --query properties.vaultUri \
        --output tsv)"
    
  6. Helyezzen üzembe egy podot, amely a szolgáltatásfiókra és a key vault URL-címére hivatkozik:

    cat <<EOF | kubectl apply -f -
    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
    EOF
    

Annak ellenőrzéséhez, hogy a webhook megfelelően injektálja-e az összes tulajdonságot, használja a kubectl leíró parancsot:

kubectl describe pod sample-workload-identity-key-vault | grep "SECRET_NAME:"

Ha sikeres, a kimenetnek a következőhöz hasonlónak kell lennie:

      SECRET_NAME:                 ${KEYVAULT_SECRET_NAME}

Annak ellenőrzéséhez, hogy a pod képes-e jogkivonatot lekérni és hozzáférni az erőforráshoz, használja a kubectl logs parancsot:

kubectl logs sample-workload-identity-key-vault

Ha sikeres, a kimenetnek a következőhöz hasonlónak kell lennie:

I0114 10:35:09.795900       1 main.go:63] "successfully got secret" secret="Hello\\!"

Fontos

Az Azure RBAC-szerepkör-hozzárendelések propagálása akár tíz percet is igénybe vehet. Ha a pod nem tudja elérni a titkos kulcsot, előfordulhat, hogy várnia kell a szerepkör-hozzárendelés propagálására. További információ: Az Azure RBAC hibaelhárítása.

Számítási feladatok identitásának letiltása

Ha le szeretné tiltani a Microsoft Entra Számítási feladat ID azon az AKS-fürtön, ahol engedélyezve és konfigurálva van, futtassa a következő parancsot:

az aks update \
    --resource-group "${RESOURCE_GROUP}" \
    --name "${CLUSTER_NAME}" \
    --disable-workload-identity

Következő lépések

Ebben a cikkben üzembe helyezett egy Kubernetes-fürtöt, és konfigurálta egy számítási feladat identitásának használatára az alkalmazás számítási feladatainak előkészítéséhez a hitelesítő adatokkal való hitelesítéshez. Most már készen áll az alkalmazás üzembe helyezésére és konfigurálására, hogy a számítási feladat identitását az Azure Identity ügyfélkódtár legújabb verziójával használja. Ha nem tudja átírni az alkalmazást a legújabb ügyfélkódtár-verzió használatára, beállíthatja az alkalmazás podját a felügyelt identitás és a számítási feladat identitásának rövid távú migrálási megoldásként történő hitelesítésére.