很多时候管理Azure的存储账号我们都需要通过下面的界面管理访问密钥,大部分情况下通过密钥的轮替使用更新就可以做到安全管理了。

但是很多时候存储账号的Key就会不小心分发到开人员、测试人员、和管理员手中。现在如果需要更加严格的管理这个存储账号的并且指定特定的应用程序才能访问这个存储账号的话,可以利用Azure Active Directory(AAD)和Key Vault(密钥管理库)来加强这个密钥管理

第一步:利用PowerShell生成一个新的密钥库

Add-AzureRmAccount -EnvironmentName "AzureChinaCloud"
New-AzureRMResourceGroup -Name kvstorage
New-AzureRmKeyVault -VaultName kvstorage -ResourceGroupName kvstorage

第二步:将Storage的Access Key放入密钥库中

假设我们这里拿到的AccessKey是:password123456789

$secValue=ConvertTo-SecureString 'password123456789' -AsPlainText -Force
Set-AzureKeyVaultSecret -VaultName kvstorage -Name storage -SecretValue $secValue

非常简单的已经讲一个Key放入了密钥库中了,那剩下就是需要授权应用来使用这个Key.

第三步:创建Azure AD Application

点击Azure 管理界面的Active Directory页,选择当前订阅所使用的目录

创建一个新的Web应用程序

在这个应用的配置页里面我们可以获取到这个应用的ID,同时你可以在这里创建一个应用的访问密钥

有了这个客户端ID,之后我们就可以授权这个应用来访问密钥库了

Set-AzureRmKeyVaultAccessPolicy -VaultName kvstorage -ServicePrincipalName d7cb4add-5b31-44cc-9b25-4009d538f58f  -PermissionsToSecrets get

点击管理界面下面的“查看端点”,在这里你可以获取一个非常重要的信息,也就是这个应用的oAuth2.0的获取Token的Endpoint:

这时候你就已经准备好了下面几个信息:

ClientID:{你的应用ID}

ClientSecret:{你的应用密钥}

OAuth EndPoint:https://login.chinacloudapi.cn/{你的目录ID}/oauth2/token

有了这些信息以后就可以通过Fiddler来模拟通过REST API来请求密钥库获取存储的AccessKey了,因为全部都是http请求,所以不关你是.NET还是java还是PHP都没关系。

首先我们通过oAuth 2.0的Endpoint获取应用访问密钥库的Bearer Token,我们需要模拟一个http form请求,所以Request Body里面要有

grant_type=client_credentials&client_id={你的应用ID}&client_secret={你的应用密钥}&resource=https%3a%2f%2fvault.azure.cn

注意你的应用密钥中的+号用%2B代替 =号用%3D代替 /号用%2F代替

例如:

glYO5dRztXLYyA+S7nxYclOzDBlmfh/F4KacfkIXgH8=

就是:

glYO5dRztXLYyA%2BS7nxYclOzDBlmfh%2FF4KacfkIXgH8%3D

请参考:https://blogs.msdn.microsoft.com/dsadsi/2013/08/12/using-fiddler-to-acquire-a-jwt-json-web-token-for-use-with-the-graph-api/

请求里面的Header:

Accept: Application/json

Content-Type: application/x-www-form-urlencoded

点击Execute之后就Post了一个Http请求到AAD里面去认证了,这时候我们就可以通过Fiddler拿到返回的Token信息

有了请求KeyVault的Token信息之后,我们就可以找回放置在密钥库中的存储账号的AccessKey了。

首先我们可以通过PowerShell获取到这个密钥的Uri的

有了这个Uri和Token之后之后我们只需要在通过Fiddler发送一个Http GET请求就能拿到密钥了

我们准一个Http 请求的Header:

Accept: Application/json

Authorization: Bearer {上一步获取到的Token}

请求的Url记得带上api-version信息,如:https://kvstorage.vault.azure.cn/secrets/storage?api-version=2015-06-01

点击Execute之后,我们就可以从结果页里面获取到之前存入的AccessKey了。

如果你还希望你的Storage AccessKey是定时动态生成的,你可以结合Azure Automation,自动生成新的Access Key,然后写到密钥库中,这样就可以让你的AccessKey更加安全了。

详细的做法可以参考下面这个英文的博客:

http://www.dushyantgill.com/blog/2015/04/26/say-goodbye-to-key-management-manage-access-to-azure-storage-data-using-azure-ad/

利用KeyVault来加强存储Azure Storage访问密钥管理的更多相关文章

  1. EF Core下利用Mysql进行数据存储在并发访问下的数据同步问题

    小故事 在开始讲这篇文章之前,我们来说一个小故事,纯素虚构(真实的存钱逻辑并非如此) 小刘发工资后,赶忙拿着现金去银行,准备把钱存起来,而与此同时,小刘的老婆刘嫂知道小刘的品性,知道他发工资的日子,也 ...

  2. 【Azure 存储服务】代码版 Azure Storage Blob 生成 SAS (Shared Access Signature: 共享访问签名)

    问题描述 在使用Azure存储服务,为了有效的保护Storage的Access Keys.可以使用另一种授权方式访问资源(Shared Access Signature: 共享访问签名), 它的好处可 ...

  3. Windows Azure Storage (17) Azure Storage读取访问地域冗余(Read Access – Geo Redundant Storage, RA-GRS)

    <Windows Azure Platform 系列文章目录> 细心的用户会发现,微软在国外和国内的数据中心建设都是成对的,比如香港数据中心(Asia East)和新加坡的数据中心(Sou ...

  4. 如何访问Microsoft Azure Storage

    首先先要创建存储账户 http://www.cnblogs.com/SignalTips/p/4119128.html 可以通过以下的几个方式访问 通过Visual Studio 2013 Commu ...

  5. 使用PowerShell创建Azure Storage的SAS Token访问Azure Blob文件

    Azure的存储包含Storage Account.Container.Blob等具体的关系如下: 我们常用的blob存储,存放在Storage Account的Container里面. 目前有三种方 ...

  6. Azure Storage 系列(二) .NET Core Web 项目中操作 Blob 存储

    一,引言 上一篇文章,我们介绍到在实际项目中系统会产生大量的日志文件,用户上传的头像等等,同时也介绍到可以使用Azure Blob Storage 来存储项目中的一些日志文件,用户头像,用户视频等等. ...

  7. 【Azure 存储服务】Java Azure Storage SDK V12使用Endpoint连接Blob Service遇见 The Azure Storage endpoint url is malformed

    问题描述 使用Azure Storage Account的共享访问签名(Share Access Signature) 生成的终结点,连接时遇见  The Azure Storage endpoint ...

  8. [New Portal]Windows Azure Storage (14) 使用Azure Blob的PutBlock方法,实现文件的分块、离线上传

    <Windows Azure Platform 系列文章目录> 相关内容 Windows Azure Platform (二十二) Windows Azure Storage Servic ...

  9. Windows Azure Storage (19) 再谈Azure Block Blob和Page Blob

    <Windows Azure Platform 系列文章目录> 请读者在参考本文之前,预习相关背景知识:Windows Azure Storage (1) Windows Azure St ...

随机推荐

  1. Python 共享和上传函数模块到PyPI

    1. register account by brower on https://pypi.python.org/pypi/ 2. register your moudle "nester& ...

  2. Redis 发布/订阅机制原理分析

    Redis 通过 PUBLISH. SUBSCRIBE 和 PSUBSCRIBE 等命令实现发布和订阅功能.   这些命令被广泛用于构建即时通信应用,比如网络聊天室(chatroom)和实时广播.实时 ...

  3. android之location02

    package com.example.mars_3300_location02; import java.net.ContentHandler; import java.util.List; imp ...

  4. channelartlist标签调用实例

    channelartlist标签,大家都知道在DedeCMS的系统中,我们可以用这个标签进行循环子栏目及其栏目的文档数据,这也是DedeCMS系统中,唯一一个支持标签嵌套的调用标签,以DedeV5.6 ...

  5. [ActionScript 3.0] 通过三角形获得 3D 效果

    Flash Player 10 和更高版本,Adobe AIR 1.5 和更高版本 在 ActionScript 中,使用Graphics.drawTriangles()方法执行位图转换,因为 3D ...

  6. 编写一个go gRPC的服务

    前置条件: 获取 gRPC-go 源码 $ go get google.golang.org/grpc 简单例子的源码位置: $ cd $GOPATH/src/google.golang.org/gr ...

  7. 算法库:clapack安装配置

    类似于opencv.jpeglib和pnglib的安装配置. opencv安装配置见:http://www.cnblogs.com/dzyBK/p/4954945.html jpeglib和pngli ...

  8. HYSBZ 1061 志愿者招募 【最小费用流】【差分】【最小费用流模板】

    #include<stdio.h> #include<queue> #define MAXN 1003 #define MAXM 10002*4 #define INF 100 ...

  9. 4.1.1 A - Calendar(简单线性表)(日期查找)(数组应用)

    Description A calendar is a system for measuring time, from hours and minutes, to months and days, a ...

  10. Android--Intent的使用

    1.Activity之间的切换通过Intent来完成. 1)清单文件,配置好Activity,所有Activity都需要在该文件中配置. <?xml version="1.0" ...