在Python中的Azure Blob存储容器上应用SAS权限
问题描述:
我想了解如何创建一个容器,并在其上应用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中可能吗?
答
找到了一种不使用帐户密钥的方法。这是一个可接受的妥协。
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')
答
正如总结,如果您还没有生成SAS的道理,你不能避免使用帐户键。
你可以按照official tutorial和使用generate_shared_access_signature
,generate_container_shared_access_signature
,generate_blob_shared_access_signature
产生在Python SAS Token
为azure storage account
,container
,blob
。
如果您已经生成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。