You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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绑定。

具体解决步骤

  1. 先用你手头有集群管理员权限的账号(比如AD管理员组里的用户)连接AKS集群
  2. 根据你的需求,给目标用户配置集群内的读取权限:
    • 如果需要让用户能读取所有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
      
    • 如果只需要用户访问test namespace的资源,创建一个该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
      
  3. 将上述yaml文件保存为rbac-binding.yaml,执行kubectl apply -f rbac-binding.yaml应用配置
  4. 让目标用户重新执行az aks get-credentials --resource-group RG1 --name aksttest(确保凭据刷新),再尝试kubectl get pods -n test,就能正常访问了

补充说明

之后如果需要给不同用户分配不同级别的权限,都需要通过K8s的Role/RoleBindingClusterRole/ClusterRoleBinding来配置,Azure层面的角色仅负责用户对AKS集群本身的操作权限,和集群内部资源访问无关。

内容的提问来源于stack exchange,提问作者Mike

火山引擎 最新活动