Použití identit spravovaných podem Microsoftu ve službě Azure Kubernetes Service (Preview)

Spravované identity Microsoft Entra používají primitivy Kubernetes k přidružení spravovaných identit pro prostředky Azure a identity v Microsoft Entra ID k podům. Správa istrátory vytvářejí identity a vazby jako primitivy Kubernetes, které umožňují podům přistupovat k prostředkům Azure, které jako zprostředkovatele identity spoléhají na Microsoft Entra ID.

Důležité

Doporučujeme vám zkontrolovat ID úloh Microsoft Entra. Tato metoda ověřování nahrazuje identitu spravovanou podem (Preview), která se integruje s nativními možnostmi Kubernetes pro federaci s externími zprostředkovateli identity jménem aplikace.

Opensourcová identita spravovaná podem Microsoft Entra (Preview) ve službě Azure Kubernetes Service byla vyřazena 24. září 2022 a projekt archivovaný v září 2023. Další informace najdete v oznámení o vyřazení. Spravovaný doplněk AKS se zahájí v září 2024.

Chcete-li zakázat spravovaný doplněk AKS, použijte následující příkaz: az feature unregister --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview".

Než začnete

Musíte mít nainstalované Azure CLI verze 2.20.0 nebo novější.

Omezení

  • Pro cluster je povoleno maximálně 200 identit spravovaných podem.
  • Pro cluster je povolené maximálně 200 výjimek identity spravovaných podem.
  • Identity spravované pody jsou k dispozici pouze ve fondech uzlů Linuxu.
  • Tato funkce je podporovaná pouze pro clustery s podporou škálovacích sad virtuálních počítačů.

Instalace rozšíření Azure CLI aks-Preview

Důležité

Funkce AKS ve verzi Preview jsou k dispozici na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Pokud chcete nainstalovat rozšíření aks-preview, spusťte následující příkaz:

az extension add --name aks-preview

Spuštěním následujícího příkazu aktualizujte nejnovější verzi vydaného rozšíření:

az extension update --name aks-preview

Registrace příznaku funkce EnablePodIdentityPreview

EnablePodIdentityPreview Příznak funkce zaregistrujte pomocí příkazu az feature register, jak je znázorněno v následujícím příkladu:

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

Zobrazení stavu Zaregistrované trvá několik minut. Pomocí příkazu az feature show ověřte stav registrace:

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

Pokud se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí příkazu az provider register :

az provider register --namespace Microsoft.ContainerService

Možnosti režimu operace

Identita spravovaná podem Microsoft Entra podporuje dva režimy provozu:

  • Standardní režim: V tomto režimu se do clusteru AKS nasadí následující dvě komponenty:
    • Spravovaný kontroler identit (MIC): MIC je kontroler Kubernetes, který sleduje změny podů, AzureIdentity a AzureIdentityBinding prostřednictvím serveru rozhraní API Kubernetes. Když zjistí relevantní změnu, mic podle potřeby přidá nebo odstraní AzureAssignedIdentity . Konkrétně, když je pod naplánován, mic přiřadí spravovanou identitu v Azure k podkladové škálovací sadě virtuálních počítačů používané fondem uzlů během fáze vytváření. Když se odstraní všechny pody používající identitu, odebere identitu ze škálovací sady virtuálních počítačů fondu uzlů, pokud stejnou spravovanou identitu nepoužívají jiné pody. Mic provádí podobné akce, když se vytvoří nebo odstraní AzureIdentity nebo AzureIdentityBinding.
    • Spravovaná identita uzlu (NMI):NMI je pod, který běží jako daemonSet na každém uzlu v clusteru AKS. NMI zachytí žádosti o token zabezpečení do služby Azure Instance Metadata Service na každém uzlu, přesměruje je na sebe a ověří, jestli má pod přístup k identitě, pro kterou požaduje token, a načte token z tenanta Microsoft Entra jménem aplikace.
  • Spravovaný režim: Tento režim nabízí pouze NMI. Při instalaci prostřednictvím doplňku clusteru AKS spravuje Azure vytváření primitiv Kubernetes (AzureIdentity a AzureIdentityBinding) a přiřazení identity v reakci na příkazy rozhraní příkazového řádku uživatelem. V opačném případě, pokud je nainstalovaná prostřednictvím chartu Helm, musí být identita přiřazena a spravována uživatelem ručně. Další informace najdete v tématu Identita podu ve spravovaném režimu.

