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


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

Рекомендуемый подход к проверке подлинности Azure приложения для доступа к другим ресурсам Azure — использовать управляемое удостоверение. Этот подход поддерживается для большинства служб Azure, включая приложения, размещенные на Azure App Service, Azure Container Apps и Azure Virtual Machines. Узнайте больше о различных методах проверки подлинности и подходах на странице обзора проверки подлинности . В следующих разделах вы узнаете:

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

Основные понятия управляемого удостоверения

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

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

  • System-assigned удостоверения, управляемые системой, активируются непосредственно на ресурсе Azure и связаны с его жизненным циклом. Когда ресурс удаляется, Azure автоматически удаляет удостоверение для вас. Назначаемые системой удостоверения обеспечивают минимальный подход к использованию управляемых удостоверений.
  • назначаемые пользователем управляемые удостоверения создаются как автономные ресурсы Azure и обеспечивают большую гибкость и возможности. Они идеально подходят для решений с несколькими Azure ресурсами, которые должны совместно использовать одинаковые удостоверения и разрешения. Например, если нескольким виртуальным машинам требуется доступ к одному набору ресурсов Azure, управляемое удостоверение, назначаемое пользователем, обеспечивает повторное использование и оптимизированное управление.

Подсказка

Узнайте больше о выборе и управлении управляемыми удостоверениями, назначаемыми системой и пользователем, в статье рекомендации по лучшим практикам работы с управляемыми удостоверениями.

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

Создание управляемой идентичности, назначаемой пользователем

Управляемые удостоверения, назначаемые пользователем, создаются как автономные ресурсы в вашей подписке Azure с использованием портала Azure или Azure CLI. команды Azure CLI можно выполнять в Azure Cloud Shell или на рабочей станции с установленным Azure CLI.

  1. На портале Azure введите Управляемые идентификаторы в главную строку поиска и выберите соответствующий результат в разделе Службы.

  2. На странице Managed Identities выберите +Создать.

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

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

  4. Выберите "Проверка и создание ", чтобы просмотреть и проверить входные данные.

    Снимок экрана: форма для создания управляемого удостоверения, назначаемого пользователем.

  5. Выберите "Создать", чтобы создать управляемое удостоверение, назначаемое пользователем.

  6. После создания удостоверения выберите Перейти к ресурсу.

  7. На странице обзора нового удостоверения скопируйте значение идентификатора клиента , которое будет использоваться позже при настройке кода приложения.

Назначьте управляемое удостоверение вашему приложению

Управляемое удостоверение, назначаемое пользователем, может быть связано с одним или несколькими ресурсами Azure. Все ресурсы, использующие это удостоверение, получают разрешения, применяемые с помощью ролей удостоверения.

  1. На портале Azure перейдите к ресурсу, в котором размещен код вашего приложения, например, Azure App Service или инстанция Azure Container Apps.

  2. На странице Обзор ресурса разверните Параметры и выберите Удостоверение в области навигации.

  3. На странице «Удостоверение» перейдите на вкладку «Назначенные пользователем».

  4. Нажмите кнопку +Добавить , чтобы открыть панель "Добавить назначаемое пользователем управляемое удостоверение ".

  5. На панели Добавление управляемой идентификации, назначенной пользователем используйте раскрывающийся список Подписка, чтобы отфильтровать результаты поиска по удостоверениям. Используйте поле поиска пользовательские назначенные управляемые удостоверения для поиска управляемого удостоверения, назначаемого пользователем, для ресурса Azure, размещающего ваше приложение.

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

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

Назначьте роли управляемому удостоверению

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

  • Ресурс: назначенные роли применяются только к конкретному ресурсу.
  • Группа ресурсов: назначенные роли применяются ко всем ресурсам, содержащимся в группе ресурсов.
  • Подписка: назначенные роли применяются ко всем ресурсам, содержащимся в подписке.

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

  1. Перейдите на страницу обзора группы ресурсов, содержащей приложение с управляемым удостоверением, назначаемое пользователем.

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

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

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

  4. Страница «Добавление назначения ролей» предлагает пошаговый рабочий процесс с вкладками для назначения ролей идентификациям. На первой вкладке Роль используйте поле поиска вверху, чтобы найти роль, которую вы хотите назначить идентификатору.

  5. Выберите роль из результатов и нажмите кнопку "Далее ", чтобы перейти на вкладку "Члены ".

  6. Для параметра "Назначить доступ к" выберите "Управляемое удостоверение".

  7. Для параметра Участники выберите Выбрать участников, чтобы открыть панель Выбор управляемых удостоверений.

  8. На панели "Выбор управляемых удостоверений" используйте раскрывающиеся списки "Подписка" и "Управляемое удостоверение", чтобы отфильтровать результаты поиска для удостоверений. Используйте поле поиска Select, чтобы найти управляемое удостоверение с пользовательским назначением, которое вы включили для ресурса Azure, где размещено ваше приложение.

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

  9. Выберите удостоверение и нажмите кнопку "Выбрать " в нижней части панели, чтобы продолжить.

  10. Выберите "Рецензирование" и "Назначить" в нижней части страницы.

  11. На последней вкладке "Рецензирование и назначение" нажмите кнопку "Рецензирование" и "Назначить ", чтобы завершить рабочий процесс.

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

