You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Azure服务主体访问令牌获取存储账户存储密钥?

解决AAD令牌获取存储账户密钥失败问题

核心前提检查

  • 你的服务主体(对应client id)必须拥有存储账户密钥操作员服务角色或更高权限(如所有者、参与者),无权限的话令牌有效也无法获取密钥。
  • 确认获取的AAD令牌的资源目标是https://management.azure.com/——存储账户管理API属于Azure资源管理器范畴,不是存储服务本身的资源。

正确的curl调用流程

1. 获取有效的AAD访问令牌

确保令牌是针对资源管理器的,命令如下:

curl -X POST "https://login.microsoftonline.com/{你的租户ID}/oauth2/token" \
  -F "grant_type=client_credentials" \
  -F "client_id={你的客户端ID}" \
  -F "client_secret={你的客户端密钥}" \
  -F "resource=https://management.azure.com/"

执行后提取返回结果中的access_token字段。

2. 调用API获取存储账户密钥

使用拿到的令牌发起请求:

curl -X GET "https://management.azure.com/subscriptions/{你的订阅ID}/resourceGroups/{资源组名称}/providers/Microsoft.Storage/storageAccounts/{存储账户名称}/listKeys?api-version=2023-01-01" \
  -H "Authorization: Bearer {你的access_token}"

常见失败原因排查

  • 权限不足:前往Azure门户,检查服务主体在存储账户/资源组/订阅上的角色分配,确保已分配密钥操作员及以上角色,角色分配可能需要几分钟生效。
  • 令牌资源错误:如果获取令牌时把resource设为https://storage.azure.com/,这种令牌仅能用于Blob/文件等存储服务操作,无法调用资源管理器API,必须切换为https://management.azure.com/。
  • API版本问题:使用较新的api-version(如2023-01-01),旧版本可能存在兼容性问题。
  • 参数拼写错误:核对订阅ID、资源组名称、存储账户名称的拼写,确保和Azure门户显示一致。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:57:21