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


Számítási feladatok identitásának üzembe helyezése és konfigurálása az Azure Arc-fürt által engedélyezett AKS-en (előzetes verzió)

A következőkre vonatkozik: Azure Local, 23H2-es verzió

A számítási feladatok identitásának összevonásával konfigurálhat egy felhasználó által hozzárendelt felügyelt identitást vagy alkalmazásregisztrációt a Microsoft Entra-azonosítóban, hogy megbízható jogkivonatokat adjon meg egy külső identitásszolgáltatótól (például a Kubernetestől), lehetővé téve a Hozzáférést a Microsoft Entra által védett erőforrásokhoz, például az Azure Key Vaulthoz vagy az Azure Blob Storage-hoz.

Az Azure Arc által engedélyezett Azure Kubernetes Service (AKS) egy felügyelt Kubernetes-szolgáltatás, amely lehetővé teszi a számítási feladatok identitását engedélyező Kubernetes-fürtök egyszerű üzembe helyezését. Ez a cikk a következő feladatok elvégzését ismerteti:

  • Hozzon létre egy AKS Arc-fürtöt, amelyen engedélyezve van a számítási feladatok identitása (előzetes verzió).
  • Hozzon létre egy Kubernetes-szolgáltatásfiókot, és kösse azt az Azure Managed Identityhez.
  • Összevont hitelesítőadat létrehozása a felügyelt identitáson az OIDC-kiállító megbízhatóságának érdekében.
  • Telepítse az alkalmazást.
  • Példa: Adjon egy podot a fürtben egy Azure-kulcstartó titkos kulcsainak eléréséhez.

A Workload identitás-összevonás elméleti áttekintéséhez tekintse meg a Workload identitás-összevonás az Azure Arc-kompatibilis Kubernetesben (előzetes verzió)témakört.

Fontos

Ezek az előzetes verziójú funkciók önkiszolgáló, opt-in alapon érhetők el. Az előzetes verziókat "ahogy van" és "rendelkezésre állóként" biztosítjuk, és a szolgáltatási szerződésekből és a korlátozott jótállásból kizárjuk őket. Az Azure Arc előzetes verziója által engedélyezett Azure Kubernetes Service-t részben az ügyfélszolgálat nyújtja a legjobb munkához.

Feljegyzés

Nyilvános előzetes verzióban az Azure helyi AKS 23H2-es verziója támogatja a munkaterhek identitásának engedélyezését az AKS-fürt létrehozása során. A számítási feladatok identitásának engedélyezése azonban a fürt létrehozása vagy későbbi letiltása után jelenleg nem támogatott.

Előfeltételek

Mielőtt üzembe helyez egy Kubernetes-fürtöt, amelyen engedélyezve van az Azure Arc, a következő előfeltételekkel kell rendelkeznie:

  • Ha nem rendelkezik Azure-előfizetéssel, a kezdés előtt hozzon létre egy ingyenes fiókot.
  • Ez a cikk az Azure CLI 1.4.23-s vagy újabb verzióját igényli. Ha Az Azure Cloud Shellt használja, a legújabb verzió már telepítve van.

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 parancsok olyan környezeti változókat határoznak meg, amelyekre a jelen cikkben szereplő példák hivatkoznak. Cserélje le a következő értékeket a saját értékére:

$AZSubscriptionID = "00000000-0000-0000-0000-000000000000" 
$Location = "westeurope" 
$resource_group_name = "myResourceGroup" 

$aks_cluster_name = "myAKSCluster" 

$SERVICE_ACCOUNT_NAMESPACE = "default" 
$SERVICE_ACCOUNT_NAME = "workload-identity-sa" 

$FedIdCredentialName = "myFedIdentity" 
$MSIName = "myIdentity" 

# To access key vault secrets from a pod in the cluster, include these variables:
$KVName = "KV-workload-id" 
$KVSecretName= "KV-secret"

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. Futtassa az az account set parancsot az előfizetés azonosítójával:

az login  
az account set -s $AZSubscriptionID

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.

Erőforráscsoport létrehozásához futtassa az az group create parancsot:

az group create --name $resource_group_name --location $Location

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

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

1. lépés: AKS Arc-fürt létrehozása a számítási feladatok identitásának engedélyezésével

