zoukankan      html  css  js  c++  java
  • 利用KeyVault来加强存储Azure Storage访问密钥管理

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

    image

    但是很多时候存储账号的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页,选择当前订阅所使用的目录

    image

    创建一个新的Web应用程序

    image

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

    image

    image

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

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

    image

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

    image

    image

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

    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

    image

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

    image

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

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

    image

    有了这个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

    image

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

    image

    如果你还希望你的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/

  • 相关阅读:
    第八周学习进度总结
    全国(球)疫情信息可视化
    第六周学习进度总结
    手把手教你爬取B站弹幕!
    Xpath基础学习
    团队成员及选题介绍
    第五周学习进度
    课堂练习之疫情APP
    SpringMVC02
    06 | 链表(上):如何实现LRU缓存淘汰算法?
  • 原文地址:https://www.cnblogs.com/wing-ms/p/5535661.html
Copyright © 2011-2022 走看看