Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Skonfiguruj powiązania tożsamości w klastrach usługi Azure Kubernetes Service (AKS), aby zamapować tożsamość zarządzaną przypisaną przez użytkownika (UAMI) w wielu klastrach przy użyciu pojedynczego poświadczenia tożsamości federacyjnej (FIC). Ta konfiguracja ułatwia skalowanie uwierzytelniania Microsoft Entra dla zasobów bez osiągnięcia limitów FIC.
Wymagania wstępne
- Zapoznaj się z pojęciami dotyczącymi powiązań tożsamości , aby zrozumieć, jak działają powiązania tożsamości.
- Interfejs wiersza polecenia platformy Azure w wersji 2.73.0 lub nowszej. Aby sprawdzić wersję, użyj
az versionpolecenia . Aby zainstalować lub zaktualizować interfejs wiersza polecenia platformy Azure, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure. -
Zainstalowano wersję
aks-previewrozszerzenia interfejsu wiersza polecenia18.0.0b26platformy Azure lub nowszą. - Flaga funkcji włączona dla Twojej subskrypcji.
- Potrzebne są następujące uprawnienia platformy Azure dotyczące tożsamości i zakresu klastra:
Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/writeiMicrosoft.ContainerService/managedClusters/write. - Do tworzenia zasobów
ClusterRoleiClusterRoleBindingpotrzebujesz uprawnień administratora klastra Kubernetes (lub równoważnych).
Instalowanie lub aktualizowanie aks-preview rozszerzenia
Zainstaluj lub zaktualizuj rozszerzenie CLI platformy Azure do najnowszej wersji, używając polecenia
az extension addlubaz extension update.# Install the aks-preview extension az extension add --name aks-preview # Update to the latest version if already installed az extension update --name aks-preview
Włącz flagę funkcji IdentityBindingPreview
Zarejestruj flagę
IdentityBindingPreviewfunkcjonalności w subskrypcji platformy Azure za pomocą poleceniaaz feature register.az feature register --namespace Microsoft.ContainerService --name IdentityBindingPreviewRejestracja funkcji może potrwać do 15 minut.
Poczekaj na zakończenie rejestrowania funkcji przy użyciu polecenia
az feature show.az feature show --namespace Microsoft.ContainerService --name IdentityBindingPreviewGdy funkcja będzie wyświetlana jako
Registered, odśwież rejestrację dostawcy przy użyciuaz provider registerpolecenia .az provider register --namespace Microsoft.ContainerService
Ograniczenia
- Powiązania tożsamości nie są jeszcze obsługiwane w klastrach skonfigurowanych z integracją VNet z serwerem API.
Tworzenie zasobów testowych
Utwórz grupę zasobów platformy Azure przy użyciu
az group createpolecenia .export RESOURCE_GROUP="ib-test" export LOCATION="westus2" az group create --name $RESOURCE_GROUP --location $LOCATIONUtwórz klaster AKS z włączoną tożsamością składnika obciążenia i wystawcą OIDC, używając polecenia
az aks createz flagami--enable-workload-identityi--enable-oidc-issuer.export CLUSTER_NAME="ib-test-cluster" az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --location $LOCATION --no-ssh-key --enable-workload-identity --enable-oidc-issuerUtwórz tożsamość zarządzaną przypisaną przez użytkownika (UAMI) przy użyciu polecenia
az identity create.export MI_NAME="ib-test-mi" az identity create --resource-group $RESOURCE_GROUP --name $MI_NAME
Weryfikowanie wersji webhooka tożsamości obciążeniowej
Powiązanie tożsamości wymaga wersji zapoznawczej webhook tożsamości obciążenia roboczego. Sprawdź zainstalowaną wersję webhooka przy użyciu następującego
kubectl get podspolecenia:kubectl -n kube-system get pods -l azure-workload-identity.io/system=true -o yaml | grep v1.6.0Wynik powinien pokazywać
v1.6.0-alpha.1w tagu obrazu, co potwierdza, że zainstalowano poprawną wersję.
Pobierz identyfikatory UAMI
Pobierz identyfikatory zasobów, głównego, klienta i dzierżawy UAMI i ustaw je jako zmienne środowiskowe przy użyciu następujących
az identity showpoleceń:export MI_RESOURCE_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query id --output tsv) export MI_PRINCIPAL_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query principalId --output tsv) export MI_CLIENT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query clientId --output tsv) export MI_TENANT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query tenantId --output tsv)
Tworzenie powiązania tożsamości
Zmapuj UAMI na klaster AKS za pomocą powiązania tożsamości przy użyciu polecenia
az aks identity-binding create.az aks identity-binding create --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib" --managed-identity-resource-id $MI_RESOURCE_IDUwaga / Notatka
Podczas tworzenia powiązania tożsamości usługa AKS automatycznie tworzy poświadczenia tożsamości federacyjnej (FIC) o nazwie
aks-identity-bindingw obszarze UAMI. Poświadczeniem zarządza Azure Kubernetes Service (AKS). Nie modyfikuj ani nie usuwaj go, gdy wiązania tożsamości są używane. FIC utworzony dla powiązań tożsamości jest współużytkowany w ramach wszystkich powiązań tożsamości odnoszących się do tego samego UAMI.
Uzyskiwanie adresu URL dostawcy identyfikacji OIDC dla UAMI
Uzyskaj adres URL wystawcy OIDC powiązany z UAMI, badając powiązanie tożsamości przy użyciu polecenia
az aks identity-binding show.az aks identity-binding show --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib"Skondensowane przykładowe dane wyjściowe:
{ "oidcIssuer": { "oidcIssuerUrl": "https://ib.oic.prod-aks.azure.com/<MI-tenant-id>/<MI-client-id>" } }
Nawiązywanie połączenia z klastrem usługi AKS
Pobierz poświadczenia klastra AKS przy użyciu polecenia
az aks get-credentialsi zapisz je w osobnym pliku kubeconfig.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME -a -f "${CLUSTER_NAME}.kubeconfig"Ustaw zmienną
KUBECONFIGśrodowiskową, aby wskazywała nowy plik kubeconfig:export KUBECONFIG="$(pwd)/${CLUSTER_NAME}.kubeconfig"
Autoryzowanie przestrzeni nazw i kont usług
Skonfiguruj kontrolę dostępu opartą na rolach (RBAC), aby przyznać określonym podmiotom uprawnienia do korzystania z tożsamości zarządzanej za pośrednictwem powiązania tożsamości, stosując następujący manifest przy użyciu następującego
kubectl applypolecenia.Uwaga / Notatka
Poniższy przykład jawnie odwołuje się do
demokonta usługi wdemoprzestrzeni nazw. Chociaż jawne odwoływanie się do określonego konta usługi jest jedną z opcji, można również odwołać się do kolekcji kont usług w obszarzesubjects. Aby uzyskać więcej informacji, zobacz Odwoływanie się do tematów w dokumentacji platformy Kubernetes.kubectl apply -f - <<EOF apiVersion: v1 kind: Namespace metadata: name: demo --- apiVersion: v1 kind: ServiceAccount metadata: name: demo namespace: demo --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: use-mi-${MI_CLIENT_ID} rules: - verbs: ["use-managed-identity"] apiGroups: ["cid.wi.aks.azure.com"] resources: ["${MI_CLIENT_ID}"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: use-mi-${MI_CLIENT_ID} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: use-mi-${MI_CLIENT_ID} subjects: - kind: ServiceAccount name: demo namespace: demo EOF
Utwórz magazyn kluczy z ochroną przed usunięciem i autoryzacją RBAC w Azure
Utwórz magazyn kluczy z ochroną przed czyszczeniem i autoryzacją RBAC platformy Azure włączoną przy użyciu polecenia
az keyvault createz flagami--enable-purge-protectioni--enable-rbac-authorization. Możesz również użyć istniejącego magazynu kluczy, jeśli jest skonfigurowany do ochrony przed czyszczeniem i autoryzacji Azure RBAC.export KEY_VAULT_NAME="ib-test" az keyvault create \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --enable-purge-protection \ --enable-rbac-authorization
Pobierz identyfikator zasobu i adres URL magazynu kluczy
Pobierz identyfikator zasobu magazynu kluczy przy użyciu polecenia
az keyvault showi ustaw go jako zmienną środowiskową.export KEY_VAULT_RESOURCE_ID=$(az keyvault show --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query id \ --output tsv)Pobierz adres URL magazynu kluczy przy użyciu
az keyvault showpolecenia i ustaw go jako zmienną środowiskową:export KEYVAULT_URL="$(az keyvault show \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query properties.vaultUri \ --output tsv)"
Konfigurowanie dostępu do magazynu kluczy i tworzenie tajemnicy
W poniższych krokach pokazano, jak uzyskać dostęp do tajemnic, kluczy lub certyfikatów w usłudze Azure Key Vault z poziomu podu. Przykłady w tej sekcji umożliwiają skonfigurowanie dostępu do wpisów tajnych w magazynie kluczy dla tożsamości obciążenia, ale możesz wykonać podobne kroki, aby skonfigurować dostęp do kluczy lub certyfikatów.
W poniższym przykładzie pokazano, jak używać modelu uprawnień RBAC platformy Azure, aby przyznać podowi dostęp do Azure Key Vault. Aby uzyskać więcej informacji na temat modelu uprawnień RBAC platformy Azure dla usługi Azure Key Vault, zobacz Udzielanie uprawnień aplikacjom do uzyskiwania dostępu do usługi Azure Key Vault przy użyciu kontroli dostępu opartej na rolach platformy Azure.
Pobierz identyfikator obiektu zalogowanego użytkownika przy użyciu
az ad signed-in-user showpolecenia i ustaw go jako zmienną środowiskową:export CALLER_OBJECT_ID=$(az ad signed-in-user show --query id --output tsv)Przypisz sobie rolę Oficera tajemnic w Key Vault platformy Azure używając polecenia
az role assignment create.az role assignment create --assignee $CALLER_OBJECT_ID \ --role "Key Vault Secrets Officer" \ --scope $KEY_VAULT_RESOURCE_IDUtwórz wpis tajny w magazynie kluczy przy użyciu
az keyvault secret setpolecenia .export KEY_VAULT_SECRET_NAME="my-secret" az keyvault secret set \ --vault-name $KEY_VAULT_NAME \ --name $KEY_VAULT_SECRET_NAME \ --value "Hello\!"Przypisz rolę Użytkownika wpisów tajnych usługi Key Vault do interfejsu użytkownika
az role assignment createprzy użyciu polecenia .az role assignment create \ --assignee-object-id $MI_PRINCIPAL_ID \ --role "Key Vault Secrets User" \ --scope $KEY_VAULT_RESOURCE_ID \ --assignee-principal-type ServicePrincipal
Dodawanie adnotacji do konta usługi
Dodaj adnotację do konta usługi przy użyciu polecenia
kubectl annotatez identyfikatorem dzierżawy tożsamości zarządzanej.kubectl annotate sa demo -n demo azure.workload.identity/tenant-id=$MI_TENANT_IDAdnotuj konto usługi identyfikatorem klienta tożsamości zarządzanej, korzystając z polecenia
kubectl annotate.kubectl annotate sa demo -n demo azure.workload.identity/client-id=$MI_CLIENT_ID
Wdrażanie przykładowej aplikacji
Wdróż przykładowy zasobnik, który za pomocą powiązania tożsamości uzyskuje token dostępu dla zarządzanej tożsamości, aby uzyskać dostęp do usługi Azure Key Vault, używając następującego polecenia
kubectl apply.kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: demo namespace: demo labels: azure.workload.identity/use: "true" annotations: azure.workload.identity/use-identity-binding: "true" spec: serviceAccount: demo containers: - name: azure-sdk # source code: https://github.com/Azure/azure-workload-identity/blob/feature/custom-token-endpoint/examples/identitybinding-msal-go/main.go image: ghcr.io/bahe-msft/azure-workload-identity/identitybinding-msal-go:latest-linux-amd64 env: - name: KEYVAULT_URL value: ${KEYVAULT_URL} - name: SECRET_NAME value: ${KEY_VAULT_SECRET_NAME} restartPolicy: Never EOF
Weryfikowanie dostępu do magazynu kluczy z przykładowej aplikacji
Opisz zasobnik i potwierdź, że zmienne środowiskowe oraz projekcje montażu woluminu tokenu są obecne przy użyciu polecenia
kubectl describe pod.kubectl describe pod demo -n demoOczekiwane dane wyjściowe powinny zawierać wartości ,
AZURE_CLIENT_ID,AZURE_TENANT_IDAZURE_FEDERATED_TOKEN_FILE,AZURE_AUTHORITY_HOST,AZURE_KUBERNETES_TOKEN_PROXY.AZURE_KUBERNETES_SNI_NAME, iAZURE_KUBERNETES_CA_FILE.Sprawdź, czy zasobnik może uzyskać token i dostęp do zasobu, używając polecenia
kubectl logs.kubectl logs demo -n demoW przypadku powodzenia dane wyjściowe powinny być podobne do następującego przykładu:
I1107 20:03:42.865180 1 main.go:77] "successfully got secret" secret="Hello!"
Skalowanie powiązań tożsamości w wielu klastrach
Powiązania tożsamości umożliwiają mapowanie wielu klastrów usługi AKS na tę samą zarządzaną tożsamość przypisaną użytkownikowi (UAMI), jednocześnie używając pojedynczego FIC. Aby skalować powiązania tożsamości w wielu klastrach, możesz powtórzyć kroki opisane w artykule Tworzenie powiązania tożsamości za pomocą weryfikacji dostępu do magazynu kluczy z przykładowej aplikacji dla każdego dodatkowego klastra, który ma zostać zamapowyny na ten sam interfejs użytkownika (utworzenie nowego powiązania tożsamości dla klastra).
Uprzątnij zasoby
Jeśli nie potrzebujesz już zasobów utworzonych w tym artykule, możesz je wyczyścić, aby uniknąć ponoszenia przyszłych kosztów.
Usuń zasobnik przy użyciu
kubectl delete podpolecenia .kubectl delete pod demo -n demoUsuń przestrzeń nazw przy użyciu
kubectl delete nspolecenia .kubectl delete ns demoUsuń grupę zasobów i wszystkie powiązane zasoby przy użyciu
az group deletepolecenia .az group delete --name $RESOURCE_GROUP --yes --no-wait