Microsoft Entra pod által felügyelt identitások használata az Azure Kubernetes Service-ben (előzetes verzió)

A Microsoft Entra pod által felügyelt identitások Kubernetes-primitívekkel társítják az Azure-erőforrások és -identitások felügyelt identitásait a Microsoft Entra ID-ban podokkal. Rendszergazda istratorok identitásokat és kötéseket hoznak létre Kubernetes-primitívként, amelyek lehetővé teszik a podok számára, hogy hozzáférjenek a Microsoft Entra-azonosítóra mint identitásszolgáltatóra támaszkodó Azure-erőforrásokhoz.

Fontos

Javasoljuk, hogy tekintse át Microsoft Entra Számítási feladat ID. Ez a hitelesítési módszer felváltja a pod által felügyelt identitást (előzetes verzió), amely integrálva van a Kubernetes natív képességeivel, hogy összefésüljenek az alkalmazás nevében bármely külső identitásszolgáltatóval.

Az Azure Kubernetes Service nyílt forráskód Microsoft Entra pod által felügyelt identitása (előzetes verzió) 2022.10.24-én elavult, a projekt pedig 2023 szeptemberében archiválva lett. További információt az elavulásról szóló közleményben talál. Az AKS által felügyelt bővítmény 2024 szeptemberében kezdi elavulni.

A felügyelt AKS-bővítmény letiltásához használja a következő parancsot: az feature unregister --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview".

Mielőtt elkezdené

Az Azure CLI 2.20.0-s vagy újabb verziójának telepítve kell lennie.

Korlátozások

  • Egy fürthöz legfeljebb 200 pod által felügyelt identitás engedélyezett.
  • Fürt esetén legfeljebb 200 pod által felügyelt identitás kivétele engedélyezett.
  • A pod által felügyelt identitások csak Linux-csomópontkészleteken érhetők el.
  • Ez a funkció csak a virtuálisgép-méretezési csoportok által támogatott fürtök esetében támogatott.

Az aks-preview Azure CLI-bővítmény telepítése

Fontos

Az AKS előzetes verziójú funkciói ö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 AKS előzetes verzióit részben az ügyfélszolgálat fedezi a legjobb munkamennyiség alapján. Ezért ezek a funkciók nem éles használatra vannak szánva. További információkért tekintse meg az alábbi támogatási cikkeket:

Az aks-preview bővítmény telepítéséhez futtassa a következő parancsot:

az extension add --name aks-preview

Futtassa a következő parancsot a bővítmény legújabb verziójára való frissítéshez:

az extension update --name aks-preview

Regisztrálja az EnablePodIdentityPreview funkciójelzőt

Regisztrálja a EnablePodIdentityPreview funkciójelzőt az az feature register paranccsal, ahogyan az az alábbi példában látható:

az feature register --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"

Néhány percig tart, amíg az állapot megjelenik a Regisztrált állapotban. Ellenőrizze a regisztrációs állapotot az az feature show paranccsal:

az feature show --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"

Ha az állapot a Regisztrált állapotot tükrözi, frissítse a Microsoft.ContainerService erőforrás-szolgáltató regisztrációját az az provider register paranccsal:

az provider register --namespace Microsoft.ContainerService

Műveleti mód beállításai

A Microsoft Entra pod által felügyelt identitás két működési módot támogat:

  • Standard mód: Ebben a módban a következő két összetevő van üzembe helyezve az AKS-fürtben:
    • Felügyelt identitásvezérlő (MIC): A MIC egy Kubernetes-vezérlő, amely a Kubernetes API-kiszolgálón keresztül figyeli a podok, az AzureIdentity és az AzureIdentityBinding módosításait. Ha releváns módosítást észlel, a MIC szükség szerint hozzáadja vagy törli az AzureAssignedIdentitást . Konkrétan egy pod ütemezésekor a MIC hozzárendeli a felügyelt identitást az Azure-ban a csomópontkészlet által a létrehozási fázisban használt mögöttes virtuálisgép-méretezési csoporthoz. Az identitást használó összes pod törlésekor eltávolítja az identitást a csomópontkészlet virtuálisgép-méretezési csoportjából, kivéve, ha ugyanazt a felügyelt identitást más podok használják. A MIC hasonló műveleteket hajt végre az AzureIdentity vagy az AzureIdentityBinding létrehozásakor vagy törlésekor.
    • Csomópontalapú felügyelt identitás (NMI): Az NMI egy pod, amely DaemonSetként fut az AKS-fürt minden csomópontján. Az NMI minden csomóponton elfogja a biztonsági jogkivonat-kéréseket az Azure Instance Metadata Szolgáltatáshoz , magára irányítja őket, és ellenőrzi, hogy a pod hozzáfér-e ahhoz az identitáshoz, amelyhez jogkivonatot kér, és az alkalmazás nevében lekéri a jogkivonatot a Microsoft Entra-bérlőtől.
  • Felügyelt mód: Ez a mód csak NMI-t kínál. Amikor az AKS-fürt bővítményén keresztül telepíti, az Azure felügyeli a Kubernetes-primitívek (AzureIdentity és AzureIdentityBinding) létrehozását és identitás-hozzárendelést a felhasználó parancssori felületi parancsaira válaszul. Ellenkező esetben, ha Helm-diagramon keresztül van telepítve, az identitást manuálisan kell hozzárendelnie és kezelnie kell a felhasználónak. További információ: Pod identity in managed mode.

Ha a Microsoft Entra pod által felügyelt identitást Helm-diagramon vagy YAML-jegyzéken keresztül telepíti a telepítési útmutatóban látható módon, választhat a mód és managed a standard mód között. Ha ehelyett úgy dönt, hogy telepíti a Microsoft Entra pod által felügyelt identitást az AKS-fürt bővítményével, ahogyan az ebben a cikkben látható, a beállítás a managed módot fogja használni.

AKS-fürt létrehozása az Azure Container Networking Interface (CNI) használatával

Feljegyzés

Ez az alapértelmezett ajánlott konfiguráció

Hozzon létre egy AKS-fürtöt, amelyen engedélyezve van az Azure CNI és a pod által felügyelt identitás. Az alábbi parancsok az az group create használatával létrehoznak egy myResourceGroup nevű erőforráscsoportot, az az aks create parancs pedig egy myAKSCluster nevű AKS-fürtöt a myResourceGroup erőforráscsoportban.

az group create --name myResourceGroup --location eastus
az aks create -g myResourceGroup -n myAKSCluster --enable-pod-identity --network-plugin azure

Az az aks get-credentials használatával jelentkezzen be az AKS-fürtbe. Ez a parancs letölti és konfigurálja az kubectl ügyféltanúsítványt a fejlesztői számítógépen.

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Feljegyzés

Ha engedélyezi a pod által felügyelt identitást az AKS-fürtön, a rendszer hozzáad egy AzurePodIdentityException nevű aks-addon-exception nevet a kube-system névtérhez. Az AzurePodIdentityException lehetővé teszi, hogy bizonyos címkékkel rendelkező podok az NMI-kiszolgáló elfogása nélkül érhessék el az Azure Instance Metadata Service (IMDS) végpontját. Az aks-addon-exception lehetővé teszi az AKS belső bővítmények, például a Microsoft Entra pod által felügyelt identitások működését anélkül, hogy manuálisan konfigurálnia kellene egy AzurePodIdentityExceptionet. Igény szerint hozzáadhat, eltávolíthat és frissíthet egy AzurePodIdentityException az aks pod-identity exception addeszközt az , az aks pod-identity exception deleteaz aks pod-identity exception updatevagy kubectl.

Meglévő AKS-fürt frissítése az Azure CNI-vel

Frissítsen egy meglévő AKS-fürtöt az Azure CNI-vel, hogy pod által felügyelt identitást is tartalmazzon.

az aks update -g $MY_RESOURCE_GROUP -n $MY_CLUSTER --enable-pod-identity

A Kubenet hálózati beépülő modul használata a Microsoft Entra pod által felügyelt identitásaival

Fontos

A Microsoft Entra pod által felügyelt identitás kubenettel való futtatása biztonsági problémák miatt nem ajánlott konfiguráció. Az alapértelmezett Kubenet-konfiguráció nem akadályozza meg az ARP-hamisítást, amelyet egy pod felhasználhat egy másik podként való működéshez, és hozzáférést kaphat egy olyan identitáshoz, amelyet nem kíván használni. A Microsoft Entra pod által felügyelt identitás kubenettel való engedélyezése előtt kövesse a kockázatcsökkentési lépéseket és konfigurálja a szabályzatokat.

Kockázatcsökkentés

A fürt szintjén a biztonsági rés csökkentése érdekében a "Kubernetes-fürttárolóknak csak engedélyezett képességeket kell használniuk" azure-beli beépített szabályzattal korlátozhatja a CAP_NET_RAW támadást.

NET_RAW hozzáadása a "Szükséges ledobási képességekhez"

image

Ha nem az Azure Policyt használja, használhatja az OpenPolicyAgent belépési vezérlőt a Gatekeeper webhook-ellenőrzésével együtt. Ha már telepítve van a Gatekeeper a fürtben, adja hozzá a K8sPSPCapabilities típusú ConstraintTemplate elemet:

kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper-library/master/library/pod-security-policy/capabilities/template.yaml

Adjon hozzá egy sablont, amely korlátozza a podok ívását a NET_RAW képességgel:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPCapabilities
metadata:
  name: prevent-net-raw
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    excludedNamespaces:
      - "kube-system"
  parameters:
    requiredDropCapabilities: ["NET_RAW"]

