2017-10-04 172 views
0

我想了解如何創建一個容器,並在其上應用SAS權限而不提供帳戶或帳戶密鑰。我已經在C#中完成了這個工作,但是希望在Python中這樣做。在Python中的Azure Blob存儲容器上應用SAS權限

sasToken = "https://samplestoragehotblob.blob.core.windows.net/samplecontainer?sv=2016-05-31&sr=c&sig=dfdLKJ.....kljsdflkjljsd=3027-09-11T17%3A16%3A57Z&sp=racwdl"; 
CloudBlobContainer cbContainer = new CloudBlobContainer(new Uri(sasToken)); 

然後,我可以使用所有必要的權限在容器中工作,而無需指定帳戶和密鑰。這在Python中可能嗎?

回答

0

找到了一種不使用帳戶密鑰的方法。這是一個可接受的妥協。

from azure.storage.blob import BlockBlobService 

def AccessTest(): 
    accountName = "Account Name" 
    containerName = "Container Name" 
    sasToken = "sv=2016-05-31&sr=c&sig=BhhYbf3............................-10-02T15%3A28%3A59Z&sp=racwdl" 

    blobService = BlockBlobService(account_name = accountName, account_key = None, sas_token = sasToken) 

    for blob in blobService.list_blobs(containerName): 
     print blob.__getattribute__('name') 
0

正如總結,如果您還沒有生成SAS的道理,你不能避免使用帳戶鍵。

你可以按照official tutorial和使用generate_shared_access_signaturegenerate_container_shared_access_signaturegenerate_blob_shared_access_signature產生在Python SAS Tokenazure storage accountcontainerblob

如果您已經生成SAS token,您可以使用SAS token而不是帳戶密鑰來操作您的容器。

代碼段:

from datetime import datetime, timedelta 
from azure.storage.blob import (
    BlockBlobService, 
    ContainerPermissions, 
) 

accountName = "***" 
accountKey = "***" 
containerName = "***" 

def GenerateSasToken(): 
    blobService = BlockBlobService(account_name=accountName, account_key=accountKey) 
    sas_url = blobService.generate_container_shared_access_signature(containerName,ContainerPermissions.READ, datetime.utcnow() + timedelta(hours=1)) 
    # print sas_url 
    return 'https://' + accountName + '.blob.core.windows.net/' + containerName + '?' + sas_url 

def AccessTest(sastoken): 
    blobService = BlockBlobService(account_name = accountName, account_key = None, sas_token = sastoken) 
    BlockBlobService 

    for blob in blobService.list_blobs(containerName): 
     print blob.__getattribute__('name') 

sastoken = GenerateSasToken() 
print sastoken 

AccessTest(sastoken) 

另外,你可以嘗試使用Azure Key Vault

Azure存儲帳戶(ASA)密鑰功能爲您管理密鑰輪換 。通過提供共享訪問簽名(SAS)作爲一種方法,它還消除了與ASA 密鑰的直接聯繫。

其中提到的here

請參考Azure Key Vault official tutorial,它支持REST API