Když nainstalujete identitu spravovanou podem Microsoft Entra prostřednictvím chartu Helm nebo manifestu YAML, jak je znázorněno v průvodci instalací, můžete si vybrat mezi režimem standard a managed režimem. Pokud se místo toho rozhodnete nainstalovat identitu spravovanou podem Microsoft Entra pomocí doplňku clusteru AKS, jak je znázorněno v tomto článku, použije instalační program managed režim.

Vytvoření clusteru AKS pomocí rozhraní CNI (Azure Container Networking Interface)

Poznámka:

Toto je výchozí doporučená konfigurace.

Vytvořte cluster AKS s povolenou identitou azure CNI a spravovanou podem. Následující příkazy používají az group create k vytvoření skupiny prostředků s názvem myResourceGroup a příkaz az aks create k vytvoření clusteru AKS s názvem myAKSCluster ve skupině prostředků myResourceGroup .

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

Pomocí příkazu az aks get-credentials se přihlaste ke clusteru AKS. Tento příkaz také stáhne a nakonfiguruje kubectl klientský certifikát na vývojovém počítači.

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

Poznámka:

Když v clusteru AKS povolíte identitu spravovanou podem, přidá se do oboru názvů kube-system výjimka AzurePodIdentityException s názvem aks-addon-exception. Výjimka AzurePodIdentityException umožňuje podům s určitými popisky přistupovat ke koncovému bodu služby Azure Instance Metadata Service (IMDS) bez zachycení serverem NMI. Výjimka aks-addon-exception umožňuje, aby doplňky AKS první strany, jako je například identita spravovaná podem Microsoftu, fungovaly bez nutnosti ruční konfigurace výjimky AzurePodIdentityException. Volitelně můžete přidat, odebrat a aktualizovat výjimku AzurePodIdentityException pomocí az aks pod-identity exception add, az aks pod-identity exception delete, az aks pod-identity exception updatenebo kubectl.

Aktualizace existujícího clusteru AKS pomocí Azure CNI

Aktualizujte existující cluster AKS pomocí Azure CNI tak, aby zahrnoval identitu spravovanou podem.

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

Použití síťového modulu plug-in Kubenet s identitami spravovanými pody Microsoft Entra

Důležité

Spuštění identity spravované podem Microsoft Entra v clusteru s Kubenetem se nedoporučuje kvůli obavám zabezpečení. Výchozí konfigurace Kubenetu nemůže zabránit falšování identity protokolu ARP, které může pod využít k tomu, aby fungoval jako jiný pod a získal přístup k identitě, kterou nemá mít. Než povolíte identitu spravovanou podem Microsoftu v clusteru s Kubenetem, postupujte podle kroků pro zmírnění rizik a nakonfigurujte zásady.

Zmírnění

Pokud chcete zmírnit ohrožení zabezpečení na úrovni clusteru, můžete použít předdefinované zásady Azure "Kontejnery clusteru Kubernetes by měly používat pouze povolené možnosti" k omezení CAP_NET_RAW útoku.

Přidání NET_RAW do požadovaných možností vyřazení

image

Pokud azure Policy nepoužíváte, můžete použít kontroler přístupu OpenPolicyAgent společně s ověřováním webhooku Gatekeeper. Pokud už máte v clusteru nainstalovaný Gatekeeper, přidejte constraintTemplate typu K8sPSPCapabilities:

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

Přidejte šablonu, která omezí vytváření podů pomocí možnosti NET_RAW:

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"]

Vytvoření clusteru AKS pomocí síťového modulu plug-in Kubenet

Vytvořte cluster AKS s povoleným modulem plug-in sítě Kubenet a identitou spravovanou podem.

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

Aktualizace existujícího clusteru AKS pomocí modulu plug-in sítě Kubenet

Aktualizujte existující cluster AKS pomocí síťového modulu plug-in Kubenet tak, aby zahrnoval identitu spravovanou podem.

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

Vytvoření identity

Důležité

Abyste mohli vytvořit identitu, musíte mít příslušná oprávnění (například Vlastník) ve vašem předplatném.

Vytvořte identitu, kterou bude používat ukázkový pod pomocí příkazu az identity create a nastavte IDENTITY_CLIENT_ID a IDENTITY_RESOURCE_ID proměnných.

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)"

Přiřazení oprávnění pro spravovanou identitu

Spravovaná identita, která se přiřadí podu, musí mít udělená oprávnění, která odpovídají akcím, které bude provádět.

Pokud chcete spustit ukázku, musí mít spravovaná identita IDENTITY_CLIENT_ID oprávnění Přispěvatel virtuálních počítačů ve skupině prostředků, která obsahuje škálovací sadu virtuálních počítačů vašeho clusteru AKS.

# 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

Vytvoření identity podu

Vytvořte identitu spravovanou podem pro cluster pomocí 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}

Poznámka:

"POD_IDENTITY_NAME" musí být platný název subdomény DNS definovaný v DOKUMENTU RFC 1123.

Poznámka:

Když přiřadíte identitu spravovanou podem pomocí pod-identity add, Azure CLI se pokusí udělit roli operátora spravované identity nad identitou spravovanou podem (IDENTITY_RESOURCE_ID) identitě clusteru.

Azure ve vašem clusteru vytvoří prostředek AzureIdentity představující identitu v Azure a prostředek AzureIdentityBinding, který připojí AzureIdentity k selektoru. Tyto prostředky můžete zobrazit pomocí

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

Spuštění ukázkové aplikace

Aby pod používal identitu spravovanou podem Microsoft Entra, potřebuje pod popisek aadpodidbinding s hodnotou, která odpovídá selektoru z AzureIdentityBinding. Ve výchozím nastavení se selektor odpovídá názvu podem spravované identity, ale lze ji také nastavit pomocí --binding-selector možnosti při volání az aks pod-identity add.

Pokud chcete spustit ukázkovou aplikaci pomocí identity spravované podem Microsoft Entra, vytvořte demo.yaml soubor s následujícím obsahem. Nahraďte hodnoty POD_IDENTITY_NAME, IDENTITY_CLIENT_ID a IDENTITY_RESOURCE_GROUP hodnotami z předchozích kroků. Nahraďte SUBSCRIPTION_ID ID předplatného.

Poznámka:

V předchozích krocích jste vytvořili proměnné POD_IDENTITY_NAME, IDENTITY_CLIENT_ID a IDENTITY_RESOURCE_GROUP . Můžete použít příkaz, například echo k zobrazení hodnoty, kterou jste nastavili pro proměnné, například echo $POD_IDENTITY_NAME.

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

Všimněte si, že definice podu má popisek aadpodidbinding s hodnotou, která odpovídá názvu spravované identity podu, kterou jste spustili az aks pod-identity add v předchozím kroku.

Nasazení demo.yaml do stejného oboru názvů jako identita spravovaná podem pomocí kubectl apply:

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

Ověřte, že ukázková aplikace úspěšně běží pomocí kubectl logspříkazu .

kubectl logs demo --follow --namespace $POD_IDENTITY_NAMESPACE

Ověřte, že protokoly ukazují úspěšné získání tokenu a operace GET je úspěšná.

...
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
...

Spuštění aplikace s více identitami

Pokud chcete aplikaci povolit použití více identit, nastavte --binding-selector při vytváření identit podů stejný selektor.

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

Potom nastavte aadpodidbinding pole v yaml podu na selektor vazby, který jste zadali.

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

Zakázání identity spravované podem v existujícím clusteru

Pokud chcete zakázat identitu spravovanou podem v existujícím clusteru, odeberte z clusteru identity spravované pody. Potom tuto funkci v clusteru zakažte.

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

Vyčištění

Pokud chcete z clusteru odebrat identitu spravovanou podem Microsoft Entra, odeberte z clusteru ukázkovou aplikaci a identitu spravovanou podem. Pak odeberte identitu a přiřazení role identity clusteru.

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"

Další kroky

Další informace o spravovaných identitách najdete v tématu Spravované identity pro prostředky Azure.