大家好,我是本期的微软MVP实验室研究员——张安忠。今天我将通过实验和完整的操作过程,向大家介绍如何使用在ASP.NET Core和Java项目中集成Azure Key Vault功能。
微软MVP实验室研究员
在软件开发中,项目安全是重中之重,特别是在多部门或者开源项目中,如何保存我们的密钥,但又不影响本地的开发,是我们开发者需要考虑的问题。这里简单的列举了下平时开发中我们做的方案:
-
本地直接采用localhost的形式开发。无论是DB还是ES/Redis/MQ,或者是其他的,都一股脑用本地的参数,然后部署到K8s的时候,使用Configmap的形式挂载。也是一种方案,但是会使dev和prod之间隔离的比较厉害
-
使用远程配置中心来统一处理本地和生产直接的数据。比如常见的就是Apollo,Azure的Key Vault技术等等。推荐的方式
-
每次上线都手动修改。这显然是不合理的
PS:本文采用的都是世纪互联的azure.cn的。
前期准备账号首先,需要注册一个Azure账号。
其次,需要注册一个应用程序,注册的时候,填写Client密码,密码要好好保存哟,以后会多次使用。
搜索app registration,注册一个账号:
输入应用名称,其他的都默认即可:
接下来,在Certificates & secrets中,添加Client secrets:
有了应用,就可以在应用内设置密钥了。
这个时候我们已经有两个参数了,分别是ClientId和ClientSecret。
配置key vault 步骤 1 - 添加Key vault服务继续在顶部搜索Key vault关键字:
创建一个全新的key vault服务,选择自己的订阅和资源组,设置下名称:
创建完成后,就可以在key vault的overview页,看到另外两个参数了:
另外两个参数,一个是vault的uri,一个是tenantid也准备好了。
到这里四个参数都已经准备好了。
步骤 2 - 参数设置点击settings下面的secrets选项,创建或导入配置:
在弹出的新页面中,选择Manual方式,输入name和value,配置数据库的用户名:
然后就创建完成了,可以仿照的把sqlserver的密码也配置一下:
创建完成后,点击转到该资源进行配置访问策略,”Settings=》Access policies“,点击 ”Add Access Policy“ 创建新的访问策略。
首先选择配置模板 Configure from template(optional):"Secret Management"。
点击 “Nono select” 进行先选择服务主体,输入 “自己的服务账号名” ,如laozhang.keyvault.demo,进行选择,点击 “Select”,保存一下即可。
到这里Azure相关的配置已经完成,开始写代码吧。
新建一个Core项目步骤 1 - 创建一个ASP.Net Core5.0 API项目
过程很简单,就不多说了,创建好后,添加nuget包:
然后,将上边四个变量放到环境变量里,本地开发可以在launchSettings.json里:
步骤 2 - 配置Program,连接配置中心"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"AZURE_TENANT_ID": "你的tenantid",
"AZURE_CLIENT_ID": "你的客户端id",
"AZURE_CLIENT_SECRET": "你的客户端密钥",
"AZURE_KEY_VAULT_URI": "https://blog-core-keyvault.vault.azure.cn/"
}
}
在Program.cs里配置:
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
config
.AddJsonFile("appsettings.json", true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
.AddEnvironmentVariables();
string vaultUri = "https://blog-core-keyvault.vault.azure.cn/";
config.AddAzureKeyVault(vaultUri, clientId, clientSecret);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup();
});
如果这个时候,启动应用没有报错的话,那恭喜你,已经连接成功了,接下来就是获取指定的参数了。
步骤 3 - 任何地方获取Key Vault的值这里使用方法就是和普通的appsettings.json里的一模一样了,注入configuration即可:
_configuration.GetValue("MSSQL-USER-PASSWORD");
好啦,在ASP.NET Core应用中,连接Azure Key Vault已经说完了,看看Java如何操作吧。
新建一个Java项目 步骤 1 - 创建一个Sring Boot项目过程也是很简单,可以用Idea创建,也可以使用官方的模板来创建,就不多说了,创建好后,添加pom包:
com.azure.spring
azure-spring-boot-starter-keyvault-secrets
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?