一,引言

  Azure 密钥保管库用于存储敏感信息,例如链接字符串,密码,API 密钥等。我们无法直接从Azure 密钥库中访问机密!那么我们如何才能访问应用程序中的机密信息?比如,在我们的实际项目中,对于数据库链接字符串或者一些加密用的Key配置在 AppSettings.json 文件中,但是这个做的话,还是有很大的风险的,这些机密信息都有可能会暴露出去。就拿我自己来说,我之前分享博客内容里面涉及到的一些机密配置,都直接放在了配置文件中。

以此为戒啊,就算是私有的代码仓库也是不行的,所以今天决定介绍一个新的 Azure 资源-----Azure Key Vault(密钥保管库),我们将机密信息存储在密钥保管库中,并尝试通过.NET Console 访问(获取)它。

二,正文

1,注册应用程序

转到 portal.azure.com 登陆到我们自己的账户。点击 Azure Active Directory 进行注册 “App registrations”,我们将能够看到 “新注册应用程序” 选项卡打开。

Name 输入:”Azure.KeyVault“。如下图所示,将其选择使用单个租户选项,点击 ”Register“ 进行注册操作。

接下来,我们需要给当前注册的客户端应用注册 client secret(客户端密钥)

点击 "Manage=》Certificates & secrets"

Description 输入:“Azure.KeyVault.ClientSecret”,过期时间选择默认 ”In 1 year“,点击 ”Add“ 进行添加操作

接下来我们可以看到创建好的客户端机密信息,同时,我们点击图中箭头的位置,点击进行复制 机密信息到我们工作的记事本中,稍后会用到此机密信息。

(注意,一定要在创建好的时候复制此机密信息,一旦我们离开此页面,重新进入的话,我们将无法进行复制操作)

2,创建密钥保管库

搜索关键词 ”Key Vault“,

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,通过控制台代码程序获取机密信息

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

版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

Azure Kay Vault(一).NET Core Console App 获取密钥保管库中的机密信息的更多相关文章

  1. 【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?

    问题描述 Key Vault (密钥保管库) 能不能针对用户授权实现指定用户只能访问某个或某些特定的key? 如当前有两个用户(User1, User2),在Key Vault中有10个Key,Use ...

  2. 在 Azure Resource Manager 中为虚拟机设置密钥保管库

    Note Azure 具有两种不同的部署模型,用于创建和处理资源:Resource Manager 模型和经典模型.本文介绍使用 Resource Manager 部署模型.Azure 建议对大多数新 ...

  3. 【Azure Developer】Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)

    关键字说明 什么是 Azure Active Directory?Azure Active Directory(Azure AD, AAD) 是 Microsoft 的基于云的标识和访问管理服务,可帮 ...

  4. 【Azure Developer - 密钥保管库 】使用 Python Azure SDK 实现从 Azure Key Vault Certificate 中下载证书(PEM文件)

    问题描述 在Azure Key Vault中,我们可以从Azure门户中下载证书PEM文件到本地. 可以通过OpenSSL把PFX文件转换到PEM文件.然后用TXT方式查看内容,操作步骤如下图: Op ...

  5. 【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法

    问题描述 在PHP项目部署在App Service后,上传文件如果大于1MB就会遇见 413 Request Entity Too Large 的问题. 问题解决 目前这个问题,首先需要分析应用所在的 ...

  6. 在 Azure 上部署 Asp.NET Core Web App

    在云计算大行其道的时代,当你要部署一个网站时第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core的网站呢?Azure 的 Web App ...

  7. Adding appsettings.json to a .NET Core console app

    This is something that strangely doesn’t seem to be that well documented and took me a while to figu ...

  8. .Net core Api后台获取数据,异步方法中,数据需采用Linq分页

    .net core api using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressi ...

  9. Azure Key Vault(二)- 入门简介

    一,引言 在介绍 Azure Key Vault 之前,先简单介绍一下 HSM(硬件安全模块). -------------------- 我是分割线 -------------------- 1,什 ...

随机推荐

  1. Node.js 从零开发 web server博客项目[数据存储]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  2. Python3基础数据类型(数字、字符串、元组、列表、集合、字典)

    笔记参考了菜鸟教程 Python 中的变量不需要声明,赋值才创建.赋值给变量的是什么类型变量就是什么类型 多个变量赋值 1 a, b, c = 1, 2, "runoob" 标准数 ...

  3. pytest封神之路第六步 断言技巧

    pytest的断言把Python语言简洁的优点发挥的淋漓尽致,因为它用的就是Python的标准断言assert. assert基础 assert用法 assert_stmt ::= "ass ...

  4. 浅谈 Java线程状态转换及控制

    线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)这五 ...

  5. Android Studio 自定义字体显示英文音标

    android:fontFamily="serif" 网上查了很多自定义字体的方式,或多或少都有些麻烦,最后还是尝试着认为内置字体不应该实现不了英文音标问题,就一个一个字体试了一下 ...

  6. APPCNA 指纹验证登录

    今天在APP中集成了指纹与手势登录功能,本文章分两部分进行记录.一是手势功能的逻辑.二是代码实现.该APP是采用APPCAN开发,直接用其已写好的插件,调用相当接口就要可以了. 1.在APP的个人中心 ...

  7. 如何用5000行JS撸一个关系型数据库

    首先声明,我不是标题党,我真的是用5000行左右的JS实现了一个轻量级的关系型数据库JSDB,核心是一个SQL编译器,支持增删改查. 源代码放到github上了:https://github.com/ ...

  8. 「DevOps 转型与实践」沙龙回顾第一讲

    9 月 19 日,CODING 和中国 DevOps 社区联合举办的深圳第九届 Meetup 在腾讯大厦 2 楼多功能圆满结束.本次沙龙以 「DevOps 转型与实践」 为主题,4 位来自互联网.金融 ...

  9. JavaScript事件对象属性e.target和this的区别

    前言: Event对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象eve ...

  10. 深入浅出具有划时代意义的G1垃圾回收器

    G1诞生的背景 Garbage First(简称G1)收集器是垃圾收集器技术发展历史上的里程碑式的成果,它开创了收集器面向局部收集的设计思路和基于Region的内存布局形式.HotSpot开发团队最初 ...