我正在为我的Python Azure Managed Identity
使用Azure Functions App
功能
并且希望能够从Function App本身中获取当前分配的Client ID
。
在文档和azure-identity
Python源中搜索并没有得到我期望的结果。
也许我可以:
Azure Instance Metadata Service
以获得此ID。 (对此选项不是很满意)env
变量。 (似乎不错且高效,但不确定此处的最佳做法是什么)更新
受管理,可与ARM模板和环境变量一起使用
想法是使用Microsoft.Resources/deployments
子模板来通过以下方式更新Function App配置:
{
"name": "AZURE_CLIENT_ID",
"value": "[reference(resourceId('Microsoft.Web/sites', variables('appName')), '2019-08-01', 'full').identity.principalId]"
},
答案 0 :(得分:0)
最简单的选项是转到“功能”应用程序的“身份”选项卡,然后打开“系统分配的受管身份”。 然后,您无需提供client_id就可以获取访问令牌,因为如果Function应用程序有一个身份标识请求,令牌请求只是选择系统分配的身份。
如果您使用的是“用户分配的受管身份”,则需要通过env或直接在您的代码中提供client_id:
您可能已经知道了,但只是一条附加说明:您还需要确保已授予正在访问的资源的托管身份的访问权限,例如:转到您的Function应用需要的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>
}