Python操作Azure Government函数应用密钥遇问题,求解决方案
Azure Government函数应用密钥获取问题
问题1:/api/functions/admin/token方法是否适用于Azure Government?
- 参考公云Azure Functions的密钥管理方案,将URL替换为Azure Government版本后,调用
/api/functions/admin/token时收到错误:No route registered for '/api/functions/admin/token',询问该方法是否可行。
问题2:管理API获取主机密钥的Bearer令牌要求
- 尝试调用以下管理API获取主机密钥:
resp = requests.get("https://management.usgovcloudapi.net/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Web/sites/<function-app-name>/functions/admin/masterkey?api-version=20XX-XX-XX", headers={"Authorization": f"Bearer {something}"})
- 收到错误:
{"error":{"code":"InvalidAuthenticationToken","message":"The access token is invalid."}},询问此方法正确的话,Bearer令牌应采用何种格式。
解决方案说明
关于/api/functions/admin/token方法
这个端点仅适用于公云Azure环境,Azure Government并未启用该路由,直接替换URL的方法不可行,请放弃此路径。
关于管理API的Bearer令牌
调用Azure Government管理API时,Bearer令牌必须满足以下要求:
- 受众(Audience)必须匹配Azure Gov管理端点:获取令牌时需指定受众为
https://management.usgovcloudapi.net/,公云的https://management.azure.com/在Gov环境下完全无效。 - 令牌需包含对应权限:确保身份(Azure AD应用或用户)拥有
Microsoft.Web/sites/functions/admin/masterkey/read相关权限,可通过分配函数应用Contributor、Reader等角色实现。 - 从Azure Gov的AD端点获取令牌:令牌必须从
https://login.microsoftonline.us/(而非公云的login.microsoftonline.com)获取,同时使用对应Gov环境的租户ID、客户端ID等参数。
示例获取有效令牌的Python代码(使用azure-identity库):
from azure.identity import DefaultAzureCredential credential = DefaultAzureCredential() # 指定Azure Gov管理API的权限范围 token = credential.get_token("https://management.usgovcloudapi.net/.default") # 正确的请求头格式 headers = {"Authorization": f"Bearer {token.token}"}
另外,API版本需使用当前有效值,比如2023-12-01,不要使用占位符20XX-XX-XX。
内容的提问来源于stack exchange,提问作者afgt
相关产品推荐
相关产品推荐

