Řízení přístupu pomocí Microsoft Entra ID a RBAC Kubernetes v AKS povoleném službou Azure Arc

Platí pro: AKS ve Službě Azure Stack HCI 22H2, AKS na Windows Serveru

Azure Kubernetes Service (AKS) je možné nakonfigurovat tak, aby k ověřování uživatelů používal Microsoft Entra ID. V této konfiguraci se přihlásíte ke clusteru Kubernetes pomocí ověřovacího tokenu Microsoft Entra. Po ověření můžete pomocí integrovaného řízení přístupu na základě role (Kubernetes RBAC) kubernetes spravovat přístup k oborům názvů a prostředkům clusteru na základě identity uživatele nebo členství ve skupině.

Tento článek popisuje, jak řídit přístup pomocí RBAC Kubernetes v clusteru Kubernetes na základě Microsoft Entra členství ve skupině v AKS Arc. V Microsoft Entra ID vytvoříte ukázkovou skupinu a uživatele. Potom v clusteru vytvoříte role a vazby rolí, abyste udělili příslušná oprávnění k vytváření a zobrazení prostředků.

Požadavky

Před nastavením řízení přístupu na základě role v Kubernetes pomocí Microsoft Entra identity potřebujete:

  • Cluster Kubernetes vytvořený v AKS Arc

    Potřebujete cluster Kubernetes vytvořený v AKS Arc. Pokud potřebujete nastavit cluster, najdete pokyny k nasazení AKS pomocí Windows Admin Center nebo PowerShellu.

  • Připojení Azure Arc

    Musíte mít připojení Azure Arc ke clusteru Kubernetes. Informace o povolení služby Azure Arc najdete v tématu Připojení Azure Kubernetes Service v clusteru Azure Stack HCI k Kubernetes s podporou Azure Arc.

  • Potřebujete přístup k následujícím nástrojům příkazového řádku:

    • Azure CLI a rozšíření connectedk8s

      Rozhraní příkazového řádku Azure (Azure CLI) je sada příkazů používaných k vytváření a správě prostředků Azure. Pokud chcete zkontrolovat, jestli máte Azure CLI, otevřete nástroj příkazového řádku a zadejte: az -v. Abyste mohli otevřít kanál do clusteru Kubernetes, budete také muset nainstalovat rozšíření connectedk8s .

      Pokyny k instalaci najdete v tématu Postup instalace Azure CLI.

    • Kubectl

      Nástroj příkazového řádku Kubernetes kubectl umožňuje spouštět příkazy cílené na clustery Kubernetes. Pokud chcete zkontrolovat, jestli jste nainstalovali kubectl, otevřete nástroj příkazového řádku a zadejte: kubectl version --client. Ujistěte se, že je verze klienta kubectl alespoň v1.24.0.

      Pokyny k instalaci najdete v tématu kubectl.

    • PowerShell a modul PowerShellu AksHci

      PowerShell je řešení automatizace úloh pro různé platformy, které se skládá z prostředí příkazového řádku, skriptovacího jazyka a architektury pro správu konfigurace. Pokud jste nainstalovali AKS Arc, máte přístup k modulu AksHci PowerShell.

Volitelné první kroky

Pokud ještě nemáte Microsoft Entra skupinu, která obsahuje členy, můžete vytvořit skupinu a přidat některé členy, abyste mohli postupovat podle pokynů v tomto článku.

Pokud chcete předvést práci s Microsoft Entra ID a RBAC Kubernetes, můžete vytvořit skupinu Microsoft Entra pro vývojáře aplikací, pomocí které můžete ukázat, jak RBAC a Microsoft Entra ID řízení přístupu k prostředkům clusteru v Kubernetes. V produkčních prostředích můžete použít stávající uživatele a skupiny v rámci tenanta Microsoft Entra.

Create ukázkové skupiny v Microsoft Entra ID

Nejprve vytvořte skupinu v Microsoft Entra ID ve vašem tenantovi pro vývojáře aplikací pomocí příkazu az ad group create. V následujícím příkladu se přihlásíte ke svému tenantovi Azure a pak vytvoříte skupinu s názvem appdev:

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

