在Python中的Azure Blob存储容器上应用SAS权限
我试图找出如何创建一个容器obect,该容器在不提供帐户或帐户密钥的情况下应用了SAS权限。我已经在C#中完成了这项工作,但希望在Python中完成这项工作在Python中的Azure Blob存储容器上应用SAS权限,python,azure,permissions,Python,Azure,Permissions,我试图找出如何创建一个容器obect,该容器在不提供帐户或帐户密钥的情况下应用了SAS权限。我已经在C#中完成了这项工作,但希望在Python中完成这项工作 sasToken = "https://samplestoragehotblob.blob.core.windows.net/samplecontainer?sv=2016-05-31&sr=c&sig=dfdLKJ.....kljsdflkjljsd=3027-09-11T17%3A16%3A57Z&sp=racw
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令牌,那个么就不能避免使用帐户密钥 您可以遵循并使用
generate_shared_access_签名
,generate_container_shared_access_签名
,generate_blob_shared_access_签名
为python中的azure存储帐户
,容器
,blob
生成SAS令牌
如果已经生成了SAS令牌
,则可以使用SAS令牌
而不是帐户密钥来操作容器
代码片段:
此外,您可以尝试使用Azure密钥库
Azure存储帐户(ASA)关键功能管理秘密轮换
为你。它还消除了您与ASA直接接触的需要
通过提供共享访问签名(SAS)作为一种方法来设置密钥
其中提到
请参阅和it支持。您应该给出如何使用仅带SAS令牌的python azure SDK上载文件的示例。前提是已生成sas密钥。这是OP的问题。您的代码只提到了如何生成SAS密钥,这与本文无关。
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)