我在App Service上启用了托管服务标识。但是,我的WebJobs似乎无法访问密钥。
他们报告:
Tried the following 3 methods to get an access token, but none of them worked.
Parameters: Connectionstring: [No connection string specified], Resource: https://vault.azure.net, Authority: . 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.
Parameters: Connectionstring: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.microsoftonline.com/common. Exception Message: Tried to get token using Active Directory Integrated Authentication. Access token could not be acquired. password_required_for_managed_user: Password is required for managed user
Parameters: Connectionstring: [No connection string specified], Resource: https://vault.azure.net, Authority: . Exception Message: Tried to get token using Azure CLI. Access token could not be acquired. 'az' is not recognized as an internal or external command,
Kudo没有显示任何MSI_环境变量。
这应该如何运作?这是现有的应用服务计划。
答案 0 :(得分:2)
AppAuthentication库利用App Service中的内部端点,代表您网站接收令牌。此端点是非静态的,因此设置为环境变量。通过ARM为您的站点激活MSI后,您的站点将需要重新启动才能在其中设置两个新的环境变量:
MSI_ENDPOINT 和 MSI_SECRET
这些变量的存在对于MSI功能在运行时正常工作至关重要,因为AppAuthentication库使用它们来获取授权令牌。错误消息反映了这一点:
异常消息:尝试使用托管服务标识获取令牌。无法连接到托管服务标识(MSI)端点。请检查您是否在具有MSI设置的Azure资源上运行。
如果缺少这些变量,您可能需要重新启动该站点。
https://docs.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));
}
我会尝试,看看我得到了什么样的回应。
答案 1 :(得分:1)
我在尝试将MSI与Function应用程序一起使用时解决了这个问题,尽管我已经设置了环境变量。我尝试多次重启但没有成功。我最终做的是手动关闭功能的MSI,然后重新启用它。这不太理想,但确实有效。
希望它有所帮助!
答案 2 :(得分:1)
我发现,如果启用MSI,然后换出插槽,则功能会随着插槽更改而消失。您可以通过将其关闭然后重新打开来重新启用它,但这将在AD中创建一个新的身份,并且需要您重置密钥库的权限才能使其正常工作。
答案 3 :(得分:1)
启用身份并通过访问策略授予在Keyvault中使用Azure功能应用程序的访问权限。 您可以在平台功能标签中找到身份 这两个步骤对我有用
答案 4 :(得分:1)
答案 5 :(得分:0)
就我而言,我忘记了在Key Vault中为应用程序添加访问策略
答案 6 :(得分:0)