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


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

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

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

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

Общие сведения о ключах

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

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

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

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

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

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

Основные требования

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

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

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

Управление хранилищем ключей

Ключи хранятся в Azure в составе приложения-функции в зашифрованном виде. По умолчанию ключи хранятся в контейнере хранилища BLOB-объектов в учетной записи, указанной в параметре AzureWebJobsStorage. Этот параметр можно использовать AzureWebJobsSecretStorageType для переопределения этого поведения по умолчанию и вместо этого хранить ключи в одном из следующих альтернативных расположений:

Расположение Значение Описание
Вторая учетная запись хранения blob Хранит ключи в хранилище BLOB-объектов в учетной записи хранения, которая отличается от ключа, используемого средой выполнения функций. Используемая учетная запись и контейнер определяются URL-адресом подписанного URL-адреса url-адреса URL-адреса url-адреса, заданного в параметре AzureWebJobsSecretStorageSas . Необходимо сохранить AzureWebJobsSecretStorageSas параметр при изменении URL-адреса SAS.
Azure Key Vault keyvault Набор хранилища AzureWebJobsSecretStorageKeyVaultUri ключей используется для хранения ключей.
Файловая система files Ключи сохраняются в локальной файловой системе, которая используется по умолчанию в Функциях версии 1.x. Хранилище файловой системы не рекомендуется.
Секреты Kubernetes kubernetes Набор ресурсов в AzureWebJobsKubernetesSecretName используется для хранения ключей. Поддерживается только при развертывании приложения-функции в Kubernetes. Функции Azure Core Tools автоматически создает значения при его использовании для развертывания приложения в кластере Kubernetes.

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

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

Использование ключей доступа

Функции для триггеров HTTP обычно можно вызывать с помощью URL-адреса в формате https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>. Если для заданной функции задан уровень авторизации, отличный от 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.

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

  1. Войдите на портал Azure, а затем найдите и выберите Приложение-функция.

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

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

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

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

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

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

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

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

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

  1. Войдите на портал Azure, а затем найдите и выберите Приложение-функция.

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

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

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

  4. Нажмите кнопку "Обновить значение ключа" рядом с ключом, который требуется продлить, а затем нажмите кнопку "Продлить" и "Сохранить".

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

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

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

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