无法获取Azure键值机密值

我正在尝试从我创建的Azure密钥保管库中获取机密(dbUser密码)。当我运行以下代码时,它将引发异常,无法获取有效令牌。

        public static string GetDBConnectString(ILogger logger)
        {
            try
            {
                string dbusername = Environment.GetEnvironmentVariable("SqlDBusername"); // [dbusername]
                logger.LogInformation($"Info: Creating DB Connection string as user {dbusername}.");
                AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
                KeyVaultClient keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
                string vaultConnect = Environment.GetEnvironmentVariable("SqlDBKeyvault"); // ["https://keyvault.vault.azure.net/secrets/dbusername/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]
                // The below line fails
                SecretBundle secret = keyVaultClient.GetSecretasync(vaultConnect).Getawaiter().GetResult();
                string sqlConnection = string.Format(Environment.GetEnvironmentVariable("SqlDBConnectionString"),dbusername,secret.Value);
                return sqlConnection;
            }
            catch (Exception ex)
            {
                logger.LogError(ex.Message,ex);
                return string.Empty;
            }
        }
  

Exception.Message =“参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。异常消息:尝试了以下3种方法来获取访问令牌,但他们都不起作用。   参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。异常消息:尝试使用托管服务身份获取令牌。无法连接到托管服务标识(MSI)端点。请检查您是否正在运行具有MSI安装程序的Azure资源。   参数:连接字符串:[未指定连接字符串],资源:https://vault.azure.net,权限:https://login.windows.net/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。异常消息:尝试使用Visual Studio获取令牌。无法获取访问令牌。   Visual Studio令牌提供程序microsoft.Asal.TokenService.exe的异常:TS003:错误,TS002:在租户“ xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”中找不到帐户“ me@mycompany.com”。   “

我在这里看到了创建ClientId授权的各种解决方案,但是所有这些解决方案都需要创建用户名/密码,这违反了保险库的目的?

有人有不需要用户凭据打开保管库的解决方案吗?

liuxin067 回答:无法获取Azure键值机密值

有两种类型的身份:系统分配的身份和用户分配的身份。您需要的是系统分配的身份,其中您的Azure函数将用于从密钥库中检索机密。

您应该添加一个将从密钥库中检索它的值,而不是读取函数内部的秘密值。

示例:

Key           Value
MySecret      @Microsoft.KeyVault(SecretUri=secret_uri_with_version)

enter image description here

然后在您的代码中,您将使用:

 Environment.GetVariable("MySecret);

更多信息:

https://azure.microsoft.com/en-us/blog/simplifying-security-for-serverless-and-web-apps-with-azure-functions-and-app-service/

https://docs.microsoft.com/en-us/azure/app-service/overview-managed-identity?tabs=dotnet

,

以下对用于本地开发的代码的更改。仍然必须确定一种在部署时通用的方法。使用“ RunAs = App; AppId = {有效的应用程序ID}”进行了尝试,但无法连接。

确保已选择工具>选项> AzureServiceAuthentication帐户,并且VS已连接到Azure云。

这有效。

AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider("RunAs=Developer; DeveloperTool=VisualStudio");
本文链接:https://www.f2er.com/3156082.html

大家都在问