AKS Arc-fürt létrehozásához az értékekre és $customlocation_ID az $logicnet_Id értékekre is szükség van.

  • $customlocation_ID: Az egyéni hely Azure Resource Manager-azonosítója. Az egyéni hely az Azure Local 23H2-es verziójú fürt üzembe helyezése során kerül konfigurálásra. Az infrastruktúra rendszergazdájának meg kell adnia az egyéni hely Resource Manager-azonosítóját. A Resource Manager-azonosítót $customlocation_ID = $(az customlocation show --name "<your-custom-location-name>" --resource-group $resource_group_name --query "id" -o tsv)akkor is lekérheti, ha az infrastruktúra-rendszergazda egyéni helynevet és erőforráscsoportnevet ad meg.
  • $logicnet_Id: Az Alábbi lépések végrehajtásával létrehozott Azure Local logikai hálózat Azure Resource Manager-azonosítója. Az infrastruktúra rendszergazdájának meg kell adnia a logikai hálózat Resource Manager-azonosítóját. A Resource Manager-azonosítót $logicnet_Id = $(az stack-hci-vm network lnet show --name "<your-lnet-name>" --resource-group $resource_group_name --query "id" -o tsv)akkor is lekérheti, ha az infrastruktúra-rendszergazda logikai hálózatnevet és erőforráscsoportnevet ad meg.

Futtassa az az aksarc create parancsot a --enable-oidc-issuer --enable-workload-identity paraméterrel. Adja meg az entra-admin-group-object-ids azonosítókat , és győződjön meg arról, hogy a Microsoft Entra ID felügyeleti csoport tagja a proxy módú hozzáféréshez:

az aksarc create  
-n $aks_cluster_name -g $resource_group_name  
--custom-location $customlocation_ID --vnet-ids $logicnet_Id  
--aad-admin-group-object-ids <entra-admin-group-object-ids> 
--generate-ssh-keys  
--enable-oidc-issuer --enable-workload-identity

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

A számítási feladat identitásbővítményének üzembe helyezése egy kiépített fürt sikeres létrehozása után eltarthat egy ideig. A számítási feladat identitásbővítményének állapotának ellenőrzéséhez használja a következő parancsot:

