Udostępnij za pośrednictwem


Używanie kontroli dostępu opartej na rolach (RBAC) platformy Azure na potrzeby autoryzacji na platformie Kubernetes

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

Administratorzy infrastruktury mogą użyć kontroli dostępu opartej na rolach (RBAC) platformy Azure, aby kontrolować, kto może uzyskać dostęp do pliku kubeconfig i uprawnień, które mają. Operatory kubernetes mogą wchodzić w interakcje z klastrami Kubernetes przy użyciu narzędzia kubectl na podstawie podanych uprawnień. Interfejs wiersza polecenia platformy Azure umożliwia łatwe uzyskiwanie poświadczeń dostępu i pliku konfiguracji kubeconfig w celu nawiązania połączenia z klastrami usługi AKS przy użyciu narzędzia kubectl.

Jeśli używasz zintegrowanego uwierzytelniania między identyfikatorem Entra firmy Microsoft i usługą AKS, możesz 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. Ta funkcja umożliwia oddzielenie tożsamości użytkowników i poświadczeń dla platformy Kubernetes. Jednak nadal musisz oddzielnie skonfigurować kontrolę dostępu opartą na rolach platformy Azure i kontrolę dostępu na podstawie ról platformy Kubernetes oraz zarządzać nią.

W tym artykule opisano sposób używania kontroli dostępu opartej na rolach platformy Azure na potrzeby autoryzacji klastra Kubernetes przy użyciu identyfikatora Entra firmy Microsoft i przypisań ról platformy Azure.

Aby zapoznać się z omówieniem pojęć, zobacz Azure RBAC for Kubernetes Authorization for AKS enabled by Azure Arc (Kontrola dostępu oparta na rolach platformy Azure dla autoryzacji na platformie Kubernetes dla usługi AKS włączonej przez usługę Azure Arc).

Zanim rozpoczniesz

Przed rozpoczęciem upewnij się, że masz następujące wymagania wstępne:

  • Usługa AKS w usłudze Azure Local w wersji 23H2 obecnie obsługuje włączanie kontroli dostępu opartej na rolach platformy Azure tylko podczas tworzenia klastra Kubernetes. Po utworzeniu klastra Kubernetes nie można włączyć kontroli dostępu opartej na rolach platformy Azure.

  • Zainstaluj najnowszą wersję rozszerzeń interfejsu wiersza polecenia platformy Azure aksarc i connectedk8s . Pamiętaj, że należy uruchomić rozszerzenie aksarc w wersji 1.1.1 lub nowszej, aby włączyć kontrolę dostępu opartą na rolach platformy Azure. Uruchom polecenie az --version , aby znaleźć bieżącą wersję. Jeśli musisz zainstalować lub uaktualnić interfejs wiersza polecenia platformy Azure, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

    az extension add --name aksarc
    az extension add --name connectedk8s
    

    Jeśli rozszerzenie jest aksarc już zainstalowane, zaktualizuj rozszerzenie do najnowszej wersji:

    az extension update --name aksarc
    az extension update --name connectedk8s
    
  • Aby korzystać z klastrów Kubernetes, musisz zainstalować oprogramowanie kubectl i kubelogin.

  • Podczas tworzenia klastra Kubernetes potrzebne są następujące uprawnienia do włączania kontroli dostępu opartej na rolach platformy Azure:

    • Aby utworzyć klaster Kubernetes, potrzebujesz roli Współautor usługi Azure Kubernetes Service Arc.
    • Aby użyć parametru --enable-azure-rbac , potrzebujesz roli Administrator kontroli dostępu opartej na rolach, aby uzyskać dostęp do uprawnienia Microsoft.Authorization/roleAssignments/write . Aby uzyskać więcej informacji, zobacz Role wbudowane platformy Azure.
    • Propagowanie nowych przypisań ról przez serwer autoryzacji może potrwać do pięciu minut.
  • Po włączeniu kontroli dostępu opartej na rolach platformy Azure możesz uzyskać dostęp do klastra Kubernetes z podanymi uprawnieniami przy użyciu trybu bezpośredniego lub trybu serwera proxy.

    • Aby uzyskać dostęp do klastra Kubernetes bezpośrednio przy użyciu az aksarc get-credentials polecenia, musisz mieć uprawnienie Użytkownika klastra Usługi Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, które jest uwzględnione w 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 lub w witrynie Azure Portal, musisz mieć uprawnienie Użytkownika klastra Kubernetes/connectedClusters/listClusterUserCredential/action , które jest uwzględnione w roli użytkownika klastra Kubernetes z obsługą usługi Azure Arc. W międzyczasie należy sprawdzić, czy agenci i maszyna wykonująca proces dołączania spełniają wymagania sieciowe określone w wymaganiach sieciowych platformy Kubernetes z obsługą usługi Azure Arc.
  • Aby użyć narzędzia kubectl, możesz uzyskać do niego dostęp przy użyciu kontroli dostępu opartej na rolach platformy Azure lub grupy administracyjnej usługi AAD.

    • Aby użyć narzędzia kubectl z kontrolą dostępu opartą na rolach platformy Azure, potrzebna jest rola podglądu usługi Azure Arc w zakresie zasobu połączonego klastra.
    • Aby użyć narzędzia kubectl z grupą administracyjną usługi AAD, nie potrzebujesz żadnej określonej roli, ale musisz upewnić się, że jesteś w jednej z grup na liście add-admin-group połączonego zasobu klastra.

