Używanie kontroli dostępu opartej na rolach platformy Azure na potrzeby autoryzacji platformy Kubernetes
W tym artykule opisano sposób używania kontroli dostępu opartej na rolach platformy Azure dla autoryzacji kubernetes, co umożliwia ujednolicone zarządzanie i kontrolę dostępu między zasobami platformy Azure, usługą AKS i zasobami 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 i kontrolę dostępu opartą na rolach platformy Kubernetes i zarządzać nią 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. - Potrzebna jest
kubectl
wersja minimalna 1.18.3. - Aby można było dodać kontrolę dostępu opartą na rolach platformy Azure na potrzeby autoryzacji kubernetes, potrzebna jest zarządzana integracja firmy 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 identyfikatory CRD i tworzysz niestandardowe definicje ról, jedynym sposobem na pokrycie crDs jest obecnie użycie funkcji
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
. - Propagowanie nowych przypisań ról przez serwer autoryzacji może potrwać do pięciu minut .
- 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 usługi AKS z zarządzaną integracją firmy Microsoft i kontrolą dostępu opartą na rolach platformy Azure na potrzeby autoryzacji platformy 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ą firmy Microsoft Entra i kontrolą dostępu opartą na rolach
az aks create
platformy Azure dla autoryzacji kubernetes przy użyciu polecenia .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łączanie kontroli dostępu opartej na rolach platformy Azure w istniejącym klastrze usługi AKS
Włącz kontrolę dostępu opartą na rolach platformy Azure dla autoryzacji kubernetes w istniejącym klastrze usługi AKS przy użyciu
az aks update
polecenia z flagą--enable-azure-rbac
.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
Wyłączanie kontroli dostępu opartej na rolach platformy Azure dla autoryzacji kubernetes z klastra usługi AKS
Usuń kontrolę dostępu opartą na rolach platformy Azure dla autoryzacji kubernetes z istniejącego klastra usługi AKS przy użyciu
az aks update
polecenia 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 kontroli dostępu opartej na rolach usługi 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 elementu , ponieważ odczytywanie zawartości wpisów tajnych umożliwia dostęp do poświadczeń usługi ServiceAccount w przestrzeni nazw, co umożliwi dostęp do interfejsu API jako dowolne konto usługi w przestrzeni nazw (forma eskalacji uprawnień). |
Składnik zapisywania kontroli dostępu opartej na rolach 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 uzyskiwanie Secrets dostępu do zasobników i uruchamianie ich jako dowolnego konta usługi w przestrzeni nazw, dzięki czemu może służyć do uzyskiwania poziomów 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 ma 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 Service | 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 przy użyciu
az aks show
polecenia .AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
Utwórz przypisanie roli przy użyciu
az role assignment create
polecenia .<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 administratora RBAC usługi Azure Kubernetes Service.az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Uwaga
Można utworzyć czytelnik kontroli dostępu opartej na rolach usługi Azure Kubernetes Service i przypisania ról modułu zapisywania RBAC usługi Azure Kubernetes Service w zakresie określonego obszaru nazw w klastrze przy użyciu
az role assignment create
polecenia i ustawić 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>
ciąg własnym 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
az role definition create
polecenia , ustawiając wartość--role-definition
deploy-view.json
dla pliku utworzonego 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 konfigurację kubeconfig klastra usługi AKS przy użyciu
az aks get-credentials
polecenia .az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Teraz możesz użyć
kubectl
polecenia 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 utworzyła wtyczkę kubelogin
, aby ułatwić odblokowanie scenariuszy, takich jak logowanie nieinterakcyjne, starsze kubectl
wersje lub korzystanie z logowania jednokrotnego w wielu klastrach bez konieczności logowania się do nowego klastra.
kubelogin
Użyj wtyczki, uruchamiając następujące polecenie:export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig
Teraz możesz użyć
kubectl
polecenia 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
Wyświetlanie listy przypisań ról przy
az role assignment list
użyciu polecenia .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
az role definition delete
przy użyciu polecenia .az role definition delete --name "AKS Deployment Reader"
Usuwanie grupy zasobów i klastra usługi AKS
Usuń grupę zasobów i klaster usługi AKS przy użyciu
az group delete
polecenia .az group delete --name $RESOURCE_GROUP --yes --no-wait
Następne kroki
Aby dowiedzieć się więcej na temat uwierzytelniania, autoryzacji, kontroli dostępu opartej na rolach platformy Kubernetes i kontroli dostępu opartej na rolach platformy Azure, zobacz:
Azure Kubernetes Service