Kontrola dostępu przy użyciu kontroli dostępu Tożsamość Microsoft Entra i kontroli dostępu opartej na rolach platformy Kubernetes w usłudze AKS włączonej przez usługę Azure Arc
Dotyczy: usługa AKS w usłudze Azure Stack HCI 22H2, AKS w systemie Windows Server
Azure Kubernetes Service (AKS) można skonfigurować do używania Tożsamość Microsoft Entra na potrzeby uwierzytelniania użytkowników. W tej konfiguracji zalogujesz się do klastra Kubernetes przy użyciu tokenu uwierzytelniania Microsoft Entra. Po uwierzytelnieniu możesz użyć wbudowanej kontroli dostępu opartej na rolach platformy Kubernetes (Kubernetes RBAC), aby zarządzać dostępem do przestrzeni nazw i zasobów klastra na podstawie tożsamości użytkownika lub członkostwa w grupie.
W tym artykule opisano sposób kontrolowania dostępu przy użyciu kontroli dostępu opartej na rolach platformy Kubernetes w klastrze Kubernetes na podstawie członkostwa w grupie Microsoft Entra w usłudze AKS Arc. Grupę demonstracyjną i użytkowników utworzysz w Tożsamość Microsoft Entra. Następnie utworzysz role i powiązania ról w klastrze, aby udzielić odpowiednich uprawnień do tworzenia i wyświetlania zasobów.
Wymagania wstępne
Przed skonfigurowaniem kontroli dostępu opartej na rolach platformy Kubernetes przy użyciu tożsamości Microsoft Entra potrzebne są następujące elementy:
Klaster Kubernetes utworzony w usłudze AKS Arc
Potrzebujesz klastra Kubernetes utworzonego w usłudze AKS Arc. Jeśli musisz skonfigurować klaster, możesz znaleźć instrukcje dotyczące używania Windows Admin Center lub programu PowerShell do wdrażania usługi AKS.
Połączenie usługi Azure Arc
Musisz mieć połączenie usługi Azure Arc z klastrem Kubernetes. Aby uzyskać informacje na temat włączania usługi Azure Arc, zobacz Connect an Azure Kubernetes Service on Azure Stack HCI cluster to Azure Arc-enabled Kubernetes (Łączenie Azure Kubernetes Service w klastrze Azure Stack HCI z usługą Kubernetes z włączoną usługą Azure Arc).
Potrzebujesz dostępu do następujących narzędzi wiersza polecenia:
Interfejs wiersza polecenia platformy Azure i rozszerzenie connectedk8s
Interfejs wiersza polecenia platformy Azure to zestaw poleceń służących do tworzenia zasobów platformy Azure i zarządzania nimi. Aby sprawdzić, czy masz interfejs wiersza polecenia platformy Azure, otwórz narzędzie wiersza polecenia i wpisz:
az -v
. Ponadto należy zainstalować rozszerzenie connectedk8s , aby otworzyć kanał w klastrze Kubernetes.Aby uzyskać instrukcje dotyczące instalacji, zobacz Jak zainstalować interfejs wiersza polecenia platformy Azure.
Kubectl
Narzędzie wiersza polecenia Kubernetes kubectl umożliwia uruchamianie poleceń przeznaczonych dla klastrów Kubernetes. Aby sprawdzić, czy zainstalowano narzędzie kubectl, otwórz narzędzie wiersza polecenia i wpisz:
kubectl version --client
. Upewnij się, że wersja klienta kubectl to co najmniejv1.24.0
.Aby uzyskać instrukcje dotyczące instalacji, zobacz kubectl.
Program PowerShell i moduł programu PowerShell AksHci
Program PowerShell to wieloplatformowe rozwiązanie do automatyzacji zadań składające się z powłoki wiersza polecenia, języka skryptów i struktury zarządzania konfiguracją. Jeśli zainstalowano usługę AKS Arc, masz dostęp do modułu programu PowerShell usługi AksHci.
Opcjonalne pierwsze kroki
Jeśli nie masz jeszcze grupy Microsoft Entra zawierającej członków, możesz utworzyć grupę i dodać niektórych członków, aby móc postępować zgodnie z instrukcjami w tym artykule.
Aby zademonstrować pracę z kontrolą dostępu opartą na rolach Tożsamość Microsoft Entra i Kubernetes, możesz utworzyć grupę Microsoft Entra dla deweloperów aplikacji, która może służyć do pokazywania sposobu kontroli dostępu na podstawie ról platformy Kubernetes i Tożsamość Microsoft Entra kontroli dostępu do zasobów klastra. W środowiskach produkcyjnych można używać istniejących użytkowników i grup w ramach dzierżawy Microsoft Entra.
Twórca grupę demonstracyjną w Tożsamość Microsoft Entra
Najpierw utwórz grupę w Tożsamość Microsoft Entra w dzierżawie dla deweloperów aplikacji za pomocą polecenia az ad group create. W poniższym przykładzie zalogowano się do dzierżawy platformy Azure, a następnie utworzono grupę o nazwie appdev:
az login
az ad group create --display-name appdev --mail-nickname appdev
Dodawanie użytkowników do grupy
W przypadku grupy przykładowej utworzonej w Tożsamość Microsoft Entra dla naszych deweloperów aplikacji dodajmy użytkownika do appdev
grupy. Użyjesz tego konta użytkownika, aby zalogować się do klastra usługi AKS i przetestować integrację kontroli dostępu opartej na rolach platformy Kubernetes.
Dodaj użytkownika do grupy appdev utworzonej w poprzedniej sekcji przy użyciu polecenia az ad group member add . Jeśli zakończ sesję, ponownie połącz się z platformą Azure przy użyciu polecenia az login
.
$AKSDEV_ID = az ad user create --display-name <name> --password <strongpassword> --user-principal-name <name>@contoso.onmicrosoft.com
az ad group member add --group appdev --member-id $AKSDEV_ID
Twórca niestandardowe powiązanie roli RBAC platformy Kubernetes w zasobie klastra usługi AKS dla grupy Microsoft Entra
Skonfiguruj klaster usługi AKS, aby zezwolić grupie Microsoft Entra na dostęp do klastra. Jeśli chcesz dodać grupę i użytkowników, zobacz Twórca grupy demonstracyjne w Tożsamość Microsoft Entra.
Pobierz poświadczenia administratora klastra przy użyciu polecenia Get-AksHciCredential :
Get-AksHciCredential -name <name-of-your-cluster>
Twórca przestrzeni nazw w klastrze Kubernetes za pomocą polecenia kubectl create namespace. Poniższy przykład tworzy przestrzeń nazw o nazwie
dev
:kubectl create namespace dev
W usłudze Kubernetes role definiują uprawnienia do udzielania, a roleBindings stosują uprawnienia do żądanych użytkowników lub grup. Te przypisania można zastosować do danej przestrzeni nazw lub w całym klastrze. Aby uzyskać więcej informacji, zobacz Using Kubernetes RBAC authorization (Używanie autoryzacji RBAC platformy Kubernetes).
Twórca rolę dla przestrzeni nazw deweloperów. Ta rola udziela pełnych uprawnień do przestrzeni nazw. W środowiskach produkcyjnych możesz określić bardziej szczegółowe uprawnienia dla różnych użytkowników lub grup.
Twórca pliku o nazwie role-dev-namespace.yaml i wklej następujący manifest YAML:
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-full-access namespace: dev rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["*"] - apiGroups: ["batch"] resources: - jobs - cronjobs verbs: ["*"]
Twórca rolę przy użyciu polecenia kubectl apply i określ nazwę pliku manifestu YAML:
kubectl apply -f role-dev-namespace.yaml
Pobierz identyfikator zasobu dla grupy appdev przy użyciu polecenia az ad group show . Ta grupa jest ustawiana jako temat funkcji RoleBinding w następnym kroku:
az ad group show --group appdev --query objectId -o tsv
Polecenie
az ad group show
zwraca wartość, której użyjesz jakogroupObjectId
:38E5FA30-XXXX-4895-9A00-050712E3673A
Twórca pliku o nazwie rolebinding-dev-namespace.yaml i wklej następujący manifest YAML. Ustanawiasz powiązanie roli, które umożliwia grupie appdev używanie
role-dev-namespace
roli do uzyskiwania dostępu do przestrzeni nazw. W ostatnim wierszu zastąp ciąggroupObjectId
identyfikatorem obiektu grupy utworzonymaz ad group show
przez polecenie .kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-access namespace: dev roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: dev-user-full-access subjects: - kind: Group namespace: dev name: groupObjectId
Porada
Jeśli chcesz utworzyć funkcję RoleBinding dla pojedynczego użytkownika, określ
kind: User
i zastąp elementgroupObjectId
nazwą główną użytkownika (UPN) w przykładzie.Twórca roleBinding przy użyciu polecenia kubectl apply i określ nazwę pliku manifestu YAML:
kubectl apply -f rolebinding-dev-namespace.yaml
rolebinding.rbac.authorization.k8s.io/dev-user-access created
Używanie wbudowanych ról RBAC platformy Kubernetes dla zasobu klastra usługi AKS
Platforma Kubernetes udostępnia również wbudowane role dostępne dla użytkowników. Te wbudowane role obejmują:
- Role administratora (administrator klastra)
- Role przeznaczone do udzielenia w całym klastrze przy użyciu klasterRoleBindings
- Role przeznaczone do udzielenia w określonych przestrzeniach nazw przy użyciu funkcji RoleBindings (administrator, edycja, widok)
Aby dowiedzieć się więcej o wbudowanych rolach RBAC platformy Kubernetes, zobacz Role kontroli dostępu opartej na rolach platformy Kubernetes
Role dostępne dla użytkowników
Domyślny klasterRole | Domyślny klasterRoleBinding | Opis |
---|---|---|
administrator klastra | system:masters group | Umożliwia dostęp superu użytkownika do wykonywania dowolnej akcji w dowolnym zasobie. W przypadku użycia w klastrze ClusterRoleBinding ta rola zapewnia pełną kontrolę nad każdym zasobem w klastrze i we wszystkich przestrzeniach nazw. W przypadku użycia w usłudze RoleBinding zapewnia pełną kontrolę nad każdym zasobem w przestrzeni nazw powiązania roli, w tym nad samą przestrzenią nazw. |
administrator | Brak | Zezwala na dostęp administratora, który ma zostać przyznany w przestrzeni nazw przy użyciu powiązania roli. W przypadku użycia w powiązaniu roli umożliwia dostęp do odczytu/zapisu do większości zasobów w przestrzeni nazw, 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 przydziału zasobów ani do samej przestrzeni nazw. Ta rola nie zezwala również na dostęp do zapisu do punktów końcowych w klastrach utworzonych przy użyciu platformy Kubernetes w wersji 1.22 lub nowszej. Aby uzyskać więcej informacji, zobacz Dostęp do zapisu dla punktów końcowych. |
edytuj | Brak | 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 dostępu do wpisów tajnych i uruchamianie zasobników jako dowolnego konta usługi w przestrzeni nazw, dzięki czemu może służyć do uzyskiwania poziomów dostępu interfejsu API dowolnego konta usługi w przestrzeni nazw. Ta rola nie zezwala również na dostęp do zapisu do punktów końcowych w klastrach utworzonych przy użyciu platformy Kubernetes w wersji 1.22 lub nowszej. Aby uzyskać więcej informacji, zobacz Dostęp do zapisu dla punktów końcowych. |
widok | Brak | 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 wpisów tajnych, 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ń). |
Używanie wbudowanej roli RBAC platformy Kubernetes z Tożsamość Microsoft Entra
Aby użyć wbudowanej roli RBAC platformy Kubernetes z Tożsamość Microsoft Entra, wykonaj następujące czynności:
Zastosuj wbudowaną
view
rolę RBAC platformy Kubernetes do grupy Microsoft Entra:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
Zastosuj wbudowaną
view
rolę RBAC platformy Kubernetes dla każdego z użytkowników Microsoft Entra:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --user=<Azure AD user object ID>
Praca z zasobami klastra przy użyciu tożsamości Microsoft Entra
Teraz przetestuj oczekiwane uprawnienia podczas tworzenia zasobów i zarządzania nimi w klastrze Kubernetes. W tych przykładach planujesz i wyświetlasz zasobniki w przypisanej przestrzeni nazw użytkownika. Następnie spróbujesz zaplanować i wyświetlić zasobniki poza przypisaną przestrzenią nazw.
Zaloguj się do platformy Azure przy użyciu
$AKSDEV_ID
konta użytkownika przekazanego jako dane wejściowe doaz ad group member add
polecenia. Uruchom polecenie ,az connectedk8s proxy
aby otworzyć kanał w klastrze:az connectedk8s proxy -n <cluster-name> -g <resource-group>
Po ustanowieniu kanału proxy otwórz kolejną sesję i zaplanuj zasobnik NGINX przy użyciu polecenia kubectl run w przestrzeni nazw deweloperów :
kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
Po pomyślnym zaplanowaniu serwera NGINX zostaną wyświetlone następujące dane wyjściowe:
pod/nginx-dev created
Teraz użyj polecenia kubectl get zasobników , aby wyświetlić zasobniki w
dev
przestrzeni nazw:kubectl get pods --namespace dev
Po pomyślnym uruchomieniu serwera NGINX są widoczne następujące dane wyjściowe:
$ kubectl get pods --namespace dev NAME READY STATUS RESTARTS AGE nginx-dev 1/1 Running 0 4m
Twórca i wyświetlanie zasobów klastra poza przypisaną przestrzenią nazw
Aby spróbować wyświetlić zasobniki poza przestrzenią nazw deweloperów , użyj polecenia kubectl get zasobników z flagą --all-namespaces
.
kubectl get pods --all-namespaces
Członkostwo w grupie użytkownika nie ma roli Kubernetes, która zezwala na tę akcję. Bez uprawnień polecenie zgłosi błąd.
Error from server (Forbidden): pods is forbidden: User cannot list resource "pods" in API group "" at the cluster scope
Następne kroki
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla