Azure AKS 未集成Azure AD场景下如何为用户授予全局只读权限?
问题原因
你之前分配的「Azure Kubernetes Service RBAC Reader」属于AKS托管AAD功能的专属角色,未启用该功能时,Azure侧的RBAC角色不会自动映射到Kubernetes集群内部的权限体系,仅「Azure Kubernetes Cluster Admin」这类直接授予集群管理员凭证的角色可以生效。
实现方案
无需启用AKS托管AAD,直接通过Kubernetes原生RBAC绑定目标Azure AD用户即可实现全局只读权限控制,操作步骤如下:
- 步骤1:获取集群管理员权限的kubeconfig
执行Azure CLI命令,拉取集群管理员访问凭证:az aks get-credentials --admin --name <你的AKS集群名称> --resource-group <集群所在资源组名称> - 步骤2:获取目标用户的Azure AD对象ID
执行以下命令获取用户的AAD唯一标识,后续RBAC配置需要用到该ID:az ad user show --id <目标用户的用户主体名称,如audit-user@contoso.com> --query id -o tsv - 步骤3:创建并应用全局只读权限绑定
新建YAML配置文件(如audit-view-rbac.yaml),内容如下:
执行命令应用配置:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: aad-audit-user-global-view subjects: - kind: User name: <替换为步骤2获取到的用户AAD对象ID> apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: view # Kubernetes内置全局只读角色,默认不包含Secret等敏感资源读取权限 apiGroup: rbac.authorization.k8s.iokubectl apply -f audit-view-rbac.yaml - 步骤4:用户自行获取访问凭证
目标用户在自己的设备上执行以下命令,用自身Azure AD账号登录获取集群访问凭证,即可正常查看集群资源:az aks get-credentials --name <你的AKS集群名称> --resource-group <集群所在资源组名称>
补充说明
如果审计场景需要读取Secret、ServiceAccount凭据等敏感资源,可以自定义包含所有资源get/list/watch权限的ClusterRole,替换上述配置中的view即可。
内容的提问来源于stack exchange,提问作者Vilius Kazakauskas
相关产品推荐
相关产品推荐

