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
- Ujistěte se, že máte Azure CLI verze 2.24.0 nebo novější.
- Ujistěte se, že máte nainstalovaný kubectl verze 1.18.3 nebo novější.
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