在 AKS 中使用 Azure RBAC 进行 Kubernetes 授权
·
在 AKS 中使用 Azure RBAC 进行 Kubernetes 授权
本手册旨在指导您如何在 Azure Kubernetes Service (AKS) 中配置和使用 Azure RBAC 来管理对 Kubernetes API 的访问权限。
第一章:核心概念解析
1.1 Azure RBAC (基于角色的访问控制)
- 定义: Azure 平台级别的权限控制机制。
- 作用: 管理对 Azure 资源(如 AKS 集群、虚拟机、存储账户等)的访问。
- 范围: 订阅 → 资源组 → 具体资源。
- 典型角色: Owner, Contributor, Reader 等。
- 控制对象: 谁可以调用 Azure 资源管理器 API (ARM API)。
1.2 Kubernetes RBAC
- 定义: Kubernetes 集群内部的访问控制机制。
- 作用: 管理用户、ServiceAccount 对 Kubernetes API 资源(如 Pods, Deployments, ConfigMaps 等)的操作权限。
- 范围: ClusterRole/ClusterRoleBinding (集群级别) 或 Role/RoleBinding (命名空间级别)。
- 典型角色: view, edit, admin 等。
- 控制对象: 谁可以调用 Kubernetes API Server。
1.3 两者关系与集成
默认情况下,Azure RBAC 和 Kubernetes RBAC 是两套独立的权限系统,不能直接互通。
然而,AKS 提供了两种集成方式:
- AKS + Azure AD + Kubernetes RBAC: 使用 Azure AD 进行身份验证,但集群内的授权仍由 Kubernetes RBAC 控制。身份统一,权限分离。
- AKS + Azure RBAC for Kubernetes Authorization: 直接使用 Azure RBAC 来管理 Kubernetes API 的操作权限,替代集群内的 Kubernetes RBAC。本手册重点介绍此模式。
第二章:启用 Azure RBAC 授权模式
2.1 前提条件
- AKS 版本: 建议使用 v1.20 或更高版本。
- Azure CLI 版本: 需
2.20.0或更高版本。使用az upgrade进行升级。 - Azure AD 集成: 集群必须启用 Azure AD 集成 (
--enable-aad)。 - Azure RBAC 授权: 创建或更新集群时必须启用
--enable-azure-rbac。
2.2 创建新的 AKS 集群
使用以下命令创建一个启用了 Azure RBAC 授权的新 AKS 集群:
az aks create \
--resource-group MyResourceGroup \
--name MyAKSCluster \
--enable-aad \
--enable-azure-rbac \
--aad-admin-group-object-ids <AAD_GROUP_OBJECT_ID> \
--node-count 1 \
--enable-addons monitoring \
--generate-ssh-keys
关键参数:
--enable-aad: 启用 Azure AD 集成。--enable-azure-rbac: 启用 Azure RBAC 授权模式。--aad-admin-group-object-ids: 指定一个 Azure AD 组的 Object ID,该组成员将拥有集群管理员权限。
2.3 更新现有的 AKS 集群
对于已存在的、已启用 Azure AD 集成的集群,可以运行以下命令来开启 Azure RBAC 授权模式:
az aks update \
--resource-group MyResourceGroup \
--name MyAKSCluster \
--enable-azure-rbac
第三章:角色分配与权限验证
3.1 分配 Azure RBAC 角色
启用该功能后,您需要通过分配 Azure 内置的 AKS 相关角色来授予用户或组对 Kubernetes API 的访问权限。
| Azure RBAC 角色 | 对应的 Kubernetes 权限 |
|---|---|
| Azure Kubernetes Service RBAC Cluster Admin | 完全管理整个集群 (相当于 cluster-admin) |
| Azure Kubernetes Service RBAC Admin | 管理所有命名空间 (相当于 admin) |
| Azure Kubernetes Service RBAC Writer | 可编辑所有命名空间 (相当于 edit) |
| Azure Kubernetes Service RBAC Reader | 只读访问所有命名空间 (相当于 view) |
示例:为用户分配只读权限 (Reader)
az role assignment create \
--assignee <USER_OR_GROUP_OBJECT_ID_OR_UPN> \
--role "Azure Kubernetes Service RBAC Reader" \
--scope $(az aks show -g MyResourceGroup -n MyAKSCluster --query id -o tsv)
参数说明:
--assignee: 目标用户或组的 Object ID 或 UPN。--role: 要分配的 Azure RBAC 角色名称。--scope: 作用范围,此处为 AKS 资源的 ARM ID。
3.2 登录并验证权限
-
登录 Azure CLI:
az login -
获取 kubeconfig:
# 如果你是管理员 az aks get-credentials --resource-group MyResourceGroup --name MyAKSCluster --admin # 如果是普通用户 az aks get-credentials --resource-group MyResourceGroup --name MyAKSCluster -
测试权限:
kubectl get pods -A被授予 Reader 角色的用户应该能成功列出 Pod,但如果尝试创建或删除资源,操作将会失败。
第四章:重要注意事项
- 权限管理转移: 开启此功能后,Kubernetes 原生的 RBAC (Role/RoleBinding) 将被旁路,所有权限管理都必须通过 Azure RBAC 进行。
- 回退机制: 如果需要回退到 Kubernetes 原生 RBAC,需要禁用
--enable-azure-rbac并手动重新配置集群内的 Role 和 RoleBinding。 - 自定义角色: 如果内置角色无法满足精细化的权限需求,可以创建自定义的 Azure 角色来定义对特定 Kubernetes API 资源和操作 (verbs) 的权限。
更多推荐


所有评论(0)