Udostępnij za pośrednictwem


Kontrolowanie dostępu przy użyciu identyfikatora Entra firmy Microsoft i kontroli dostępu opartej na rolach platformy Kubernetes

Dotyczy: usługa AKS w usłudze Azure Local, wersja 23H2

Usługę Azure Kubernetes Service (AKS) można skonfigurować do uwierzytelniania użytkowników przy użyciu identyfikatora Entra firmy Microsoft. W tej konfiguracji logujesz się do klastra Kubernetes przy użyciu tokenu uwierzytelniania Entra firmy Microsoft. Po uwierzytelnieniu można użyć wbudowanej kontroli dostępu opartej na rolach platformy Kubernetes (Kubernetes RBAC) do zarządzania 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. Utworzysz grupę demonstracyjną i użytkowników w identyfikatorze Entra firmy Microsoft. Następnie utworzysz role i powiązania ról w klastrze, aby przyznać odpowiednie uprawnienia do tworzenia i wyświetlania zasobów.

Wymagania wstępne

Przed skonfigurowaniem kontroli dostępu opartej na rolach platformy Kubernetes przy użyciu identyfikatora Entra firmy Microsoft należy spełnić następujące wymagania wstępne:

  • Usługa AKS włączona przez klaster usługi Azure Arc. Jeśli musisz skonfigurować klaster, zapoznaj się z instrukcjami dotyczącymi korzystania z witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.
  • Zainstalowany i skonfigurowany interfejs wiersza polecenia platformy Azure. Jeśli musisz zainstalować interfejs wiersza polecenia lub uaktualnić, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
  • 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 zainstaluj 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 ma co najmniej v1.24.0wartość . Aby uzyskać instrukcje dotyczące instalacji, zobacz kubectl.
  • Dostęp do klastra Kubernetes można uzyskać z określonymi uprawnieniami z trybem bezpośrednim lub trybem serwera proxy.
    • Aby uzyskać bezpośredni dostęp do klastra Kubernetes przy użyciu az aksarc get-credentials polecenia, musisz mieć uprawnienia roli użytkownika klastra Usługi Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, które są uwzględnione w uprawnieniach roli użytkownika klastra usługi Azure Kubernetes Service Arc
    • Aby uzyskać dostęp do klastra Kubernetes z dowolnego miejsca z trybem serwera proxy przy użyciu az connectedk8s proxy polecenia, musisz mieć uprawnienie Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, które jest uwzględnione w roli użytkownika klastra Kubernetes z włączoną usługą Azure Arc. W międzyczasie należy sprawdzić, czy agenci i maszyna wykonująca proces dołączania spełniają wymagania sieciowe w ramach wymagań sieciowych platformy Kubernetes z obsługą usługi Azure Arc.

Opcjonalne pierwsze kroki

Jeśli nie masz jeszcze grupy Microsoft Entra zawierającej członków, możesz utworzyć grupę i dodać członków, aby móc postępować zgodnie z instrukcjami w tym artykule.

Aby zademonstrować pracę z identyfikatorem Entra firmy Microsoft i kontrolą RBAC platformy Kubernetes, możesz utworzyć grupę Entra firmy Microsoft dla deweloperów aplikacji, która może służyć do pokazania, jak kontrola dostępu kubernetes RBAC i identyfikator firmy Microsoft Entra do zasobów klastra. W środowiskach produkcyjnych można używać istniejących użytkowników i grup w dzierżawie firmy Microsoft Entra.

Tworzenie grupy demonstracyjnej w usłudze Microsoft Entra ID

Najpierw utwórz grupę w identyfikatorze Entra firmy Microsoft w dzierżawie dla deweloperów aplikacji przy użyciu az ad group create polecenia . W poniższym przykładzie zostanie wyświetlony monit o zalogowanie się do dzierżawy platformy Azure, a następnie utworzenie grupy o nazwie appdev:

