Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Во время локальной разработки приложениям необходимо пройти аутентификацию для доступа к различным службам Azure. В этой статье объясняется, как использовать служебный принципал приложения как один из двух распространённых методов локальной проверки подлинности.
- Процесс регистрации приложения в Microsoft Entra для создания сервисного принципала
- Использование групп Microsoft Entra для эффективного управления разрешениями
- Назначение ролей для разрешений области действия.
- Аутентификация с помощью учетной записи службы из кода приложения
Использование выделенных субъектов-служб приложений позволяет придерживаться принципа наименьших привилегий при доступе к ресурсам Azure. Разрешения ограничены определенными требованиями приложения во время разработки, предотвращая случайный доступ к ресурсам Azure, предназначенным для других приложений или служб. Этот подход также помогает избежать проблем при перемещении приложения в рабочую среду, гарантируя, что оно не имеет избыточных привилегий в среде разработки.
схема, показывающая, как приложение, работающее в локальной среде разработчика, получает принципал службы приложения из .env-файла, а затем использует это удостоверение для подключения к ресурсам Azure.
При регистрации приложения в Azure создается основной объект службы для приложения. Для локальной разработки:
- Создайте отдельную регистрацию приложения для каждого разработчика, работающего над приложением, чтобы гарантировать, что у каждого разработчика есть собственный служебный объект приложения, и избежать необходимости делиться учетными данными.
- Создайте отдельную регистрацию приложения для каждого приложения, чтобы ограничить разрешения приложения только тем, что необходимо.
Во время локальной разработки переменные среды устанавливаются с использованием идентификатора сервисного принципала приложения. Библиотека Azure Identity считывает эти переменные среды для проверки подлинности приложения в необходимых ресурсах Azure.
Регистрация приложения в Azure
Объекты основного сервиса приложения создаются посредством регистрации приложения в Azure через портал Azure или Azure CLI.
На портале Azure используйте строку поиска, чтобы перейти на страницу App registrations.
На странице App registrations выберите + Новая регистрация.
На странице Зарегистрировать приложение:
- В поле Имя введите описательное значение, включающее имя приложения и целевую среду.
- Для поддерживаемых типов учетных записейвыберите учетные записи только в этом каталоге организации (только клиент Майкрософт — один клиент)или любой вариант, который лучше всего соответствует вашим требованиям.
Выберите Регистрация, чтобы зарегистрировать приложение и создать служебный принципал.
На странице регистрации приложений скопируйте идентификатор приложения (клиента) и идентификатор каталога (клиента) и вставьте их во временное расположение для последующего использования в конфигурациях кода приложения.
Выберите Добавить сертификат или секрет, чтобы установить учетные данные для приложения.
На странице "Сертификаты и секреты" выберите "+ Новый секрет клиента".
На панели, открывающейся для добавления секрета клиента, выполните следующие действия:
- Для описаниявведите значение Current.
- Для значения «срок действия», оставьте рекомендуемое значение по умолчанию — 180 дней.
- Нажмите кнопку "Добавить ", чтобы добавить секрет.
На странице сертификатов & секретов скопируйте свойство значения секрета клиента для использования в следующем шаге.
Примечание.
Значение секрета клиента отображается только один раз после создания регистрации приложения. Вы можете добавить дополнительные секреты клиента, не отменив этот секрет клиента, но невозможно снова отобразить это значение.
Создание группы Microsoft Entra для локальной разработки
Создайте группу Microsoft Entra, чтобы инкапсулировать роли (разрешения) в локальной разработке, а не назначать роли отдельным объектам субъекта-службы. Этот подход обеспечивает следующие преимущества:
- Каждый разработчик имеет одинаковые роли, назначенные на уровне группы.
- Если для приложения требуется новая роль, ее необходимо только добавить в группу для приложения.
- Если новый разработчик присоединяется к команде, для разработчика создается новая учетная запись службы приложений и добавляется в группу, гарантируя, что разработчик имеет необходимые разрешения на работу с приложением.
Перейдите на страницу обзора Microsoft Entra ID на портале Azure.
Выберите все группы в меню слева.
На странице Группы выберите Создать группу.
На странице "Создать группу" заполните следующие поля формы:
- Тип группы: выберите Безопасность.
- Имя группы: введите имя группы, которая содержит ссылку на имя приложения или среды.
- Описание группы: введите описание, объясняющее назначение группы.
Выберите ссылку "Нет участников" в разделе "Участники", чтобы добавить участников в группу.
На открывшейся всплывающей панели найдите созданную ранее основную служебную учетную запись и выберите её из результатов фильтрации. Нажмите кнопку "Выбрать " в нижней части панели, чтобы подтвердить выбор.
Нажмите кнопку "Создать " в нижней части страницы "Создать группу ", чтобы создать группу и вернуться на страницу "Все группы ". Если вы не видите новую группу, подождите минуту и обновите страницу.
Назначьте роли группе
Затем определите, какие роли (разрешения) приложению требуются для каких ресурсов, и назначьте эти роли созданной группе Microsoft Entra. Группы можно назначить роль в ресурсе, группе ресурсов или области подписки. В этом примере показано, как назначать роли в области группы ресурсов, так как большинство приложений группируют все свои Azure ресурсы в единую группу ресурсов.
На портале Azure перейдите на страницу Overview группы ресурсов, содержащей приложение.
Выберите управление доступом (IAM) в левой панели навигации.
На странице управления доступом (IAM) выберите +Добавить , а затем выберите "Добавить назначение ролей " в раскрывающемся меню. Страница "Добавление назначения ролей " предоставляет несколько вкладок для настройки и назначения ролей.
На вкладке "Роль" используйте поле поиска, чтобы найти роль, которую вы хотите назначить. Выберите роль и нажмите кнопку "Далее".
На вкладке "Члены" :
- Чтобы назначить доступ к значению , выберите "Пользователь", "Группа" или "Субъект-служба ".
- Для значения "Члены" нажмите кнопку "Выбрать участников ", чтобы открыть панель всплывающего меню "Выбор участников ".
- Найдите созданную ранее группу Microsoft Entra и выберите ее из отфильтрованных результатов. Выберите команду "Выбрать ", чтобы выбрать группу и закрыть панель всплывающего меню.
- Выберите Обзор + Назначение внизу вкладки Члены.
Снимок экрана, показывающий как назначить роль группе Microsoft Entra. На вкладке "Обзор и назначение" выберите "Обзор и назначение" в нижней части страницы.
Установите переменные среды приложения
Во время выполнения определенные учетные данные из библиотеки удостоверений Azure Identity, такие как DefaultAzureCredential, EnvironmentCredential, и ClientSecretCredential, выполняют поиск информации о служебном объекте в переменных среды в соответствии с соглашением. Существует несколько способов настройки переменных среды при работе с Python в зависимости от инструментов и среды.
Независимо от выбранного подхода настройте следующие переменные среды для субъекта-службы:
-
AZURE_CLIENT_ID: Идентификатор зарегистрированного приложения в Azure. -
AZURE_TENANT_ID: идентификатор клиента Microsoft Entra. -
AZURE_CLIENT_SECRET: учетные данные секрета клиента для приложения.
Так как большинство разработчиков работают над несколькими приложениями, рекомендуется использовать пакет, например python-dotenv , для доступа к переменным среды из .env файла, хранящегося в каталоге приложения во время разработки. Этот подход ограничивает переменные среды, чтобы использовать их только это приложение.
Файл .env никогда не проверяется в системе управления версиями, так как он содержит секретный ключ приложения для Azure. Стандартный файл .gitignore для Python автоматически исключает файл .env из входа.
Чтобы использовать python-dotenv пакет, сначала установите пакет в приложении:
pip install python-dotenv
Затем создайте файл .env в корневом каталоге приложения. Задайте значения переменной среды со значениями, полученными из процесса регистрации приложения:
AZURE_CLIENT_ID=<your-client-id>
AZURE_TENANT_ID=<your-tenant-id>
AZURE_CLIENT_SECRET=<your-client-secret>
Наконец, в коде запуска приложения используйте python-dotenv библиотеку для чтения переменных среды из .env файла при запуске:
from dotenv import load_dotenv
load_dotenv()
Аутентификация для подключения к службам Azure из вашего приложения
Библиотека azure-identity предоставляет различные credentials — реализации TokenCredential адаптированы для поддержки различных сценариев и потоков проверки подлинности Microsoft Entra. В следующих шагах показано, как использовать ClientSecretCredential при работе со служебными учётными записями локально и в рабочей среде.
Реализация кода
Начните с добавления пакета в приложение.
pip install azure-identity
Затем для любого кода Python, создающего в приложении Azure SDK клиентский объект, необходимо:
-
ClientSecretCredentialИмпортируйте класс изazure.identityмодуля. -
osИмпортируйте модуль для чтения переменных среды. - Считывайте переменные среды, чтобы получить идентификатор клиента, идентификатор арендатора и секрет клиента.
- Создайте объект
ClientSecretCredential, передав идентификатор арендатора, идентификатор клиента и секрет клиента. - Передайте объект
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)