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 add
eszközt az , az aks pod-identity exception delete
az aks pod-identity exception update
vagy 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"
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 add
rendeli 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 add
a 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_NAME
beá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.