Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Во время локальной разработки приложения должны пройти проверку подлинности в Azure для доступа к различным службам Azure. Два распространённых подхода к локальной проверке подлинности — использовать учётную запись разработчика или служебную учётную запись. В этой статье объясняется, как использовать учетную запись службы приложения. В следующих разделах вы узнаете:
- Регистрация приложения в Microsoft Entra для создания субъекта-службы
- Использование групп Microsoft Entra для эффективного управления разрешениями
- Назначение ролей для разрешений области действия.
- Аутентификация с помощью учетной записи службы из кода приложения
Использование выделенных субъектов-служб приложений позволяет придерживаться принципа наименьших привилегий при доступе к ресурсам Azure. Разрешения ограничены определенными требованиями приложения во время разработки, предотвращая случайный доступ к ресурсам Azure, предназначенным для других приложений или служб. Этот подход также помогает избежать проблем при перемещении приложения в рабочую среду, гарантируя, что оно не имеет избыточных привилегий в среде разработки.
При регистрации приложения в Azure создается основной объект службы приложения. Для локальной разработки:
- Создайте отдельную регистрацию приложения для каждого разработчика, работающего над приложением, чтобы гарантировать, что у каждого разработчика есть собственный служебный объект приложения, и избежать необходимости делиться учетными данными.
- Создайте отдельную регистрацию приложения для каждого приложения, чтобы ограничить разрешения приложения только тем, что необходимо.
Во время локальной разработки переменные среды задаются с удостоверением служебного принципала приложения. Библиотека удостоверений Azure считывает эти переменные среды для аутентификации приложения к необходимым ресурсам Azure.
Регистрация приложения в Azure
Объекты службы приложений создаются посредством регистрации приложений в Azure с использованием портала Azure или интерфейса командной строки Azure (Azure CLI).
На портале Azure перейдите на страницу регистрации приложений с помощью панели поиска.
На странице регистрации приложений выберите + Создать регистрацию.
На странице Зарегистрировать приложение:
- В поле Имя введите описательное значение, включающее имя приложения и целевую среду.
- Для поддерживаемых типов учетных записейвыберите учетные записи только в этом каталоге организации (только клиент Майкрософт — один клиент)или любой вариант, который лучше всего соответствует вашим требованиям.
Выберите Регистрация, чтобы зарегистрировать приложение и создать служебный принципал.
На странице регистрации приложений скопируйте идентификатор приложения (клиента) и идентификатор каталога (клиента) и вставьте их во временное расположение для последующего использования в конфигурациях кода приложения.
Выберите Добавить сертификат или секрет, чтобы установить учетные данные для приложения.
На странице "Сертификаты и секреты" выберите "+ Новый секрет клиента".
На панели, открывающейся для добавления секрета клиента, выполните следующие действия:
- Для описаниявведите значение Current.
- Для значения «срок действия», оставьте рекомендуемое значение по умолчанию — 180 дней.
- Выберите Добавить, чтобы добавить секрет.
На странице сертификатов & секретов скопируйте свойство значения секрета клиента для использования в следующем шаге.
Заметка
Значение секрета клиента отображается только один раз после создания регистрации приложения. Вы можете добавить дополнительные секреты клиента, не отменив этот секрет клиента, но невозможно снова отобразить это значение.
Создание группы Microsoft Entra для локальной разработки
Создайте группу Microsoft Entra, чтобы объединять роли (разрешения), необходимые приложению при локальной разработке, а не назначать роли отдельным объектам службы-принципала. Этот подход обеспечивает следующие преимущества:
- Каждый разработчик имеет одинаковые роли, назначенные на уровне группы.
- Если для приложения требуется новая роль, ее необходимо только добавить в группу для приложения.
- Если новый разработчик присоединяется к команде, для разработчика создается новая учетная запись службы приложений и добавляется в группу, гарантируя, что разработчик имеет необходимые разрешения на работу с приложением.
Перейдите на страницу обзора идентификатора Microsoft Entra на портале Azure.
Выберите все группы в меню слева.
На странице Группы выберите Создать группу.
На странице "Создать группу" заполните следующие поля формы:
- Тип группы: Выберите безопасность .
- Имя группы: введите имя группы, которая содержит ссылку на имя приложения или среды.
- Описание группы: введите описание, объясняющее назначение группы.
Выберите ссылку "Нет участников" в разделе "Члены", чтобы добавить участников в группу.
На открывшейся всплывающей панели найдите созданную ранее основную служебную учетную запись и выберите её из результатов фильтрации. Нажмите кнопку "Выбрать " в нижней части панели, чтобы подтвердить выбор.
Нажмите кнопку "Создать " в нижней части страницы "Создать группу ", чтобы создать группу и вернуться на страницу "Все группы ". Если вы не видите новую группу, подождите минуту и обновите страницу.
Назначьте роли группе
Затем определите, какие роли (разрешения) приложения требуются для ресурсов и назначьте эти роли созданной группе Microsoft Entra. Группы можно назначить роль в ресурсе, группе ресурсов или области подписки. В этом примере показано, как назначать роли в области группы ресурсов, так как большинство приложений группируют все свои ресурсы Azure в одну группу ресурсов.
На портале Azure перейдите на страницу обзора группы ресурсов, содержащей приложение.
Выберите управление доступом (IAM) в левой панели навигации.
На странице управления доступом (IAM) выберите +Добавить , а затем выберите "Добавить назначение ролей " в раскрывающемся меню. Страница "Добавление назначения ролей " предоставляет несколько вкладок для настройки и назначения ролей.
На вкладке "Роль" используйте поле поиска, чтобы найти роль, которую вы хотите назначить. Выберите роль и нажмите кнопку "Далее".
На вкладке "Члены" :
- Чтобы назначить доступ к значению , выберите "Пользователь", "Группа" или "Субъект-служба ".
- Для значения "Члены" нажмите кнопку "Выбрать участников ", чтобы открыть панель всплывающего меню "Выбор участников ".
- Найдите созданную ранее группу Microsoft Entra и выберите ее из отфильтрованных результатов. Выберите команду "Выбрать ", чтобы выбрать группу и закрыть панель всплывающего меню.
- Выберите Обзор + Назначение внизу вкладки Члены.
На вкладке "Обзор и назначение" выберите "Обзор и назначение" в нижней части страницы.
Установите переменные среды приложения
Объект DefaultAzureCredential будет искать сведения субъекта-службы в наборе переменных среды во время выполнения. Так как большинство разработчиков работают над несколькими приложениями, рекомендуется использовать пакет, например godotenv для доступа к среде из .env файла, хранящегося в каталоге приложения во время разработки. Это определяет переменные среды, используемые для проверки подлинности приложения в Azure, таким образом, что они могут использоваться только этим приложением.
Файл .env никогда не проверяется в системе управления версиями, так как он содержит секретный ключ приложения для Azure. Стандартный файл .gitignore для Go автоматически исключает файл .env из регистрации.
Чтобы использовать пакет godotenv, сначала установите пакет в приложении.
go get github.com/joho/godotenv
Затем создайте файл .env в корневом каталоге приложения. Задайте значения переменной среды со значениями, полученными из процесса регистрации приложения следующим образом:
-
AZURE_CLIENT_ID→ значение идентификатора приложения. -
AZURE_TENANT_ID→ Значение идентификатора клиента. -
AZURE_CLIENT_SECRET→ пароль или учетные данные, созданные для приложения.
AZURE_CLIENT_ID=00001111-aaaa-2222-bbbb-3333cccc4444
AZURE_TENANT_ID=aaaabbbb-0000-cccc-1111-dddd2222eeee
AZURE_CLIENT_SECRET=Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6
Наконец, в коде запуска приложения используйте библиотеку godotenv для чтения переменных среды из файла .env при запуске.
// Imports of fmt, log, and os omitted for brevity
import "github.com/joho/godotenv"
environment := os.Getenv("ENVIRONMENT")
if environment == "development" {
fmt.Println("Loading environment variables from .env file")
// Load the .env file
err := godotenv.Load(".env")
if err != nil {
log.Fatalf("Error loading .env file: %v", err)
}
}
Реализация DefaultAzureCredential в приложении
Для проверки подлинности клиентских объектов Пакета SDK Azure в Azure приложение должно использовать класс DefaultAzureCredential из пакета azidentity. В этом сценарии DefaultAzureCredential обнаружит, что переменные среды AZURE_CLIENT_ID, AZURE_TENANT_IDи AZURE_CLIENT_SECRET заданы, и считает эти переменные, чтобы получить учетные данные для подключения к Azure.
Сначала добавьте пакет azidentity в приложение.
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Затем для любого кода Go, создающего клиентский объект Azure SDK в приложении, необходимо выполнить следующие действия.
- Импортируйте пакет
azidentity. - Создайте экземпляр типа
DefaultAzureCredential. - Передайте экземпляр типа
DefaultAzureCredentialконструктору клиента Azure SDK.
Пример этого показан в следующем сегменте кода.
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
const (
account = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
containerName = "sample-container"
blobName = "sample-blob"
sampleFile = "path/to/sample/file"
)
func main() {
// create a credential
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// TODO: handle error
}
// create a client for the specified storage account
client, err := azblob.NewClient(account, cred, nil)
if err != nil {
// TODO: handle error
}
// TODO: perform some action with the azblob Client
// _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}