Używanie kontroli dostępu opartej na rolach platformy Azure na potrzeby autoryzacji platformy Kubernetes

Korzystając ze 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 trzeba skonfigurować kontrolę dostępu opartą na rolach platformy Azure i kontrolę dostępu opartą na rolach platformy Kubernetes i zarządzać nią oddzielnie.

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

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 kubectlwersja 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 jak Microsoft.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 .

az group create --name myResourceGroup --location westus2

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 .

az aks create -g myResourceGroup -n myManagedCluster --enable-aad --enable-azure-rbac

Dane wyjściowe będą 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

Dodaj kontrolę dostępu opartą na rolach platformy Azure dla autoryzacji kubernetes do istniejącego klastra usługi AKS przy użyciu az aks update polecenia z flagą enable-azure-rbac .

az aks update -g myResourceGroup -n myAKSCluster --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 -g myResourceGroup -n myAKSCluster --disable-azure-rbac

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

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 Secretselementu , 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.
Administracja RBAC 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.
Klaster RBAC usługi Azure Kubernetes Service Administracja 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.

Przypisania ról ograniczone do całego klastra usługi AKS można wykonać w bloku Kontrola dostępu (IAM) zasobu klastra w witrynie Azure Portal lub za pomocą następujących poleceń interfejsu wiersza polecenia platformy Azure:

Pobierz identyfikator zasobu usługi AKS przy użyciu az aks show polecenia .

AKS_ID=$(az aks show -g myResourceGroup -n myManagedCluster --query id -o 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.

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>

Uwaga

W witrynie Azure Portal po utworzeniu przypisań ról w zakresie żądanej przestrzeni nazw nie będzie można wyświetlić "przypisań ról" dla przestrzeni nazw w zakresie. Można je znaleźć za pomocą az role assignment list polecenia lub listy przypisań ról dla użytkownika lub grupy, do której przypisano rolę.

az role assignment list --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 jako deploy-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-definitiondeploy-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 -g myResourceGroup -n myManagedCluster

Teraz możesz zarządzać kubectl 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
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

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 dodatkowych scenariuszy, takich jak logowanie nieinterakcyjne, starsze kubectl wersje lub korzystanie z logowania jednokrotnego w wielu klastrach bez konieczności logowania się do nowego klastra.

Wtyczkę kubelogin można użyć, uruchamiając następujące polecenie:

export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig

Podobnie jak kubectlw przypadku polecenia , musisz zalogować się po raz pierwszy, jak pokazano w poniższym przykładzie:

kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

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

# List role assignments
az role assignment list --scope $AKS_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 Deployment Reader"

Usuwanie grupy zasobów i klastra usługi AKS

az group delete -n myResourceGroup

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: