在Python中的Azure Blob存储容器上应用SAS权限

在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

我试图找出如何创建一个容器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=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)