很多时候管理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. 【设计模式】装饰者模式(Decorator)

    装饰者模式 动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案. Java I/O中的装饰类 示例:coffee装饰者模式类图 顶层超类 被装饰组件-被装饰者 装饰者抽象类 ...

  2. php 自带函数

    memory_get_usage()://查看当前内存使用情况单位 bytes str_repeat("liuhui", 2);//字符串重复指定次数,liuhui重复2次

  3. Django的列表反序

    Django虽然是python的web框架,但它不是所有的python特性都支持的. 最近在项目中遇到一个问题,需要在Django中将获得的列表反序排列,一开始我使用的是python的reverse方 ...

  4. 在Myeclipse中移除项目对Hibernate的支持

    在Myeclipse中移除项目对Hibernate的支持 在使用Hibernate框架进行开发时可能会遇到配置错误或者需要删除Hibernate支持的情况.下面就说一下如何彻底移除项目的Hiberna ...

  5. svn: E200030: sqlite[S10]: disk I/O error

    1. 经遇到的问题,它出现(在我的情况下,至少)要与TortoiseSVN的相互作用.禁用TortoiseSVN的图标缓存(设置>图标重载>缓存“无”>申请)拥有的一切工作就好了 ( ...

  6. VisualStudio 调试不提示调试错误

    尝试办法: 1.工具->选项->调试->启用异常助手;2.调试->异常; 解决办法: 把2.调试->异常; 下地全部钩上异常就弹出来了

  7. Hadoop学习3--安装ssh服务

    题前语:为什么要安装这个东西呢? 是因为我们要在多台机器之间通信,这个服务就相当于支持这种通信的一个桥梁,打个比喻,相当于windows里,通过远程桌面连接到其他机器. 所以,安装这个服务,的目的是: ...

  8. Objective C SEl 和@selector是怎么工作的||How do SEL and @selector work in iphone sdk?

    SEL is a type that represents a selector in Objective-C. The @selector() keyword returns a SEL that ...

  9. 《挑战程序设计竞赛》 4.1.1 矩阵 P286

    想写几篇挑战的感悟,也有助于自己理解这本书.但这上面大多贴的是书上的代码,主要是为了用的时候后直接复制就好了,这样就很方便了,就相当于黑盒模板了. 1.线性方程组 /** \brief 高斯消元法 * ...

  10. centos7加固手册

    转自:http://www.centoscn.com/CentosSecurity/CentosSafe/2015/0315/4880.html