Azure 密钥保管库用于存储敏感信息,例如连接字符串,密码,API 密钥等。咱们没法直接从Azure 密钥库中访问机密!那么咱们如何才能访问应用程序中的机密信息?好比,在咱们的实际项目中,对于数据库连接字符串或者一些加密用的Key配置在 AppSettings.json 文件中,可是这个作的话,仍是有很大的风险的,这些机密信息都有可能会暴露出去。就拿我本身来讲,我以前分享博客内容里面涉及到的一些机密配置,都直接放在了配置文件中。git
以此为戒啊,就算是私有的代码仓库也是不行的,因此今天决定介绍一个新的 Azure 资源-----Azure Key Vault(密钥保管库),咱们将机密信息存储在密钥保管库中,并尝试经过.NET Console 访问(获取)它。github
转到 portal.azure.com 登录到咱们本身的帐户。点击 Azure Active Directory 进行注册 “App registrations”,咱们将可以看到 “新注册应用程序” 选项卡打开。web
Name 输入:”Azure.KeyVault“。以下图所示,将其选择使用单个租户选项,点击 ”Register“ 进行注册操做。数据库
接下来,咱们须要给当前注册的客户端应用注册 client secret(客户端密钥)json
点击 "Manage=》Certificates & secrets"编码
Description 输入:“Azure.KeyVault.ClientSecret”,过时时间选择默认 ”In 1 year“,点击 ”Add“ 进行添加操做加密
接下来咱们能够看到建立好的客户端机密信息,同时,咱们点击图中箭头的位置,点击进行复制 机密信息到咱们工做的记事本中,稍后会用到此机密信息。spa
(注意,必定要在建立好的时候复制此机密信息,一旦咱们离开此页面,从新进入的话,咱们将没法进行复制操做).net
搜索关键词 ”Key Vault“,3d
Resource group 选择建立一个新的:”Web_Test_KV_RG“
Key vault name:”CNBATEBLOGWEB-KeyVault“
Region:”East Asia“
Pricing tier:”Standard“
点击 ”Review + create“ 进行建立预览校验。
检验完成后,点击 ”Create“ 进行建立
建立完成后,点击转到该资源进行配置访问策略,”Settings=》Access policies“,点击 ”Add Access Policy“ 建立新的访问策略。
首先选择配置模板 Configure from template(optional):"Secret Management"
Secret permissions(机密权限):”Get“ (只运行获取机密信息)
点击 ”Nono select“ 进行先选择服务主体,输入 "Azure.KeyVault"进行选择,点击 ”Select“
点击 ”Add“ 进行添加操做
点击 ”Save“,保存一下
接下来就能够将咱们应用程序项目中使用的一些机密信息 ”生成/导入“ 在密钥保管库中。点击 ”Setting=》Secrets“,点击 ”+ Generate/Import“ 咱们尝试
Upload options 选择:”手动“
Name:”CNBATEBLOGWEB-DB-CONNECTIONSTRING“
Value 能够输入机密信息,我这边输入的是 ”SUCCESS“
能够看到 咱们能够设置当前机密信息的 "激活日期",”到期日期“ ”是否启用“
点击 ”Create“ 进行建立操做。
能够看到,当前的机密信息已经建立好了。
3.1 建立新的NET Core 控制台程序,添加 KeyVault.Secrets 和 Identity Nuget 程序包
使用程序包管理器控制台进行安装。
Install-Package Azure.Security.KeyVault.Secrets -Version 4.1.0
Install-Package Azure.Identity -Version 1.2.3
代码部分
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 string vaultUri = "https://cnbateblogweb-keyvault.vault.azure.net/"; 6 7 var client = new SecretClient(vaultUri: new Uri(vaultUri), credential: new DefaultAzureCredential()); 8 9 // Create a new secret using the secret client. 10 var secretResult = client.GetSecretAsync("CNBATEBLOGWEB-DB-CONNECTIONSTRING"); 11 12 // Retrieve a secret using the secret client. 13 Console.WriteLine("azure key vault name of "+ secretResult.Result.Value.Name+ " is "+ secretResult.Result.Value.Value); 14 15 Console.ReadLine(); 16 } 17 }
注意 这里须要配置密钥保管库的连接参数 vaultUri,复制图中的连接
接下来,须要将以前在Azure上注册的服务主体的 AZURE_CLIENT_ID(应用程序ID),AZURE_CLIENT_SECRET(客户端密码),AZURE_TENANT_ID(租户ID)配置到系统的环境变量中去,或者是VS运行环境中,你们能够自行进行选择,我这里是直接配置在系统的环境变量中。
Azure Client ID 和 Azure Tenant ID 能够在Azure AD 注册的应用程序中能够找到,Client Secret 就是上面建立的客户端密码
接下来经过配置,将这些信息配置在系统环境变量中
接下来,咱们直接运行代码,能够看到验证经过,而且将机密信息加载出来了。
OK,成功。这里我就不在演示机密信息的,添加,删除等操做了,由于在刚开始在给服务主体配置访问权限的时候,只配置了 ”Get“ 权限,你们能够自行在本身的环境中配置不一样权限进行操做。
*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。🎉🎉🎉🎉🎉
ok,今天所演示的就是将一些机密信息添加到Azure Key Vault 中,而后经过在Azure AD 中注册应用程序,在Key Vault 中给不一样的服务主体设置不一样的访问权限,从而达到对机密进行保护的做用,在实际项目中,咱们也避免掉把一些重要的机密信息直接配置在系统的配置文件中或者经过硬编码的方式保留在系统中。
github:https://github.com/yunqian44/Azure.KeyVault.git
做者:Allen
版权:转载请在文章明显位置注明做者及出处。如发现错误,欢迎批评指正。