Używanie tożsamości zarządzanych przez zasobniki firmy Microsoft w usłudze Azure Kubernetes Service (wersja zapoznawcza)

Tożsamości zarządzane przez pod firmy Microsoft używają elementów pierwotnych platformy Kubernetes do kojarzenia tożsamości zarządzanych dla zasobów i tożsamości platformy Azure w usłudze Microsoft Entra ID z zasobnikami. Administracja istratory tworzą tożsamości i powiązania jako typy pierwotne platformy Kubernetes, które umożliwiają zasobnikom platformy Azure dostęp do zasobów platformy Azure korzystających z identyfikatora Entra firmy Microsoft jako dostawcy tożsamości.

Ważne

Zalecamy przejrzenie Tożsamość obciążeń Microsoft Entra. Ta metoda uwierzytelniania zastępuje tożsamość zarządzaną zasobnika (wersja zapoznawcza), która integruje się z natywnymi funkcjami platformy Kubernetes w celu federacji z dowolnymi zewnętrznymi dostawcami tożsamości w imieniu aplikacji.

Tożsamość zarządzana typu open source firmy Microsoft Entra (wersja zapoznawcza) w usłudze Azure Kubernetes Service została uznana za przestarzałą w dniu 24.01.2022 r. i zarchiwizowana projekt we wrześniu 2023 r. Aby uzyskać więcej informacji, zobacz powiadomienie o wycofaniu. Dodatek zarządzany przez usługę AKS rozpoczyna wycofywanie we wrześniu 2024 r.

Aby wyłączyć dodatek zarządzany przez usługę AKS, użyj następującego polecenia: az feature unregister --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview".

Zanim rozpoczniesz

Musisz mieć zainstalowany interfejs wiersza polecenia platformy Azure w wersji 2.20.0 lub nowszej.

Ograniczenia

  • Dla klastra dozwolonych jest maksymalnie 200 tożsamości zarządzanych zasobników.
  • Dla klastra dozwolonych jest maksymalnie 200 wyjątków tożsamości zarządzanych zasobników.
  • Tożsamości zarządzane przez zasobniki są dostępne tylko w pulach węzłów systemu Linux.
  • Ta funkcja jest obsługiwana tylko w przypadku klastrów opartych na zestawach skalowania maszyn wirtualnych.

Instalowanie rozszerzenia interfejsu wiersza polecenia platformy Azure w wersji zapoznawczej usługi aks

Ważne

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:

Aby zainstalować rozszerzenie aks-preview, uruchom następujące polecenie:

az extension add --name aks-preview

Uruchom następujące polecenie, aby zaktualizować do najnowszej wersji wydanego rozszerzenia:

az extension update --name aks-preview

Rejestrowanie flagi funkcji "EnablePodIdentityPreview"

Zarejestruj flagę EnablePodIdentityPreview funkcji przy użyciu polecenia az feature register , jak pokazano w poniższym przykładzie:

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

Wyświetlenie stanu Zarejestrowane trwa kilka minut. Sprawdź stan rejestracji przy użyciu polecenia az feature show :

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

Gdy stan będzie odzwierciedlał wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService , używając polecenia az provider register :

az provider register --namespace Microsoft.ContainerService

Opcje trybu akcji

Tożsamość zarządzana zasobnika firmy Microsoft obsługuje dwa tryby operacji:

  • Tryb standardowy: w tym trybie dwa następujące składniki są wdrażane w klastrze usługi AKS:
    • Managed Identity Controller (MIC): MIC to kontroler Kubernetes, który obserwuje zmiany w zasobnikach, AzureIdentity i AzureIdentityBinding za pośrednictwem serwera interfejsu API Kubernetes. Po wykryciu odpowiedniej zmiany mikrofon dodaje lub usuwa element AzureAssignedIdentity zgodnie z potrzebami. W szczególności, gdy zasobnik jest zaplanowany, mic przypisuje tożsamość zarządzaną na platformie Azure do bazowego zestawu skalowania maszyn wirtualnych używanych przez pulę węzłów w fazie tworzenia. Usunięcie wszystkich zasobników korzystających z tożsamości powoduje usunięcie tożsamości z zestawu skalowania maszyn wirtualnych puli węzłów, chyba że ta sama tożsamość zarządzana jest używana przez inne zasobniki. Mic wykonuje podobne akcje, gdy tworzone lub usuwane są identyfikatory AzureIdentityBinding lub AzureIdentityBinding.
    • Tożsamość zarządzana węzła (NMI): NMI to zasobnik, który działa jako element DaemonSet w każdym węźle w klastrze usługi AKS. Usługa NMI przechwytuje żądania tokenu zabezpieczającego do usługi Azure Instance Metadata Service w każdym węźle, przekierowuje je do samego siebie i sprawdza, czy zasobnik ma dostęp do tożsamości, dla której żąda tokenu i pobiera token z dzierżawy microsoft Entra w imieniu aplikacji.
  • Tryb zarządzany: ten tryb oferuje tylko NMI. Po zainstalowaniu za pośrednictwem dodatku klastra usługi AKS platforma Azure zarządza tworzeniem elementów pierwotnych Kubernetes (AzureIdentity i AzureIdentityBinding) oraz przypisywania tożsamości w odpowiedzi na polecenia interfejsu wiersza polecenia przez użytkownika. W przeciwnym razie w przypadku instalacji za pomocą pakietu Helm tożsamość musi zostać ręcznie przypisana i zarządzana przez użytkownika. Aby uzyskać więcej informacji, zobacz Tożsamość zasobnika w trybie zarządzanym.

Po zainstalowaniu tożsamości zarządzanej przez zasobnik firmy Microsoft za pomocą pakietu Helm lub manifestu YAML, jak pokazano w przewodniku instalacji, możesz wybrać tryb standard i managed . Jeśli zamiast tego zdecydujesz się zainstalować tożsamość zarządzaną zasobnika firmy Microsoft przy użyciu dodatku klastra usługi AKS, jak pokazano w tym artykule, konfiguracja będzie używać managed trybu.

Tworzenie klastra usługi AKS za pomocą interfejsu azure Container Networking Interface (CNI)

Uwaga

Jest to domyślna zalecana konfiguracja

Utwórz klaster usługi AKS z włączoną usługą Azure CNI i tożsamością zarządzaną zasobnika. Następujące polecenia używają polecenia az group create, aby utworzyć grupę zasobów o nazwie myResourceGroup i polecenie az aks create, aby utworzyć klaster usługi AKS o nazwie myAKSCluster w grupie zasobów myResourceGroup.

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

Użyj polecenia az aks get-credentials , aby zalogować się do klastra usługi AKS. To polecenie powoduje również pobranie i skonfigurowanie certyfikatu kubectl klienta na komputerze dewelopera.

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

Uwaga

Po włączeniu tożsamości zarządzanej zasobnika w klastrze usługi AKS dodawany jest wyjątek AzurePodIdentityException o nazwie aks-addon-exception do przestrzeni nazw kube-system . Wyjątek AzurePodIdentityException umożliwia zasobnikom z określonymi etykietami dostęp do punktu końcowego usługi Azure Instance Metadata Service (IMDS) bez przechwytywania przez serwer NMI. Wyjątek aks-addon-exception zezwala na działanie dodatków pierwszej firmy AKS, takich jak tożsamość zarządzana zasobnika firmy Microsoft, bez konieczności ręcznego konfigurowania elementu AzurePodIdentityException. Opcjonalnie możesz dodawać, usuwać i aktualizować element AzurePodIdentityException przy użyciu metody az aks pod-identity exception add, , az aks pod-identity exception deleteaz aks pod-identity exception updatelub kubectl.

Aktualizowanie istniejącego klastra usługi AKS za pomocą usługi Azure CNI

Zaktualizuj istniejący klaster usługi AKS za pomocą usługi Azure CNI, aby uwzględnić tożsamość zarządzaną zasobnika.

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

Używanie wtyczki sieci Kubenet z tożsamościami zarządzanymi przez zasobniki firmy Microsoft

Ważne

Uruchamianie tożsamości zarządzanej zasobnika firmy Microsoft w klastrze z rozwiązaniem Kubenet nie jest zalecaną konfiguracją ze względu na obawy dotyczące zabezpieczeń. Domyślna konfiguracja rozwiązania Kubenet nie może zapobiec fałszowaniu protokołu ARP, które może być używane przez zasobnik do działania jako inny zasobnik i uzyskiwania dostępu do tożsamości, której nie ma mieć. Wykonaj kroki ograniczania ryzyka i skonfiguruj zasady przed włączeniem tożsamości zarządzanej przez pod firmy Microsoft w klastrze za pomocą rozwiązania Kubenet.

Czynności zapobiegawcze

Aby wyeliminować tę lukę w zabezpieczeniach na poziomie klastra, możesz użyć wbudowanych zasad platformy Azure "Kontenery klastrów Kubernetes powinny używać tylko dozwolonych możliwości", aby ograniczyć atak CAP_NET_RAW.

Dodawanie NET_RAW do opcji "Wymagane możliwości upuszczania"

image

Jeśli nie używasz usługi Azure Policy, możesz użyć kontrolera dostępu OpenPolicyAgent razem z elementem webhook sprawdzania poprawności elementu webhook przez program Gatekeeper. Jeśli program Gatekeeper jest już zainstalowany w klastrze, dodaj ograniczenie typu K8sPSPCapabilities:

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

Dodaj szablon, aby ograniczyć tworzenie zasobników przy użyciu NET_RAW możliwości:

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

Tworzenie klastra usługi AKS za pomocą wtyczki sieci Kubenet

Utwórz klaster usługi AKS z włączoną wtyczką sieci kubenet i tożsamością zarządzaną zasobnika.

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

Aktualizowanie istniejącego klastra usługi AKS za pomocą wtyczki sieciowej kubenet

