Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы узнаете, как использовать клиентские библиотеки Azure в коде приложения Python для отправки файла в контейнер хранилища BLOB-объектов Azure. В статье предполагается, что вы создали ресурсы, показанные в примере: создание службы хранилища Azure.
Все описанные в этой статье команды работают одинаково как в Bash для Linux или macOS, так и в командных оболочках для Windows, если не указано иное.
1. Настройка локальной среды разработки
Если вы еще не сделали этого, настройте среду, в которой можно запустить код. Ниже приведено несколько вариантов:
Настройте виртуальную среду Python с помощью
venvили выбранного вами инструмента. Чтобы начать использовать виртуальную среду, обязательно активируйте ее. Сведения об установке Python см. в разделе "Установка Python".#!/bin/bash # Create a virtual environment python -m venv .venv # Activate the virtual environment source .venv/Scripts/activate # only required for Windows (Git Bash)Используйте среду conda. Сведения об установке Conda см. в разделе "Установка Miniconda".
Используйте Dev Container в Visual Studio Code или GitHub Codespaces.
2. Установка пакетов библиотек
В файле requirements.txt добавьте строки для необходимого пакета клиентской библиотеки и сохраните файл.
azure-storage-blob
azure-identity
Затем в терминале или командной строке установите требования.
pip install -r requirements.txt
3. Создание файла для отправки
Создайте исходный файл с именем sample-source.txt. Это имя файла, который ожидает код.
Hello there, Azure Storage. I'm a friendly file ready to be stored in a blob.
4. Использование хранилища BLOB-объектов из кода приложения
В этом разделе показано два способа доступа к данным в контейнере BLOB, созданном в примере: создание хранилища Azure. Чтобы получить доступ к данным в контейнере BLOB, ваше приложение должно аутентифицироваться в Azure и быть авторизовано для доступа к данным в контейнере. В этом разделе представлено два способа выполнения следующих действий.
Метод Без пароля (рекомендуется) проверяет подлинность приложения, используя
DefaultAzureCredentialDefaultAzureCredential.DefaultAzureCredential— это цепочка учетных данных, которая может пройти проверку подлинности приложения (или пользователя) с помощью последовательности различных учетных данных, включая учетные данные средства разработчика, принципалы услуг приложения и управляемые удостоверения.Метод строка подключения использует строку подключения для прямого доступа к учетной записи хранения.
По следующим причинам и многое другое рекомендуется использовать метод без пароля по возможности:
Строка подключения аутентифицирует агента подключения с учетной записью хранения, а не отдельными ресурсами в этой учетной записи. В результате строка подключения предоставляет более широкую авторизацию, чем может потребоваться. С помощью
DefaultAzureCredentialвы можете предоставить более гранулированные разрешения с наименьшими привилегиями для ваших ресурсов хранилища идентификации, под которой выполняется ваше приложение, используя Azure RBAC.Строка подключения содержит сведения о доступе в виде обычного текста и поэтому представляет потенциальные уязвимости, если они не созданы должным образом или защищены. Если такая строка подключения предоставляется, ее можно использовать для доступа к широкому спектру ресурсов в учетной записи хранения.
Строка подключения обычно хранятся в переменной среды, что делает ее уязвимой для компрометации, если злоумышленник получает доступ к вашей среде. Многие типы учетных данных, поддерживаемые
DefaultAzureCredential, не требуют хранения конфиденциальной информации в вашей среде.
- Без пароля (рекомендуется)
- Строка подключения
DefaultAzureCredential — это заранее сконфигурированная цепочка полномочий.
DefaultAzureCredential поддерживает множество сред, а также наиболее распространенные потоки проверки подлинности и средства разработчика. Экземпляр DefaultAzureCredential определяет, какие типы учетных данных использовать для получения токена на основе комбинации среды выполнения, значения определенных известных переменных среды и, при необходимости, параметров, передаваемых в его конструктор.
На следующих шагах вы настроите основной объект службы приложения в качестве идентификатора приложения. Принципы служб приложения подходят для использования как во время локальной разработки, так и для приложений, размещенных в локальной инфраструктуре. Чтобы настроить DefaultAzureCredential для использования учетной записи службы приложения, задайте следующие переменные среды: AZURE_CLIENT_ID, AZURE_TENANT_ID и AZURE_CLIENT_SECRET.
Обратите внимание, что настроен секрет клиента. Секрет клиента необходим для служебного принципала приложения, но в зависимости от вашего сценария вы также можете настроить DefaultAzureCredential для использования учетных данных, которые не требуют установки секрета или пароля в переменной среды.
Например, в локальной среде разработки, если DefaultAzureCredential не удается получить токен с помощью настроенных переменных окружения, он пытается получить его с помощью пользователя, уже вошедшего в систему таких средств разработки, как Azure CLI; для приложения, размещенного в Azure, DefaultAzureCredential можно настроить для использования управляемой идентичности. Во всех случаях код в приложении остается неизменным, изменяется только конфигурация и (или) среда выполнения.
Создайте файл с именем use_blob_auth.py с указанным ниже кодом. Подробные объяснения даны в комментариях.
import os import uuid from azure.identity import DefaultAzureCredential # Import the client object from the SDK library from azure.storage.blob import BlobClient credential = DefaultAzureCredential() # Retrieve the storage blob service URL, which is of the form # https://<your-storage-account-name>.blob.core.windows.net/ storage_url = os.environ["AZURE_STORAGE_BLOB_URL"] # Create the client object using the storage URL and the credential blob_client = BlobClient( storage_url, container_name="blob-container-01", blob_name=f"sample-blob-{str(uuid.uuid4())[0:5]}.txt", credential=credential, ) # Open a local file and upload its contents to Blob Storage with open("./sample-source.txt", "rb") as data: blob_client.upload_blob(data) print(f"Uploaded sample-source.txt to {blob_client.url}")Ссылки для справки:
- DefaultAzureCredential (azure.identity)
- BlobClient (azure.storage.blob)
Создайте переменную среды с именем
AZURE_STORAGE_BLOB_URL.Замените pythonazurestorage12345 именем учетной записи хранения.
Переменная
AZURE_STORAGE_BLOB_URLсреды используется только в этом примере. Он не используется библиотеками Azure.Используйте команду az ad sp create-for-rbac, чтобы создать новую учетную запись службы для приложения. Команда одновременно создает регистрацию для приложения. Присвойте субъекту-службе имя выбранного объекта.
az ad sp create-for-rbac --name <service-principal-name>Выходные данные этой команды выглядят следующим фрагментом КОДА JSON. Запишите эти значения или оставьте это окно открытым, так как вам потребуются они на следующем шаге и вы не сможете снова просмотреть значение пароля (секрет клиента). Однако при необходимости можно добавить новый пароль, не затрагивая удостоверение службы или существующие пароли.
{ "appId": "00001111-aaaa-2222-bbbb-3333cccc4444", "displayName": "<service-principal-name>", "password": "Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2", "tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee" }Команды Azure CLI могут выполняться в Azure Cloud Shell или на рабочей станции с установленным Azure CLI.
Создайте переменные среды для субъекта-службы приложения:
Создайте следующие переменные среды со значениями из выходных данных предыдущей команды. Эти переменные указывают
DefaultAzureCredentialна использование главного субъекта службы приложения.-
AZURE_CLIENT_ID→ значение идентификатора приложения. -
AZURE_TENANT_ID→ Значение идентификатора арендатора. -
AZURE_CLIENT_SECRET→ пароль или учетные данные, созданные для приложения.
-
Попробуйте выполнить код (который намеренно завершится сбоем):
python use_blob_auth.pyОбратите внимание на ошибку "Этот запрос не авторизован для выполнения этой операции с помощью этого разрешения". Ожидается ошибка, так как локальный субъект-служба, который вы используете, еще не имеет разрешения на доступ к контейнеру блоб-объектов.
Предоставьте разрешения "Storage Blob Data Contributor" на контейнер объектов BLOB служебному принципалу, используя команду "az role assignment create" Azure CLI.
az role assignment create --assignee <AZURE_CLIENT_ID> \ --role "Storage Blob Data Contributor" \ --scope "/subscriptions/<AZURE_SUBSCRIPTION_ID>/resourceGroups/PythonAzureExample-Storage-rg/providers/Microsoft.Storage/storageAccounts/pythonazurestorage12345/blobServices/default/containers/blob-container-01"Аргумент
--assigneeопределяет учетная запись службы. Замените <AZURE_CLIENT_ID> заполнителем идентификатором приложения субъекта-службы.Аргумент
--scopeопределяет, к чему применяется это назначение ролей. В этом примере вы предоставляете роль "Участник данных BLOB-объектов хранилища" служебному принципалу для контейнера с именем "blob-container-01".Замените
PythonAzureExample-Storage-rgиpythonazurestorage12345на группу ресурсов, содержащую вашу учетную запись хранения, и точное имя вашей учетной записи хранения. При необходимости настройте имя контейнера BLOB. Если вы используете неправильное имя, появится сообщение об ошибке "Не удается выполнить запрошенную операцию в вложенном ресурсе. Родительский ресурс 'pythonazurestorage12345' не найден.Замените <AZURE_SUBSCRIPTION_ID> на идентификатор вашей подписки Azure. (Вы можете запустить команду az account show и получить идентификатор подписки из свойства
idв выходных данных.)
Совет
Если команда назначения ролей возвращает ошибку "Адаптеры подключения не найдены" при использовании Bash, попробуйте установить
export MSYS_NO_PATHCONV=1для того, чтобы избежать преобразования путей. Дополнительные сведения см. в данном вопросе.Подождите минуту или две, пока разрешения не распространятся, затем снова запустите код, чтобы убедиться, что он теперь работает. Если ошибка прав доступа происходит снова, подождите еще и повторите попытку.
Для получения дополнительной информации о назначении ролей см. раздел назначение разрешений для ролей с помощью Azure CLI.
Внимание
В предыдущих шагах ваше приложение запускалось под учетной записью службы приложений. Основной объект службы приложения требует наличия секрета клиента в своей конфигурации. Однако вы можете использовать тот же код для запуска приложения в различных типах учетных данных, которые не требуют явной настройки пароля или секрета в среде. Например, во время разработки может использоваться удостоверение средства разработчика, аналогично учетным данным, которые вы используете для входа через Azure CLI; или для приложений, размещенных в Azure, может использоваться управляемая идентичность. Чтобы узнать больше, см. статью «Аутентификация приложений Python в службах Azure с помощью SDK Azure для Python».
5. Проверка создания BLOB
После выполнения кода любого метода перейдите в портал Azure и перейдите в контейнер BLOB-объектов, чтобы убедиться, что новый BLOB существует с именем sample-blob-{random}.txt и тем же содержимым, что и файл sample-source.txt:
Портал Azure, страница Blob-контейнера, на которой отображается загруженный файл
Если вы создали переменную среды с именем `AZURE_STORAGE_CONNECTION_STRING`, вы также можете использовать Azure CLI, чтобы убедиться, что объект BLOB существует с помощью команды az storage blob list.
az storage blob list --container-name blob-container-01
Если вы выполнили инструкции по использованию проверки подлинности без пароля, можно добавить --connection-string параметр в предыдущую команду со строкой подключения для учетной записи хранения. Чтобы получить строку подключения, используйте команду az storage account show-connection-string.
az storage account show-connection-string --resource-group PythonAzureExample-Storage-rg --name pythonazurestorage12345 --output tsv
Используйте всю строку подключения в качестве значения параметра --connection-string.
Примечание.
Если у вашей учетной записи Azure есть роль "Storage Blob Data Contributor" на контейнере, можно использовать следующую команду, чтобы перечислить BLOB-объекты в контейнере:
az storage blob list --container-name blob-container-01 --account-name pythonazurestorage12345 --auth-mode login
6. Очистка ресурсов
Выполните команду az group delete, если вам не нужно сохранять группу ресурсов и ресурсы хранения, использованные в данном примере. Группы ресурсов не несут никаких текущих расходов в вашей подписке, но в группе ресурсов ресурсы, такие как учетные записи хранения, могут продолжать нести расходы. Рекомендуется очистить любую группу, которую вы активно не используете. Аргумент --no-wait позволяет команде выполнить возврат немедленно, вместо того чтобы ожидать завершения операции.
az group delete -n PythonAzureExample-Storage-rg --no-wait
Для удаления группы ресурсов с помощью кода также можно использовать метод ResourceManagementClient.resource_groups.begin_delete. Код в Пример: создание группы ресурсов демонстрирует использование.
Если вы выполнили инструкции по использованию аутентификации без пароля, рекомендуется удалить основной объект приложения, который вы создали. Можно использовать команду az ad app delete. Замените <AZURE_CLIENT_ID> идентификатором приложения учетной записи службы.
az ad app delete --id <AZURE_CLIENT_ID>
См. также
- Краткое руководство: клиентская библиотека для работы с BLOB-объектами Azure в Python
- Пример: Создание группы ресурсов
- Пример: Перечисление групп ресурсов в подписке
- Пример: Создайте веб-приложение и развертывание кода
- Пример: Создание службы хранилища Azure
- Пример: Создание и запрос базы данных
- Пример: Создание виртуальной машины
- Использование Управляемых дисков Azure с виртуальными машинами
- Пройдите короткий опрос об Azure SDK для Python