Krok 1. Tworzenie klastra Kubernetes z obsługą kontroli dostępu opartej na rolach platformy Azure

Możesz utworzyć klaster Kubernetes z obsługą kontroli dostępu opartej na rolach platformy Azure na potrzeby autoryzacji i identyfikator entra firmy Microsoft na potrzeby uwierzytelniania.

az aksarc create -n $aks_cluster_name -g $resource_group_name --custom-location $customlocation_ID --vnet-ids $logicnet_Id --generate-ssh-keys --enable-azure-rbac

Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.

Krok 2. Tworzenie przypisań ról dla użytkowników w celu uzyskania dostępu do klastra

Usługa AKS włączona przez usługę Arc udostępnia następujące pięć wbudowanych ról. Są one podobne do wbudowanych ról platformy Kubernetes z kilkoma różnicami, takimi jak obsługa identyfikatorów CRD. Zobacz pełną listę akcji dozwolonych przez każdą wbudowaną rolę platformy Azure.

Rola opis
Użytkownik klastra Kubernetes z obsługą usługi Azure Arc Umożliwia pobranie pliku kubeconfig opartego na połączeniu klastra w celu zarządzania klastrami z dowolnego miejsca.
Podgląd platformy Kubernetes w usłudze Azure Arc Umożliwia dostęp tylko do odczytu, aby wyświetlić większość obiektów w przestrzeni nazw.
Nie zezwala na wyświetlanie wpisów tajnych, ponieważ uprawnienie do odczytu wpisów tajnych umożliwia dostęp do poświadczeń usługi ServiceAccount w przestrzeni nazw. Te poświadczenia z kolei umożliwiają dostęp do interfejsu API za pośrednictwem tej wartości usługi ServiceAccount (forma eskalacji uprawnień).
Składnik zapisywania platformy Kubernetes w usłudze Azure Arc Umożliwia dostęp do odczytu/zapisu do większości obiektów w przestrzeni nazw.
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 dowolnej wartości usługi ServiceAccount w przestrzeni nazw, dzięki czemu może służyć do uzyskiwania poziomów dostępu interfejsu API dowolnej takiej wartości usługi ServiceAccount w przestrzeni nazw.
Administrator usługi Azure Arc Kubernetes Zezwala na dostęp administratora. Ma zostać udzielona w przestrzeni nazw za pomocą funkcji RoleBinding. Jeśli używasz go w funkcji RoleBinding, 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.
Administrator klastra Kubernetes w usłudze Azure Arc Umożliwia dostęp "superużytkownikowi" do wykonywania dowolnej akcji na dowolnym zasobie. Gdy używasz go w klastrze ClusterRoleBinding, zapewnia pełną kontrolę nad każdym zasobem w klastrze i we wszystkich przestrzeniach nazw. Gdy używasz go w usłudze RoleBinding, zapewnia pełną kontrolę nad każdym zasobem w przestrzeni nazw powiązania roli, w tym nad samą przestrzenią nazw.

