将 Azure Key Vault 与 Azure 应用程序配置相结合
Combine Azure Key Vault with Azure App Configuration
我是 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
是否安全?明确地说,我指的是这个值:
此外,我找到了 here 以及如何同时使用这两项服务的说明。但首先,该解决方案对我不起作用 - 我得到 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 中。如果您的代码需要这些值,您可以选择如何获取这些值。考虑使用 Web 配置(它相当于通常具有秘密值但将 Key Vault 引用放在那里的地方。您的方式也有效。请记住,如果您的配置偏离您的配置,您的方式可能需要更改代码已编码。
确保您对 KV 的访问策略正在使用您应用的服务主体。我再说一遍,确保您对 KV 的访问策略正在使用您的应用程序的服务主体。 它可能只需要权限 "list" 和 "get" 用于机密,其他什么都不需要。
不要将机密存储在您的网络配置或其等效项中。 Key Vault 几乎是免费的,而且非常便宜。如果应用程序没有将自己的保管库作为解决方案的一部分,我不会部署应用程序。
如果不清楚或需要网络参考,请发表评论。
您应该能够使用 Azure Marange Identity 连接到 APP 配置。使用 Azure.Identity 预览版。
c# 示例
https://github.com/nishanperera/Azure-App-Configuration-With-Key-Vault
我是 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
是否安全?明确地说,我指的是这个值:
此外,我找到了 here 以及如何同时使用这两项服务的说明。但首先,该解决方案对我不起作用 - 我得到 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 中。如果您的代码需要这些值,您可以选择如何获取这些值。考虑使用 Web 配置(它相当于通常具有秘密值但将 Key Vault 引用放在那里的地方。您的方式也有效。请记住,如果您的配置偏离您的配置,您的方式可能需要更改代码已编码。
确保您对 KV 的访问策略正在使用您应用的服务主体。我再说一遍,确保您对 KV 的访问策略正在使用您的应用程序的服务主体。 它可能只需要权限 "list" 和 "get" 用于机密,其他什么都不需要。
不要将机密存储在您的网络配置或其等效项中。 Key Vault 几乎是免费的,而且非常便宜。如果应用程序没有将自己的保管库作为解决方案的一部分,我不会部署应用程序。
如果不清楚或需要网络参考,请发表评论。
您应该能够使用 Azure Marange Identity 连接到 APP 配置。使用 Azure.Identity 预览版。
c# 示例 https://github.com/nishanperera/Azure-App-Configuration-With-Key-Vault