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

时间:2017-10-04 17:36:24

标签: python azure permissions

我试图了解如何在不提供帐户或帐户密钥的情况下创建已应用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中是否可行?

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分:-1)

与摘要一样,如果您尚未生成SAS令牌,则无法使用帐户密钥。

您可以关注official tutorial并使用generate_shared_access_signaturegenerate_container_shared_access_signaturegenerate_blob_shared_access_signatureSAS Token生成azure storage accountcontainer ,python中的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)密钥功能管理秘密轮换   为了你。它还消除了您与ASA直接联系的需要   密钥通过提供共享访问签名(SAS)作为方法。

提到here

请参阅Azure Key Vault official tutorial并支持REST API