12

我已在应用服务上启用托管服务标识。但是,我的 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_ 环境变量。

这应该如何工作?这是现有的应用服务计划。

4

8 回答 8

5

AppAuthentication 库利用代表您的站点接收令牌的应用服务中的内部终结点。此端点是非静态的,因此设置为环境变量。通过 ARM 为您的站点激活 MSI 后,您的站点需要重新启动才能在其中设置两个新的环境变量:

MSI_ENDPOINTMSI_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));

}

我会尝试一下,看看我会得到什么样的回应。

于 2017-09-21T22:05:19.053 回答
3

我发现如果您启用 MSI 然后换出插槽,则功能会随着插槽的变化而消失。您可以通过将其关闭并再次打开来重新启用它,但这将在 AD 中创建一个新身份,并且需要您重置密钥保管库的权限才能使其正常工作。

于 2018-06-26T16:56:32.600 回答
3

我刚刚在尝试将 MSI 与 Function 应用程序一起使用时解决了这个问题,尽管我已经设置了环境变量。我尝试多次重启都没有成功。我最终做的是手动关闭该功能的 MSI,然后重新启用它。这并不理想,但它奏效了。

希望能帮助到你!

于 2017-09-28T18:47:48.163 回答
2

通过访问策略启用身份并授予对 keyvault 中的 azure 函数应用程序的访问权限。您可以在平台功能选项卡中找到身份这两个步骤对我有用

于 2020-02-26T12:46:11.383 回答
1

就我而言,我忘记在 Key Vault 中为应用程序添加访问策略

于 2019-10-19T22:52:06.340 回答
1

对于会遇到这些答案的人,我想分享我的经验。

我在运行 Azure Synapse 管道时遇到了这个问题。本质上,我向 KeyVault 添加了正确的访问策略,并且我还向 Azure Synapse 添加了一个指向我的 KeyVault 的 LinkedService。

如果我手动触发笔记本它可以工作,但在管道中,它会失败。

最初,我使用以下语句:

url = TokenLibrary.getSecret("mykeyvault", "ConnectionString")

然后我添加了链接服务的名称作为第三个参数,管道能够利用该链接服务来获取 Vault 的 MSI 令牌。

url = TokenLibrary.getSecret("mykeyvault", "ConnectionString", "AzureKeyVaultLinkedServiceName")
于 2021-09-16T14:51:03.073 回答
1

刚刚打开了@Sebastian Inones 显示的状态。比为 KeyVault 添加访问策略,例如 在此处输入图像描述

这个问题解决了!!

于 2020-07-03T13:10:32.943 回答
1

对于那些,比如我自己,想知道如何启用MSI.

我的场景:我App Service已经部署并运行了很长时间。此外,Azure DevOps我将管道配置为自动交换我的部署槽(暂存/生产)。突然,在正常推送之后,由于所描述的问题,生产开始失败。

所以,为了再次启用 MSI (我不知道为什么必须重新启用它,但我相信这只是一种解决方法,而不是解决方案,因为它应该首先启用)

转到您的应用服务。然后在设置-> 身份下。检查状态:在我的情况下,它是关闭的

我在下面附上了一张图片,以便于理解。

在此处输入图像描述

于 2019-10-30T12:15:37.160 回答