az connectedk8s show -n $aks_cluster_name -g $resource_group_name
# agentState = "Succeeded" 
"agentPublicKeyCertificate": "", 
  "agentVersion": "1.21.10", 
  "arcAgentProfile": { 
    "agentAutoUpgrade": "Enabled", 
    "agentErrors": [], 
    "agentState": "Succeeded", 
    "desiredAgentVersion": "", 
    "systemComponents": null 

# oidcIssuerProfile "enabled": true and "issuerUrl" present 

"oidcIssuerProfile": { 
    "enabled": true, 
    "issuerUrl": "https://oidcdiscovery-{location}-endpoint-1111111111111111.000.azurefd.net/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/"}

Az Azure Portalon megtekintheti a wiextension bővítményt a Kubernetes-fürt Tulajdonságok szakaszában.

Fontos

Az AKS Arc-fürtök biztonsági fejlesztése részeként a számítási feladatok identitásának engedélyezése két módosítást indít el. Először is a Kubernetes szolgáltatásfiók aláíró kulcsa 45 naponta automatikusan elfordul, és 90 napig érvényes marad. Másodszor, a --service-account-extend-token-expiration jelző le van tiltva, így a jogkivonat érvényessége egy évről legfeljebb 24 órára csökken.

Az OIDC-kiállító URL-címének mentése környezeti változóba

Az AKS-fürt sikeres létrehozása után lekérheti az OIDC-kiállító URL-címét, és mentheti egy környezeti változóba. Futtassa az alábbi parancsot:

$SERVICE_ACCOUNT_ISSUER =$(az connectedk8s show --n $aks_cluster_name --resource-group $resource_group_name --query "oidcIssuerProfile.issuerUrl" --output tsv)

2. lépés: Kubernetes-szolgáltatásfiók létrehozása és kötése az Azure Managed Identityhez

Először hozzon létre egy felügyelt identitást. Futtassa az az identity create parancsot:

az identity create --name $MSIName --resource-group $resource_group_name --location $Location --subscription $AZSubscriptionID

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

$MSIId=$(az identity show --resource-group $resource_group_name --name $MSIName --query 'clientId' --output tsv)
$MSIPrincipalId=$(az identity show --resource-group $resource_group_name --name $MSIName --query 'principalId' --output tsv)

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

Ebben a lépésben létrehoz egy Kubernetes-szolgáltatásfiókot, és megjegyzést fűz hozzá az előző lépésben létrehozott felügyelt identitás ügyfélazonosítójával.

A fürthöz való hozzáféréshez használja a "cluster connect" funkciót egy ügyféleszközről. További információ: A fürt elérése ügyféleszközről:

az connectedk8s proxy -n $aks_cluster_name -g $resource_group_name

Nyisson meg egy új parancssori ablakot. Másolja és illessze be a következő parancsokat:

$yaml = @"
apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    azure.workload.identity/client-id: $MSIId
  name: $SERVICE_ACCOUNT_NAME
  namespace: $SERVICE_ACCOUNT_NAMESPACE
"@

$yaml = $yaml -replace '\$MSIId', $MSIId `
               -replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME `
               -replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE

$yaml | kubectl apply -f -

A következő kimenet a szolgáltatásfiók sikeres létrehozását mutatja:

serviceaccount/workload-identity-sa created

3. lépés: Összevont hitelesítő adatok létrehozása a felügyelt identitáson az OIDC-kiállító megbízhatóságának érdekében

Először hozzon létre egy összevont identitás hitelesítő adatokat. 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.

# Create a federated credential 

az identity federated-credential create --name $FedIdCredentialName --identity-name $MSIName --resource-group $resource_group_name --issuer $SERVICE_ACCOUNT_ISSUER --subject "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}" 

# Show the federated credential 

az identity federated-credential show --name $FedIdCredentialName --resource-group $resource_group_name --identity-name $MSIName

Feljegyzés

Az összevont identitás hitelesítő adatainak hozzáadása után a propagálás néhány másodpercet vesz igénybe. A közvetlenül utána végrehajtott jogkivonat-kérelmek meghiúsulhatnak, amíg a gyorsítótár nem frissül. A probléma megelőzése érdekében fontolja meg egy rövid késleltetés hozzáadását az összevont identitás hitelesítő adatainak létrehozása után.

4. lépés: 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 tulajdonságokrametadata\namespace.spec\serviceAccountName Mindenképpen adjon meg egy lemezképet image és egy tárolónevet a következőhöz containerName:

$image = "<image>"  # Replace <image> with the actual image name 
$containerName = "<containerName>"  # Replace <containerName> with the actual container name 

$yaml = @" 
apiVersion: v1 
kind: Pod 
metadata: 
  name: sample-quick-start 
  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 
"@ 

# Replace variables within the YAML content 
$yaml = $yaml -replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE ` 
                -replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME 

# Apply the YAML configuration 
$yaml | kubectl apply -f - 

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ása után meghiúsulnak.

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

Az ebben a lépésben ismertetett utasítások azt mutatják be, 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:

    az keyvault create --name $KVName --resource-group $resource_group_name --location $Location --enable-purge-protection --enable-rbac-authorization
    
    # retrieve the key vault ID for role assignment
    $KVId=$(az keyvault show --resource-group $resource_group_name --name $KVName --query id --output tsv)
    
  2. Rendelje hozzá saját magához az RBAC Key Vault titkos kulcstartójának szerepkörét , hogy titkos kulcsokat hozzon létre az új kulcstartóban. Az új szerepkör-hozzárendelések propagálása és frissítése akár öt percet is igénybe vehet.

    $CALLER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
    
    az role assignment create --assignee-object-id $CALLER_OBJECT_ID --role "Key Vault Secrets Officer" --scope $KVId --assignee-principal-type ServicePrincipal
    
  3. Hozzon létre egy titkos kulcsot a kulcstartóban:

    az keyvault secret set --vault-name $KVName --name $KVSecretName --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:

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

    $KVUrl=$(az keyvault show --resource-group $resource_group_name --name $KVName --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:

    $yaml = @" 
    apiVersion: v1 
    kind: Pod 
    metadata: 
      name: sample-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: $KVUrl 
          - name: SECRET_NAME 
            value: $KVSecretName 
      nodeSelector: 
        kubernetes.io/os: linux 
    "@ 
    
    # Replace variables within the YAML content 
    $yaml = $yaml -replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE ` 
                    -replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME ` 
                    -replace '\$KVUrl', $KVUrl ` 
                    -replace '\$KVSecretName', $KVSecretName 
    
    # Apply the YAML configuration 
    $yaml | kubectl --kubeconfig <path-to-aks-cluster-kubeconfig> apply -f -
    

AKS Arc-fürt törlése

Az AKS Arc-fürt törléséhez használja az az aksarc delete parancsot:

az aksarc delete -n $aks_cluster_name -g $resource_group_name

Feljegyzés

A PodDisruptionBudget (PDB) erőforrásokkal rendelkező AKS Arc-fürt törlésekor ismert probléma merül fel: előfordulhat, hogy a törlés nem távolítja el ezeket a PDB-erőforrásokat. A Microsoft tisztában van a problémával, és dolgozik a javításon.

A PDB alapértelmezés szerint telepítve van a számítási feladat identitás-kompatibilis AKS Arc-fürtöiben. Munkaterheléssel azonosított AKS Arc-fürt törléséhez tekintse meg a hibaelhárítási útmutatót.

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.