Přidání uživatelů do skupiny

S ukázkovou skupinou vytvořenou v Microsoft Entra ID pro vývojáře aplikací přidáme uživatele do appdev skupiny. Tento uživatelský účet použijete k přihlášení ke clusteru AKS a otestování integrace RBAC Kubernetes.

Přidejte uživatele do skupiny appdev vytvořené v předchozí části pomocí příkazu az ad group member add . Pokud ukončíte relaci, znovu se připojte k Azure pomocí 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

Create vlastní vazbu role RBAC Kubernetes na prostředek clusteru AKS pro skupinu Microsoft Entra

Nakonfigurujte cluster AKS tak, aby skupině Microsoft Entra umožňoval přístup ke clusteru. Pokud chcete přidat skupinu a uživatele, přečtěte si Create ukázkové skupiny v Microsoft Entra ID.

  1. Pomocí příkazu Get-AksHciCredential získejte přihlašovací údaje správce clusteru:

    Get-AksHciCredential -name <name-of-your-cluster>
    
  2. Create obor názvů v clusteru Kubernetes pomocí příkazu kubectl create namespace. Následující příklad vytvoří obor názvů s názvem dev:

    kubectl create namespace dev
    

    V Kubernetes role definují oprávnění k udělení a RoleBindings oprávnění aplikují na požadované uživatele nebo skupiny. Tato přiřazení je možné použít pro daný obor názvů nebo v celém clusteru. Další informace najdete v tématu Použití autorizace RBAC Kubernetes.

    Create roli pro obor názvů vývojářů. Tato role uděluje úplná oprávnění k oboru názvů. V produkčních prostředích můžete chtít zadat podrobnější oprávnění pro různé uživatele nebo skupiny.

  3. Create soubor s názvem role-dev-namespace.yaml a vložte následující 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: ["*"]
    
  4. Create roli pomocí příkazu kubectl apply a zadejte název souboru manifestu YAML:

    kubectl apply -f role-dev-namespace.yaml
    
  5. Pomocí příkazu az ad group show získejte ID prostředku pro skupinu appdev. Tato skupina se nastaví jako předmět vazby rolí v dalším kroku:

    az ad group show --group appdev --query objectId -o tsv
    

    Příkaz az ad group show vrátí hodnotu, kterou použijete jako groupObjectId:

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  6. Create soubor s názvem rolebinding-dev-namespace.yaml a vložte následující manifest YAML. Vytváříte vazbu role, která skupině appdev umožňuje používat role-dev-namespace tuto roli pro přístup k oboru názvů. Na posledním řádku nahraďte groupObjectId ID objektu skupiny vytvořené příkazem az ad group show .

    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
    

    Tip

    Pokud chcete vytvořit binding role pro jednoho uživatele, zadejte kind: User a nahraďte groupObjectId hlavním názvem uživatele (UPN) v ukázce.

  7. Create roleBinding pomocí příkazu kubectl apply a zadejte název souboru manifestu YAML:

    kubectl apply -f rolebinding-dev-namespace.yaml
    
    rolebinding.rbac.authorization.k8s.io/dev-user-access created
    

Použití předdefinovaných rolí RBAC Kubernetes pro prostředek clusteru AKS

Kubernetes také poskytuje integrované role pro uživatele. Mezi tyto předdefinované role patří:

  • Role superuživatele (správce clusteru)
  • Role, které mají být uděleny v rámci clusteru pomocí ClusterRoleBindings
  • Role, které mají být uděleny v rámci konkrétních oborů názvů pomocí vazby rolí (správce, úpravy, zobrazení)

Další informace o předdefinovaných rolích RBAC Kubernetes najdete v tématu Role RBAC Kubernetes orientované na uživatele.

Role pro uživatele

Výchozí role clusteru Výchozí clusterRoleBinding Description
správce clusteru system:master group Umožňuje přístup superuživatele k provedení jakékoli akce s libovolným prostředkem. Při použití v ClusterRoleBinding, tato role poskytuje úplnou kontrolu nad všemi prostředky v clusteru a ve všech oborech názvů. Při použití v objektu RoleBinding poskytuje úplnou kontrolu nad každým prostředkem v oboru názvů vazby role, včetně samotného oboru názvů.
správce Žádné Umožňuje přístup správce, který má být udělen v rámci oboru názvů pomocí vazby role. Pokud se používá ve vazbě role, umožňuje přístup pro čtení a zápis k většině prostředků v oboru názvů, včetně možnosti vytvářet role a vazby rolí v rámci oboru názvů. Tato role neumožňuje přístup k zápisu do kvóty prostředků ani k samotnému oboru názvů. Tato role také neumožňuje přístup pro zápis ke koncovým bodům v clusterech vytvořených pomocí Kubernetes verze 1.22 nebo novější. Další informace najdete v tématu Přístup k zápisu pro koncové body.
upravit Žádné Umožňuje přístup pro čtení a zápis k většině objektů v oboru názvů. Tato role neumožňuje zobrazení nebo úpravu rolí nebo vazeb rolí. Tato role ale umožňuje přístup k tajným kódům a spouštění podů jako jakýkoliv ServiceAccount v oboru názvů, takže ji můžete použít k získání úrovní přístupu rozhraní API libovolného účtu ServiceAccount v oboru názvů. Tato role také neumožňuje přístup pro zápis ke koncovým bodům v clusterech vytvořených pomocí Kubernetes verze 1.22 nebo novější. Další informace najdete v tématu Přístup k zápisu pro koncové body.
Prohlédni Žádné Umožňuje přístup jen pro čtení k zobrazení většiny objektů v oboru názvů. Neumožňuje zobrazit role nebo vazby rolí. Tato role neumožňuje zobrazení tajných kódů, protože čtení obsahu tajných kódů umožňuje přístup k přihlašovacím údajům ServiceAccount v oboru názvů, což by umožnilo přístup rozhraní API jako k jakémukoliv účtu ServiceAccount v oboru názvů (forma eskalace oprávnění).

Použití integrované role RBAC Kubernetes s Microsoft Entra ID

Pokud chcete použít integrovanou roli RBAC Kubernetes s Microsoft Entra ID, proveďte následující kroky:

  1. U skupiny Microsoft Entra použijte integrovanou view roli RBAC Kubernetes:

    kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
    
  2. U každého uživatele Microsoft Entra použijte integrovanou view roli RBAC Kubernetes:

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

Práce s prostředky clusteru s využitím identit Microsoft Entra

Teď při vytváření a správě prostředků v clusteru Kubernetes otestujte očekávaná oprávnění. V těchto příkladech naplánujete a zobrazíte pody v oboru názvů přiřazeného uživatelem. Pak se pokusíte naplánovat a zobrazit pody mimo přiřazený obor názvů.

  1. Přihlaste se k Azure pomocí $AKSDEV_ID uživatelského účtu, který jste předali az ad group member add jako vstup příkazu . Spuštěním az connectedk8s proxy příkazu otevřete kanál do clusteru:

    az connectedk8s proxy -n <cluster-name> -g <resource-group>
    
  2. Po vytvoření kanálu proxy otevřete další relaci a naplánujte pod NGINX pomocí příkazu kubectl run v oboru názvů dev :

    kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
    

    Po úspěšném naplánování serveru NGINX se zobrazí následující výstup:

    pod/nginx-dev created
    
  3. Teď pomocí příkazu kubectl get pods zobrazte pody v dev oboru názvů :

    kubectl get pods --namespace dev
    

    Po úspěšném spuštění serveru NGINX se zobrazí následující výstup:

    $ kubectl get pods --namespace dev
    
    NAME        READY   STATUS    RESTARTS   AGE
    nginx-dev   1/1     Running   0          4m
    

Create a zobrazení prostředků clusteru mimo přiřazený obor názvů

Pokud se chcete pokusit zobrazit pody mimo obor názvů dev , použijte příkaz kubectl get pods s příznakem --all-namespaces .

kubectl get pods --all-namespaces

Členství uživatele ve skupině nemá roli Kubernetes, která tuto akci umožňuje. Bez oprávnění vyvolá příkaz chybu.

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

Další kroky