我正在Azure Managed Identity为我的 python 使用功能Azure Functions App ,并希望能够Client ID从 Function App 本身中获取当前分配的内容。搜索文档和azure-identitypython 资源没有给出我期望的结果。也许我可以:自己查询Azure Instance Metadata Service得到这个ID。(对这个选项不是很满意)env在 ARM 部署阶段/或稍后手动将其提供为变量。(看起来不错且高效,但不确定这里的最佳做法是什么)更新托管 o 让它与 ARM 模板和环境变量一起工作使用系统标识部署 FunctionApp将系统标识提供为同一 FunctionApp 的 env 变量想法是使用Microsoft.Resources/deployments子模板更新功能应用程序配置:{ "name": "AZURE_CLIENT_ID",
"value": "[reference(resourceId('Microsoft.Web/sites', variables('appName')), '2019-08-01', 'full').identity.principalId]"
},
1 回答
慕仙森
TA贡献1827条经验 获得超8个赞
最简单的选择是转到 Functions 应用程序的标识选项卡,然后打开“系统分配的托管标识”。然后,您无需提供 client_id 即可获取访问令牌,因为如果 Function 应用程序有一个身份,令牌请求只会选择系统分配的身份。
如果您使用“用户分配的托管标识”,则需要提供 client_id:通过 env 或直接在您的代码中提供。
你可能已经知道,但只是一个额外的注意事项:你还需要确保你已经为你正在访问的资源授予了对你的托管标识的访问权限,例如:转到你的函数应用程序需要访问和分配的 Azure 资源您的托管身份的适当角色。
您的选项 1(查询 Azure 实例元数据服务)仅在 VM 上可用。
更新
由于您需要 client_id 用于其他目的,您还可以考虑从对访问令牌请求的响应中读取它:client_id 是与访问令牌一起返回给您的 JSON 令牌中的参数之一,其值是您使用的托管身份的 client_id(在您的情况下,系统分配的托管身份)
这是一个示例令牌响应来说明这一点:
{
access_token: <...>,
resource: <...>,
token_type: 'Bearer',
client_id: <client_id of the managed identity used to get this token>
}
添加回答
举报
0/150
提交
取消
