Использование управляемых удостоверений в Службе приложений и Функциях Azure

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

Важно!

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

Примечание

Для приложений, развернутых в службе Azure Arc, управляемые удостоверения недоступны.

Управляемое удостоверение от Azure Active Directory (Azure AD) позволяет приложению легко получать доступ к другим ресурсам, защищенным Azure AD, таким как Azure Key Vault. Удостоверения управляются платформой Azure, и для них не нужно подготавливать или изменять секреты. Дополнительные сведения об управляемых удостоверениях в Azure AD см. в статье Что такое управляемые удостоверения для ресурсов Azure?

Приложению можно предоставить два типа удостоверений:

  • Назначаемое системой удостоверение привязывается к приложению и удаляется при удалении приложения. Приложение может иметь только одно назначаемое системой удостоверение.
  • Назначаемое пользователем удостоверение — это изолированный ресурс Azure, который можно назначить приложению. Приложение может иметь несколько назначаемых пользователем удостоверений.

Добавление назначаемого системой удостоверения

  1. В левой области навигации на странице вашего приложения прокрутите вниз до группы Параметры.

  2. Выберите Удостоверение.

  3. На вкладке Назначено системой для параметра Состояние установите значение Вкл. Выберите команду Сохранить.

    Screenshot that shows where to switch Status to On and then select Save.

Примечание

Чтобы найти управляемое удостоверение для веб-приложения или слотового приложения на портале Azure, в области Корпоративные приложения выберите Параметры пользователя. Обычно имя слота похоже на <app name>/slots/<slot name>.

Добавление назначаемого пользователем удостоверения

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

Сначала необходимо создать ресурс назначаемого пользователем удостоверения.

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

  2. В левой области навигации на странице вашего приложения прокрутите вниз до группы Параметры.

  3. Выберите Удостоверение.

  4. На вкладке Назначаемое пользователем щелкните Добавить.

  5. Найдите созданное ранее удостоверение и выберите его. Нажмите кнопку Добавить.

    Managed identity in App Service

Важно!

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

Настройка целевого ресурса

Вам может потребоваться настроить целевой ресурс, чтобы разрешить к нему доступ из приложения или функции. Например, если вы запрашиваете маркер для доступа к Key Vault, необходимо также добавить политику доступа, включающую в себя управляемое удостоверение приложения или функции. В противном случае вызовы Key Vault будут отклоняться даже при использовании действительного маркера. Это же справедливо и для Базы данных SQL Azure. Чтобы узнать больше о том, какие ресурсы поддерживают маркеры Azure Active Directory, см. сведения в разделе о службах Azure, поддерживающих аутентификацию Azure AD.

Важно!

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

Подключение к службам Azure в коде приложения

Используя управляемое удостоверение, приложение может получать маркеры для ресурсов Azure, защищаемых Azure Active Directory, таких как База данных SQL Azure, Azure Key Vault и служба хранилища Azure. Эти маркеры представляют приложение, получающее доступ к ресурсам, а не конкретного пользователя приложения.

Служба приложений и Функции Azure предоставляют внутренне доступную конечную точку REST для получения маркера. К конечной точке RESTFUL можно обращаться из приложения с помощью стандартного HTTP-запроса GET, что можно реализовать с помощью универсального HTTP-клиента на каждом языке. Для .NET, JavaScript, Java и Python клиентская библиотека удостоверений Azure предоставляет абстракцию для этой конечной точки REST и упрощает процесс разработки. Подключение к другим службам Azure выполняется так же просто, как добавление объекта учетных данных в клиент для конкретной службы.

Необработанный запрос HTTP GET выглядит так, как показано в следующем примере.

GET /MSI/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
Host: localhost:4141
X-IDENTITY-HEADER: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a

Пример ответа может выглядеть следующим образом:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJ0eXAi…",
    "expires_on": "1586984735",
    "resource": "https://vault.azure.net",
    "token_type": "Bearer",
    "client_id": "5E29463D-71DA-4FE0-8E69-999B57DB23B0"
}

Этот ответ совпадает с ответом для запроса маркера взаимного доступа между службами Azure AD. Чтобы получить доступ к Key Vault, вам нужно будет затем добавить значение access_token в клиентское подключение к хранилищу.

Дополнительные сведения о конечной точке REST см. в справочнике по конечным точкам REST.

Удаление удостоверения

Когда вы удаляете удостоверение, назначаемое системой, оно удаляется из Azure Active Directory. Удостоверения, назначаемые системой, также автоматически удаляются из Azure Active Directory при удалении самого ресурса приложения.

  1. В левой области навигации на странице вашего приложения прокрутите вниз до группы Параметры.

  2. Выберите Удостоверение. Затем выполните следующие действия в зависимости от типа удостоверения.

    • Удостоверение, назначаемое системой: на вкладке Назначается системой переключите состояние на Off. Выберите команду Сохранить.
    • Удостоверение, назначаемое пользователем: перейдите на вкладку Назначается пользователем, установите флажок для удостоверения и нажмите Удалить. Нажмите кнопку Да для подтверждения.

Примечание

Также вы можете установить параметр приложения WEBSITE_DISABLE_MSI, который отключает локальную службу маркеров. Однако он оставляет удостоверение на месте, и инструментарий по-прежнему будет отображать управляемое удостоверение как "включенное". Поэтому использовать этот параметр не рекомендуется.

Справочник по конечным точкам REST

Приложение с управляемым удостоверением делает эту конечную точку доступной, определяя две переменные среды:

  • IDENTITY_ENDPOINT — URL-адрес локальной службы токенов.
  • IDENTITY_HEADER — заголовок, который используется для противостояния атакам с подделкой серверных запросов (SSRF). Это значение меняется платформой.

IDENTITY_ENDPOINT — это локальный URL-адрес, из которого приложение может запрашивать маркеры. Чтобы получить маркер для ресурса, отправьте запрос HTTP GET к этой конечной точке, задав следующие параметры:

Имя параметра В Описание
ресурс Запрос Универсальный код ресурса (URI) Azure AD, для которого нужно получить маркер. Это может быть URI одной из служб Azure, которая поддерживает аутентификацию Azure AD, или любой другой URI ресурса.
api-version Запрос Версия API маркеров, которая будет использоваться. Используйте команду 2019-08-01.
X-IDENTITY-HEADER Заголовок Значение переменной среды IDENTITY_HEADER. Заголовок, который используется при устранении атак с подделкой серверных запросов (SSRF).
client_id Запрос (Необязательно.) Идентификатор клиента назначаемого пользователем удостоверения, которое следует использовать. Не может использоваться для запроса, который включает в себя идентификатор principal_id, mi_res_idили object_id. Если все параметры ИД (client_id, principal_id, object_id и mi_res_id) опущены, используется назначаемое системой удостоверение.
principal_id Запрос (Необязательно.) Идентификатор субъекта назначаемого пользователем удостоверения, которое следует использовать. object_id — псевдоним, который можно использовать вместо этого. Не может использоваться для запроса, который включает в себя идентификатор client_id, mi_res_id или object_id. Если все параметры ИД (client_id, principal_id, object_id и mi_res_id) опущены, используется назначаемое системой удостоверение.
mi_res_id Запрос (Необязательно.) Идентификатор ресурса Azure для назначаемого пользователем удостоверения, которое следует использовать. Не может использоваться для запроса, который включает в себя идентификатор principal_id, client_idили object_id. Если все параметры ИД (client_id, principal_id, object_id и mi_res_id) опущены, используется назначаемое системой удостоверение.

Важно!

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

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