Библиотека удостоверений Azure предоставляет различные учетные данные — реализации TokenCredential, поддерживающие различные сценарии и потоки проверки подлинности Microsoft Entra. Так как управляемое удостоверение недоступно при локальном выполнении, следующие шаги демонстрируют, какие учетные данные следует использовать в конкретном сценарии:

  • Локальная среда разработки: только во время локальной разработки используйте класс DefaultAzureCredential для предварительно настроенной цепочки учетных данных. DefaultAzureCredential обнаруживает учетные данные пользователя из локального инструмента или интегрированной среды разработки, например Azure CLI или Visual Studio Code. Она также обеспечивает гибкость и удобство повторных попыток, время ожидания ответов и поддержку нескольких вариантов проверки подлинности. Дополнительные сведения см. в статье Аутентификация в службах Azure во время локальной разработки.
  • Приложения, размещенные в Azure: Когда ваше приложение работает в Azure, используйте ManagedIdentityCredential для безопасного обнаружения управляемой идентичности, настроенной для вашего приложения. Указание этого точного типа учетных данных предотвращает неожиданное получение других доступных учетных данных.

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

В проекте JavaScript добавьте пакет @azure/identity . В выбранном терминале перейдите к каталогу проекта приложения и выполните следующие команды:

npm install @azure/identity

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

  1. Импортируйте пакет @azure/identity.
  2. Передайте клиенту соответствующий TokenCredential объект:
    • Используйте DefaultAzureCredential, когда ваше приложение запускается локально.
    • Используйте ManagedIdentityCredential при запуске приложения в Azure и настройте идентификатор клиента, идентификатор ресурса или идентификатор объекта.

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

  1. Получите идентификатор клиента, назначенный управляемому удостоверению, назначенному пользователем, с помощью следующей команды:

    az identity show \
        --resource-group <resource-group-name> \
        --name <identity-name> \
        --query 'clientId'
    
  2. Настройте ManagedIdentityCredential с идентификатором клиента:

    import { BlobServiceClient } from '@azure/storage-blob';
    import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity';
    
    function createBlobServiceClient() {
        const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
        if (!accountName) throw Error('Azure Storage accountName not found');
        const url = `https://${accountName}.blob.core.windows.net`;
    
        if (process.env.NODE_ENV === "production") {
            const clientId = process.env.AZURE_CLIENT_ID;
            if (!clientId) throw Error('AZURE_CLIENT_ID not found for Managed Identity');
            return new BlobServiceClient(url, new ManagedIdentityCredential({clientId}));
        } else {
            return new BlobServiceClient(url, new DefaultAzureCredential());
        }
    }
    
    async function main() {
        try {
            const blobServiceClient = createBlobServiceClient();
            const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME);
            // do something with client
            const properties = await containerClient.getProperties();
    
            console.log(properties);
        } catch (err) {
            console.error("Error retrieving container properties:", err.message);
            throw err;
        }
    }
    
    main().catch((err) => {
        console.error("Error running sample:", err.message);
        process.exit(1);
    });
    

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

В проекте TypeScript добавьте пакет @azure/identity . В выбранном терминале перейдите к каталогу проекта приложения и выполните следующие команды:

npm install typescript @azure/identity @types/node

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

  1. Импортируйте пакет @azure/identity.
  2. Передайте клиенту соответствующий TokenCredential экземпляр:
    • Используйте DefaultAzureCredential при локальном запуске приложения
    • Используйте ManagedIdentityCredential при запуске приложения в Azure и настройте идентификатор клиента, идентификатор ресурса или идентификатор объекта.

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

  1. Получите идентификатор клиента, назначенный управляемой идентичности, назначенной пользователем, с помощью следующей команды:

    az identity show \
        --resource-group <resource-group-name> \
        --name <identity-name> \
        --query 'clientId'
    
  2. Настройте ManagedIdentityCredential с идентификатором клиента:

    import { BlobServiceClient } from '@azure/storage-blob';
    import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity';
    
    function createBlobServiceClient(): BlobServiceClient {
        const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
        if (!accountName) throw Error('Azure Storage accountName not found');
        const url = `https://${accountName}.blob.core.windows.net`;
    
        if (process.env.NODE_ENV === "production") {
            const clientId = process.env.AZURE_CLIENT_ID;
            if (!clientId) throw Error('AZURE_CLIENT_ID not found for Managed Identity');
            return new BlobServiceClient(url, new ManagedIdentityCredential({clientId}));
        } else {
            return new BlobServiceClient(url, new DefaultAzureCredential());
        }
    }
    
    async function main(): Promise<void> {
        try {
            const blobServiceClient = createBlobServiceClient();
            const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME!);
            const properties = await containerClient.getProperties();
    
            console.log(properties);
        } catch (err: any) {
            console.error("Error retrieving container properties:", err.message);
            throw err;
        }
    }
    
    main().catch((err: Error) => {
        console.error("Error running sample:", err.message);
        process.exit(1);
    });
    

Предыдущий код ведет себя по-разному в зависимости от среды, в которой она выполняется:

  • На локальной рабочей станции разработки DefaultAzureCredential ищет в переменных среды учетную запись службы приложения или в локально установленных средствах разработки, таких как Visual Studio Code, чтобы получить набор учетных данных разработчика.
  • При развертывании в Azure ManagedIdentityCredential обнаруживает конфигурации управляемого удостоверения для автоматической проверки подлинности в других службах.