我已在应用服务上启用托管服务身份。但是,我的 WebJobs 似乎无法访问 key 。
他们报告:
尝试了以下3种方法来获取访问 token ,但都不起作用。
参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:。异常消息:尝试使用托管服务身份获取 token 。无法连接到托管服务身份 (MSI) 端点。请检查您是否在具有 MSI 设置的 Azure 资源上运行。
参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.microsoftonline.com/common。异常消息:尝试使用 Active Directory 集成身份验证获取 token 。无法获取访问 token 。 password_required_for_managed_user:托管用户需要密码
参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:。异常消息:尝试使用 Azure CLI 获取 token 。无法获取访问 token 。 “az”未被识别为内部或外部命令,
Kudo 不显示任何 MSI_ 环境变量。
这应该如何运作?这是现有的应用服务计划。
最佳答案
AppAuthentication 库利用应用服务中的内部端点来代表您的站点接收 token 。该端点是非静态的,因此被设置为环境变量。通过 ARM 为您的站点激活 MSI 后,您的站点将需要重新启动才能在其中设置两个新的环境变量:
MSI_ENDPOINT 和 MSI_SECRET
这些变量的存在对于 MSI 功能在运行时正常工作至关重要,因为 AppAuthentication 库使用它们来获取授权 token 。错误消息反射(reflect)了这一点:
Exception Message: Tried to get token using Managed Service Identity. Unable to connect to the Managed Service Identity (MSI) endpoint. Please check that you are running on an Azure resource that has MSI setup.
如果这些变量不存在,您可能需要重新启动站点。
https://learn.microsoft.com/en-us/azure/app-service/app-service-managed-service-identity
如果设置了环境变量,但您仍然看到相同的错误,上面的文章有一个代码示例,展示了如何手动向该端点发送请求。
public static async Task<HttpResponseMessage> GetToken(string resource, string apiversion) {
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Secret", Environment.GetEnvironmentVariable("MSI_SECRET"));
return await client.GetAsync(String.Format("{0}/?resource={1}&api-version={2}", Environment.GetEnvironmentVariable("MSI_ENDPOINT"), resource, apiversion));
}
我会尝试一下,看看会得到什么样的回应。
关于azure - 无法使用应用服务上的 Azure MSI 访问 Key Vault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46307365/