如何在AKS部署的服务中实现应用级UAMI+FIC身份认证?
AKS中如何在应用层面实现UAMI + FIC的令牌请求?
术语说明
- UAMI: 用户分配托管标识(User-assigned Managed Identity)
- FIC: 联合身份凭据(Federated Identity Credentials)
UAMI + FIC的常规使用流程
- 创建用户分配托管标识(UAMI)
- 为该UAMI创建联合身份凭据(FIC)
- 在目标Azure资源中配置允许该UAMI的访问权限
- 在代码中调用Azure令牌提供程序获取访问令牌
我们之前通过客户端密钥从Entra ID应用请求令牌,现在正切换为UAMI + FIC的方案。在Azure Function App中,只需在门户的「标识」选项卡中指定要使用的UAMI即可完成配置,操作十分简便。
AKS中的应用层面实现方案
你想要的不依赖AKS基础设施层、仅在应用层面复用UAMI+FIC的方案是完全可行的,无需使用Pod工作负载标识,具体实现方式如下:
1. 利用Azure Identity SDK自动适配
在代码中使用Azure官方的Identity SDK(如.NET的Azure.Identity、Python的azure-identity等),SDK会自动识别环境中的标识配置。只需确保代码中没有硬编码客户端密钥,而是依赖SDK的默认令牌获取逻辑即可。
2. 通过环境变量指定UAMI
在AKS的Deployment配置中添加环境变量,指定目标UAMI的Client ID:
apiVersion: apps/v1 kind: Deployment metadata: name: your-app-deployment spec: template: spec: containers: - name: your-app-container env: - name: AZURE_CLIENT_ID value: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # 替换为你的UAMI的Client ID
Azure Identity SDK会自动读取这个环境变量,使用对应的UAMI向Entra ID请求令牌,逻辑和Function App中指定标识完全一致——无需修改代码,仅通过配置环境变量即可完成标识绑定。
3. 验证FIC配置正确性
确保为UAMI创建的FIC满足以下条件:
- 受众(Audience)设置为
api://AzureADTokenExchange - 主体(Subject)设置为AKS Pod对应的服务账户标识:
system:serviceaccount:<你的命名空间>:<服务账户名> - 颁发者(Issuer)设置为你的AKS集群的OIDC颁发者URL(可通过
az aks show --name <集群名> --resource-group <资源组名> --query "oidcIssuerProfile.issuerUrl" -o tsv获取)
方案优势
- 代码完全复用:同一套代码可直接部署到Function App、AKS、VM等不同基础设施,只需配置相同的
AZURE_CLIENT_ID环境变量 - 应用层面控制:标识绑定逻辑由应用SDK处理,不依赖AKS集群的基础设施配置
- 对齐现有流程:和Function App的配置方式逻辑一致,降低切换成本
内容的提问来源于stack exchange,提问作者Vanderwood
相关产品推荐
相关产品推荐

