很多時候管理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
請求里面的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更加安全了。
詳細的做法可以參考下面這個英文的博客: