《Windows Azure Platform 系列文章目录

  本章我们介绍如何在Azure Windows VM里面,使用.NET使用Azure Key Vault

  我们需要对Key Vault进行身份验证,所以需要提供凭据。因此,在启动过程中,这是一个难以兼顾的典型问题。 托管服务标识 (MSI) 提供简化该过程的启动标识,可以解决此问题。

  为 Azure 服务(例如 Azure 虚拟机、Azure 应用服务或 Azure Functions)启用 MSI 时,Azure 会创建一个服务主体。 MSI 针对 Azure Active Directory (Azure AD) 中的服务实例提供启动标识,并将服务主体凭据注入该实例。

  

    

  我们需要准备以下内容:

  1.创建一个资源组,命名为:keyvault-rg

  2.创建1个Key Vault,并创建Secret Vaule

  3.创建1台Windows VM,在这台Windows VM安装Visual Studio (这台VM必须与KeyVault在同一个资源组)

  4.安装并运行Azure CLI

az cloud set --name AzureChinaCloud
az login

  5.在弹出的输入框中,输入Azure China的用户名和密码

  6.如果我们有多个订阅,首先需要选择订阅:

az account set --subscription 订阅ID

  7.为VM分配Identity

az vm identity assign --name VMName --resource-group VM所在的资源组名称

  8.执行完毕后,显示的结果如下:

  我们把systemAssignedIdentity后面的信息保存下来

{
"systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userAssignedIdentities": {}
}

  

  9.为VM分配权限

  我们执行下面的命令:

az keyvault set-policy --name VM的名称 --object-id 步骤8中显示的systemAssignedIdentity值 --secret-permissions get list

  10.登录到虚拟机,创建1个Windows Console Project。选择NuGet,增加Newtonsoft Package

  11.增加如下的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Net;
using System.IO; namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// Step 1: Get a token from the local (URI) Managed Service Identity endpoint, which in turn fetches it from Azure AD
var token = GetToken(); // Step 2: Fetch the secret value from your key vault
System.Console.WriteLine(FetchSecretValueFromKeyVault(token));
} static string GetToken()
{
//169.254.169.254是Azure Instance Metadata service endpoint
WebRequest request = WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://vault.azure.cn");
request.Headers.Add("Metadata", "true");
WebResponse response = request.GetResponse();
return ParseWebResponse(response, "access_token");
} static string FetchSecretValueFromKeyVault(string token)
{
//这里需要修改两个部分:
//你的KeyVault名称
//你的SecretName WebRequest kvRequest = WebRequest.Create("https://你的KeyVault名称.vault.azure.cn/secrets/你的SecretName?api-version=2016-10-01");
kvRequest.Headers.Add("Authorization", "Bearer " + token);
WebResponse kvResponse = kvRequest.GetResponse();
return ParseWebResponse(kvResponse, "value");
} private static string ParseWebResponse(WebResponse response, string tokenName)
{
string token = String.Empty;
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd(); JObject joResponse = JObject.Parse(responseString);
JValue ojObject = (JValue)joResponse[tokenName];
token = ojObject.Value.ToString();
}
return token;
}
}
}

  12.运行完毕后,我们就可以在Azure VM里面显示Key Vault里面Secret的值

  

Azure Key Vault (3) 在Azure Windows VM里使用Key Vaule的更多相关文章

  1. Azure Key Vault (2) 使用Azure Portal创建和查看Azure Key Vault

    <Windows Azure Platform 系列文章目录> 请注意: 文本仅简单介绍如何在Azure Portal创建和创建Key Vault,如果需要结合Application做二次 ...

  2. 使用 Azure PowerShell 模块创建和管理 Windows VM

    Azure 虚拟机提供完全可配置的灵活计算环境. 本教程介绍 Azure 虚拟机的基本部署项目,例如选择 VM 大小.选择 VM 映像和部署 VM. 你将学习如何执行以下操作: 创建并连接到 VM 选 ...

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

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

  4. 排查在 Azure 中新建 Windows VM 时遇到的部署问题

    尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败. 当由于准备步骤不当,或者在从门户捕获映像期间选择了错误的设置而导致 OS 映像无法加载时,将发生预配失败. 当群集 ...

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

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

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

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

  7. 如何加密 Windows VM 上的虚拟磁盘

    为了增强虚拟机 (VM) 的安全性以及符合性,可以加密 Azure 中的虚拟磁盘. 磁盘是使用 Azure 密钥保管库中受保护的加密密钥加密的. 可以控制这些加密密钥,以及审核对它们的使用. 本文详细 ...

  8. 【应用服务 App Service】App Service证书导入,使用Key Vault中的证书

    问题描述 正常情况下,如果需要为应用服务安装SSL证书,可以在证书准备好的情况,通过门户上传即可,详细步骤可以参考微软官方文档(在 Azure 应用服务中添加 TLS/SSL 证书:https://d ...

  9. Azure Key Vault (1) 入门

    <Windows Azure Platform 系列文章目录> 为什么要使用Azure Key Vault? 我们假设在微软云Azure上有1个场景,在Windows VM里面有1个.NE ...

随机推荐

  1. asp .net 为图片添加图片水印 .

    首先写好一个写入图片水印的类,先创建一个ImageWriter类库   (该类中有包含枚举类型和方法) using System; using System.Collections.Generic; ...

  2. python(27)- 面向对象练习Ⅰ

    一:定义如下类,并最大程度地重用代码(继承,派生:子类重用父类方法,组合) 老师类 学生类 分数类 课程类 生日类 class People: def __init__(self,name,age,b ...

  3. ubuntu 14.04 LTS 安装webbentch压力測试工具

    近期在做 压力測试工具,除了apache的ab測试工具外,发现webbentch工具也不错,这里简介下这两个工具. 一.webbentch安装: wget http://blog.s135.com/s ...

  4. ruby on rails模拟HTTP请求错误发生:end of file reached

    在文章 Ruby On Rails中REST API使用演示样例--基于云平台+云服务打造自己的在线翻译工具 中,利用ruby的Net::HTTP发起http请求訪问IBM Bluemix上的sour ...

  5. Kubernetes之网络策略(Network Policy)

    系列目录 概述 Kubernetes要求集群中所有pod,无论是节点内还是跨节点,都可以直接通信,或者说所有pod工作在同一跨节点网络,此网络一般是二层虚拟网络,称为pod网络.在安装引导kubern ...

  6. 用python编写的无线AP扫描器

    代码如下: #coding=utf-8 import os import sys import subprocess from scapy.all import * RSN = 48 #管理帧信息元素 ...

  7. slidemenu

    1. 在github上有一个效果不错的开源库,SlidingMenu 最新的代码下载下来后,会报错: No resource found that matches the given name: at ...

  8. javascript正则表达式提取子匹配项

    C#里所用的正则表达式,如果要提取字符串里的子匹配项(我都不知道那个叫啥名字,别名?)是很方便的,比如: Regex rx = new Regex(@"<title>(?< ...

  9. windows 复制 文本文件内容 到剪切板

    shell  打开 type filename | clip

  10. DuiLib笔记之Window常用属性

    caption 可拖拽以移动窗口的标题区,类型:RECT.例如,要指定标题区高度为35,可设置caption="0,0,0,35" mininfo 窗口最小尺寸,类型:SIZE.例 ...