利用KeyVault來增強存儲Azure Storage訪問密鑰管理

不少時候管理Azure的存儲帳號咱們都須要經過下面的界面管理訪問密鑰,大部分狀況下經過密鑰的輪替使用更新就能夠作到安全管理了。java

image

可是不少時候存儲帳號的Key就會不當心分發到開人員、測試人員、和管理員手中。如今若是須要更加嚴格的管理這個存儲帳號的而且指定特定的應用程序才能訪問這個存儲帳號的話,能夠利用Azure Active Directory(AAD)和Key Vault(密鑰管理庫)來增強這個密鑰管理web

第一步:利用PowerShell生成一個新的密鑰庫json

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

第二步:將Storage的Access Key放入密鑰庫中api

假設咱們這裏拿到的AccessKey是:password123456789安全

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

很是簡單的已經講一個Key放入了密鑰庫中了,那剩下就是須要受權應用來使用這個Key.app

第三步:建立Azure AD Application測試

點擊Azure 管理界面的Active Directory頁,選擇當前訂閱所使用的目錄ui

image

建立一個新的Web應用程序url

image

在這個應用的配置頁裏面咱們能夠獲取到這個應用的ID,同時你能夠在這裏建立一個應用的訪問密鑰spa

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/

相關文章
相關標籤/搜索