Použití Azure RBAC pro autorizaci Kubernetes

V současné době už můžete využívat integrované ověřování mezi Azure Active Directory (Azure AD) a AKS. Pokud je tato integrace povolená, umožňuje zákazníkům používat uživatele, skupiny nebo instanční objekty Azure AD jako předměty v Řízení přístupu na základě role v Kubernetes. Další informace najdete tady. Tato funkce vám umožní samostatně spravovat identity uživatelů a přihlašovací údaje pro Kubernetes. Azure RBAC a Kubernetes RBAC ale musíte nastavit a spravovat samostatně. Další podrobnosti o ověřování a autorizaci pomocí RBAC v AKS najdete tady.

Tento dokument popisuje nový přístup, který umožňuje jednotnou správu a řízení přístupu napříč prostředky Azure, AKS a prostředky Kubernetes.

Než začnete

Možnost spravovat RBAC pro prostředky Kubernetes z Azure vám dává možnost spravovat RBAC pro prostředky clusteru pomocí Azure nebo nativních mechanismů Kubernetes. Pokud je tato možnost povolená, azure AD se ověří výhradně pomocí Azure RBAC, zatímco běžné uživatele a účty služby Kubernetes výhradně ověřuje řízení přístupu na základě role v Kubernetes. Další podrobnosti o ověřování a autorizaci pomocí RBAC v AKS najdete tady.

Požadavky

Omezení

  • Vyžaduje integraci spravované služby Azure AD.
  • Použijte kubectl v1.18.3+.
  • Pokud máte CRD a děláte vlastní definice rolí, je jediným způsobem, jak crd v současné době pokrýt, poskytnout Microsoft.ContainerService/managedClusters/*/read . AKS pracuje na poskytování podrobnějších oprávnění pro CRD. Pro zbývající objekty 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ž 5 minut a autorizační server je může aktualizovat.
  • Vyžaduje, aby tenant Azure AD nakonfigurovaný pro ověřování byl stejný jako tenant pro předplatné, které obsahuje cluster AKS.

Vytvoření nového clusteru pomocí Azure RBAC a spravované integrace Azure AD

Vytvořte cluster AKS pomocí následujících příkazů rozhraní příkazového řádku.

Vytvořte skupinu prostředků Azure:

# Create an Azure resource group
az group create --name myResourceGroup --location westus2

Vytvořte cluster AKS se spravovanou integrací Azure AD a Azure RBAC pro autorizaci Kubernetes.

# Create an AKS-managed Azure AD cluster
az aks create -g MyResourceGroup -n MyManagedCluster --enable-aad --enable-azure-rbac

Úspěšné vytvoření clusteru s integrací Azure AD a Azure RBAC pro autorizaci Kubernetes obsahuje v textu odpovědi následující část:

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

Integrace Azure RBAC do existujícího clusteru

Poznámka

Pokud chcete používat Azure RBAC pro autorizaci Kubernetes, Azure Active Directory musí být ve vašem clusteru povolená integrace. Další informace najdete v Azure Active Directory integrace .

Pokud chcete přidat Azure RBAC pro autorizaci Kubernetes do existujícího clusteru AKS, použijte příkaz az aks update s příznakem enable-azure-rbac .

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

Pokud chcete odebrat Azure RBAC pro autorizaci Kubernetes z existujícího clusteru AKS, použijte příkaz az aks update 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 pro přístup ke clusteru

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

Role Popis
Azure Kubernetes Service RBAC Reader Umožňuje přístup jen pro čtení k zobrazení většiny objektů v oboru názvů. Neumožňuje zobrazení rolí nebo vazeb rolí. Tato role neumožňuje zobrazení , 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 k rozhraní API jako jakýkoli Účet služby v oboru názvů Secrets (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í ani úpravu rolí nebo vazeb rolí. Tato role však umožňuje přístup k podům a spouštění podů jako k libovolnému účtu služby v oboru názvů, takže je možné ji použít k získání úrovní přístupu rozhraní API libovolného účtu ServiceAccount v Secrets oboru názvů.
Azure Kubernetes Service RBAC Admin 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 oprávnění k zápisu do kvóty prostředků ani k samotnému oboru názvů.
Azure Kubernetes Service clusteru RBAC Umožňuje super user access 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á pro celý cluster AKS je možné provést buď v okně Access Control (IAM) prostředku clusteru v Azure Portal, nebo pomocí příkazů Azure CLI, jak je znázorněno níže:

# Get your AKS Resource ID
AKS_ID=$(az aks show -g MyResourceGroup -n MyManagedCluster --query id -o tsv)
az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID

kde <AAD-ENTITY-ID> může být uživatelské jméno (například ) nebo dokonce user@contoso.com ClientID objektu služby.

Můžete také vytvořit přiřazení rolí vymezená konkrétním oborem 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>

V současné době je potřeba pomocí Azure CLI nakonfigurovat přiřazení rolí vymezená obory názvů.

Vytváření definic vlastních rolí

Volitelně můžete vytvořit vlastní definici role a pak ji přiřadit jako výše.

Níže je příklad definice role, která uživateli umožňuje jen číst nasazení a nic jiného. Úplný seznam možných akcí najdete tady.

Zkopírujte následující json do souboru s názvem 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>"
    ]
}

Nahraďte <YOUR SUBSCRIPTION ID> id z vašeho předplatného, které můžete získat spuštěním příkazu:

az account show --query id -o tsv

Teď můžeme definici role vytvořit spuštěním následujícího příkazu ze složky, do které jste uložili deploy-view.json :

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

Teď, když máte definici role, ji můžete přiřadit uživateli nebo jiné identitě spuštěním:

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

Poznámka

Spuštěním následujícího příkazu se ujistěte, že máte nejnovější verzi kubectl:

az aks install-cli

Možná ho budete muset spustit s sudo oprávněními.

Teď, když jste přiřadili požadovanou roli a oprávnění. Můžete začít volat rozhraní Kubernetes API, například z kubectl .

Pro tento účel nejprve pomocí následujícího příkazu získejte kubeconfig clusteru:

az aks get-credentials -g MyResourceGroup -n MyManagedCluster

Důležité

K provedení výše uvedeného Azure Kubernetes Service roli Uživatel clusteru clusteru.

Teď můžete kubectl použít například k zobrazení seznamu uzlů v clusteru. Při prvním spuštění se budete muset přihlásit a následující příkazy budou používat příslušný přístupový token.

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

K odblokování dalších scénářů, jako jsou neinteraktivní přihlášení, starší verze nebo využití jednotného přihlašování napříč několika clustery, aniž by bylo nutné se přihlašovat k novému clusteru, za podmínky, že je váš token stále kubectl platný, vytvořilAKS modul plug-in exec s názvem kubelogin .

Můžete ho použít spuštěním:

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

Poprvé se budete muset přihlašovat interaktivně jako pomocí běžného kubectl, ale potom už to nebude nutné, a to ani u nových clusterů Azure AD (pokud je váš token stále platný).

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í

Vyčištění přiřazení role

az role assignment list --scope $AKS_ID --query [].id -o tsv

Zkopírujte ID nebo ID ze všech přiřazení, která jste udělali, a pak.

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

Vyčištění definice role

az role definition delete -n "AKS Deployment Reader"

Odstranění clusteru a skupiny prostředků

az group delete -n MyResourceGroup

Další kroky

  • Další informace o ověřování, autorizaci, řízení přístupu na základě role v Kubernetes a Azure RBAC najdete tady.
  • Další informace o Azure RBAC najdete tady.
  • Další informace o všech akcích, které můžete použít k podrobné definici vlastních rolí Azure pro autorizaci Kubernetes, najdete tady.