Azure RBAC与AKS权限异常排查:非Azure AD管理员用户无法读取AKS集群资源
解决AKS非AD管理员用户的集群资源访问权限问题
嗨Mike,我来帮你理清这个权限问题的核心原因和解决办法,你遇到的问题其实是混淆了Azure层面的RBAC权限和AKS集群内部的Kubernetes原生RBAC权限——这是两个完全独立的权限体系:
先明确两个权限的区别
你给用户分配的两个Azure角色:
Azure Kubernetes Service Cluster User Role:仅允许用户执行az aks get-credentials获取集群配置文件,没有任何集群内资源的访问权限Azure Kubernetes Service RBAC Reader:仅允许用户在Azure门户/CLI查看AKS集群的元数据(比如集群状态、节点数),同样不涉及K8s内部的pod、namespace等资源访问
你提到的“微软官方文档说无需额外操作”,其实是针对Azure AD管理员组内的用户——这类用户会被自动映射为K8s集群的cluster-admin超级权限角色,所以能直接访问所有资源,但普通AD用户没有这个默认映射,必须手动配置集群内的RBAC绑定。
具体解决步骤
- 先用你手头有集群管理员权限的账号(比如AD管理员组里的用户)连接AKS集群
- 根据你的需求,给目标用户配置集群内的读取权限:
- 如果需要让用户能读取所有namespace的资源,创建一个
ClusterRoleBinding,绑定K8s内置的view集群角色(这个角色包含所有资源的读取权限):apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: aks-global-reader-binding subjects: - kind: User name: "aksthree@tenantname.onmicrosoft.com" apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: view apiGroup: rbac.authorization.k8s.io - 如果只需要用户访问
testnamespace的资源,创建一个该namespace下的RoleBinding:apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: test-namespace-reader-binding namespace: test subjects: - kind: User name: "aksthree@tenantname.onmicrosoft.com" apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: view apiGroup: rbac.authorization.k8s.io
- 如果需要让用户能读取所有namespace的资源,创建一个
- 将上述yaml文件保存为
rbac-binding.yaml,执行kubectl apply -f rbac-binding.yaml应用配置 - 让目标用户重新执行
az aks get-credentials --resource-group RG1 --name aksttest(确保凭据刷新),再尝试kubectl get pods -n test,就能正常访问了
补充说明
之后如果需要给不同用户分配不同级别的权限,都需要通过K8s的Role/RoleBinding或ClusterRole/ClusterRoleBinding来配置,Azure层面的角色仅负责用户对AKS集群本身的操作权限,和集群内部资源访问无关。
内容的提问来源于stack exchange,提问作者Mike