Zaktualizuj istniejący klaster usługi AKS za pomocą wtyczki sieci Kubenet, aby uwzględnić tożsamość zarządzaną zasobnika.

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

Tworzenie tożsamości

Ważne

Aby utworzyć tożsamość, musisz mieć odpowiednie uprawnienia (na przykład właściciel).

Utwórz tożsamość, która będzie używana przez zasobnik demonstracyjny za pomocą polecenia az identity create i ustaw zmienne IDENTITY_CLIENT_ID i IDENTITY_RESOURCE_ID .

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

Przypisywanie uprawnień dla tożsamości zarządzanej

Tożsamość zarządzana, która zostanie przypisana do zasobnika, musi mieć przyznane uprawnienia zgodne z akcjami, które będą podejmowane.

Aby uruchomić pokaz, tożsamość zarządzana IDENTITY_CLIENT_ID musi mieć uprawnienia Współautor maszyny wirtualnej w grupie zasobów zawierającej zestaw skalowania maszyn wirtualnych klastra 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

Tworzenie tożsamości zasobnika

Utwórz tożsamość zarządzaną zasobnika dla klastra przy użyciu polecenia 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}

Uwaga

"POD_IDENTITY_NAME" musi być prawidłową nazwą poddomeny DNS zdefiniowaną w dokumencie RFC 1123.

Uwaga

Po przypisaniu tożsamości zarządzanej przez zasobnik przy użyciu programu pod-identity addinterfejs wiersza polecenia platformy Azure próbuje udzielić roli Operator tożsamości zarządzanej za pośrednictwem tożsamości zarządzanej zasobnika (IDENTITY_RESOURCE_ID) do tożsamości klastra.

Platforma Azure utworzy zasób AzureIdentity w klastrze reprezentującym tożsamość na platformie Azure oraz zasób AzureIdentityBinding, który łączy azureIdentity z selektorem. Możesz wyświetlić te zasoby za pomocą polecenia

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

Uruchamianie przykładowej aplikacji

Aby zasobnik używał tożsamości zarządzanej przez zasobników firmy Microsoft, zasobnik wymaga etykiety aadpodidbinding z wartością zgodną z selektorem z elementu AzureIdentityBinding. Domyślnie selektor będzie pasował do nazwy tożsamości zarządzanej przez zasobnik, ale można go również ustawić przy użyciu --binding-selector opcji podczas wywoływania metody az aks pod-identity add.

Aby uruchomić przykładową aplikację przy użyciu tożsamości zarządzanej przez zasobnika firmy Microsoft, utwórz demo.yaml plik z następującą zawartością. Zastąp wartości POD_IDENTITY_NAME, IDENTITY_CLIENT_ID i IDENTITY_RESOURCE_GROUP wartościami z poprzednich kroków. Zastąp SUBSCRIPTION_ID identyfikatorem subskrypcji.

Uwaga

W poprzednich krokach utworzono zmienne POD_IDENTITY_NAME, IDENTITY_CLIENT_ID i IDENTITY_RESOURCE_GROUP . Możesz użyć polecenia, takiego jak echo , aby wyświetlić wartość ustawioną dla zmiennych, na przykład 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

Zwróć uwagę, że definicja zasobnika ma etykietę aadpodidbinding z wartością zgodną z nazwą tożsamości zarządzanej zasobnika uruchomionej az aks pod-identity add w poprzednim kroku.

Wdróż demo.yaml w tej samej przestrzeni nazw co tożsamość zarządzana zasobnika przy użyciu polecenia kubectl apply:

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

Sprawdź, czy przykładowa aplikacja została pomyślnie uruchomiona przy użyciu polecenia kubectl logs.

kubectl logs demo --follow --namespace $POD_IDENTITY_NAMESPACE

Sprawdź, czy dzienniki pokazują, że token został pomyślnie uzyskany, a operacja GET zakończyła się pomyślnie.

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

Uruchamianie aplikacji z wieloma tożsamościami

Aby umożliwić aplikacji używanie wielu tożsamości, ustaw --binding-selector ten sam selektor podczas tworzenia tożsamości zasobnika.

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

Następnie ustaw pole w zasobniku aadpodidbinding YAML na określony selektor powiązań.

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

Wyłączanie tożsamości zarządzanej zasobnika w istniejącym klastrze

Aby wyłączyć tożsamość zarządzaną zasobnika w istniejącym klastrze, usuń tożsamości zarządzane przez zasobniki z klastra. Następnie wyłącz funkcję w klastrze.

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

Czyszczenie

Aby usunąć tożsamość zarządzaną zasobnika firmy Microsoft z klastra, usuń przykładową aplikację i tożsamość zarządzaną zasobnika z klastra. Następnie usuń tożsamość i przypisanie roli tożsamości klastra.

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"

Następne kroki

Aby uzyskać więcej informacji na temat tożsamości zarządzanych, zobacz Tożsamości zarządzane dla zasobów platformy Azure.