Загрузка BLOB-объектов из хранилища BLOB-объектов с помощью Python

Я пытаюсь загрузить файл excel в большой двоичный объект. Однако он продолжает генерировать ошибку Указанный большой двоичный объект не существует. Эта ошибка возникает в blob_client.download_blob(), хотя я могу получить файл blob_client. Есть идеи, почему или как я могу подключиться с помощью управляемого удостоверения?

default_credential = DefaultAzureCredential()
 
blob_url = BlobServiceClient('url', credential = default_credential)
   
container_client = blob_url.get_container_client('xx-xx-data')

blob_client = container_client.get_blob_client('TEST.xlsx')

downloaded_blob = blob_client.download_blob()

df=pd.read_excel(downloaded_blob.content_as_bytes(), sheet_name='Test',skiprows=2)

person Kelly    schedule 03.05.2021    source источник
comment
Не могли бы вы подтвердить, существует ли TEST.xlsx большой двоичный объект в it-dashboards-data контейнере больших двоичных объектов?   -  person Gaurav Mantri    schedule 03.05.2021
comment
Да, это так. Проверял неоднократно...   -  person Kelly    schedule 03.05.2021
comment
Обратите внимание, что имена больших двоичных объектов чувствительны к регистру. Большой двоичный объект должен иметь точное имя TEST.xlsx.   -  person Gaurav Mantri    schedule 03.05.2021
comment
Да.. Я скопировал и вставил имя из URL-адреса большого двоичного объекта.   -  person Kelly    schedule 03.05.2021
comment
Является ли простой URL-адрес url BLOB-объекта похожим на https://account.blob.core.windows.net/container/blob или это URL-адрес SAS?   -  person Gaurav Mantri    schedule 03.05.2021
comment
Это простой URL-адрес большого двоичного объекта   -  person Kelly    schedule 03.05.2021
comment
ААА понятно. Позвольте мне дать ответ.   -  person Gaurav Mantri    schedule 03.05.2021


Ответы (2)


Причина, по которой вы получаете эту ошибку, заключается в том, что каждый запрос к хранилищу BLOB-объектов Azure должен быть аутентифицированным. Единственное исключение — это когда вы читаете (загружаете) большой двоичный объект из общедоступного контейнера больших двоичных объектов. По всей вероятности, контейнер больших двоичных объектов, содержащий этот большой двоичный объект, имеет ACL Private, и, поскольку вы отправляете запрос без проверки подлинности, вы получаете эту ошибку.

Я бы рекомендовал использовать Shared Access Signature (SAS) URL для большого двоичного объекта с разрешением Read вместо простого URL-адреса большого двоичного объекта. Поскольку URL-адрес SAS содержит информацию об авторизации, встроенную в сам URL-адрес (часть sig), вы должны иметь возможность загрузить большой двоичный объект, если SAS действителен и срок его действия не истек.

Дополнительные сведения о подписи общего доступа см. здесь: https://docs.microsoft.com/en-us/rest/api/storageservices/delegate-access-with-shared-access-signature.

person Gaurav Mantri    schedule 03.05.2021
comment
Есть ли способ создать URL-адрес SAS с помощью DefaultAzureCredential()? Мне нужно просто загрузить большой двоичный объект, используя управляемое удостоверение. Я прочитал ссылку и не могу заставить ее работать. - person Kelly; 03.05.2021
comment
Можете ли вы подтвердить, работает ли управляемая идентификация для вас? Вы запускаете код в Azure или локально? - person Gaurav Mantri; 03.05.2021
comment
Да работает корректно. Я уже использую управляемую идентификацию для аутентификации с помощью SQL. Просто у меня проблемы с большим двоичным объектом хранилища. Я тестирую локально и в Azure, у обоих есть проблемы - person Kelly; 03.05.2021

Оказывается, я также должен предоставить доступ «Чтение» поверх «Участника данных хранилища больших двоичных объектов», чтобы иметь возможность идентифицировать большой двоичный объект. Не было необходимости в URL-адресе SAS.

person Kelly    schedule 04.05.2021