Работа с ключами доступа в Функциях Azure

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

Хотя ключи доступа обеспечивают некоторую защиту от нежелательного доступа, рассмотрите другие варианты безопасности HTTP-конечных точек в производстве. Например, не распространяйте общие секреты в публичном приложении. Если публичный клиент вызывает вашу функцию, рассмотрите возможность внедрения следующих или других механизмов безопасности:

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

Типы ключей доступа

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

Тип ключа Имя ключа Уровень проверки подлинности HTTP Описание
Функция default или определяемые пользователем function Разрешает доступ только к определенной конечной точке функции.
Хост default или определяемые пользователем function Разрешает доступ ко всем конечным точкам в функциях функционального приложения.
Хозяин _master admin Специальный ключ узла, который также предоставляет административный доступ к REST API среды выполнения в приложении-функции. Поскольку мастер-ключ предоставляет повышенные права в вашем функциональном приложении, не делитесь этим ключем с третьими лицами и не распространяйте его в нативных клиентских приложениях.
Система Зависит от расширения n/a Некоторые специфические расширения могут требовать системно управляемый ключ для доступа к вебхукам. Системные ключи предназначены для конечных функций, специфичных для расширения, которые вызывают внутренние компоненты. Например, триггер Event Grid требует, чтобы подписка использовала системный ключ при вызове конечной точки триггера. Устойчивые функции также используют системные ключи для вызова API расширения устойчивых задач.
Только определенные расширения могут создавать системные ключи. Нельзя явно задать их значения. Как и другие ключи, можно создать новое значение для ключа на портале или с помощью API ключей.

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

В следующей таблице сравниваются использования различных типов ключей доступа.

Действие Область действия Тип ключа
Выполнение функции Конкретная функция Функция
Выполнение функции Любая функция Функция или хост
Вызов конечной admin точки Функциональное приложение Мастер
Вызов API для расширения Durable Task Функциональное приложение* Система
Вызовите веб-хук для расширения (внутренний) Функциональное приложение* Система

*Область, определяемая расширением.

Требования к ключу доступа

В Функциях ключи доступа случайным образом создаются как 32-байтовые массивы, которые кодируются в строки, безопасные для URL в формате base-64. Хотя вы можете генерировать собственные ключи доступа и использовать их с функциями, используйте процесс генерации ключей доступа по умолчанию.

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

Чтобы Функции могли генерировать ваши ключи, не предоставляйте value ключ ни одному из API, которые можно использовать для генерации ключей.

Хранилище ключей доступа

Ваше функциональное приложение в Azure хранит ключи и шифрует их в состоянии покоя. По умолчанию ключи AzureWebJobsStorage хранятся в контейнере хранения Blob в предоставленной учетной записи. Используйте AzureWebJobsSecretStorageType эту настановку, чтобы отменить это поведение по умолчанию и сохранить ключи в одном из этих альтернативных точек:

Местоположение Ценность Описание
Вторая учетная запись хранения blob Хранит ключи в хранилище Blob в учетной записи, отличающейся от того, что используется в Functions. Используемые учетная запись и контейнер определяются URL-адресом с общей ключевой подписью (SAS), заданным в параметре AzureWebJobsSecretStorageSas. Необходимо сохранить AzureWebJobsSecretStorageSas параметр при изменении URL-адреса SAS.
Хранилище ключей Azure keyvault Ключи в хранилище ключей, установленные в AzureWebJobsSecretStorageKeyVaultUri.
Файловая система files Ключи сохраняются в локальной файловой системе, которая используется по умолчанию в Функциях версии 1.x. Использование файловой системы для хранения данных не рекомендуется.
Секреты Kubernetes kubernetes Хранит ключи в наборе ресурсов в AzureWebJobsKubernetesSecretName. Поддерживается только при развертывании приложения-функции в Kubernetes. Функции Azure Core Tools автоматически создают значения при их использовании для развертывания приложения в кластере Kubernetes. Неизменяемые секреты не поддерживаются.
Секреты приложений контейнеров Azure containerapps Ключи хранятся в хранилище секретов Контейнеры приложений Azure, которое является внутренней системой управления секретами для приложений контейнеров. Поддерживается только при развертывании приложения-функции в Контейнеры приложений Azure. Для получения информации см. Настройка секретного магазина Container Applications.

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

