azure - 将 Azure Key Vault 与 Azure 应用配置相结合
问题描述
我对 Azure 很陌生,我正在尝试模拟真实的生产环境。因此,我已将 .netcore 3.1 应用程序部署到 AppService 资源。此 Web 应用程序能够从其他两个服务获取配置 - KeyVault 和应用程序配置。我已经配置了 AppService 身份。
我可以使用以下代码从 KeyVault 获取密钥:
var settings = config.Build(); var web = settings["KeyVault:Name"]; var clientId = settings["KeyVault:ClientId"]; var clientSecret = settings["KeyVault:ClientSecret"]; config.AddAzureKeyVault($"https://{web}.vault.azure.net/", clientId, clientSecret);
因为我可以从应用程序配置中获取密钥:
var settings = config.Build(); config.AddAzureAppConfiguration(settings["AppSettings:Endpoint"]);
而且我可以通过身份和 AppConfiguration 的关键参考同时使用它们
var settings = config.Build(); config.AddAzureAppConfiguration(options => { options .Connect(settings["AppSettings:Endpoint"]) .ConfigureKeyVault(kv => { kv.SetCredential(new DefaultAzureCredential()); }); });
所以,我的问题是关于代码片段#3:在生产环境中存储AppSettings:Endpoint
值是否安全?appconfig.json
为了清楚起见,我指的是这个值:
此外,我在这里找到了如何一起使用这两种服务的解释。但首先,该解决方案对我不起作用 - 我得到一个Azure.Identity.CredentialUnavailableException: 'ManagedIdentityCredential authentication unavailable, no managed identity endpoint found.'
. 另一方面,他不清楚在哪里存储AppSettings:AppConfiguration:Endpoint
和AppSettings:Identity:ClientId
值,它没有回答我的第一个问题。
提前致谢
解决方案
简短的回答 - 端点https://[your_app_name].azconfig.io可以安全地离开任何地方。如果没有构成连接字符串的其他部分,它什么也不做。
长答案 - 您可以并且可能应该将敏感部分、连接字符串及其部分作为机密存储在 Key Vault 中。如果您的代码需要这些值,您可以选择如何获取这些值。考虑使用网络配置(它相当于一个通常具有秘密值但将 Key Vault 引用放在那里的地方。您的方式也适用。请记住,如果您的配置偏离您的方式,您的方式可能需要更改代码'已经编码。
确保您对 KV 的访问策略使用您应用的服务主体。 我再说一遍,请确保您对 KV 的访问策略正在使用您的应用程序的服务主体。 它可能只需要权限“list”和“get”来获取秘密,而不需要其他任何东西。
不要将机密存储在您的 Web 配置或其等效项中。Key Vault 几乎是免费的,非常便宜。如果他们没有将自己的保管库作为解决方案的一部分,我不会部署应用程序。
如果不清楚或需要网络参考,请留下评论。
推荐阅读
- c# - 代理模式和存储库模式有什么区别
- excel - Excel:每个大陆的总人口总和(使用 Excel 公式 - 没有 Pivot)
- r - 在列之间重新排序个人 ID
- java - 为什么在 iText5 和 iText7 之间提取文本的位置不同?
- ssl - 为什么 OpenSSL 工具可以成功验证未签名的文件?
- django - 如何访问和设置任何生产环境变量(Nginx 和 Gunicorn)
- mysql - 在mysql中的联合表上缓慢删除
- pandas - 通过将分钟添加到日期时间列和按 groupby 行号添加另一列来创建新列 - 在 Pandas
- javascript - Javascript正则表达式获取给定符号左侧的第一项?
- r - 在 RStudio 中加载数据 - “无效的多字节字符串 109”