Поделиться через


Создание и развертывание веб-приложения 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 доступен для выполнения работы с этим руководством. Скачайте или клонируйте один из примеров приложений на локальную рабочую станцию.

  1. Клонируйте пример в сеансе Azure Cloud Shell.

    git clone https://github.com/Azure-Samples/msdocs-flask-web-app-managed-identity.git
    
  2. Перейдите в папку приложения.

    cd msdocs-flask-web-app-managed-identity
    

Создание сервера Azure PostgreSQL

  1. Настройте переменные среды, необходимые для руководства.

    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.

  2. Создайте группу ресурсов с помощью команды az group create.

    az group create --location $LOCATION --name $RESOURCE_GROUP_NAME
    
  3. Создайте сервер 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.

  4. Создайте базу данных с именем 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 и развертывание кода

  1. Создайте службу приложений с помощью команды az webapp up .

    az webapp up \
      --resource-group $RESOURCE_GROUP_NAME \
      --name $APP_SERVICE_NAME \
      --runtime PYTHON:3.9 \
      --sku B1
    

    SKU определяет размер (ЦП, память) и стоимость плана службы приложений. План обслуживания B1 (базовый) несет небольшую стоимость в подписке Azure. Полный список планов службы приложений см. на странице цен на Службу приложений.

  2. Настройте Служба приложений для использования 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. Команды создают параметры приложения в Служба приложений, которые подключают веб-приложение к этим ресурсам. Выходные данные из команд перечисляют действия соединителя службы, выполняемые для включения возможности без пароля.

  1. Добавьте соединитель службы 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
    
  2. Добавьте соединитель службы хранилища с помощью команды 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-объектов, отключенным по умолчанию. В этом разделе описано, как включить анонимный доступ на чтение в учетной записи хранения, а затем создать контейнер с именами фотографий , предоставляющих общедоступный (анонимный) доступ к большим двоичным объектам.

  1. Обновите учетную запись хранения, чтобы разрешить анонимный доступ на чтение к 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-объектам на уровне контейнера.

  2. Создайте контейнер с именем "фотографии " в учетной записи хранения с помощью команды 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 в этом случае). Нет необходимости предоставлять ключи хранения, сертификаты или учетные данные Служба приложений для доступа к этим ресурсам.

  1. Перейдите к развернутом приложению по URL-адресу http://$APP_SERVICE_NAME.azurewebsites.net.

    Для запуска приложения может потребоваться несколько минут. Если вы видите страницу приложения по умолчанию, которая не является образцом приложения по умолчанию, подождите минуту и обновите браузер.

  2. Проверьте функциональные возможности примера приложения, добавив ресторан и некоторые отзывы с фотографиями для ресторана.

    Сведения о ресторане и обзоре хранятся в База данных Azure для PostgreSQL, а фотографии хранятся в служба хранилища Azure. Ниже приведен пример снимка экрана:

    Снимок экрана: пример приложения с функциями проверки ресторанов с помощью службы приложение Azure, Azure Postgre База данных SQL и служба хранилища Azure.

Очистка

В этом руководстве все ресурсы Azure были созданы в одной группе ресурсов. При удалении группы ресурсов команда az group delete удаляет все ресурсы в группе ресурсов и является самым быстрым способом удаления всех ресурсов Azure, используемых для приложения.

az group delete  --name $RESOURCE_GROUP_NAME 

При необходимости можно добавить аргумент --no-wait, чтобы команда возвращала данные до завершения операции.

Следующие шаги