Możesz użyć az role assignment create polecenia , aby utworzyć przypisania ról.

Najpierw pobierz $ARM-ID klaster docelowy, do którego chcesz przypisać rolę.

$ARM_ID = (az connectedk8s show -g "$resource_group_name" -n $aks_cluster_name --query id -o tsv)

Następnie użyj az role assignment create polecenia , aby przypisać role do klastra Kubernetes. Musisz podać element $ARM_ID z pierwszego kroku i assignee-object-id dla tego kroku. Może assignee-object-id to być identyfikator entra firmy Microsoft lub identyfikator klienta jednostki usługi.

W poniższym przykładzie do klastra Kubernetes Kubernetes jest przypisywana rola podglądu usługi Azure Arc:

az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <assignee-object-id> --scope $ARM_ID

W tym przykładzie zakresem jest identyfikator usługi Azure Resource Manager klastra. Może to być również grupa zasobów zawierająca klaster Kubernetes.

Tworzenie niestandardowych definicji ról

Możesz utworzyć własną definicję roli do użycia w przypisaniach ról.

W poniższym przykładzie przedstawiono definicję roli, która umożliwia użytkownikowi odczytywanie tylko wdrożeń. Aby uzyskać więcej informacji, zobacz pełną listę akcji danych, których można użyć do konstruowania definicji roli. Aby uzyskać więcej informacji na temat tworzenia roli niestandardowej, zobacz Kroki tworzenia roli niestandardowej

Aby utworzyć własne definicje ról niestandardowych, skopiuj następujący obiekt JSON do pliku o nazwie custom-role.json. Zastąp <subscription-id> symbol zastępczy rzeczywistym identyfikatorem subskrypcji. Rola niestandardowa używa jednej z akcji danych i umożliwia wyświetlanie wszystkich wdrożeń w zakresie (klastrze lub przestrzeni nazw), w którym jest tworzone przypisanie roli.

{
    "Name": "AKS Arc Deployment Reader",
    "Description": "Lets you view all deployments in cluster/namespace.",
    "Actions": [],
    "NotActions": [],
    "DataActions": [
        "Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
    ],
    "NotDataActions": [],
    "assignableScopes": [
        "/subscriptions/<YOUR SUBSCRIPTION ID>"
    ]
}

Aby uzyskać informacje o rolach niestandardowych i sposobie ich tworzenia, zobacz Role niestandardowe platformy Azure.

Utwórz definicję roli przy użyciu az role definition create polecenia , ustawiając --role-definition parametr na plik deploy-view.json utworzony 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 Arc Deployment Reader" --assignee <assignee-object-id> --scope $ARM_ID

Krok 3. Uzyskiwanie dostępu do klastra Kubernetes

Teraz możesz uzyskać dostęp do klastra Kubernetes z podanymi 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 podanymi uprawnieniami, operator Kubernetes wymaga polecenia Microsoft Entra kubeconfig.az aksarc get-credentials 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ć uprawnienie Użytkownika klastra Usługi Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, które jest 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 użyć narzędzia kubectl do zarządzania klastrem. 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 z trybem serwera proxy przy użyciu az connectedk8s proxy polecenia, musisz mieć uprawnienie Roli użytkownika klastra Kubernetes Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, które jest uwzględnione w roli użytkownika klastra Kubernetes z włączoną usługą Azure Arc.

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

  1. Logowanie przy użyciu uwierzytelniania microsoft Entra

  2. Pobierz klaster kubeconfig wymagany do komunikowania się z klastrem z dowolnego miejsca (nawet spoza zapory otaczającej klaster):

    az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
    

    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.

Czyszczenie zasobów

Usunięcie przypisania roli

# List role assignments
az role assignment list --scope $ARM_ID --query [].id -o tsv

# Delete role assignments
az role assignment delete --ids <LIST OF ASSIGNMENT IDS>

Usuwanie definicji roli

az role definition delete -n "AKS Arc Deployment Reader"

Następne kroki