Работа с ключами доступа в Функции Azure
Функции Azure позволяет использовать секретные ключи, чтобы упростить доступ к конечным точкам функций. В этой статье описаны различные типы ключей доступа, поддерживаемых функциями, и способы работы с ключами доступа.
Хотя ключи доступа обеспечивают некоторые способы устранения нежелательного доступа, следует рассмотреть другие варианты защиты конечных точек HTTP в рабочей среде. Например, не рекомендуется распространять общие секреты в общедоступном приложении. Если функция вызывается из общедоступного клиента, следует рассмотреть возможность реализации этих или других механизмов безопасности:
- Включение проверки подлинности и авторизации Служба приложений
- Использование Azure Управление API (APIM) для проверки подлинности запросов
- Развертывание приложения-функции в виртуальной сети
- Развертывание приложения-функции в изоляции
Ключи доступа предоставляют основу для авторизации 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.
Войдите на портал Azure, а затем найдите и выберите Приложение-функция.
Выберите приложение-функцию, с которыми вы хотите работать.
В области слева разверните узел "Функции" и выберите ключи приложения.
Откроется страница "Ключи приложения". На этой странице отображаются ключи узла, которые можно использовать для доступа к любой функции в приложении. Также отображается системный ключ, который предоставляет любому администратору доступ ко всем API-интерфейсам приложений-функций.
Вы также можете использовать минимальные привилегии с помощью ключа для конкретной функции. Ключи, относящиеся к функции, можно получить на вкладке "Ключи функции" определенной функции, активироваемой HTTP.
Продление или создание ключей доступа
При продлении или создании значений ключей доступа необходимо вручную распространить обновленные значения ключей для всех клиентов, которые вызывают функцию.
Вы можете обновлять функции и ключи узлов программным способом или создавать новые с помощью этих API Azure Resource Manager:
- Создание или обновление секрета функции
- Создание или обновление секретного слота функции
- Создание или обновление секрета узла
- Создание или обновление слота секрета узла
Сведения о вызове API Azure Resource Manager см. в справочнике по REST API Azure.
Эти методы можно использовать для получения ключей доступа без необходимости вручную создавать вызовы к REST API.
Войдите на портал Azure, а затем найдите и выберите Приложение-функция.
Выберите приложение-функцию, с которыми вы хотите работать.
В области слева разверните узел "Функции" и выберите ключи приложения.
Откроется страница "Ключи приложения". На этой странице отображаются ключи узла, которые можно использовать для доступа к любой функции в приложении. Также отображается системный ключ, который предоставляет любому администратору доступ ко всем API-интерфейсам приложений-функций.
Нажмите кнопку "Обновить значение ключа" рядом с ключом, который требуется продлить, а затем нажмите кнопку "Продлить" и "Сохранить".
Вы также можете обновить ключ функции на вкладке "Ключи функции" определенной функции, активироваемой HTTP.
Удаление ключей доступа
Вы можете программно удалять ключи функций и узлов с помощью этих API Azure Resource Manager:
- Удаление секрета функции
- Удаление слота секрета функции
- Удаление секрета узла
- Удаление слота секрета узла
Сведения о вызове API Azure Resource Manager см. в справочнике по REST API Azure.