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

Pokud využíváte integrované ověřování mezi Id Microsoft Entra a AKS, můžete jako předměty použít uživatele, skupiny nebo instanční objekty Microsoftu jako předměty řízení přístupu na základě role (Kubernetes RBAC). Tato funkce vám umožňuje samostatně spravovat identity uživatelů a přihlašovací údaje pro Kubernetes. Stále ale musíte nastavit a spravovat Azure RBAC a RBAC Kubernetes samostatně.

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

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.
  • Abyste mohli přidat Azure RBAC pro autorizaci Kubernetes, potřebujete ve svém clusteru povolenou 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.
  • Rozšíření nových přiřazení rolí může trvat až pět minut, než se autorizační server aktualizuje.
  • 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

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

az group create --name myResourceGroup --location westus2

Vytvořte cluster AKS se spravovanou integrací Microsoft Entra a Azure RBAC pro autorizaci Kubernetes pomocí az aks create příkazu.

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

Výstup bude 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

Přidejte azure RBAC pro autorizaci Kubernetes do existujícího clusteru AKS pomocí az aks update příkazu s příznakem enable-azure-rbac .

az aks update -g myResourceGroup -n myAKSCluster --enable-azure-rbac

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

Odeberte Azure RBAC pro autorizaci Kubernetes z existujícího clusteru AKS pomocí az aks update příkazu s příznakem disable-azure-rbac .

az aks update -g myResourceGroup -n myAKSCluster --disable-azure-rbac

Vytvoření přiřazení rolí pro uživatele umožňujících přístup ke clusteru

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 vazeb rolí. Tato role neumožňuje prohlížení Secrets, 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í).
Azure Kubernetes Service RBAC Writer 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 Secrets podům 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ů.
Správa RBAC služby Azure Kubernetes Service Umožňuje přístup správce, který má být udělen 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ů.
Cluster RBAC služby Azure Kubernetes Service Správa 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 oborech názvů.

Přiřazení rolí vymezených na celý cluster AKS je možné provést buď v okně Řízení přístupu (IAM) prostředku clusteru na webu Azure Portal, nebo pomocí následujících příkazů Azure CLI:

Pomocí příkazu získejte ID az aks show prostředku AKS.

AKS_ID=$(az aks show -g myResourceGroup -n myManagedCluster --query id -o tsv)

Pomocí příkazu vytvořte přiřazení az role assignment create role. <AAD-ENTITY-ID> může být uživatelské jméno nebo ID klienta instančního objektu.

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

Poznámka:

Pomocí příkazu a nastavením oboru názvů 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 v rámci clusteru az role assignment create .

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

Poznámka:

Po vytvoření přiřazení rolí s vymezeným oborem názvů na webu Azure Portal neuvidíte v oboru názvů v oboru názvů "přiřazení rolí". Najdete ho pomocí az role assignment list příkazu nebo výpisu přiřazení rolí pro uživatele nebo skupinu, ke kterému jste roli přiřadili.

az role assignment list --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.

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>"
    ]
}

Pomocí příkazu vytvořte definici az role definition create role a nastavte --role-definition soubor deploy-view.json , který jste vytvořili v předchozím kroku.

az role definition create --role-definition @deploy-view.json 

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žití Azure RBAC pro autorizaci Kubernetes s využitím kubectl

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 -g myResourceGroup -n myManagedCluster

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

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

Použití Azure RBAC pro autorizaci Kubernetes s využitím kubelogin

AKS vytvořil modul kubelogin plug-in, který pomáhá odblokovat další 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.

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

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

kubectlPodobně jako 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
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

Vyčištění prostředků

Odstranit přiřazení role

# 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>

Odstranění definice role

az role definition delete -n "AKS Deployment Reader"

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

az group delete -n myResourceGroup

Další kroky

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