az login
az ad group create --display-name appdev --mail-nickname appdev

Dodawanie użytkowników do grupy

Za pomocą przykładowej grupy utworzonej w usłudze Microsoft Entra ID dla deweloperów aplikacji dodaj użytkownika do appdev grupy. To konto użytkownika służy do logowania się do klastra usługi AKS i testowania integracji RBAC platformy Kubernetes.

Dodaj użytkownika do grupy appdev utworzonej w poprzedniej sekcji przy użyciu az ad group member add polecenia . Jeśli opuścisz sesję, połącz się ponownie 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

Tworzenie niestandardowego powiązania roli RBAC platformy Kubernetes w zasobie klastra usługi AKS dla grupy Microsoft Entra

Skonfiguruj klaster usługi AKS, aby zezwolić grupie Firmy Microsoft na dostęp do klastra. Jeśli chcesz dodać grupę i użytkowników, zobacz Tworzenie grup demonstracyjnych w identyfikatorze Entra firmy Microsoft.

  1. Użyj polecenia , az aksarc get-credentials aby uzyskać poświadczenia administratora klastra:

    az aksarc get-credentials --name "$aks_cluster_name" --resource-group "$resource_group_name" --admin
    
  2. Utwórz przestrzeń nazw w klastrze Kubernetes przy użyciu kubectl create namespace polecenia . Poniższy przykład tworzy przestrzeń nazw o nazwie dev:

    kubectl create namespace dev
    

Na platformie 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).

Utwórz 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.

  1. Utwórz plik o nazwie role-dev-namespace.yaml i skopiuj/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: ["*"]
    
  2. Utwórz rolę przy użyciu kubectl apply polecenia i określ nazwę pliku manifestu YAML:

    kubectl apply -f role-dev-namespace.yaml
    
  3. Pobierz identyfikator zasobu dla grupy appdev przy użyciu az ad group show polecenia . 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ść używaną jako groupObjectId:

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  4. Utwórz plik o nazwie rolebinding-dev-namespace.yaml i skopiuj/wklej następujący manifest YAML. Ustanawiasz powiązanie roli, które umożliwia grupie appdev używanie role-dev-namespace roli na potrzeby dostępu do przestrzeni nazw. W ostatnim wierszu zastąp element groupObjectId identyfikatorem obiektu grupy utworzonym az 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
    

    Napiwek

    Jeśli chcesz utworzyć element RoleBinding dla pojedynczego użytkownika, określ kind: User i zastąp groupObjectId ciąg główną nazwą użytkownika (UPN) w przykładzie.

  5. Utwórz element RoleBinding przy użyciu kubectl apply polecenia 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 dla całego klastra przy użyciu metody ClusterRoleBindings
  • Role przeznaczone do udzielenia w określonych przestrzeniach nazw przy użyciu funkcji RoleBindings (administrator, edycja, widok)

Aby uzyskać więcej informacji na temat wbudowanych ról RBAC platformy Kubernetes, zobacz Role oparte na rolach użytkowników w usłudze Kubernetes RBAC.

Role dostępne dla użytkowników

Domyślny klasterRole Domyślny klasterRoleBinding opis
administrator klastra system:masters group Umożliwia dostęp administratora do wykonywania dowolnej akcji na 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 być udzielany w przestrzeni nazw przy użyciu powiązania roli. Jeśli jest używany 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 limitu 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 Write Access for Endpoints (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 Write Access for Endpoints (Dostęp do zapisu dla punktów końcowych).
wyświetl 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 dowolny element ServiceAccount w przestrzeni nazw (forma eskalacji uprawnień).

Używanie wbudowanej roli RBAC platformy Kubernetes z identyfikatorem Entra firmy Microsoft

Aby użyć wbudowanej roli RBAC platformy Kubernetes z identyfikatorem Entra firmy Microsoft, wykonaj następujące kroki:

  1. Zastosuj wbudowaną view rolę RBAC platformy Kubernetes w grupie Microsoft Entra:

    kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
    
  2. Zastosuj wbudowaną view rolę RBAC platformy Kubernetes dla każdego z użytkowników firmy Microsoft Entra:

    kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --user=<Azure AD user object ID>
    

Uzyskiwanie dostępu do klastra Kubernetes

Teraz możesz uzyskać dostęp do klastra Kubernetes z określonymi uprawnieniami przy użyciu trybu bezpośredniego lub trybu serwera proxy.

Uzyskiwanie dostępu do klastra za pomocą narzędzia kubectl (tryb bezpośredni)

Aby uzyskać dostęp do klastra Kubernetes z określonymi uprawnieniami, operator Kubernetes wymaga narzędzia Microsoft Entra kubeconfig, który można uzyskać za pomocą az aksarc get-credentials polecenia . To polecenie zapewnia dostęp do narzędzia kubeconfig opartego na administratorze, a także narzędzia kubeconfig opartego na użytkowniku. Plik kubeconfig oparty na administratorze zawiera wpisy tajne i powinien być okresowo bezpiecznie przechowywany i obracany. Z drugiej strony, oparty na użytkowniku microsoft Entra ID kubeconfig nie zawiera wpisów tajnych i może być dystrybuowany do użytkowników, którzy łączą się z ich komputerów klienckich.

Aby uruchomić to polecenie interfejsu wiersza polecenia platformy Azure, musisz mieć uprawnienia użytkownika klastra Usługi Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action uwzględnione w roli użytkownika klastra usługi Azure Kubernetes Service Arc:

az aksarc get-credentials -g $resource_group_name -n $aks_cluster_name --file <file-name>

Teraz możesz zarządzać klastrem za pomocą narzędzia kubectl. Można na przykład wyświetlić listę węzłów w klastrze przy użyciu polecenia kubectl get nodes. Przy pierwszym uruchomieniu musisz się zalogować, jak pokazano w poniższym przykładzie:

kubectl get nodes

Uzyskiwanie dostępu do klastra z urządzenia klienckiego (tryb serwera proxy)

Aby uzyskać dostęp do klastra Kubernetes z dowolnego miejsca za pomocą trybu serwera proxy przy użyciu az connectedk8s proxy polecenia, musisz mieć uprawnienie Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, które jest uwzględnione w roli użytkownika klastra Kubernetes z obsługą usługi Azure Arc.

Uruchom następujące kroki na innym urządzeniu klienckim:

  1. Zaloguj się przy użyciu uwierzytelniania Microsoft Entra.

  2. Uzyskaj połączenie kubeconfig klastra potrzebne do komunikowania się z klastrem z dowolnego miejsca (nawet spoza zapory otaczającej klaster):

    az connectedk8s proxy -n $aks_cluster_name -g $resource_group_name
    

    Uwaga

    To polecenie otwiera serwer proxy i blokuje bieżącą powłokę.

  3. W innej sesji powłoki użyj polecenia kubectl , aby wysyłać żądania do klastra:

    kubectl get pods -A
    

Teraz powinna zostać wyświetlona odpowiedź z klastra zawierającego listę wszystkich zasobników w default przestrzeni nazw.

Aby uzyskać więcej informacji, zobacz Uzyskiwanie dostępu do klastra z urządzenia klienckiego

Tworzenie i wyświetlanie zasobów klastra poza przypisaną przestrzenią nazw

Aby spróbować wyświetlić zasobniki poza przestrzenią nazw deweloperów , użyj kubectl get pods polecenia z flagą --all-namespaces :

kubectl get pods --all-namespaces

Członkostwo użytkownika w grupie nie ma roli Kubernetes, która zezwala na tę akcję. Bez uprawnień polecenie generuje błąd:

Error from server (Forbidden): pods is forbidden: User cannot list resource "pods" in API group "" at the cluster scope

Następne kroki