Sdílet prostřednictvím


Řízení přístupu pomocí Microsoft Entra ID a RBAC Kubernetes

Platí pro: AKS v Azure Stack HCI 23H2

Službu Azure Kubernetes Service (AKS) můžete nakonfigurovat tak, aby pro ověřování uživatelů používala ID Microsoft Entra. 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 (Kubernetes RBAC) 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ě členství ve skupině Microsoft Entra v AKS. V Microsoft Entra ID vytvoříte ukázkovou skupinu a uživatele. Potom vytvoříte role a vazby rolí v clusteru, abyste udělili příslušná oprávnění k vytváření a zobrazení prostředků.

Požadavky

Před nastavením RBAC Kubernetes pomocí Microsoft Entra ID musíte mít následující požadavky:

  • Cluster Azure Arc podporuje AKS. Pokud potřebujete nastavit cluster, přečtěte si pokyny pro použití webu Azure Portal nebo Azure CLI.
  • Nainstalované a nakonfigurované Rozhraní příkazového řádku Azure. Pokud potřebujete nainstalovat rozhraní příkazového řádku nebo upgradovat, přečtěte si téma Instalace Azure CLI.
  • 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. Také nainstalujte rozšíření connectedk8s, abyste otevřeli kanál pro cluster Kubernetes. 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, které cílí 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.
  • Ke svému clusteru Kubernetes můžete přistupovat se zadanými oprávněními buď s přímým režimem, nebo s režimem proxy serveru.
    • Pokud chcete získat přístup ke clusteru Kubernetes přímo pomocí az aksarc get-credentials příkazu, potřebujete oprávnění role uživatele clusteru Azure Kubernetes Service Arc pro Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action.
    • Pokud chcete získat přístup ke clusteru Kubernetes odkudkoli s režimem proxy pomocí az connectedk8s proxy příkazu, potřebujete oprávnění role uživatele clusteru Kubernetes s podporou Služby Kubernetes/connectedClusters/listClusterUserCredential/action, která je součástí role uživatele clusteru Kubernetes s podporou Azure Arc. Mezitím musíte ověřit, že agenti a počítač provádějící proces onboardingu splňují požadavky na síť v síťových požadavcích kubernetes s podporou Azure Arc.

Volitelné první kroky

Pokud ještě nemáte skupinu Microsoft Entra, 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í, která se dá použít k zobrazení toho, jak Řízení přístupu RBAC Kubernetes a Microsoft Entra ID řídí přístup k prostředkům clusteru. V produkčních prostředích můžete použít existující uživatele a skupiny v rámci tenanta Microsoft Entra.

Vytvoření 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í az ad group create příkazu. Následující příklad vás vyzve, abyste se přihlásili ke svému tenantovi Azure a pak vytvořili 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řidejte 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í az ad group member add příkazu. Pokud relaci ukončíte, 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

Vytvoření vlastní vazby role RBAC Kubernetes pro prostředek clusteru AKS pro skupinu Microsoft Entra

Nakonfigurujte cluster AKS tak, aby vaše skupina Microsoft Entra mohla získat přístup ke clusteru. Pokud chcete přidat skupinu a uživatele, přečtěte si téma Vytvoření ukázkových skupin v Microsoft Entra ID.

  1. az aksarc get-credentials Pomocí příkazu získejte přihlašovací údaje správce clusteru:

    az aksarc get-credentials --name "$aks_cluster_name" --resource-group "$resource_group_name" --admin
    
  2. Pomocí příkazu vytvořte obor názvů v clusteru kubectl create namespace Kubernetes. 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 vazby rolí použijí oprávnění pro požadované uživatele nebo skupiny. Tato přiřazení se dají použít u daného oboru názvů nebo v celém clusteru. Další informace najdete v tématu Použití autorizace RBAC Kubernetes.

Vytvořte roli pro vývojový obor názvů. Tato role uděluje úplná oprávnění k oboru názvů. Vprodukčních

  1. Vytvořte soubor s názvem role-dev-namespace.yaml a zkopírujte nebo 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: ["*"]
    
  2. Vytvořte roli pomocí kubectl apply příkazu a zadejte název souboru manifestu YAML:

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

    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
    
  4. Vytvořte soubor s názvem rolebinding-dev-namespace.yaml a zkopírujte nebo vložte následující manifest YAML. Vytvoříte vazbu role, která skupině appdev umožní používat role-dev-namespace 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 vazbu rolí pro jednoho uživatele, zadejte kind: User a nahraďte groupObjectId hlavní název uživatele (UPN) v příkladu.

  5. Pomocí příkazu vytvořte vazbu kubectl apply rolí 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 předdefinované role pro uživatele. Mezi předdefinované role patří:

  • Role superuživatele (správce clusteru)
  • Role, které mají být uděleny v rámci clusteru pomocí ClusterRoleBindings
  • Role určené k udělení v rámci konkrétních oborů názvů pomocí rolí (admin, edit, view)

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

Uživatelsky orientované role

Výchozí role clusteru Výchozí vazby role clusteru Popis
správce clusteru system:master group Umožňuje superuživatelům přístup k libovolnému prostředku. Při použití v ClusterRoleBinding dává tato role plnou kontrolu nad všemi prostředky v clusteru a ve všech oborech názvů. Při použití ve vazbě rolí poskytuje úplnou kontrolu nad každým prostředkem v oboru názvů vazby role, včetně samotného oboru názvů.
správce Nic 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á v 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 k zápisu ke koncovým bodům v clusterech vytvořených pomocí Kubernetes verze 1.22 nebo novější. Další informace najdete v tématu Zápis přístupu ke koncovým bodům.
Upravit… Nic Umožňuje přístup pro čtení a zápis k většině objektů v oboru názvů. Tato role neumožňuje zobrazení nebo úpravy rolí nebo vazeb rolí. Tato role ale umožňuje přístup k tajným kódům a spouštění podů jako jakýkoli účet ServiceAccount v oboru názvů, takže se dá 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 k zápisu ke koncovým bodům v clusterech vytvořených pomocí Kubernetes verze 1.22 nebo novější. Další informace najdete v tématu Zápis přístupu ke koncovým bodům.
zobrazit Nic Umožňuje přístup jen pro čtení k zobrazení většiny objektů v oboru názvů. Nepovoluje zobrazování rolí nebo vazeb rolí. Tato role neumožňuje zobrazování 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 jakýkoli účet ServiceAccount v oboru názvů (forma eskalace oprávnění).

Použití předdefinované role RBAC Kubernetes s ID Microsoft Entra

Pokud chcete použít integrovanou roli RBAC Kubernetes s ID Microsoft Entra, postupujte takto:

  1. Použití předdefinované view role RBAC Kubernetes u vaší skupiny Microsoft Entra:

    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>
    

Přístup ke clusteru Kubernetes

Ke clusteru Kubernetes teď můžete přistupovat se zadanými oprávněními pomocí přímého režimu nebo režimu proxy serveru.

Přístup ke clusteru pomocí kubectl (přímý režim)

Pro přístup ke clusteru Kubernetes se zadanými oprávněními potřebuje operátor Kubernetes microsoft Entra kubeconfig, který můžete získat pomocí az aksarc get-credentials příkazu. Tento příkaz poskytuje přístup k kubeconfig založenému na správci a také k kubeconfigu založenému na uživatelích. Soubor kubeconfig založený na správci obsahuje tajné kódy a měl by se bezpečně ukládat a pravidelně obměňovat. Na druhé straně uživatel-based Microsoft Entra ID kubeconfig neobsahuje tajné kódy a lze je distribuovat uživatelům, kteří se připojují ze svých klientských počítačů.

Ke spuštění tohoto příkazu Azure CLI potřebujete microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, která je součástí oprávnění role uživatele clusteru Azure Kubernetes Service Arc:

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

Teď můžete ke správě clusteru použít kubectl. Můžete například vypsat uzly v clusteru pomocí kubectl get nodes. Při prvním spuštění se musíte přihlásit, jak je znázorněno v následujícím příkladu:

kubectl get nodes

Přístup ke clusteru z klientského zařízení (režim proxy serveru)

Pokud chcete přistupovat ke clusteru Kubernetes odkudkoli s režimem proxy pomocí az connectedk8s proxy příkazu, potřebujete oprávnění role uživatele clusteru Kubernetes s podporou Služby Azure Arc,connectedClusters/listClusterUserCredential/action.

Na jiném klientském zařízení spusťte následující kroky:

  1. Přihlaste se pomocí ověřování Microsoft Entra.

  2. Získejte připojení kubeconfig ke clusteru potřebné ke komunikaci s clusterem odkudkoli (i mimo bránu firewall kolem clusteru):

    az connectedk8s proxy -n $aks_cluster_name -g $resource_group_name
    

    Poznámka:

    Tento příkaz otevře proxy server a zablokuje aktuální prostředí.

  3. V jiné relaci prostředí použijte kubectl k odesílání požadavků do clusteru:

    kubectl get pods -A
    

Teď by se měla zobrazit odpověď z clusteru obsahujícího seznam všech podů v default oboru názvů.

Další informace najdete v tématu Přístup ke clusteru z klientského zařízení.

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

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

kubectl get pods --all-namespaces

Členství ve skupině uživatele nemá roli Kubernetes, která tuto akci umožňuje. Příkaz bez oprávnění vygeneruje chybu:

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

Další kroky