gpt4 book ai didi

容器应用服务中缺少 Azure 托管服务标识终结点

转载 作者:行者123 更新时间:2023-12-04 15:34:08 25 4
gpt4 key购买 nike

我正在尝试使用 docker-compose 预览将我的应用程序部署到 Azure 应用服务容器。部署配置如下:

version: "3.7"
services:
auth:
image: myorg/myimage
environment:
- MyOrg__Hosting__PathBase=/auth
- ASPNETCORE_FORWARDEDHEADERS_ENABLED=true
- ConnectionStrings__AuthenticationDatabase
# other services not important for this question

在该部署中,我需要访问 Azure Key Vault,我已通过 Key Vault 配置提供程序将我的应用程序与它集成,按照 the documentation :

var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));

config.AddAzureKeyVault(
$"https://{builtConfig["KeyVault:Name"]}.vault.azure.net/",
keyVaultClient,
DefaultKeyVaultSecretManager());

我的 Azure Key Vault 设置了适当的访问策略,并且从 Kudu 页面来看,似乎已在运行时环境中设置了 MSI_ENDPOINT 和 MSI_SECRET 环境变量。但是,Key Vault 配置提供程序反复无法连接到 Key Vault,并出现错误:

Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: Parameters: 
Connection String: [No connection string specified], Resource: https://vault.azure.net,
Authority: https://login.windows.net/6e5e63bd-f497-4f71-a6f4-9d29200a8a61. Exception
Message: Tried the following 3 methods to get an access token, but none of them worked.
2020-02-21T18:27:27.024474350Z Parameters:
Connection String: [No connection string specified], Resource: https://vault.azure.net,
Authority: https://login.windows.net/6e5e63bd-f497-4f71-a6f4-9d29200a8a61. 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.
2020-02-21T18:27:27.024479550Z Parameters:
Connection String: [No connection string specified], Resource: https://vault.azure.net,
Authority: https://login.windows.net/6e5e63bd-f497-4f71-a6f4-9d29200a8a61. Exception
Message: Tried to get token using Visual Studio. Access token could not be acquired. Environment variable LOCALAPPDATA not set.
2020-02-21T18:27:27.024483550Z Parameters:
Connection String: [No connection string specified], Resource: https://vault.azure.net,
Authority: https://login.windows.net/6e5e63bd-f497-4f71-a6f4-9d29200a8a61. Exception
Message: Tried to get token using Azure CLI. Access token could not be acquired. No such file or directory

这三种方法中的第一种清楚地表明 MSI 在某些情况下不可用。

我添加了一个用于调试目的的手动请求,取自 the documentation on Managed Identities :

public static async Task<HttpResponseMessage> GetToken(string resource, string apiversion)
{
HttpClient client = new HttpClient();
var msiEndpoint = Environment.GetEnvironmentVariable("MSI_ENDPOINT") ?? "MSI_ENDPOINT is not set!";
Log.Logger.Debug("MSI_ENDPOINT is {MsiEndpoint}", msiEndpoint);
client.DefaultRequestHeaders.Add("Secret", Environment.GetEnvironmentVariable("MSI_SECRET"));
return await client.GetAsync(String.Format("{0}/?resource={1}&api-version={2}", msiEndpoint, resource, apiversion));
}

我可以在我的应用程序日志中清楚地看到行MSI_ENDPOINT is - 所以它已设置,但为空或空白。调试请求抛出的 InvalidOperationException 支持这一点,指出“提供了无效的请求 URI。请求 URI 必须是绝对 URI,或者必须设置 BaseAddress。”

我尝试禁用并重新启用系统分配的身份、重新启动我的应用服务以及三次检查 Key Vault 访问策略,但均无济于事。此时,我想我只能假设 MSI_* 环境变量没有被运行时传递到容器,而且我不确定为什么会这样。

<小时/>

更新:我现在还尝试在 docker-compose 配置的 environment 映射中列出 MSI_* 环境变量,并且也没有任何效果。

最佳答案

对于您的问题,我认为您错过了容器 Web 应用程序托管身份的两个步骤。

其中之一是您需要首先启用托管身份。例如,您使用托管标识分配的类型系统。像这样启用它:

enter image description here

然后环境变量MSI_ENDPOINTMSI_SECRET将显示如下:

enter image description here

另一个是,如果您需要使用托管身份访问 key 保管库,则需要授予您托管身份足够的权限。您可以按照Assign a managed identity access to a resource by using the Azure portal中的步骤操作.

关于容器应用服务中缺少 Azure 托管服务标识终结点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60345876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com