Sdílet prostřednictvím


Použití řízení přístupu na základě role v Azure pro autorizaci Kubernetes

Tento článek popisuje, jak používat Azure RBAC pro autorizaci Kubernetes, což umožňuje jednotnou správu a řízení přístupu napříč prostředky Azure, AKS a prostředky Kubernetes. Další informace najdete v tématu Azure RBAC pro autorizaci prostřednictvím Kubernetes.

Poznámka:

Při použití integrovaného ověřování mezi Microsoft Entra ID a AKS můžete jako předměty v řízení přístupu na základě role Kubernetes (Kubernetes RBAC) použít uživatele Microsoft Entra, skupiny nebo instanční objekty. Díky této funkci nemusíte samostatně spravovat identity uživatelů a přihlašovací údaje pro Kubernetes. Stále ale potřebujete nastavit a spravovat Azure RBAC a RBAC Kubernetes samostatně.

Než začnete

  • Potřebujete nainstalovanou a nakonfigurovanou verzi Azure CLI 2.24.0 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
  • Potřebujete kubectl, s minimální verzí 1.18.3.
  • Než budete moci přidat Azure RBAC pro autorizaci Kubernetes, potřebujete mít ve svém clusteru povolenou spravovanou integraci Microsoft Entra. Pokud potřebujete povolit spravovanou integraci Microsoft Entra, přečtěte si téma Použití ID Microsoft Entra v AKS.
  • Pokud máte CRD a vytváříte vlastní definice rolí, jediným způsobem, jak krýt CRD dnes je použít Microsoft.ContainerService/managedClusters/*/read. U zbývajících objektů můžete použít konkrétní skupiny rozhraní API, například Microsoft.ContainerService/apps/deployments/read.
  • Nová přiřazení rolí se mohou až pět minut rozšiřovat a aktualizovat na autorizačním serveru.
  • Azure RBAC pro autorizaci Kubernetes vyžaduje, aby tenant Microsoft Entra nakonfigurovaný pro ověřování byl stejný jako tenant pro předplatné, které obsahuje váš cluster AKS.

Vytvoření nového clusteru AKS se spravovanou integrací Microsoft Entra a Azure RBAC pro autorizaci Kubernetes

  1. Pomocí příkazu vytvořte skupinu az group create prostředků Azure.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=<azure-region>
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Vytvořte cluster AKS se spravovanou integrací Microsoft Entra a Azure RBAC pro autorizaci Kubernetes pomocí az aks create příkazu.

    export CLUSTER_NAME=<cluster-name>
    
    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --enable-aad \
        --enable-azure-rbac \
        --generate-ssh-keys
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    "AADProfile": {
        "adminGroupObjectIds": null,
        "clientAppId": null,
        "enableAzureRbac": true,
        "managed": true,
        "serverAppId": null,
        "serverAppSecret": null,
        "tenantId": "****-****-****-****-****"
    }
    

Povolení Azure RBAC v existujícím clusteru AKS

  • Povolte Azure RBAC pro autorizaci Kubernetes v existujícím clusteru AKS pomocí az aks update příkazu s příznakem --enable-azure-rbac .

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
    

Zakázání Azure RBAC pro autorizaci Kubernetes z clusteru AKS

  • Odeberte Azure RBAC pro autorizaci Kubernetes ze stávajícího clusteru AKS pomocí příkazu az aks update s příznakem --disable-azure-rbac.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
    

Předdefinované role AKS

AKS poskytuje následující předdefinované role:

Role Popis
Čtenář RBAC služby Azure Kubernetes Service Umožňuje přístup jen pro čtení k zobrazení většiny objektů v oboru názvů. Nepovoluje zobrazování rolí nebo přiřazení rolí. Tato role neumožňuje prohlížení Secrets, protože čtení obsahu tajemství umožňuje přístup k přihlašovacím údajům ServiceAccount v oboru názvů, což by umožnilo přístup k rozhraní API jako jakýkoli účet ServiceAccount v oboru názvů (forma eskalace oprávnění).
Azure Kubernetes Service RBAC Writer Umožňuje přístup pro čtení a zápis k většině objektů v jmenném prostoru. Tato role neumožňuje zobrazení nebo úpravy rolí nebo vazeb rolí. Tato role však umožňuje přístup k Secrets a spouštění podů jako jakýkoli účet ServiceAccount ve jmenném prostoru, takže ji lze použít k získání úrovně přístupu k API libovolného účtu ServiceAccount ve jmenném prostoru.
Správce RBAC služby Azure Kubernetes Service Umožňuje administrátorský přístup udělovaný v rámci oboru názvů. Umožňuje přístup pro čtení a zápis k většině prostředků v oboru názvů (nebo oboru clusteru), 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ů.
Správce clusteru RBAC služby Azure Kubernetes Service Umožňuje superuživatelům přístup k provedení jakékoli akce u libovolného prostředku. Poskytuje úplnou kontrolu nad všemi prostředky v clusteru a ve všech jmenných prostorech.

Vytvoření přiřazení rolí pro přístup ke clusteru

  1. Získejte ID prostředku AKS pomocí příkazu az aks show.

    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
  2. Vytvořte přiřazení role pomocí příkazu az role assignment create. <AAD-ENTITY-ID> může být uživatelské jméno nebo ID klienta instančního objektu. Následující příklad vytvoří přiřazení role pro správce RBAC služby Azure Kubernetes Service.

    az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

    Poznámka:

    Pomocí příkazu az role assignment create a nastavením rozsahu na požadovaný obor názvů můžete vytvořit přiřazení rolí Azure Kubernetes Service RBAC Reader a Azure Kubernetes Service RBAC Writer specifických pro konkrétní obor názvů v rámci clusteru.

    az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
    

Vytváření definic vlastních rolí

Následující příklad definice vlastní role umožňuje uživateli jen číst nasazení a nic jiného. Úplný seznam možných akcí najdete v tématu Operace Microsoft.ContainerService.

  1. Pokud chcete vytvořit vlastní definice rolí, zkopírujte následující soubor, nahraďte <YOUR SUBSCRIPTION ID> ho vlastním ID předplatného a uložte ho 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>"
        ]
    }
    
  2. Vytvořte definici role pomocí příkazu az role definition create a nastavte --role-definition na soubor deploy-view.json, který jste vytvořili v předchozím kroku.

    az role definition create --role-definition @deploy-view.json 
    
  3. Pomocí příkazu přiřaďte definici role uživateli nebo jiné identitě az role assignment create .

    az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

Použijte Azure RBAC k autorizaci Kubernetes pomocí kubectl

  1. Ujistěte se, že máte předdefinované role uživatele clusteru Azure Kubernetes Service, a pak pomocí az aks get-credentials příkazu získejte kubeconfig clusteru AKS.

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Teď můžete použít kubectl ke správě clusteru. Můžete například pomocí kubectl get nodes vypsat uzly v rámci clusteru.

    kubectl get nodes
    

    Příklad výstupu:

    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
    

Použijte Azure RBAC pro autorizaci Kubernetes pomocí kubelogin

AKS vytvořil modul kubelogin plug-in, který pomáhá odblokovat scénáře, jako jsou neinteraktivní přihlášení, starší kubectl verze nebo využití jednotného přihlašování napříč několika clustery, aniž by se museli přihlašovat k novému clusteru.

  1. Modul plug-in kubelogin použijte spuštěním následujícího příkazu:

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. Teď můžete použít kubectl ke správě clusteru. Můžete například vypsat uzly v clusteru pomocí kubectl get nodes.

    kubectl get nodes
    

    Příklad výstupu:

    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
    

Vyčistěte prostředky

Odstranit přiřazení role

  1. Zobrazení seznamu přiřazení rolí pomocí az role assignment list příkazu

    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. Pomocí příkazu az role assignment delete odstraňte přiřazení rolí.

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

Odstranění definice role

  • Pomocí příkazu odstraňte definici az role definition delete vlastní role.

    az role definition delete --name "AKS Deployment Reader"
    

Odstranění skupiny prostředků a clusteru AKS

  • Pomocí tohoto příkazu odstraňte skupinu prostředků a cluster AKS.

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

Další kroky

Další informace o ověřování, autorizaci AKS, RBAC Kubernetes a Azure RBAC najdete tady: