Uwaga
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.
W tym artykule opisano, jak używać Azure RBAC do autoryzacji w Kubernetes, co umożliwia ujednolicone zarządzanie i kontrolę dostępu w zasobach Azure, AKS oraz zasobach Kubernetes. Aby uzyskać więcej informacji, zobacz Azure RBAC for Kubernetes Authorization (Kontrola dostępu na podstawie ról platformy Azure dla autoryzacji na platformie Kubernetes).
Uwaga
W przypadku korzystania ze zintegrowanego uwierzytelniania między identyfikatorem Entra firmy Microsoft i usługą AKS można użyć użytkowników, grup lub jednostek usługi firmy Microsoft jako podmiotów w kontroli dostępu opartej na rolach (Kubernetes RBAC) platformy Kubernetes. Dzięki tej funkcji nie musisz oddzielnie zarządzać tożsamościami użytkowników i poświadczeniami dla platformy Kubernetes. Jednak nadal trzeba skonfigurować kontrolę dostępu opartą na rolach platformy Azure oraz kontrolę dostępu opartą na rolach platformy Kubernetes i zarządzać nimi oddzielnie.
Zanim rozpoczniesz
- Potrzebny jest interfejs wiersza polecenia platformy Azure w wersji 2.24.0 lub nowszej zainstalowany i skonfigurowany. Uruchom polecenie
az --version
, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure. - Potrzebujesz
kubectl
, z minimalną wersją 1.18.3. - Aby można było dodać Azure RBAC na potrzeby autoryzacji Kubernetes, konieczne jest włączenie zarządzanej integracji Microsoft Entra w klastrze. Jeśli musisz włączyć zarządzaną integrację z usługą Microsoft Entra, zobacz Korzystanie z identyfikatora Microsoft Entra w usłudze AKS.
- Jeśli masz CRDs i tworzysz niestandardowe definicje ról, jedynym sposobem na ich uwzględnienie jest obecnie użycie
Microsoft.ContainerService/managedClusters/*/read
. W przypadku pozostałych obiektów można użyć określonych grup interfejsów API, takich jakMicrosoft.ContainerService/apps/deployments/read
. - Nowe przypisania ról mogą zajmować do pięciu minut na rozpropagowanie i zaktualizowanie przez serwer autoryzacji.
- Kontrola dostępu oparta na rolach platformy Azure dla autoryzacji platformy Kubernetes wymaga, aby dzierżawa firmy Microsoft skonfigurowana do uwierzytelniania jest taka sama jak dzierżawa subskrypcji, która przechowuje klaster usługi AKS.
Tworzenie nowego klastra AKS z zarządzaną integracją Microsoft Entra i kontrolą dostępu opartą na rolach Azure (RBAC) dla autoryzacji Kubernetes.
Utwórz grupę zasobów platformy Azure przy użyciu
az group create
polecenia .export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATION
Utwórz klaster usługi AKS z zarządzaną integracją Microsoft Entra i Azure RBAC dla autoryzacji Kubernetes przy użyciu polecenia
az aks create
.export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keys
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
Włącz Azure RBAC w istniejącym klastrze AKS
Włącz Azure RBAC dla autoryzacji Kubernetes w istniejącym klastrze AKS, używając polecenia
az aks update
z flagą--enable-azure-rbac
.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
Wyłączanie Azure RBAC dla Autoryzacji Kubernetes z klastra AKS
Usuń Azure RBAC dla autoryzacji Kubernetes z istniejącego klastra AKS za pomocą polecenia
az aks update
z flagą--disable-azure-rbac
.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
Wbudowane role usługi AKS
Usługa AKS udostępnia następujące wbudowane role:
Rola | opis |
---|---|
Czytelnik RBAC w usłudze Azure Kubernetes Service | Umożliwia dostęp tylko do odczytu, aby wyświetlić większość obiektów w przestrzeni nazw. Nie zezwala na wyświetlanie ról ani powiązań ról. Ta rola nie zezwala na wyświetlanie Secrets , ponieważ odczytywanie zawartości tajemnic umożliwia dostęp do poświadczeń konta usługi w przestrzeni nazw, co mogłoby umożliwić dostęp do API jako dowolne konto usługi w tej przestrzeni nazw (forma eskalacji uprawnień). |
Piszący RBAC usługi Azure Kubernetes Service | Umożliwia dostęp do odczytu/zapisu do większości obiektów w przestrzeni nazw. Ta rola nie zezwala na wyświetlanie ani modyfikowanie ról ani powiązań ról. Jednak ta rola umożliwia dostęp do Secrets i uruchamianie Podów jako dowolne konto usługi w przestrzeni nazw, dzięki czemu można zyskać poziom dostępu do interfejsu API dowolnego konta usługi w przestrzeni nazw. |
Administrator kontroli dostępu opartej na rolach usługi Azure Kubernetes Service | Zezwala na dostęp administratora, który powinien być udzielany w przestrzeni nazw. Umożliwia dostęp do odczytu/zapisu do większości zasobów w przestrzeni nazw (lub zakresie klastra), w tym możliwość tworzenia ról i powiązań ról w przestrzeni nazw. Ta rola nie zezwala na dostęp do zapisu do limitu przydziału zasobów ani do samej przestrzeni nazw. |
Administrator klastra RBAC usługi Azure Kubernetes | Umożliwia dostęp administratora do wykonywania dowolnej akcji na dowolnym zasobie. Zapewnia pełną kontrolę nad każdym zasobem w klastrze i we wszystkich przestrzeniach nazw. |
Tworzenie przypisań ról na potrzeby dostępu do klastra
Pobierz identyfikator zasobu usługi AKS za pomocą polecenia
az aks show
.AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
Utwórz przypisanie roli używając polecenia
az role assignment create
.<AAD-ENTITY-ID>
może być nazwą użytkownika lub identyfikatorem klienta jednostki usługi. W poniższym przykładzie utworzono przypisanie roli dla roli Azure Kubernetes Service RBAC Admin.az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Uwaga
Możesz utworzyć przypisania ról Azure Kubernetes Service RBAC Reader i Azure Kubernetes Service RBAC Writer o zakresie ograniczonym do określonego obszaru nazw w klastrze, używając polecenia
az role assignment create
i ustawiając zakres na żądaną przestrzeń nazw.az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
Tworzenie definicji ról niestandardowych
Poniższa przykładowa definicja roli niestandardowej umożliwia użytkownikowi tylko odczytywanie wdrożeń i nic innego. Aby uzyskać pełną listę możliwych akcji, zobacz Operacje Microsoft.ContainerService.
Aby utworzyć własne definicje ról niestandardowych, skopiuj następujący plik, zastępując
<YOUR SUBSCRIPTION ID>
swoim identyfikatorem subskrypcji, a następnie zapisz go jakodeploy-view.json
.{ "Name": "AKS Deployment Reader", "Description": "Lets you view all deployments in cluster/namespace.", "Actions": [], "NotActions": [], "DataActions": [ "Microsoft.ContainerService/managedClusters/apps/deployments/read" ], "NotDataActions": [], "assignableScopes": [ "/subscriptions/<YOUR SUBSCRIPTION ID>" ] }
Utwórz definicję roli przy użyciu polecenia
az role definition create
, ustawiając--role-definition
na plikdeploy-view.json
, który utworzyłeś w poprzednim kroku.az role definition create --role-definition @deploy-view.json
Przypisz definicję roli do użytkownika lub innej tożsamości przy użyciu
az role assignment create
polecenia .az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Używanie kontroli dostępu opartej na rolach platformy Azure dla autoryzacji platformy Kubernetes za pomocą polecenia kubectl
Upewnij się, że masz wbudowaną rolę Użytkownika klastra usługi Azure Kubernetes Service, a następnie pobierz kubeconfig swojego klastra AKS używając polecenia
az aks get-credentials
.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Teraz możesz użyć
kubectl
do zarządzania klastrem. Można na przykład wyświetlić listę węzłów w klastrze przy użyciu poleceniakubectl get nodes
.kubectl get nodes
Przykładowe wyjście:
NAME STATUS ROLES AGE VERSION aks-nodepool1-93451573-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000002 Ready agent 3h6m v1.15.11
Używanie kontroli dostępu opartej na rolach platformy Azure dla autoryzacji platformy Kubernetes za pomocą polecenia kubelogin
Usługa AKS stworzyła wtyczkę kubelogin
, aby umożliwić odblokowanie scenariuszy, takich jak logowanie nieinterakcyjne, starsze wersje kubectl
lub korzystanie z jednokrotnego logowania w wielu klastrach bez konieczności logowania do nowego klastra.
kubelogin
Użyj wtyczki, uruchamiając następujące polecenie:export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig
Możesz teraz użyć
kubectl
do zarządzania klastrem. Można na przykład wyświetlić listę węzłów w klastrze przy użyciu poleceniakubectl get nodes
.kubectl get nodes
Przykładowe wyjście:
NAME STATUS ROLES AGE VERSION aks-nodepool1-93451573-vmss000000 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000001 Ready agent 3h6m v1.15.11 aks-nodepool1-93451573-vmss000002 Ready agent 3h6m v1.15.11
Czyszczenie zasobów
Usunięcie przypisania roli
Aby wyświetlić listę przypisań ról, użyj polecenia
az role assignment list
.az role assignment list --scope $AKS_ID --query [].id --output tsv
Usuń przypisania ról przy użyciu
az role assignment delete
polecenia .az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Usuwanie definicji roli
Usuń definicję roli niestandardowej przy użyciu polecenia
az role definition delete
.az role definition delete --name "AKS Deployment Reader"
Usuń grupę zasobów i klaster usługi AKS
Usuń grupę zasobów i klaster AKS używając polecenia
az group delete
.az group delete --name $RESOURCE_GROUP --yes --no-wait
Następne kroki
Aby dowiedzieć się więcej na temat uwierzytelniania i autoryzacji dla AKS, RBAC Kubernetes oraz RBAC platformy Azure, zapoznaj się z:
Azure Kubernetes Service