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. Administratorzy tworzą tożsamości i powiązania jako elementy pierwotne platformy Kubernetes, które umożliwiają zasobnikom uzyskiwania dostępu 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 tożsamość zasobnika usługi AKS zostanie poprawiony i obsługiwany do września 2025 r., aby umożliwić klientom przejście do Tożsamość obciążeń Microsoft Entra
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 \
--resource-group myResourceGroup \
--name myAKSCluster \
--enable-pod-identity \
--network-plugin azure \
--generate-ssh-keys
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 delete
az aks pod-identity exception update
lub 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 --resource-group $MY_RESOURCE_GROUP --name $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"
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 \
--resource-group $MY_RESOURCE_GROUP \
--name $MY_CLUSTER \
--enable-pod-identity \
--enable-pod-identity-with-kubenet \
--generate-ssh-keys
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 --resource-group $MY_RESOURCE_GROUP --name $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 --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME} --query clientId -o tsv)"
export IDENTITY_RESOURCE_ID="$(az identity show --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME} --query id -o tsv)"
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 --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
# Obtain the id of the node resource group
NODES_RESOURCE_ID=$(az group show --name $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 add
interfejs 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 --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${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.
Azure Kubernetes Service