如何使用Azure密钥保管库(Azure Key Vault)
配置除了传统的appsettins.json,还可以使用其他的数据源,比如Azure Key Vault。这是微软提供的一个云密码保管库,即你可以把一些机密信息存在Azure云上,而不用放在appsettings.json中,这大大的提升了应用安全性。
下边就一步一步介绍如何使用Azure Key Vault
一、注册微软Azure账号
网址 :https://azure.microsoft.com/zh-cn/ , 注意是海外版,不是世纪互联运营的国内版。点击页面上的【免费账户】或者【免费开始使用】按钮,开始注册。
注册过程会用到信用卡(有美金支付功能),所以先得准备一张信用卡,并且会扣除1美元。
其他个人资料随便填写,一直下一步就OK。
二、创建Azure Key Vault
Azure Key Valut创建有两种方式,界面操作和命令行方式,个人推荐用命令行。
进入到Azure控制面板 https://portal.azure.com/#home 点击右上角的命令行图标,页面底部就会弹出命令行窗口。
登录面板
az login
创建资源组
az group create --name "UTResourceGroup" --location eastus
创建一个密码保管库(Key Valut)
az keyvault create --name "UT-Vault" --resource-group "UTResourceGroup" --location eastus
将机密信息放入Key Valut
az keyvault secret set --vault-name "UT-Vault" --name "MysqlPassword" --value "620389"
显示机密信息
az keyvault secret show --name "MysqlPassword" --vault-name "UT-Vault"
三、创建一个Azure应用
搜索找到Azure Active Directory,在其左侧点击应用注册
四、上传证书
利用openssl创建pfx证书,双击pfx证书,将证书导入到系统。进入刚创建的应用,点击其左侧证书和密码
链接,在右边上传cer证书,上传后会得到一个指纹,复制下来以备用。
随便介绍下如何创建证书
打开openssl
openssl
生成cer证书和key
req -newkey rsa:2048 -nodes -keyout 0.key -x509 -days 365 -out 0.cer
生成pfx证书
pkcs12 -export -in 0.cer -inkey 0.key -out 证书.pfx
五、关联密码保管库与应用
进入创建好的的Key Valut,点击添加访问策略,选择权限和刚才的应用进行关联。
六、集成到Asp.Net Core
Nuget添加Microsoft.Extensions.Configuration.AzureKeyVault
打开 Program.cs,修改代码集成Azure Key Vault。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
var builtConfig = config.Build();
var print = "";//上传证书得到的指纹
var vault = "UT-Valut"; //密码保管库名字
var appId = "";//创建的应用ID
using (var store = new X509Store(StoreLocation.CurrentUser))
{
store.Open(OpenFlags.ReadOnly);
var certs = store.Certificates
.Find(X509FindType.FindByThumbprint,
print, false);
config.AddAzureKeyVault(
$"https://{vault}.vault.azure.net/",
appId,
certs.OfType<X509Certificate2>().Single());
store.Close();
}
})
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
七、使用Azure Key Valut
注入IConfiguration即可,跟使用普通的appsettins.json一样。
[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
private readonly IConfiguration _configurationRoot;
public TestController(IConfiguration configurationRoot)
{
_configurationRoot = configurationRoot;
}
public string Index()
{
return _configurationRoot["MysqlPassword"];
}
}
如果以上配置都正确的话,就能看到在第二步设置的MysqlPassword。
0条评论