Имя настройки Назначаемое системой Назначено пользователем Регистрация приложений
AzureWebJobsSecretStorageKeyVaultUri Yes Yes Yes
AzureWebJobsSecretStorageKeyVaultClientId No Yes Yes
AzureWebJobsSecretStorageKeyVaultClientSecret No No Yes
AzureWebJobsSecretStorageKeyVaultTenantId No No Yes

Это важно

Секреты не ограниваются отдельными приложениями функций через AzureWebJobsSecretStorageKeyVaultUri настройку. Если несколько приложений-функций настроены на использование одного хранилища ключей, они используют одни и те же секреты, что потенциально приводит к конфликтам ключей или перезаписи. Чтобы избежать непреднамеренного поведения, рекомендуется использовать отдельный экземпляр Key Vault для каждого приложения-функции.

Конечные точки вызова с ключами доступа

Вы можете вызвать функции, триггерированные через HTTP, используя URL с именем функции. Когда вы устанавливаете уровень авторизации функции на любое значение, отличное от anonymous, вы также должны указать ключ доступа в своём запросе. Вы можете включить ключ доступа в URL, используя ?code= строку запроса или в заголовок запроса (x-functions-key). Дополнительные сведения см. в разделе "Авторизация ключа доступа".

Чтобы получить доступ к REST API среды выполнения (в разделе /admin/), необходимо указать главный ключ (_master) в заголовке x-functions-key запроса. Вы можете отключить административные конечные устройства , установив свойство functionsRuntimeAdminIsolationEnabled сайта.

Получение ключей доступа к функциям

Вы можете получить ключи функций и узлов программным способом с помощью этих API Azure Resource Manager:

Сведения о вызове API Azure Resource Manager см. в справочнике по REST API Azure.

Замечание

Когда вы развёртаете функциональное приложение в Контейнеры приложений Azure и используете AzureWebJobsSecretStorageType=ContainerApps, необходимо использовать специфические методы для Container Apps для получения функциональных ключей. Для получения дополнительной информации см. раздел «Управление ключами доступа » в документации Container Apps.

Используйте эти методы, чтобы получить ключи доступа без использования REST API.

  1. Войдите в портал Azure, затем найдите и выберите Function App.

  2. Выберите приложение-функцию, с которыми вы хотите работать.

  3. В меню слева разверните узел "Функции" и выберите "Ключи приложения".

    Откроется страница "Ключи приложения ". На этой странице отображаются ключи хоста, которые можно использовать для доступа к любой функции приложения. Также отображается системный ключ, который предоставляет любому администратору доступ ко всем API-интерфейсам приложений-функций.

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

Подсказка

Вы также можете получить ключи доступа к вашим функциям, используя команду func azure functionapp list-functions Функции Azure Core Tools с этой --show-keys опцией. Дополнительные сведения см. в справочнике по основным средствам Функций Azure.

Продление или создание ключей доступа

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

Вы можете обновлять функции и ключи узлов программным способом или создавать новые с помощью этих API Azure Resource Manager:

Сведения о вызове API Azure Resource Manager см. в справочнике по REST API Azure.

Эти методы можно использовать для получения ключей доступа без необходимости вручную создавать вызовы к REST API.

  1. Войдите в портал Azure, затем найдите и выберите Function App.

  2. Выберите приложение-функцию, с которыми вы хотите работать.

  3. В меню слева разверните узел "Функции" и выберите "Ключи приложения".

    Откроется страница "Ключи приложения ". На этой странице отображаются ключи хоста, которые можно использовать для доступа к любой функции приложения. Также отображается системный ключ, который предоставляет любому администратору доступ ко всем API-интерфейсам приложений-функций.

  4. Выберите значение ключа «Обновить » рядом с нужным ключом, затем выберите «Обновить» и «сохранить».

Вы также можете обновить ключ функции на вкладке "Ключи функции " определенной функции, активироваемой HTTP.

Удаление ключей доступа

Вы можете программно удалять ключи функций и узлов с помощью этих API Azure Resource Manager:

Сведения о вызове API Azure Resource Manager см. в справочнике по REST API Azure.