Руководство. Использование управляемого удостоверения для вызова Функций Azure из приложения Azure Spring Apps

Примечание.

Azure Spring Apps — это новое название службы Azure Spring Cloud. Старое название будет еще некоторое время встречаться в наших материалах, пока мы не обновим ресурсы, такие как снимки экрана, видео и схемы.

Эта статья относится к: ✔️ Basic/Standard ✔️ Enterprise

В этой статье показано, как создать управляемое удостоверение для приложения, размещенного в Azure Spring Apps, и использовать его для вызова триггерных функций HTTP.

Обе Функции Azure и Служба приложений поддерживают проверку подлинности Microsoft Entra. Используя эту встроенную функцию проверки подлинности вместе с управляемыми удостоверениями для Azure Spring Apps, можно вызывать службы RESTful с помощью современной семантики OAuth. Этот метод не требует хранения секретов в коде и предоставляет более детализированные элементы управления доступом к внешним ресурсам.

Необходимые компоненты

Создание или изменение группы ресурсов

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

az group create --name <resource-group-name> --location <location>

Дополнительные сведения см. в команде az group create .

Создание приложения-функции

Чтобы создать приложение-функцию, необходимо сначала создать резервную учетную запись хранения. Вы можете использовать команду az storage account create .

Важно!

Каждое приложение-функция и учетная запись хранения должны иметь уникальное имя.

Чтобы создать учетную запись хранения, используйте следующую команду. Замените <function-app-name> именем> приложения-функции и <имя учетной записи хранения именем учетной записи хранения.

az storage account create \
    --resource-group <resource-group-name> \
    --name <storage-account-name> \
    --location <location> \
    --sku Standard_LRS

После создания учетной записи хранения используйте следующую команду, чтобы создать приложение-функцию:

az functionapp create \
    --resource-group <resource-group-name> \
    --name <function-app-name> \
    --consumption-plan-location <location> \
    --os-type windows \
    --runtime node \
    --storage-account <storage-account-name> \
    --functions-version 4

Запишите возвращаемое hostNames значение, которое находится в формате https://<your-functionapp-name>.azurewebsites.net. Используйте это значение в корневом URL-адресе приложения-функции для тестирования приложения-функции.

Включение проверки подлинности Microsoft Entra

Выполните следующие действия, чтобы включить проверку подлинности Microsoft Entra для доступа к приложению-функции.

  1. В портал Azure перейдите к группе ресурсов и откройте созданное приложение-функцию.

  2. В области навигации выберите "Проверка подлинности" , а затем выберите " Добавить поставщика удостоверений" на главной панели.

  3. На странице "Добавление поставщика удостоверений" выберите Майкрософт в раскрывающемся меню поставщика удостоверений.

    Screenshot of the Azure portal showing the Add an identity provider page with Microsoft highlighted in the identity provider dropdown menu.

  4. Выберите Добавить.

  5. Для параметров "Основы" на странице "Добавление поставщика удостоверений" задайте поддерживаемые типы учетных записей в любой каталог Microsoft Entra — multi-tenant.

  6. Задайте для неавторизованных запросов http 401 Неавторизованные запросы: рекомендуется для API. Этот параметр гарантирует, что все запросы, не прошедшие проверку подлинности, запрещены (ответ 401).

    Screenshot of the Azure portal showing the Add an identity provider page with Support account types and Unauthenticated requests highlighted.

  7. Выберите Добавить.

После добавления параметров приложение-функция перезапускается, а все последующие запросы запрашиваются для входа с помощью идентификатора Microsoft Entra. Вы можете проверить, что запросы, не прошедшие проверку подлинности, в настоящее время отклоняются с помощью корневого URL-адреса приложения-функции (возвращается в hostNames выходных az functionapp create данных команды). Затем вы должны быть перенаправлены на экран входа в Microsoft Entra вашей организации.

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

Чтобы получить идентификатор приложения, выберите проверку подлинности в области навигации и скопируйте значение идентификатора приложения (клиента) для поставщика удостоверений, включающего имя приложения-функции.

Screenshot of the Azure portal showing the Authentication page for a Function app, with the Function app name highlighted in the Identity provider.

Чтобы получить URI идентификатора приложения, выберите " Предоставить API " в области навигации и скопируйте значение URI идентификатора приложения.

Screenshot of the Azure portal showing the Expose an API page for a Function app with the Application ID URI highlighted.

Создание функции, активируемой HTTP

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

func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger

По умолчанию функции используют проверку подлинности на основе ключей для защиты конечных точек HTTP. Чтобы включить проверку подлинности Microsoft Entra для защиты доступа к функциям, задайте authLevel ключ anonymous в файле function.json , как показано в следующем примере:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      ...
    }
  ]
}

Дополнительные сведения см. в разделе "Защита конечной точки HTTP" в рабочем разделе Функции Azure триггера HTTP.

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

func azure functionapp publish <function-app-name>

Выходные данные команды публикации должны содержать URL-адрес созданной функции, как показано в следующих выходных данных:

Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
    HttpTrigger - [httpTrigger]
        Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger

Создание экземпляра и приложения службы Azure Spring Apps

Используйте следующие команды, чтобы добавить расширение spring и создать новый экземпляр Azure Spring Apps:

az extension add --upgrade --name spring
az spring create \
    --resource-group <resource-group-name> \
    --name <Azure-Spring-Apps-instance-name> \
    --location <location>

Используйте следующую команду, чтобы создать приложение с именем msiapp с управляемым удостоверением, назначаемым системой, в соответствии с запросом --assign-identity параметра:

az spring app create \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name "msiapp" \
    --assign-endpoint true \
    --assign-identity

Создание примера приложения Spring Boot для вызова функции

Этот пример вызывает функцию, активированную HTTP, сначала запрашивая маркер доступа из конечной точки MSI и используя этот маркер для проверки подлинности HTTP-запроса функции. Дополнительные сведения см. в разделе "Получение маркера с помощью HTTP " раздела "Использование управляемых удостоверений для ресурсов Azure на виртуальной машине Azure" для получения маркера доступа.

  1. Используйте следующую команду клонировать пример проекта:

    git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
    
  2. Используйте следующую команду, чтобы указать универсальный код ресурса (URI) функции и имя триггера в свойствах приложения:

    cd azure-spring-apps-samples/managed-identity-function
    vim src/main/resources/application.properties
    
  3. Чтобы использовать управляемое удостоверение для приложений Azure Spring Apps, добавьте следующие свойства со следующими значениями в src/main/resources/application.properties.

    azure.function.uri=https://<function-app-name>.azurewebsites.net
    azure.function.triggerPath=httptrigger
    azure.function.application-id.uri=<function-app-application-ID-uri>
    
  4. Чтобы упаковать пример приложения, используйте следующую команду:

    mvn clean package
    
  5. Используйте следующую команду, чтобы развернуть приложение в Azure Spring Apps:

    az spring app deploy \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --name "msiapp" \
        --artifact-path target/asc-managed-identity-function-sample-0.1.0.jar
    
  6. Чтобы протестировать приложение, используйте следующую команду, чтобы получить доступ к общедоступной конечной точке или тестовой конечной точке:

    curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
    

    Следующее сообщение возвращается в тексте ответа.

    Function Response: Hello, springcloud. This HTTP triggered function executed successfully.
    

Следующие шаги