当前位置: 首页 > 知识库问答 >
问题:

Azure应用程序配置、密钥库和托管服务标识(.NET Core 3.1)

史默
2023-03-14

我设置了一个简单的应用程序服务来使用/测试Azure应用程序配置

  • Azure应用程序配置包含2个非密钥库条目和1个密钥库引用条目
  • 使用正确的访问策略设置密钥库,允许获取/列出Azure应用程序配置的托管服务标识的机密
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
    var settings = config.Build();
    config.AddAzureAppConfiguration(settings["ConnectionStrings:AppConfig"]);
})
.UseStartup<Startup>());

当我在Azure App Config中添加指向KeyVault的条目时,应用程序将不会启动(HTTP错误500.30-ANCM进程内启动失败),日志显示此异常:

异常信息:Microsoft.Extensions.Configuration.AzureAppConfiguration.KeyVaUltReferenceException:未配置密钥存储库凭据,也未找到匹配的机密客户端。ErrorCode:,key:TestConnectionString,Label:,eTag:6EZSQW96CSAET7YM5H4DEDSLTKI,SecretiDentifier:https://TestKeyVault.vault.Azure.net/Secrets/TestSecret---->System.UnauthorizedAccessException:未配置密钥存储库凭据,也未找到匹配的秘密客户端。

似乎很明显有些东西没有得到正确的保护,但我检查了很多次,密钥库有一个访问策略,授予Azure应用程序配置标识的Get/List of Secrets。

我还尝试了主机构建器中的ConfigureKeyVault选项,即。

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
    {
        var settings = config.Build();

        config.AddAzureAppConfiguration(options =>
        {
            options.Connect(settings["ConnectionStrings:AppConfig"])
                    .ConfigureKeyVault(kv =>
                    {
                        kv.SetCredential(new DefaultAzureCredential());
                    });
        });
    })
    .UseStartup<Startup>());

密钥库上的访问策略授予Azure应用程序配置标识的Get/List机密是需要完成的全部工作吗?还是我错过了什么?(我也试过授予应用程序服务的访问策略,没有运气)。

共有1个答案

濮阳旭东
2023-03-14

对于密钥库引用,应用程序需要设置对应用程序配置和密钥库的身份验证。这两个服务不直接通信,因此应用程序配置不需要任何对密钥库的访问权限。使用configurekeyvault的代码段是正确的。它指定defaultazurecredential用于对密钥存储库进行身份验证,以便解析密钥存储库引用。

为了让您托管在Azure App服务中的应用程序能够从密钥库中访问机密,您可以在App服务上启用托管身份,并在密钥库中授予其GET和LIST权限。

对于开发环境,这些指令可用于创建服务主体、授予权限和设置要由DefaultaZureCredential使用的适当环境变量。

 类似资料:
  • 在我的azure app服务中,在app settings下,我添加了一个名为“something”的密钥,它的值指向密钥库的引用,如下所示: 现在,我可以从appsettings中检索值,但它将输出作为而不是实际值 我希望输出是我设置的值,而不是keyvault引用字符串本身。 我正在使用.NET MVC 4.7 web应用程序

  • 2019-10-02T04:00:46.7615707Z ##[错误]错误: 无法获取资源类型“Microsoft.Web/网站”和资源名称“晨顿前端”的资源 ID。错误:无法提取托管服务主体的访问令牌。请为虚拟机“https://aka.ms/azure-msi-docs”配置托管服务标识 (MSI)。状态代码:400,状态消息:请求错误。 任何人都可以向我解释一下问题是什么? 我对 Azure

  • 我想在应用程序配置服务中检索Azure密钥库引用的秘密。在dotnet中,这是小菜一碟,只需添加Options.configureKeyVault,就可以像下面这样检索secret: 但是在Python中,我没有找到任何方法可以在AzureAppConfigurationClient中添加KeyVault处理,当您试图检索KeyVault引用的secret时,您只需要得到字符串: 。 我已经“解决

  • 现在我正在使用AAD应用程序使服务成为= AAD应用程序 流程如下所示: 服务A:从托管标识获取令牌 服务A:转到KeyVault,出示令牌并获取AAD应用程序的秘密 服务A:转到AAD,提供一个秘密并为特定资源请求一个令牌 服务A:拨打服务B 服务B:验证令牌和资源 我想知道是否可以向我的服务注册托管标识,因此如果提供托管标识令牌,则服务B可以信任服务A。类似于这样: 服务A:从托管身份获取令牌

  • 我在Azure App Service中部署了一个spring boot应用程序,该应用程序使用用户管理的身份访问Azure Key Vault。 我遵循了以下提到的步骤: 创建了用户管理标识 在Azure app Service中部署了spring boot app 通过身份选项将新创建的用户管理身份添加到应用程序服务中 在应用程序服务中IAM的角色分配下添加用户托管标识为所有者角色 创建Azu