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

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

В этой статье объясняется, как использовать учетную запись службы приложения. Дополнительные сведения об объектах приложений и службы можно найти в разделе Объекты приложений и субъекты службы в Microsoft Entra ID. В этой статье рассматриваются следующие вопросы:

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

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

Схема, показывающая, как локальное приложение Java использует учетную запись службы для подключения к ресурсам Azure.

При регистрации приложения в Azure создается основной объект службы приложения. Для локальной разработки необходимо:

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

Во время локальной разработки задайте переменные среды с идентификатором служебного принципала приложения. Библиотека Azure Identity считывает эти переменные среды для проверки подлинности приложения в необходимых ресурсах Azure.

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

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

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

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

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

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

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

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

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

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

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

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

    Замечание

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

Создание группы Microsoft Entra для локальной разработки

Создайте группу Microsoft Entra, чтобы инкапсулировать роли (разрешения) в локальной разработке, а не назначать роли отдельным объектам субъекта-службы. Этот подход обеспечивает следующие преимущества:

  • Каждый разработчик имеет одинаковые роли, назначенные на уровне группы.
  • Если для приложения требуется новая роль, ее необходимо только добавить в группу для приложения.
  • Если новый разработчик присоединяется к команде, для разработчика создается новая учетная запись службы приложений и добавляется в группу, гарантируя, что разработчик имеет необходимые разрешения на работу с приложением.
  1. Перейдите на страницу обзора Microsoft Entra ID на портале Azure.

  2. Выберите все группы в меню слева.

  3. На странице Группы выберите Создать группу.

  4. На странице "Создать группу" заполните следующие поля формы:

    • Тип группы: выберите Безопасность.
    • Имя группы: введите имя группы, которая содержит ссылку на имя приложения или среды.
    • Описание группы: введите описание, объясняющее назначение группы.

    Снимок экрана, показывающий, как создать группу на портале Azure.

  5. Выберите ссылку "Нет участников" в разделе "Участники", чтобы добавить участников в группу.

  6. На открывшейся всплывающей панели найдите созданную ранее основную служебную учетную запись и выберите её из результатов фильтрации. Нажмите кнопку "Выбрать " в нижней части панели, чтобы подтвердить выбор.

  7. Нажмите кнопку "Создать " в нижней части страницы "Создать группу ", чтобы создать группу и вернуться на страницу "Все группы ". Если вы не видите новую группу, подождите минуту и обновите страницу.

Назначьте роли группе

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

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

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

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

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

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

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

    Снимок экрана, показывающий как назначить роль группе Microsoft Entra.

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

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

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

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

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

Добавьте следующие строки в файл ~/.bashrc или ~/.zshrc. Замените значения заполнителей фактическими значениями из регистрации приложения:

export AZURE_CLIENT_ID="<your-client-id>"
export AZURE_TENANT_ID="<your-tenant-id>"
export AZURE_CLIENT_SECRET="<your-client-secret>"

После редактирования файла выполните source ~/.bashrc или source ~/.zshrc, чтобы применить изменения к текущему сеансу.

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

Библиотека Azure Identity предоставляет различные учетные данные — реализации TokenCredential для поддержки различных сценариев и потоков аутентификации Microsoft Entra. Ниже показано, как использовать ClientSecretCredential при работе с субъектами-службами локально и в рабочей среде.

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

Добавьте зависимость azure-identity в ваш pom.xml файл:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
</dependency>

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

  1. ClientSecretCredentialBuilder Импортируйте класс из com.azure.identity пакета.
  2. Создайте объект с помощью ClientSecretCredentialBuilder, используя tenantId, clientId и clientSecret.
  3. Передайте экземпляр ClientSecretCredential в метод credential объекта-создателя клиента Azure SDK.

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

import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.azure.storage.blob.BlobServiceClient;
import com.azure.storage.blob.BlobServiceClientBuilder;

String tenantId = System.getenv("AZURE_TENANT_ID");
String clientId = System.getenv("AZURE_CLIENT_ID");
String clientSecret = System.getenv("AZURE_CLIENT_SECRET");

ClientSecretCredential credential = new ClientSecretCredentialBuilder()
    .tenantId(tenantId)
    .clientId(clientId)
    .clientSecret(clientSecret)
    .build();

BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
    .endpoint("https://<account-name>.blob.core.windows.net")
    .credential(credential)
    .buildClient();

Дальнейшие действия

В этой статье рассматривается проверка подлинности с помощью принципала службы. Эта форма проверки подлинности является одним из многих способов проверки подлинности в Azure SDK для Java. В следующих статьях описаны другие способы проверки подлинности:

Если возникают проблемы, связанные с проверкой подлинности субъекта-службы, см. статью "Устранение неполадок с проверкой подлинности субъекта-службы".

После освоения аутентификации ознакомьтесь со статьей Настройка ведения журнала в Azure SDK для Java, чтобы получить информацию о предоставляемой SDK функциональности ведения журнала.