用户在抛出值的 Azure 函数中分配的托管标识不能为空

User assigned managed identity in azure functions throwing value cannot be null

我有一个使用 power shell 6.2 创建的 http post azure 函数。它需要访问 Azure Key Vault 才能检索机密。 当我分配系统分配的托管身份时,它工作得很好。但是,在使用用户分配的托管标识执行时出现附加错误。

到目前为止我做了什么。

  1. 在 Azure 托管身份服务下创建了用户分配的托管身份。
  2. 在我的 KeyVault 访问控制 (IAM) 中添加了贡献者角色 -> 在分配访问权限下拉列表中,我选择了用户分配的托管标识。
  3. 此外,在 KeyVault 访问策略部分中,添加了新创建的用户分配身份,具有获取和列出秘密权限
  4. 最终在 azure 函数的标识选项卡中添加了新用户分配的托管标识。

我读到用户分配的托管标识需要 clinet_id,但不知道在 azure 函数的 post 请求中在哪里配置它。

使用REST协议,可以参考this article追加一个clientid这样的查询参数,

GET /MSI/token?resource=https://vault.azure.net&api-version=2017-09-01&clientid=xxxx 

使用SDK,可以在连接字符串中指定clientid,参考https://docs.microsoft.com/en-us/azure/key-vault/service-to-service-authentication#connection-string-support

PowerShell 函数的解决方法在这里:https://github.com/Azure/azure-functions-host/issues/5797#issuecomment-601864473