zoukankan      html  css  js  c++  java
  • Azure Key Vault (3) 在Azure Windows VM里使用Key Vaule

      《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的值

      

  • 相关阅读:
    python Flask JQuery使用说明
    sqlserve 数据类型具体解释
    赵雅智_ListView_SimpleAdapter
    HDU 1018 Big Number (log函数求数的位数)
    cocos2d函数
    BZOJ 3514 Codechef MARCH14 GERALD07加强版 Link-Cut-Tree+划分树
    QQ好友列表数据模型封装
    【Codeforces】512C Fox and Dinner
    spring中操作mysql数据库
    【读书笔记】iOS-Xcode-模拟器操作的一些快捷键
  • 原文地址:https://www.cnblogs.com/threestone/p/10967619.html
Copyright © 2011-2022 走看看