Получение ErrorCode:AuthorizationPermissionMismatch при перечислении больших двоичных объектов из Python, в то время как CLI AZ работает с теми же кредитами

У меня есть существующая учетная запись хранения/контейнер, в котором я могу перечислить все большие двоичные объекты с помощью AZ CLI:

[ ~ ]$ az storage blob list --account-name storageaccount20122022 --container-name test

There are no credentials provided in your command and environment, we will query for account key for your storage account.
It is recommended to provide --connection-string, --account-key or --sas-token in your command as credentials.

You also can add `--auth-mode login` in your command to use Azure Active Directory (Azure AD) for authorization if your login account is assigned required RBAC roles.
For more information about RBAC roles in storage, visit https://docs.microsoft.com/azure/storage/common/storage-auth-aad-rbac-cli.

In addition, setting the corresponding environment variables can avoid inputting credentials in your command. Please use --help to get more information about environment variable usage.
[
  {
    "container": "test",
    "content": "",
    ...
  }
]

Я хочу сделать то же самое с Python, это мой скрипт:

import sys
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

def list_blobs_using_cli_credential(account_name, container_name):
    credential = DefaultAzureCredential()   # Also tried AzureCliCredential()
    blob_service_client = BlobServiceClient(
        account_url=f"https://{account_name}.blob.core.windows.net",
        credential=credential
    )
    container_client = blob_service_client.get_container_client(container_name)
    print(f"Listing blobs in {account_name}/{container_name} ...")
    try:
        blobs = container_client.list_blobs()
        for blob in blobs:
            print(blob.name)
    except Exception as e:
        print(f"Error listing blobs: {e}")

if __name__ == "__main__":
    account_name = sys.argv[1]
    container_name = sys.argv[2]
    list_blobs_using_cli_credential(account_name, container_name)

Однако когда я запускаю это в той же оболочке, я получаю сообщение об ошибке:

[ ~ ]$ python list-blobs.py storageaccount20122022 test
Listing blobs in storageaccount20122022/test ...
Error listing blobs: This request is not authorized to perform this operation using this permission.
RequestId:466b2647-201e-0022-13fd-918e18000000
Time:2024-04-19T01:59:22.6413231Z
ErrorCode:AuthorizationPermissionMismatch
Content: <?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:466b2647-201e-0022-13fd-918e18000000
Time:2024-04-19T01:59:22.6413231Z</Message></Error>

Я могу перечислить учетные записи хранения и контейнер в каждой учетной записи из Python, но когда дело доходит до работы с большими двоичными объектами (список, удаление, загрузка), я не могу ничего сделать из Python, в то время как те же операции выполняются из AZ CLI.

Пробовал в двух разных аккаунтах Azure, совершенно не связанных между собой, в одном из них я владелец, но все равно то же самое.

Что делает AZ CLI, какие еще разрешения или роли он автоматически получает для выполнения операций с Blob? И как я могу сделать то же самое в своем коде Python?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
119
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Получение ErrorCode:AuthorizationPermissionMismatch при перечислении больших двоичных объектов из Python, когда интерфейс командной строки AZ работает с теми же учетными данными.

Команды Azure CLI будут работать с доступом владельца для вывода списка больших двоичных объектов в учетной записи хранения, но при использовании Python для успешного выполнения операции может потребоваться определенная роль, например участник данных BLOB-объектов хранилища.

У меня есть роль владельца на уровне подписки. Я могу перечислить капли, используя Azure CLI, но не Python.

Результат команды Azure CLI

Результат кода Python

После назначения роли участника данных Storage Blob я могу перечислить все blobs в container.

Результат кода Python после назначения роли.

Спасибо, это хорошее начало. Однако как AZ CLI предполагает доступ владельца? Может ли Python сделать что-то подобное?

MLu 19.04.2024 07:23

Кстати, ваши изображения не отображаются.

MLu 19.04.2024 07:23

Пожалуйста, измените свою сеть на мобильную точку доступа или любую личную сеть. Иногда корпоративные сети блокируют изображения с imgur.

Venkat V 19.04.2024 08:08

Другие вопросы по теме

Размещение приложения Django в службе приложений Azure
Статическое веб-приложение Azure с действиями Git [ошибка действий Git]
Azure Powershell преобразует Set-AzureADApplication в Update-MgApplication
Проверьте, содержит ли таблица SQL значение в фабрике данных Azure
Предложение по подписке «Доступ к Azure Active Directory» устарело
Как использовать конвейер данных копирования adf для одновременного создания нескольких таблиц
Запустите хранимую процедуру SQL для ПОЛУЧЕНИЯ данных с помощью приложения логики
Потоковая передача ответа в веб-API ASP.NET Core 6, работающем локально, но не в веб-приложении Azure, размещенном в Windows
Несколько хранилищ ключей Azure, связанных с одной и той же конфигурацией приложения, приводят к ошибке аутентификации в приложении весенней загрузки
Не удалось выполнить правильные действия по копированию данных контейнера BLOB-объектов в ADF в двух разных подписках в одном клиенте