Проверка подлинности в ресурсах Azure из локальных приложений JavaScript
Статья
Приложения, работающие за пределами Azure (например, локально или в стороннем центре обработки данных), должны использовать субъект-службу приложений для проверки подлинности в Azure при доступе к ресурсам Azure. Объекты субъекта-службы приложений создаются с помощью процесса регистрации приложений в Azure. При создании субъекта-службы приложения для приложения создается идентификатор клиента и секрет клиента. Идентификатор клиента, секрет клиента и идентификатор клиента хранятся в переменных среды, чтобы пакет SDK Azure для JavaScript использовал переменные среды для проверки подлинности приложения в Azure во время выполнения.
Для каждой среды необходимо создать другую регистрацию приложения (например, тестовую, стадию, рабочую среду), в которой выполняется приложение. Это позволяет настроить разрешения ресурсов конкретной среды для каждого субъекта-службы и убедиться, что приложение, развернутое в одной среде, не разговаривает с ресурсами Azure, которые являются частью другой среды.
1. Регистрация приложения в Azure
Приложение можно зарегистрировать в Azure с помощью портал Azure или Azure CLI.
Введите регистрации приложений в строке поиска в верхней части портал Azure.
Выберите элемент, помеченный Регистрация приложений под заголовком "Службы" в меню, которое отображается под строкой поиска.
На странице Регистрация приложений нажмите кнопку +Создать регистрацию.
На странице регистрации приложения заполните форму следующим образом.
Имя → Введите имя регистрации приложения в Azure. Это имя рекомендуется включить имя приложения и среду (test, prod), для которой выполняется регистрация приложения.
Поддерживаемые типы учетных записей → учетные записи только в этом каталоге организации.
Выберите "Зарегистрировать", чтобы зарегистрировать приложение и создать субъект-службу приложений.
На странице регистрации приложения:
Идентификатор приложения (клиента) → Это идентификатор приложения, который приложение будет использовать для доступа к Azure во время локальной разработки. Скопируйте это значение во временное расположение в текстовом редакторе, так как он понадобится в следующем шаге.
Идентификатор каталога (клиента) → Это значение также потребуется приложению при проверке подлинности в Azure. Скопируйте это значение во временное расположение в текстовом редакторе, оно также потребуется на следующем шаге.
Учетные данные клиента → Необходимо задать учетные данные клиента для приложения, прежде чем приложение сможет пройти проверку подлинности в Azure и использовать службы Azure. Выберите " Добавить сертификат или секрет ", чтобы добавить учетные данные для приложения.
На странице "Сертификаты и секреты" выберите +Создать секрет клиента.
Диалоговое окно "Добавление секрета клиента" появится в правой части страницы. В этом диалоговом окне:
Описание → Введите значение Current.
Истекает срок действия → Выберите значение 24 месяцев.
Нажмите кнопку "Добавить ", чтобы добавить секрет.
ВАЖНО. Задайте напоминание в календаре до даты окончания срока действия секрета. Таким образом, вы можете добавить новый секрет до истечения срока действия этого секрета и избежать прерывания работы службы в приложении.
На странице "Сертификаты и секреты" отображается значение секрета клиента.
Скопируйте это значение во временное расположение в текстовом редакторе, так как он необходим в следующем шаге.
ВАЖНО. Это единственный раз, когда вы увидите это значение. После выхода или обновления этой страницы вы не сможете снова увидеть это значение. Вы можете добавить еще один секрет клиента, не отменив этот секрет клиента, но вы не увидите это значение снова.
az ad sp create-for-rbac --name <app-name>
Выходные данные команды будут похожи на следующие. Запишите эти значения или оставьте это окно открытым, так как вам потребуется эти значения на следующем шаге и не сможет снова просмотреть значение пароля (секрет клиента).
Затем необходимо определить, какие роли (разрешения) приложения требуются для ресурсов и назначить эти роли приложению. Роли можно назначить роль в ресурсе, группе ресурсов или области подписки. В этом примере показано, как назначать роли для субъекта-службы в области группы ресурсов, так как большинство приложений группируют все ресурсы Azure в одну группу ресурсов.
Найдите группу ресурсов для приложения, найдите имя группы ресурсов с помощью поля поиска в верхней части портал Azure.
Перейдите к группе ресурсов, выбрав имя группы ресурсов в заголовке "Группы ресурсов" в диалоговом окне.
На странице группы ресурсов выберите элемент управления доступом (IAM) в меню слева.
На странице управления доступом (IAM):
Выберите вкладку Назначения ролей.
Выберите + Добавить в верхнем меню, а затем выберите Добавить назначение роли в появившемся раскрывающемся меню.
На странице "Добавление назначения ролей" перечислены все роли, которые можно назначить для группы ресурсов.
Используйте поле поиска, чтобы отфильтровать список до более управляемого размера. В этом примере показано, как фильтровать роли BLOB-объектов хранилища.
Выберите роль, которую вы хотите назначить.
Нажмите кнопку "Далее ", чтобы перейти к следующему экрану.
На следующей странице "Добавление назначения ролей" можно указать, какой пользователь назначит роль.
Выберите "Пользователь", "Группа" или "Субъект-служба" в разделе "Назначение доступа".
Выбор и выбор элементов в разделе "Элементы"
Откроется диалоговое окно справа от портал Azure.
В диалоговом окне выбора элементов:
Текстовое поле Select можно использовать для фильтрации списка пользователей и групп в подписке. При необходимости введите первые несколько символов субъекта-службы, созданного для приложения, чтобы отфильтровать список.
Выберите субъект-службу, связанный с приложением.
Выберите в нижней части диалогового окна, чтобы продолжить.
Субъект-служба отображается на экране добавления назначения ролей.
Выберите "Рецензирование" и " Назначить" , чтобы перейти на окончательную страницу, а затем проверить и назначить еще раз, чтобы завершить процесс.
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Например, чтобы разрешить субъекту-службе читать, записывать и удалять доступ к служба хранилища Azure контейнерам BLOB-объектов и данным для всех учетных записей хранения в группе ресурсов msdocs-sdk-sdk-auth,вы назначите субъект-службу приложения роли участника данных BLOB-объектов хранилища, выполнив следующую команду.
az role assignment create --assignee "aaaaaaaa-bbbb-cccc-7777-888888888888" \
--role "Storage Blob Data Contributor" \
--scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-javascript-sdk-auth-example \
Необходимо задать AZURE_CLIENT_IDAZURE_TENANT_IDпеременные среды и AZURE_CLIENT_SECRET переменные среды для процесса, запускающего приложение JavaScript, чтобы сделать учетные данные субъекта-службы приложения доступными для приложения во время выполнения. Объект DefaultAzureCredential ищет сведения субъекта-службы в этих переменных среды.
Для проверки подлинности клиентских объектов Пакета SDK Azure в Azure приложение должно использовать DefaultAzureCredential класс из пакета @azure/identity .
Затем для любого кода JavaScript, создающего клиентский объект Пакета SDK Azure в приложении, вам потребуется:
DefaultAzureCredential Импортируйте класс из @azure/identity модуля.
Создание объекта DefaultAzureCredential.
Передайте объект конструктору DefaultAzureCredential клиентского объекта пакета SDK Azure.
Пример этого показан в следующем сегменте кода.
// connect-with-default-azure-credential.js
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
import 'dotenv/config'
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error('Azure Storage accountName not found');
const blobServiceClient = new BlobServiceClient(
`https://${accountName}.blob.core.windows.net`,
new DefaultAzureCredential()
);
Когда приведенный выше код создает экземпляр DefaultAzureCredential объекта, DefaultAzureCredential считывает переменные AZURE_SUBSCRIPTION_IDсреды , AZURE_TENANT_IDAZURE_CLIENT_IDи AZURE_CLIENT_SECRET сведения субъекта-службы приложения для подключения к Azure.