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


Аутентификация в ресурсах Azure из Python-приложений, размещенных на локальных серверах

Приложения, размещенные вне Azure, например, локально или в стороннем центре обработки данных, должны использовать учетную запись службы приложения через Microsoft Entra ID для аутентификации в службах Azure. В следующих разделах вы узнаете:

  • Процесс регистрации приложения в Microsoft Entra для создания сервисного принципала
  • Назначение ролей для разрешений области действия.
  • Аутентификация с помощью учетной записи службы из кода приложения

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

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

Регистрация приложения в Azure

Объекты основного сервиса приложения создаются посредством регистрации приложения в Azure через портал Azure или Azure CLI.

  1. На портале Azure используйте строку поиска, чтобы перейти на страницу App registrations.

  2. На странице App registrations выберите + Новая регистрация.

  3. На странице Зарегистрировать приложение:

    • В поле Имя введите описательное значение, включающее имя приложения и целевую среду.
    • Для поддерживаемых типов учетных записейвыберите учетные записи только в этом каталоге организации (только клиент Майкрософт — один клиент)или любой вариант, который лучше всего соответствует вашим требованиям.
  4. Выберите Регистрация, чтобы зарегистрировать приложение и создать служебный принципал.

    Скриншот, демонстрирующий, как создать регистрацию приложения на портале Azure.

  5. На странице регистрации приложений скопируйте идентификатор приложения (клиента) и идентификатор каталога (клиента) и вставьте их во временное расположение для последующего использования в конфигурациях кода приложения.

  6. Выберите Добавить сертификат или секрет, чтобы установить учетные данные для приложения.

  7. На странице "Сертификаты и секреты" выберите "+ Новый секрет клиента".

  8. На панели, открывающейся для добавления секрета клиента, выполните следующие действия:

    • Для описаниявведите значение Current.
    • Для значения «срок действия», оставьте рекомендуемое значение по умолчанию — 180 дней.
    • Нажмите кнопку "Добавить ", чтобы добавить секрет.
  9. На странице сертификатов & секретов скопируйте свойство значения секрета клиента для использования в следующем шаге.

    Замечание

    Значение секрета клиента отображается только один раз после создания регистрации приложения. Вы можете добавить дополнительные секреты клиента, не отменив этот секрет клиента, но невозможно снова отобразить это значение.

Назначение ролей для служебного принципала приложения

Затем определите, какие роли (разрешения) приложению требуются для каких ресурсов, и назначьте эти роли созданному субъекту-службе. Роли можно назначать на уровне ресурса, группы ресурсов или подписки. В этом примере показано, как назначать роли в области группы ресурсов, так как большинство приложений группируют все свои Azure ресурсы в единую группу ресурсов.

  1. На портале Azure перейдите на страницу Overview группы ресурсов, содержащей приложение.

  2. Выберите управление доступом (IAM) в левой панели навигации.

  3. На странице управления доступом (IAM) выберите +Добавить , а затем выберите "Добавить назначение ролей " в раскрывающемся меню. Страница "Добавление назначения ролей " предоставляет несколько вкладок для настройки и назначения ролей.

  4. На вкладке "Роль" используйте поле поиска, чтобы найти роль, которую вы хотите назначить. Выберите роль и нажмите кнопку "Далее".

  5. На вкладке "Члены" :

    • Чтобы назначить доступ к значению , выберите "Пользователь", "Группа" или "Субъект-служба ".
    • Для значения "Члены" нажмите кнопку "Выбрать участников ", чтобы открыть панель всплывающего меню "Выбор участников ".
    • Найдите служебный принципал, созданный ранее, и выберите его из отфильтрованных результатов. Выберите команду "Выбрать ", чтобы выбрать группу и закрыть панель всплывающего меню.
    • Выберите Обзор + Назначение внизу вкладки Члены.

    Скриншот, показывающий назначение роли служебному принципалу.

  6. На вкладке "Обзор и назначение" выберите "Обзор и назначение" в нижней части страницы.


Установите переменные среды приложения

Во время выполнения определенные учетные данные из библиотеки удостоверений Azure Identity, такие как DefaultAzureCredential, EnvironmentCredential, и ClientSecretCredential, выполняют поиск информации о служебном объекте в переменных среды в соответствии с соглашением. Существует несколько способов настройки переменных среды при работе с Python в зависимости от инструментов и среды.

Независимо от выбранного подхода настройте следующие переменные среды для субъекта-службы:

  • AZURE_CLIENT_ID: используется для идентификации зарегистрированного приложения в Azure.
  • AZURE_TENANT_ID: идентификатор клиента Microsoft Entra.
  • AZURE_CLIENT_SECRET: секретные учетные данные, созданные для приложения.

В Visual Studio Code переменные среды можно задать в файле launch.json, расположенном в папке .vscode проекта. Эти значения автоматически извлекаются при запуске приложения. Однако эти конфигурации не перемещаются вместе с приложением во время развертывания, поэтому необходимо настроить переменные среды в целевой среде размещения.

{
    "configurations": [
        {
            "env": {
                "AZURE_CLIENT_ID": "<your-client-id>",
                "AZURE_TENANT_ID": "<your-tenant-id>",
                "AZURE_CLIENT_SECRET": "<your-client-secret>"
            }
        }
    ]
}

Аутентификация для подключения к службам Azure из вашего приложения

Библиотека azure-identity предоставляет различные credentials — реализации TokenCredential адаптированы для поддержки различных сценариев и потоков проверки подлинности Microsoft Entra. В следующих шагах показано, как использовать ClientSecretCredential при работе со служебными учётными записями локально и в рабочей среде.

Реализация кода

Начните с добавления пакета в приложение.

pip install azure-identity

Затем для любого кода Python, создающего в приложении Azure SDK клиентский объект, необходимо:

  1. ClientSecretCredential Импортируйте класс из azure.identity модуля.
  2. os Импортируйте модуль для чтения переменных среды.
  3. Считывайте переменные среды, чтобы получить идентификатор клиента, идентификатор арендатора и секрет клиента.
  4. Создайте объект ClientSecretCredential, передав идентификатор арендатора, идентификатор клиента и секрет клиента.
  5. Передайте объект ClientSecretCredential конструктору клиентских объектов Azure SDK.

Пример этого подхода показан в следующем сегменте кода.

import os
from azure.identity import ClientSecretCredential
from azure.storage.blob import BlobServiceClient

tenant_id = os.environ.get("AZURE_TENANT_ID")
client_id = os.environ.get("AZURE_CLIENT_ID")
client_secret = os.environ.get("AZURE_CLIENT_SECRET")

credential = ClientSecretCredential(tenant_id, client_id, client_secret)

blob_service_client = BlobServiceClient(
    account_url="https://<my_account_name>.blob.core.windows.net",
    credential=credential)