AKS-fürt létrehozása a Kubenet hálózati beépülő modullal

Hozzon létre egy AKS-fürtöt, amelyen engedélyezve van a Kubenet hálózati beépülő modulja és a pod által felügyelt identitás.

az aks create -g $MY_RESOURCE_GROUP -n $MY_CLUSTER --enable-pod-identity --enable-pod-identity-with-kubenet

Meglévő AKS-fürt frissítése a Kubenet hálózati beépülő modullal

Frissítsen egy meglévő AKS-fürtöt a Kubenet hálózati beépülő modullal a pod által felügyelt identitások belefoglalásához.

az aks update -g $MY_RESOURCE_GROUP -n $MY_CLUSTER --enable-pod-identity --enable-pod-identity-with-kubenet

Identitás létrehozása

Fontos

Az identitás létrehozásához rendelkeznie kell az előfizetés megfelelő engedélyével (például tulajdonosával).

Hozzon létre egy identitást, amelyet a bemutató pod az identity create és set the IDENTITY_CLIENT_ID és IDENTITY_RESOURCE_ID változókkal fog használni.

az group create --name myIdentityResourceGroup --location eastus
export IDENTITY_RESOURCE_GROUP="myIdentityResourceGroup"
export IDENTITY_NAME="application-identity"
az identity create --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME}
export IDENTITY_CLIENT_ID="$(az identity show -g ${IDENTITY_RESOURCE_GROUP} -n ${IDENTITY_NAME} --query clientId -otsv)"
export IDENTITY_RESOURCE_ID="$(az identity show -g ${IDENTITY_RESOURCE_GROUP} -n ${IDENTITY_NAME} --query id -otsv)"

Engedélyek hozzárendelése a felügyelt identitáshoz

A podhoz hozzárendelt felügyelt identitásnak olyan engedélyeket kell adni, amelyek megfelelnek a végrehajtandó műveleteknek.

A bemutató futtatásához a IDENTITY_CLIENT_ID felügyelt identitásnak virtuálisgép-közreműködői engedélyekkel kell rendelkeznie abban az erőforráscsoportban, amely az AKS-fürt virtuálisgép-méretezési csoportját tartalmazza.

# Obtain the name of the resource group containing the Virtual Machine Scale set of your AKS cluster, commonly called the node resource group
NODE_GROUP=$(az aks show -g myResourceGroup -n myAKSCluster --query nodeResourceGroup -o tsv)

# Obtain the id of the node resource group 
NODES_RESOURCE_ID=$(az group show -n $NODE_GROUP -o tsv --query "id")

# Create a role assignment granting your managed identity permissions on the node resource group
az role assignment create --role "Virtual Machine Contributor" --assignee "$IDENTITY_CLIENT_ID" --scope $NODES_RESOURCE_ID

Pod-identitás létrehozása

Pod által felügyelt identitás létrehozása a fürthöz a következő használatával az aks pod-identity add: .

export POD_IDENTITY_NAME="my-pod-identity"
export POD_IDENTITY_NAMESPACE="my-app"
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE}  --name ${POD_IDENTITY_NAME} --identity-resource-id ${IDENTITY_RESOURCE_ID}

Feljegyzés

A "POD_IDENTITY_NAME" az RFC 1123-ban meghatározott érvényes DNS-altartománynévnek kell lennie.

Feljegyzés

Ha a pod által felügyelt identitást a használatával pod-identity addrendeli hozzá, az Azure CLI megkísérli a felügyelt identitáskezelő szerepkört a pod által felügyelt identitáson (IDENTITY_RESOURCE_ID) keresztül adni a fürt identitásának.

Az Azure létrehoz egy AzureIdentity-erőforrást a fürtben, amely az Azure-beli identitást jelöli, valamint egy AzureIdentityBinding-erőforrást, amely az AzureIdentitást egy választóhoz köti. Ezeket az erőforrásokat a

kubectl get azureidentity -n $POD_IDENTITY_NAMESPACE
kubectl get azureidentitybinding -n $POD_IDENTITY_NAMESPACE

Mintaalkalmazás futtatása

Ahhoz, hogy egy pod a Microsoft Entra pod által felügyelt identitást használhassa, a podnak szüksége van egy aadpodidbinding címkére, amelynek értéke megegyezik az AzureIdentityBinding választójával. Alapértelmezés szerint a választó megegyezik a pod által felügyelt identitás nevével, de híváskor az aks pod-identity adda beállítással --binding-selector is beállítható.

Ha microsoft Entra pod által felügyelt identitással szeretne mintaalkalmazást futtatni, hozzon létre egy demo.yaml fájlt az alábbi tartalommal. Cserélje le POD_IDENTITY_NAME, IDENTITY_CLIENT_ID és IDENTITY_RESOURCE_GROUP az előző lépések értékeire. Cserélje le SUBSCRIPTION_ID az előfizetés-azonosítóra.

