Создание и развертывание веб-приложения Flask Python в Azure с управляемым удостоверением, назначаемое системой
В этом руководстве вы развернете код Python Flask для создания и развертывания веб-приложения, работающего в службе приложение Azure. Веб-приложение использует управляемое удостоверение, назначаемое системой (без пароля), с помощью управления доступом на основе ролей Azure для доступа к служба хранилища Azure и База данных Azure для PostgreSQL — гибким ресурсам сервера. В коде используется класс DefaultAzureCredential клиентской библиотеки удостоверений Azure для Python. Класс DefaultAzureCredential
автоматически обнаруживает, что управляемое удостоверение существует для Служба приложений и использует его для доступа к другим ресурсам Azure.
Вы можете настроить бессерверные подключения к службам Azure с помощью службы Подключение or или настроить их вручную. В этом руководстве показано, как использовать службу Подключение or. Дополнительные сведения о бессерверных подключениях см. в разделе "Без пароля" для служб Azure. Сведения о службе Подключение or см. в документации по службе Подключение or.
В этом руководстве показано, как создать и развернуть веб-приложение Python с помощью Azure CLI. Команды, приведенные в этом руководстве, записываются для выполнения в оболочке Bash. Команды руководства можно выполнять в любой среде Bash с установленным интерфейсом командной строки, например локальной средой или Azure Cloud Shell. При некоторых изменениях, например, настройке и использовании переменных среды можно выполнять эти команды в других средах, таких как командная оболочка Windows. Примеры использования управляемого удостоверения, назначаемого пользователем, см. в статье "Создание и развертывание веб-приложения Django в Azure с управляемым удостоверением, назначенным пользователем".
Получение примера приложения
Пример приложения Python с помощью платформы Flask доступен для выполнения работы с этим руководством. Скачайте или клонируйте один из примеров приложений на локальную рабочую станцию.
Клонируйте пример в сеансе Azure Cloud Shell.
git clone https://github.com/Azure-Samples/msdocs-flask-web-app-managed-identity.git
Перейдите в папку приложения.
cd msdocs-flask-web-app-managed-identity
Создание сервера Azure PostgreSQL
Настройте переменные среды, необходимые для руководства.
LOCATION="eastus" RAND_ID=$RANDOM RESOURCE_GROUP_NAME="msdocs-mi-web-app" APP_SERVICE_NAME="msdocs-mi-web-$RAND_ID" DB_SERVER_NAME="msdocs-mi-postgres-$RAND_ID" ADMIN_USER="demoadmin" ADMIN_PW="ChAnG33#ThsPssWD$RAND_ID"
Внимание
Должны
ADMIN_PW
содержать от 8 до 128 символов из трех из следующих категорий: английские прописные буквы, строчные буквы, цифры и нефазные цифры. При создании имен пользователей или паролей символ$
не используется. Позже вы создадите переменные среды с этими значениями, где символу$
отведена особая роль в контейнере Linux, используемом для запуска приложений Python.Создайте группу ресурсов с помощью команды az group create.
az group create --location $LOCATION --name $RESOURCE_GROUP_NAME
Создайте сервер PostgreSQL с помощью команды az postgres flexible-server create . (Эти и последующие команды используют символ продолжения строки для оболочки Bash ('\). При необходимости измените символ продолжения строки для оболочки.)
az postgres flexible-server create \ --resource-group $RESOURCE_GROUP_NAME \ --name $DB_SERVER_NAME \ --location $LOCATION \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --sku-name Standard_D2ds_v4
Имя SKU — это имя ценовой категории и конфигурации вычислений. Дополнительные сведения см. на странице цен на Базу данных Azure для PostgreSQL. Чтобы получить список доступных номеров SKU, используйте
az postgres flexible-server list-skus --location $LOCATION
.Создайте базу данных с именем
restaurant
с помощью команды az postgres flexible-server execute .az postgres flexible-server execute \ --name $DB_SERVER_NAME \ --admin-user $ADMIN_USER \ --admin-password $ADMIN_PW \ --database-name postgres \ --querytext 'create database restaurant;'
Создание службы приложение Azure и развертывание кода
Создайте службу приложений с помощью команды az webapp up .
az webapp up \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --runtime PYTHON:3.9 \ --sku B1
SKU определяет размер (ЦП, память) и стоимость плана службы приложений. План обслуживания B1 (базовый) несет небольшую стоимость в подписке Azure. Полный список планов службы приложений см. на странице цен на Службу приложений.
Настройте Служба приложений для использования start.sh в репозитории с помощью команды az webapp config set.
az webapp config set \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --startup-file "start.sh"
Создание соединителей без пароля для ресурсов Azure
Команды Подключение службы настраивают служба хранилища Azure и База данных Azure для PostgreSQL ресурсы для использования управляемого удостоверения и управления доступом на основе ролей Azure. Команды создают параметры приложения в Служба приложений, которые подключают веб-приложение к этим ресурсам. Выходные данные из команд перечисляют действия соединителя службы, выполняемые для включения возможности без пароля.
Добавьте соединитель службы PostgreSQL с помощью команды az webapp connection create postgres-flexible command. Управляемое удостоверение, назначаемое системой, используется для проверки подлинности веб-приложения в целевом ресурсе PostgreSQL в этом случае.
az webapp connection create postgres-flexible \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --server $DB_SERVER_NAME \ --database restaurant \ --client-type python \ --system-identity
Добавьте соединитель службы хранилища с помощью команды az webapp connection create storage-blob .
Эта команда также добавляет учетную запись хранения и добавляет веб-приложение с ролью служба хранилища участника данных BLOB-объектов в учетную запись хранения.
STORAGE_ACCOUNT_URL=$(az webapp connection create storage-blob \ --new true \ --resource-group $RESOURCE_GROUP_NAME \ --name $APP_SERVICE_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --client-type python \ --system-identity \ --query configurations[].value \ --output tsv) STORAGE_ACCOUNT_NAME=$(cut -d . -f1 <<< $(cut -d / -f3 <<< $STORAGE_ACCOUNT_URL))
Создание контейнера в учетной записи хранения
Пример приложения Python хранит фотографии, отправленные рецензентами в виде больших двоичных объектов в контейнере в учетной записи хранения.
Когда пользователь отправляет фотографию с проверкой, пример приложения записывает изображение в контейнер с помощью управляемого удостоверения, назначаемого системой, для проверки подлинности и авторизации. Вы настроили эту функцию в последнем разделе.
Когда пользователь просматривает отзывы о ресторане, приложение возвращает ссылку на фотографию в хранилище BLOB-объектов для каждой проверки, связанной с ней. Чтобы браузер отображал фотографию, он должен иметь доступ к нему в вашей учетной записи хранения. Данные BLOB-объектов должны быть доступны для общедоступного чтения с помощью анонимного (неуверенного) доступа.
Для повышения безопасности учетные записи хранения создаются с анонимным доступом к данным BLOB-объектов, отключенным по умолчанию. В этом разделе описано, как включить анонимный доступ на чтение в учетной записи хранения, а затем создать контейнер с именами фотографий , предоставляющих общедоступный (анонимный) доступ к большим двоичным объектам.
Обновите учетную запись хранения, чтобы разрешить анонимный доступ на чтение к blob-объектам с помощью команды az storage account update .
az storage account update \ --name $STORAGE_ACCOUNT_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --allow-blob-public-access true
Включение анонимного доступа в учетной записи хранения не влияет на доступ для отдельных BLOB-объектов. Необходимо явно включить общедоступный доступ к BLOB-объектам на уровне контейнера.
Создайте контейнер с именем "фотографии " в учетной записи хранения с помощью команды az storage container create . Разрешить анонимный доступ на чтение (общедоступную) к blob-объектам в только что созданном контейнере.
az storage container create \ --account-name $STORAGE_ACCOUNT_NAME \ --name photos \ --public-access blob \ --account-key $(az storage account keys list --account-name $STORAGE_ACCOUNT_NAME \ --query [0].value --output tsv)
Примечание.
Для краткости эта команда использует ключ учетной записи хранения для авторизации с учетной записью хранения. Для большинства сценариев рекомендуемый подход Майкрософт — использовать роли Microsoft Entra ID и Azure (RBAC). Краткий набор инструкций см . в кратком руководстве. Создание, скачивание и перечисление больших двоичных объектов с помощью Azure CLI. Обратите внимание, что несколько ролей Azure позволяют создавать контейнеры в учетной записи хранения, включая "Владелец", "Участник", "служба хранилища владелец данных BLOB-объектов" и "участник данных BLOB-объектов служба хранилища".
Дополнительные сведения о анонимном доступе на чтение к данным BLOB-объектов см. в статье Настройка анонимного доступа на чтение для контейнеров и БОЛЬШИХ двоичных объектов.
Тестирование веб-приложения Python в Azure
В примере приложения Python используется пакет azure.identity и его DefaultAzureCredential
класс. Когда приложение запущено в Azure, автоматически обнаруживает, DefaultAzureCredential
существует ли управляемое удостоверение для Служба приложений и, если это так, использует его для доступа к другим ресурсам Azure (хранилище и PostgreSQL в этом случае). Нет необходимости предоставлять ключи хранения, сертификаты или учетные данные Служба приложений для доступа к этим ресурсам.
Перейдите к развернутом приложению по URL-адресу
http://$APP_SERVICE_NAME.azurewebsites.net
.Для запуска приложения может потребоваться несколько минут. Если вы видите страницу приложения по умолчанию, которая не является образцом приложения по умолчанию, подождите минуту и обновите браузер.
Проверьте функциональные возможности примера приложения, добавив ресторан и некоторые отзывы с фотографиями для ресторана.
Сведения о ресторане и обзоре хранятся в База данных Azure для PostgreSQL, а фотографии хранятся в служба хранилища Azure. Ниже приведен пример снимка экрана:
Очистка
В этом руководстве все ресурсы Azure были созданы в одной группе ресурсов. При удалении группы ресурсов команда az group delete удаляет все ресурсы в группе ресурсов и является самым быстрым способом удаления всех ресурсов Azure, используемых для приложения.
az group delete --name $RESOURCE_GROUP_NAME
При необходимости можно добавить аргумент --no-wait
, чтобы команда возвращала данные до завершения операции.
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по