如何连接Azure Kubernetes API并获取普通用户身份认证令牌?
问题根因说明
开启AAD集成和RBAC的AKS集群,ListClusterUserCredentials返回的kubeconfig默认不会携带静态身份令牌,而是配置了AAD身份认证的exec插件规则,需要用户主动完成AAD身份验证后动态生成令牌,这和ListClusterAdminCredentials返回的长期静态管理员令牌逻辑完全不同,设计上就是避免普通用户拿到高权限的长期凭证。
可行解决方案
方案1:通过kubectl自动获取令牌(适合命令行场景)
- 普通用户先安装
kubectl和Azure CLI工具,执行az login登录自身的AAD普通账号 - 执行
az aks get-credentials --resource-group <资源组名> --name <集群名>,自动拉取对应用户身份的kubeconfig到本地 - 执行任意kubectl命令(比如
kubectl get pods),会自动触发AAD认证流程,完成后本地会缓存有效期通常为1小时的访问令牌,你可以在本地kubeconfig文件中找到user.exec字段生成的token值,这个令牌可以直接用于调用Kubernetes API。
方案2:手动调用AAD接口获取令牌(适合直接调用API的场景)
不需要依赖kubectl或者Azure CLI,普通用户可以直接通过AAD的OAuth2接口申请AKS集群的访问令牌:
- 先确认AAD租户ID、AKS集群的全局默认应用ID(固定为
6dae42f8-4368-4678-94ff-3960e28e3630) - 普通用户通过AAD密码授权、设备码授权等流程,向
https://login.microsoftonline.com/<租户ID>/oauth2/v2.0/token发起请求,申请scope为6dae42f8-4368-4678-94ff-3960e28e3630/.default的访问令牌 - 拿到返回的
access_token字段后,直接在调用Kubernetes API的时候加到请求头Authorization: Bearer <access_token>即可完成身份认证
注意:该令牌的权限完全由该用户在AKS RBAC中的绑定角色决定,不会超出你分配的只读等权限范围,无需担心越权问题。
权限配置校验
如果拿到令牌后调用API返回403 Forbidden,需要确认你已经给该普通用户绑定了对应的AKS RBAC角色,比如只读权限可以绑定view集群角色,示例命令:
kubectl create clusterrolebinding <绑定名> --clusterrole=view --user=<用户的AAD主体名,通常为邮箱地址>
内容的提问来源于stack exchange,提问作者Erylis
相关产品推荐
相关产品推荐

