2017-10-04 4 views
0

Ich versuche herauszufinden, wie ein Containerobjekt erstellt wird, auf das die SAS-Berechtigung angewendet wurde, ohne den Konto- oder Kontoschlüssel anzugeben. Ich habe dies in C# getan, aber ich möchte dies in Python tun.Anwenden von SAS-Berechtigungen auf den Azure-Blobspeichercontainer in 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)); 

Ich kann dann im Container mit allen notwendigen Berechtigungen ohne Angabe eines Kontos und Schlüssel arbeiten. Ist das in Python möglich?

Antwort

0

Es wurde eine Möglichkeit gefunden, den Kontoschlüssel nicht zu verwenden. Dies war ein akzeptabler Kompromiss.

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

Wie Zusammenfassung Wenn Sie SAS-Token nicht generiert haben, können Sie nicht vermeiden Kontoschlüssel.

Sie konnten die official tutorial folgen und generate_shared_access_signature, generate_container_shared_access_signature, generate_blob_shared_access_signatureSAS Token für azure storage account, container, blob in Python zu generieren.

Wenn Sie bereits SAS token generiert haben, können Sie Ihren Container mit SAS token anstelle des Kontoschlüssels betreiben.

Code Snippet:

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) 

Darüber hinaus könnten Sie versuchen, Azure Key Vault zu verwenden.

Das Schlüsselmerkmal Azure Storage Account (ASA) verwaltet die geheime Rotation für Sie. Darüber hinaus wird Ihr direkter Kontakt mit einem ASA-Schlüssel durch die Bereitstellung von Shared Access-Signaturen (SAS) als Methode überflüssig.

welche erwähnt here.

Bitte beachten Sie die Azure Key Vault official tutorial und es unterstützt REST API.

Verwandte Themen