不少時候管理Azure的存儲帳號咱們都須要經過下面的界面管理訪問密鑰,大部分狀況下經過密鑰的輪替使用更新就能夠作到安全管理了。java
可是不少時候存儲帳號的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
建立一個新的Web應用程序url
在這個應用的配置頁裏面咱們能夠獲取到這個應用的ID,同時你能夠在這裏建立一個應用的訪問密鑰spa
有了這個客戶端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
請求裏面的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更加安全了。
詳細的作法能夠參考下面這個英文的博客: