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

使用KeyVault机密在Azure应用服务和本地重写appsettings

严瀚昂
2023-03-14

试图从C#应用程序服务中的KeyVault检索机密。

>

  • Visual Studio>工具>选项>Azure服务身份验证-经过身份验证的Azure帐户

    很可能在DotNet运行的shell中使用AZ登录,如果是vs code等未选中的话。

      null
      null
    ...
    "KeyVaultName" : "abc123",
    "Secrets": {
        "One" : "@Microsoft.KeyVault(Secreturi=[uri to secret copied from Azure blade])"
    }
    ...
    
    ...
    using Azure.Extensions.AspNetCore.Configuration.Secrets;
    using Azure.Identity;
    ...
    public static IHostBuilder CreateHostBuilder(string[] args)
        {
            return Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((context, config) =>
                {
                    var builtConfig = config.Build();
                    var secretClient = new SecretClient(
                        new Uri($"https://{builtConfig["KeyVaultName"]}.vault.azure.net/"),
                        new DefaultAzureCredential());
                    config.AddAzureKeyVault(secretClient, new KeyVaultSecretManager());
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
        }
    
    

    似乎有些不对劲,因为我必须两次定义keyvault的名称,一次在SecretClient中,一次在@microsoft.keyvault引用中。

  • 共有1个答案

    勾通
    2023-03-14

    我好像混合了两种从钥匙库获取秘密的方法。

    我在program.cs添加的是一个配置提供程序,它将机密映射到配置集合中。在startup.cs中放置断点并检查配置集合中的值验证了这一点。

    我应该做的是命名为secretsecret--one,它将映射和重写本地配置值{“secret:{”one“:”...“}}。不能使用环境变量配置映射中使用的:__,因为秘密名称中不支持这些字符。

    另一方面,如果希望使用在Azure应用程序设置(App Service Configuration)刀片上设置的环境变量重写配置值,则可以使用KeyVault引用。

    这样做的问题是,您仍然需要另一种方法来确保您不会在本地保留机密,并冒着将它们提交给源代码管理的风险。

    • Microsoft Docs-KeyVault引用
    • Microsoft Docs-KeyVault配置
    • Joseph Guandagno-在应用程序设置刀片中使用KeyVault引用的示例
     类似资料:
    • 我正在尝试各种Azure功能,目前希望从KeyVault检索一个秘密。 直截了当地说: 我正在使用这个nuget包与我的azure资源进行交互。 我开发了一个简单的。NET核心控制台应用程序,并在本地运行。 我有一个密钥库资源,其中定义了一个处于活动状态且未过期的秘密。 我在AAD中注册了一个应用程序,因此我的本地出货。NET Core控制台应用程序在AAD中具有标识。 然后我在AAD的注册应用程

    • 当我为Azure开发时,我通常开始复制一些keyvault客户端代码,所以只有keyvault URL会在我的设置文件中,没有秘密会在我的git存储库中结束。 在开始制作Azure函数之后,我意识到不可能为触发器连接字符串(例如服务总线或blob存储)这样做。 推荐的方法似乎是在部署时将应用程序直接连接到Azure中的keyvault,并只在Secret Manager中本地管理机密,如本文所建议

    • 目前似乎不可能在上传Azure Key Vault机密时设置该机密的版本。我在使用SetSecretAsync。我是不是漏掉了什么?即使在尝试从Azure Portal进行操作时,您也没有机会设置版本,也没有方法备份或还原机密。 这似乎是有意的(考虑到似乎缺乏这样做的方法),但请考虑我为什么这样做的背景。我们担心一个秘密被错误地删除,甚至保险库本身被错误地删除。当我们将机密用于加密/解密目的时,如

    • 我以前曾使用curl从我的Azure KeyVault中检索秘密。 首先,我检索我的令牌并获取我的密钥库的url: 然后我可以访问我的KeyVault 然而,这只是为了获取秘密。有没有办法通过curl来更新它们?还是使用azure cli更好?在这种情况下,最好的自动身份验证形式是什么?

    • 在使用Java从azure keyvault检索机密时,我面临一个问题 我使用了以下依赖项azure-security-keyvault-secrets-4.3.6。jar azure-identity-1.4.2。jar azure-core-1.12.0。罐子 还有我的密码, 当我运行上面的代码时,我得到了下面的错误

    • 我正在开发一个使用密钥库的应用程序。这个应用程序是用。NET Core3.1(ASP.NET)编写的,这个应用程序从我的本地机器上运行得非常好。我将该应用程序部署为azure应用程序服务,现在得到“HTTP Error 500.30-ANCM In-Process Start failure”错误消息。我检查了应用程序事件日志,它说: “用户、组或应用程序'appId={appId};oid={o