c# - 如何从 /mnt/secret-store/DataAccessSettings--ConnectionSettings--ConnectionString 读取机密
问题描述
我正在寻找如何从/mnt/secret-store/DataAccessSettings--ConnectionSettings--ConnectionString
. 我的应用程序无法直接访问 azure key vault,机密已存储在运行 pod 上 /mnt/secret-store 目录中的 pod 中。
所有这些都有效。我的问题是如何让我的 C# 应用程序获取此设置。我已经查看了所有内容,只找到了一个示例,其中有人仍在使用 Configuration[connectionString] 但我看不到他们如何配置他们的应用程序以从中加载而不是从 appsettings.json 加载
Microsoft 似乎也有几个示例,您可以直接从键值加载,这就是我现在需要做的。
我唯一能想到的就是这样的事情,这似乎真的是错误的。我不敢相信没有办法直接将这些加载到配置中
public string LoadSecret(string name)
{
var lines = File.ReadAllLines(Path.Combine(_pathToSecrets, name));
return lines.FirstOrDefault(l => !string.IsNullOrWhiteSpace(l));
}
解决方案
由于找不到,我最终创建了自己的 ConfigurationProvider
所以现在我可以这样添加
CreateHostBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) => { config.AddAzureMountedSecretStore(); })
.Build().Run();
它的主要部分只是加载文件本身并设置文件内容的值。
internal class AzureMntSecretStoreConfigurationFileParser
{
private AzureMntSecretStoreConfigurationFileParser() { }
public static KeyValuePair<string, string> Parse(string file)
=> new AzureMntSecretStoreConfigurationFileParser().ParseFile(file);
private KeyValuePair<string, string> ParseFile(string file)
{
var fileName = Path.GetFileName(file);
var secretName = fileName.Replace("--", ":");
var value = File.ReadAllText(file);
return new KeyValuePair<string, string>(secretName, value);
}
}
这样,添加到系统中的任何新机密都将在系统运行时自动加载,而不必更改代码本身。
推荐阅读
- reactjs - 您可以使用“常规 Web 应用程序”auth0 应用程序对 React Native 应用程序进行身份验证吗?
- javascript - 如何在 Array javascript 中引用元素的位置。(我没有得到预期的结果)
- sql - 如何在 SQL 中计算日期差异并以天和小时格式显示
- powershell - 如果在 CSV 列中找到术语,则删除行
- amazon-web-services - Amazon Web Services (aws) S3 - 根据主机名限制对存储桶的访问
- r - R - 根据条件选择列
- python - 多个数据框列绘制在同一个栏中,不重叠
- kubernetes - Openshift 3.11 如何设置永久令牌以从集成的 docker 注册表中提取
- c++ - 访问已删除函数的 C++ 错误 (C2280)
- sql-server - SQL Server:连接 CALENDAR 表和 DATA 表