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

如何在本地和托管环境(Azure和内部部署)中使用DefaultAzureCredential访问Azure密钥库?

微生自怡
2023-03-14

我们有一个web api(.NET 5),可以访问Azure KeyVault中的一些秘密
在local machine for development中,由于我是新创建的vault的所有者,因此我的电子邮件具有访问keyvault的权限。

因此我选择了我的账户--

我有下面的代码从Keyvault获取机密,并通过配置访问,就像访问appsettings值一样。

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, config) =>
        {
            var appSettings = config.Build();
            var credentialOptions = new DefaultAzureCredentialOptions();
            var credential = new DefaultAzureCredential(credentialOptions);
            config.AddAzureKeyVault(new Uri(appSettings["Url:KeyVault"]), credential);
        })
       .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

我们在服务层和控制器层访问像_configuration[“secret”]这样的秘密值。

我的疑问是

1、如果我将此代码部署到内部服务器,它将如何工作(开发环境是内部服务器)?

2、如果我将此Web API部署到Azure,如何使用标识AD应用程序访问密钥保管库而无需更改任何代码。

我希望代码能够无缝地适用于本地和Azure。

共有1个答案

傅朗
2023-03-14

DefaultAzureCredential是从Azure Active Directory连接和检索令牌的新的统一方式,可以与需要它们的资源一起使用

DefaultAzureCredential根据应用程序运行的环境获取令牌

如果启用,将按顺序尝试以下凭据类型-EnvironmentCredential、ManagedEntityCredential、SharedTokenCacheCredential、InteractiveBrowserCredential

  1. 如果我将此代码部署到本地服务器,它将如何工作(dev env是本地服务器)

在开发计算机(本地服务器)中执行此操作时,需要首先配置环境,将变量AZURE_CLIENT_ID、AZURE_TENANT_ID和AZURE_CLIENT_SECRET设置为服务主体的适当值(在Azure AD中注册的应用)

可以为Web应用启用系统分配托管标识。在Azure密钥保管库中添加此标识的访问策略以读取机密。现在,无需对代码进行任何更改,Web应用就可以读取密钥保管库机密

 类似资料:
  • 我正在寻求在Azure DevOps中的ARM部署中集成密钥库的最佳方法。 例如,部署一个应用程序服务并创建一个托管服务标识,这样它就可以从密钥库中获取预先存在的数据库的机密。 1)在Azure portal中,我手动为App服务创建了一个新的服务主体,在访问策略中使用“get”和“list”权限。 2)在我的DevOps项目中,在项目设置下,我创建了一个服务连接。 3)我已经在DevOps中创建

  • 我试图在本地(Ubuntu 19.10)运行此从保管库检索秘密示例,以从Azure Key Vault检索秘密: 但是,我收到以下错误: 蔚蓝色的果心例外。ClientAuthenticationError: 此链中没有提供令牌的凭据。 尝试的凭据: 环境凭据:不完整的环境配置。有关预期的环境变量,请参见https://aka.ms/python-sdk-identity#environment-

  • 我在大多数文章中读到,需要在Azure中部署应用程序,这样应用程序才能以编程方式访问存储在Azure密钥库中的秘密。 有没有一种方法可以不在azure中部署应用程序,并且仍然能够通过使用客户端id和客户端机密或证书来访问azure密钥库以获取机密?

  • 我有一个在Azure VM中托管的php应用程序,在密钥库中有一些秘密。我已经设置了托管身份并获得了进入保险库的权限。 Azure SDK for php不支持密钥库,所以我使用REST接口。 我的问题是当在本地运行时,即我的代码在桌面上以VSCode运行时,我不能调用AIMS来获取令牌,因为我在本地机器上没有托管标识。 我只能想到两个选择: null 请注意,Visual Studio提供了Az

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

  • 我已经创建了Azure VM,并在其中安装了我的Java应用程序,然后连接到WASB存储。 我添加了以下jars和core-site.xml来从Java应用程序访问WASB存储。 Azure-存储 Hadoop-Azure core-site.xml 如何使用加密密钥访问WASB存储。上面的配置有样例吗? 注意:-我将Azure VM直接连接到WASB存储,而不使用HDInsight集群。