Используя Python azure-storage
API, я ожидаю, что смогу сгенерировать токен SAS учетной записи, который позволит мне читать и записывать большие двоичные объекты в любом контейнере в моей учетной записи хранения.
Создание токена SAS происходит без исключения, но когда я пытаюсь создать BlockBlobService
с помощью этого токена SAS и перечислить несколько больших двоичных объектов для данного контейнера, я получаю AuthorizationPermissionMismatch
ошибку от Azure.
Правильно ли я понимаю концепцию токена SAS учетной записи?
Я просмотрел тонну документации по Azure "Приступая к работе" для API хранилища Python, а также просмотрел https://azure-storage.readthedocs.io/ref/azure.storage.blob.sharedaccesssignature.html совсем немного.
Я пробовал использовать azure.storage.blob.BlockBlobService.generate_account_shared_access_signature()
с очень разрешительными разрешениями, но все еще получаю исключение.
Я могу подтвердить, что azure.storage.blob.BlockBlobService.generate_container_shared_access_signature()
работает нормально, однако мое требование - создать токен SAS независимо от контейнера.
from azure.storage.blob import BlockBlobService
from azure.storage.models import AccountPermissions, ResourceTypes
bbs = BlockBlobService("myaccountname", "myaccountkey")
sas_token = bbs.generate_account_shared_access_signature(
ResourceTypes.CONTAINER + ResourceTypes.OBJECT + ResourceTypes.SERVICE,
AccountPermissions.READ + AccountPermissions.WRITE + AccountPermissions.LIST + AccountPermissions.CREATE,
datetime.utcnow() + timedelta(hours=1)
)
BlockBlobService(account_name="myaccountname", sas_token=sas_token).list_blobs("containername")
azure.common.AzureHttpError: This request is not authorized to perform this operation using this permission.
<?xml version="1.0" encoding="utf-8"?><Error><Code>AuthorizationPermissionMismatch</Code><Message>This request is not authorized to perform this operation using this permission.
RequestId:6a06b32e-f01e-005a-44e7-430c8b000000
Time:2019-07-26T19:22:02.7337249Z</Message></Error>
Я ожидал, что смогу позвонить здесь list_blobs()
без проблем. Как я могу сделать это, не создавая контейнер SAS Token по контейнеру?