如何在AKS中使用Azure Workload Identity实现API间认证?
使用Azure Workload Identity实现AKS中API间认证的问题解答
1. 是否仍需App Registrations?
- 消费方API可以仅使用用户分配托管标识,无需额外创建App Registration。托管标识本身就是独立的Azure AD服务主体,具备OAuth2客户端凭证流的能力。
- 提供方API作为受保护资源,必须对应一个App Registration:因为需要通过App Registration定义API的权限范围、身份验证规则(如受众、发行者验证),这是Azure AD保护自定义API的必要前提。
- 若同时给API配置App Registration和托管标识,会生成两个独立的服务主体,完全无此必要。建议方案:消费方用用户分配托管标识,提供方用App Registration定义受保护资源。
- 无法完全纯用托管标识完成配置,因为受保护的自定义API需要App Registration来在Azure AD中标识自身并暴露权限。
2. 无App Registrations(消费方侧)时的认证流程及资源
认证流程
- 配置提供方API的App Registration:
- 注册App Registration,设置唯一的
App ID URI(如api://contoso-provider-api)。 - 添加自定义API范围(如
access_as_application),启用应用权限类型(非委派权限)。
- 注册App Registration,设置唯一的
- 创建并配置消费方的用户分配托管标识:
- 在Azure中创建用户分配托管标识,记录其客户端ID。
- 在Azure AD中,将该托管标识添加为提供方API App Registration的应用权限用户,授予之前定义的
access_as_application权限,并完成管理员同意。
- AKS Workload Identity绑定:
- 启用AKS集群的Workload Identity功能。
- 给消费方API的ServiceAccount添加注解:
azure.workload.identity/client-id: <消费方托管标识客户端ID>。
- API调用流程:
- 消费方API的Pod启动后,通过Azure Identity SDK自动获取托管标识的访问令牌(受众为提供方API的
App ID URI)。 - 将令牌放入
Authorization: Bearer <token>请求头,调用提供方API。 - 提供方API验证令牌的签名、受众、权限,验证通过则返回数据。
- 消费方API的Pod启动后,通过Azure Identity SDK自动获取托管标识的访问令牌(受众为提供方API的
参考资源
- 核心配置:Azure Workload Identity的ServiceAccount与托管标识绑定流程
- 权限配置:Azure AD中给托管标识授予应用权限的步骤
- SDK使用:Azure Identity SDK获取托管标识令牌的代码示例
3. 本地开发模拟方案
- 手动获取令牌调试:
用Azure CLI获取消费方托管标识的访问令牌:
本地调试消费方API时,将此令牌手动加入请求头调用提供方API。az account get-access-token --resource <提供方API的App ID URI> --identity --username <消费方托管标识客户端ID> - 使用Azure Identity SDK自动适配:
在本地开发环境设置环境变量:
应用中的export AZURE_CLIENT_ID=<消费方托管标识客户端ID> export AZURE_TENANT_ID=<Azure租户ID>DefaultAzureCredential会自动使用Azure CLI的登录身份模拟获取令牌(需本地登录Azure CLI,且账号有权使用该托管标识)。 - 模拟Workload Identity环境:
使用az workload identity cli工具,在本地生成临时环境变量,模拟AKS中的Workload Identity认证环境,让应用无需修改代码即可自动获取令牌。 - 提供方API本地调试:
用Azure AD App Registration的"测试令牌"功能生成测试令牌,或者用Azure CLI获取针对提供方API的令牌,调用本地运行的提供方API验证权限逻辑。
内容的提问来源于stack exchange,提问作者saurabh bohra
相关产品推荐
相关产品推荐