Feljegyzés

Az előző lépésekben létrehozta a POD_IDENTITY_NAME, IDENTITY_CLIENT_ID és IDENTITY_RESOURCE_GROUP változókat. Használhat például echo egy parancsot a változókhoz echo $POD_IDENTITY_NAMEbeállított érték megjelenítéséhez.

apiVersion: v1
kind: Pod
metadata:
  name: demo
  labels:
    aadpodidbinding: $POD_IDENTITY_NAME
spec:
  containers:
  - name: demo
    image: mcr.microsoft.com/oss/azure/aad-pod-identity/demo:v1.6.3
    args:
      - --subscriptionid=$SUBSCRIPTION_ID
      - --clientid=$IDENTITY_CLIENT_ID
      - --resourcegroup=$IDENTITY_RESOURCE_GROUP
    env:
      - name: MY_POD_NAME
        valueFrom:
          fieldRef:
            fieldPath: metadata.name
      - name: MY_POD_NAMESPACE
        valueFrom:
          fieldRef:
            fieldPath: metadata.namespace
      - name: MY_POD_IP
        valueFrom:
          fieldRef:
            fieldPath: status.podIP
  nodeSelector:
    kubernetes.io/os: linux

Figyelje meg, hogy a poddefiníció egy aadpodidbinding címkével rendelkezik, amelynek értéke megegyezik az előző lépésben futtatott az aks pod-identity add pod által felügyelt identitás nevével.

Üzembe helyezés demo.yaml a pod által felügyelt identitással megegyező névtérben a következő használatával kubectl apply:

kubectl apply -f demo.yaml --namespace $POD_IDENTITY_NAMESPACE

Ellenőrizze, hogy a mintaalkalmazás sikeresen fut-e a következő használatával kubectl logs: .

kubectl logs demo --follow --namespace $POD_IDENTITY_NAMESPACE

Ellenőrizze, hogy a naplók egy jogkivonatot mutatnak-e, és hogy a GET művelet sikeres-e.

...
successfully doARMOperations vm count 0
successfully acquired a token using the MSI, msiEndpoint(http://169.254.169.254/metadata/identity/oauth2/token)
successfully acquired a token, userAssignedID MSI, msiEndpoint(http://169.254.169.254/metadata/identity/oauth2/token) clientID(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
successfully made GET on instance metadata
...

Több identitással rendelkező alkalmazás futtatása

Ha engedélyezni szeretné, hogy egy alkalmazás több identitást használjon, állítsa ugyanarra a --binding-selector választóra a pod-identitások létrehozásakor.

az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE}  --name ${POD_IDENTITY_NAME_1} --identity-resource-id ${IDENTITY_RESOURCE_ID_1} --binding-selector myMultiIdentitySelector
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE}  --name ${POD_IDENTITY_NAME_2} --identity-resource-id ${IDENTITY_RESOURCE_ID_2} --binding-selector myMultiIdentitySelector

Ezután állítsa a aadpodidbinding pod YAML mezőjét a megadott kötésválasztóra.

apiVersion: v1
kind: Pod
metadata:
  name: demo
  labels:
    aadpodidbinding: myMultiIdentitySelector
...

Pod által felügyelt identitás letiltása meglévő fürtön

Ha le szeretné tiltani a pod által felügyelt identitást egy meglévő fürtön, távolítsa el a pod által felügyelt identitásokat a fürtből. Ezután tiltsa le a szolgáltatást a fürtben.

az aks pod-identity delete --name ${POD_IDENTITY_NAME} --namespace ${POD_IDENTITY_NAMESPACE} --resource-group myResourceGroup --cluster-name myAKSCluster
az aks update --resource-group myResourceGroup --name myAKSCluster --disable-pod-identity

A fölöslegessé vált elemek eltávolítása

Ha el szeretne távolítani egy Microsoft Entra pod által felügyelt identitást a fürtből, távolítsa el a mintaalkalmazást és a pod által felügyelt identitást a fürtből. Ezután távolítsa el a fürtidentitás identitását és szerepkör-hozzárendelését.

kubectl delete pod demo --namespace $POD_IDENTITY_NAMESPACE
az aks pod-identity delete --name ${POD_IDENTITY_NAME} --namespace ${POD_IDENTITY_NAMESPACE} --resource-group myResourceGroup --cluster-name myAKSCluster
az identity delete -g ${IDENTITY_RESOURCE_GROUP} -n ${IDENTITY_NAME}
az role assignment delete --role "Managed Identity Operator" --assignee "$IDENTITY_CLIENT_ID" --scope "$IDENTITY_RESOURCE_ID"

Következő lépések

A felügyelt identitásokról további információt az Azure-erőforrások felügyelt identitásai című témakörben talál.