如何在 .NET Core Web API 中创建和使用 Key Vault 引用
一、介绍
本文将指导您如何在ASP.NET Core Web API中使用Azure App Configuration与Azure Key Vault。通过结合这两种服务,您可以集中管理敏感数据和配置设置,从而增强安全性与灵活性。Azure App Configuration允许应用程序创建指向存储在Key Vault中的值的密钥引用,而不是直接存储敏感数据,而是使用指向Key Vault值的URI来确保安全性和灵活性。
二、前提条件
在继续操作前,请确保您已完成了以下准备工作,具体步骤请参考我的上一篇文章。
-
创建一个Azure App Configuration存储。 -
在您的ASP.NET Core Web API中设置Azure App Configuration的连接字符串。
三、目录
-
什么是Azure Key Vault? -
什么是Key Vault引用? -
设置Azure Key Vault -
向Azure Key Vault添加密钥 -
在App Configuration中添加Key Vault引用 -
更新代码以使用Key Vault引用 -
最佳实践 -
结论
四、正文
1. 什么是Azure Key Vault?
Azure Key Vault是由Microsoft提供的云服务,用于集中管理诸如密码、API密钥、证书和加密密钥等敏感信息。Key Vault帮助防止在应用程序代码中硬编码秘密信息,通过集中管理秘密并与Azure的安全和合规工具集成。
Azure Key Vault的主要优点:
-
集中管理:从单一位置安全地管理对秘密的访问。 -
访问控制:使用基于角色的访问控制(RBAC)和Azure Active Directory(AAD)来控制对Key Vault的访问。 -
自动秘密轮换:通过自动化的密钥和秘密轮换来帮助管理秘密生命周期。
2. 什么是Key Vault引用?
Key Vault引用是Azure App Configuration提供的机制,允许应用程序引用存储在Azure Key Vault中的秘密。而不是直接在代码中检索秘密,您可以在Azure App Configuration中将其配置为引用,并通过应用程序的配置设置访问它们。
这种方法提供
-
简化访问:直接作为配置值访问Key Vault的秘密,而无需额外的代码。 -
增强的安全性:秘密保持安全,并且可以轻松地在Azure Key Vault中更新,而无需修改应用程序代码。
3. 设置Azure Key Vault
为了创建和配置一个Azure Key Vault,请按照以下步骤操作:
-
登录Azure Portal -
访问Azure Portal并使用您的凭证登录。
-
-
创建新的Key Vault -
在搜索框中查找Key Vault并选择创建。 -
填写必要的详情: -
订阅:选择Azure订阅。 -
资源组:选择现有的资源组或创建一个新的。 -
名称:为您的Key Vault提供一个唯一名称。 -
地区:选择靠近应用程序的位置以获得最佳性能。
-
-
单击“Review + Create”,然后单击“Create”来设置Key Vault。
-
4. 向Azure Key Vault添加密钥
接下来,让我们向金库中添加一个秘密,稍后我们将引用它。在这个例子中,我们将添加一个简单的消息作为测试秘密。
-
导航到“Secrets” -
从Key Vault属性页面中选择“Secrets”。
-
-
单击“+ Generate/Import” -
上传选项:选择Manual。 -
名称:输入Message。 -
值:输入Hello from Key Vault。 -
保留其他字段的默认值。
-
-
创建秘密:选择“Create”来保存秘密。
5. 在App Configuration中添加Key Vault引用
为了将我们的Key Vault秘密链接到App Configuration,我们将在App Configuration服务中创建一个引用。
-
打开App Configuration -
定位在前面快速入门中创建的App Configuration存储实例,然后选择它。 -
从菜单中选择“Configuration Explorer”。
-
-
创建Key Vault引用 -
选择“+ Create > Key vault reference”并提供以下详情: -
键:输入TestApp:Settings:KeyVaultMessage。 -
标签:留空(可选)。 -
订阅,资源组和Key Vault:选择您先前创建的Key Vault。 -
秘密:选择名为Message的秘密并单击Apply。
-
-
6. 更新代码以使用Key Vault引用
为了在您的ASP.NET Core Web API中使用App Configuration通过Key Vault检索秘密,我们需要安装所需的包并更新Program.cs文件。
步骤1. 添加所需的NuGet包
dotnet add package Azure.Identity
dotnet add package Azure.Extensions.AspNetCore.Configuration.Secrets
dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
步骤2. 更新Program.cs文件
// 创建Web应用程序构建器
var builder = WebApplication.CreateBuilder(args);
// 从配置设置中获取App Configuration连接字符串
string connectionString = builder.Configuration.GetConnectionString("AppConfig");
// 从Azure App Configuration加载配置并连接到Key Vault
builder.Configuration.AddAzureAppConfiguration(options =>
{
options.Connect(connectionString);
// 配置Key Vault访问
options.ConfigureKeyVault(keyVaultOptions =>
{
// 使用DefaultAzureCredential进行身份验证
keyVaultOptions.SetCredential(new DefaultAzureCredential());
});
});
// 构建Web应用程序实例
var app = builder.Build();
// 启动应用程序
app.Run();
在这段代码中,
-
连接字符串:从配置设置中获取“AppConfig”连接字符串,允许应用程序连接到Azure App Configuration。 -
AddAzureAppConfiguration:此方法从App Configuration加载配置设置,包括我们的Key Vault引用。 -
ConfigureKeyVault:使用DefaultAzureCredentials进行身份验证。DefaultAzureCredentials会根据环境自动检测合适的认证方法,无论是本地还是部署环境中。
步骤3. 在代码中访问Key Vault引用
通过这样的设置,任何在App Configuration中配置的Key Vault引用都可以作为标准配置值访问。
public class MyService
{
// 依赖注入配置对象
private readonly IConfiguration _configuration;
// 构造函数接收配置对象
public MyService(IConfiguration configuration)
{
_configuration = configuration;
}
// 获取消息
public string GetMessage()
{
// 通过App Configuration从Key Vault检索消息
return _configuration["TestApp:Settings:KeyVaultMessage"];
}
}
此方法直接从Key Vault检索秘密的最新版本,而无需在代码中嵌入敏感数据。
7. 最佳实践
-
使用托管身份进行身份验证:托管身份简化了身份验证,并消除了在应用程序代码中需要硬编码凭据的情况。 -
实施访问控制:使用Azure Role-Based Access Control (RBAC)来限制对Key Vault的访问。 -
启用秘密轮换:定期轮换秘密以最小化暴露风险。 -
监控访问日志:使用Azure Key Vault的日志记录功能来监控访问并检测异常活动。 -
保持App Configuration和Key Vault分离:虽然App Configuration和Key Vault一起工作,但每个服务都有特定的目的——使用App Configuration用于应用程序设置,而Key Vault用于敏感秘密。
五、结论
-
将Azure App Configuration与Azure Key Vault整合到ASP.NET Core Web API中,可以通过将敏感数据管理与其他配置分开来增强应用程序的安全性和灵活性。 -
使用Key Vault引用,您的应用程序可以安全地检索秘密,而无需在代码中硬编码它们。
通过上述步骤,您可以有效地在您的Web API中利用Azure App Configuration和Key Vault的强大功能,从而提高应用的安全性和可维护性。