[Azure]Azure Storage Access Policy使用小實驗

Azure Storage的Container除了可以設置Public Access Level之外:

還可以定義一些Stored Access Policy:

Stored Access Policy是屬於單個容器的,不同容器之間的Stored Access Policy是互相獨立的。
Stored Access Policy可以用於生成SAS Token(Shared Access Signature),用於提供臨時的權限用於訪問容器以及Blob/Table/Queue等資源。

創建一個Access Policy的步驟:

創建的Policy包含了名稱,權限(讀/寫/刪除/列出)以及有效的起止時間。

我們使用Azure Powershell來使用創建的Policy生成SAS Token,創建的SAS Token有兩個級別,可以針對Blob和Container兩個級別來創建,命令分別:
$storage = Get-AzureRmStorageAccount -ResourceGroupName <resource group name> -Name <storage account name>;
$containerSAS = New-AzureStorageContainerSASToken -Name <container name> -Policy <stored access policy name> -Context $storage.Context;
$blobSAS = New-AzureStorageBlobSASToken -Container <container name> -Blob <blob file name> -Policy <stored access policy name> -Context $storage.Context;

經過測試發現,針對容器生成的SAS的權限可以傳遞給容器(即如果用Container的只讀權限去讀這個container下面的blob文件也是可以的)。

我們用一個container和blob做一個測試,首先在container下面創建3個測試的Access Policy:

分別生成3個container的SAS token:
$storage = Get-AzureRmStorageAccount -ResourceGroupName DanNorthResourceGroup1 -Name dannorthstorage;
$listContainerSAS = New-AzureStorageContainerSASToken -Name "vhds" -Policy "ListOnly" -Context $storage.Context;
$writeContainerSAS = New-AzureStorageContainerSASToken -Name "vhds" -Policy "WriteOnly" -Context $storage.Context;
$readContainerSAS = New-AzureStorageContainerSASToken -Name "vhds" -Policy "ReadOnly" -Context $storage.Context;

創建完成後,直接從變量讀取得到對應的SAS token的參數:

接着我們找一個這個容器下的vhd文件做一個測試,分別用上面三個SAS token給vhd的URL加上後綴訪問:
https://dannorthstorage.blob.core.chinacloudapi.cn/vhds/Dan08R220171205141559.vhd?sv=2015-04-05&sr=c&si=ListOnly&sig=01%2FbNnqS24rd6GiqTlTpAO9F%2FbwbWEaJAiuizBp6Cvo%3D
https://dannorthstorage.blob.core.chinacloudapi.cn/vhds/Dan08R220171205141559.vhd?sv=2015-04-05&sr=c&si=WriteOnly&sig=UKbePMXiIrcOf9EumqjhIvBSb%2FbS6nVJc8eyupm0VLo%3D
https://dannorthstorage.blob.core.chinacloudapi.cn/vhds/Dan08R220171205141559.vhd?sv=2015-04-05&sr=c&si=ReadOnly&sig=sKc%2BsFawR4sAW2fmGYWZ8S2hCqXLtzoCK7xUeG55PNk%3D

分別會得到下面3個結果:
1:This request is not authorized to perform this operation using this permission. RequestId:ea55a2dc-701e-0021-0e30-b5894b000000 Time:2018-03-06T09:50:18.5016341Z
2:This request is not authorized to perform this operation using this permission. RequestId:ea55f29b-701e-0021-4630-b5894b000000 Time:2018-03-06T09:51:17.9756099Z
3:成功下載vhd文件

我們再測試一個場景,我們給這個vhd文件生成一個blob級別的SAS token:
$blobSAS = New-AzureStorageBlobSASToken -Container vhds -Blob Dan08R220171205141559.vhd -Policy ReadOnly -Context $storage.Context;

然後,用這個SAS token訪問另一個container下面的同名blob文件(這裏一定要保證能找到這個vhd文件,不然就404了),報錯如下:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章