Функции 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.
Ключи сохраняются в локальной файловой системе, которая используется по умолчанию в Функциях версии 1.x. Хранилище файловой системы не рекомендуется.
Секреты Kubernetes
kubernetes
Набор ресурсов в AzureWebJobsKubernetesSecretName используется для хранения ключей. Поддерживается только при развертывании приложения-функции в Kubernetes. Функции Azure Core Tools автоматически создает значения при его использовании для развертывания приложения в кластере Kubernetes.
При использовании Key Vault для хранилища ключей параметры приложения зависят от типа управляемого удостоверения, назначаемого системой или назначаемого пользователем.
Функции для триггеров 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:
Войдите на портал Azure, а затем найдите и выберите Приложение-функция.
Выберите приложение-функцию, с которыми вы хотите работать.
В области слева разверните узел "Функции" и выберите ключи приложения.
Откроется страница "Ключи приложения". На этой странице отображаются ключи узла, которые можно использовать для доступа к любой функции в приложении. Также отображается системный ключ, который предоставляет любому администратору доступ ко всем API-интерфейсам приложений-функций.
Вы также можете использовать минимальные привилегии с помощью ключа для конкретной функции. Ключи, относящиеся к функции, можно получить на вкладке "Ключи функции" определенной функции, активироваемой HTTP.
Запустите следующий скрипт в Azure Cloud Shell, выходные данные которого являются default ключом узла, который можно использовать для доступа к любой функции, активированной HTTP в приложении-функции.
Azure CLI
az functionapp keys list --resource-group<RESOURCE_GROUP>--name<APP_NAME>--query functionKeys.default --output tsv
В этом скрипте замените <RESOURCE_GROUP> группу <APP_NAME> ресурсов и имя приложения-функции соответствующими.
Так как выходные данные содержат конфиденциальную информацию, не сохраняйте выходные данные или не защищаете сохраненные выходные данные файла.
Запустите следующий скрипт, выходные данные которого являются ключом default узла, который можно использовать для доступа к любой функции, активированной HTTP в приложении-функции.
В этом скрипте замените <RESOURCE_GROUP> группу <APP_NAME> ресурсов и имя приложения-функции соответствующими.
Продление или создание ключей доступа
При продлении или создании значений ключей доступа необходимо вручную распространить обновленные значения ключей для всех клиентов, которые вызывают функцию.
Вы можете обновлять функции и ключи узлов программным способом или создавать новые с помощью этих API Azure Resource Manager:
Войдите на портал Azure, а затем найдите и выберите Приложение-функция.
Выберите приложение-функцию, с которыми вы хотите работать.
В области слева разверните узел "Функции" и выберите ключи приложения.
Откроется страница "Ключи приложения". На этой странице отображаются ключи узла, которые можно использовать для доступа к любой функции в приложении. Также отображается системный ключ, который предоставляет любому администратору доступ ко всем API-интерфейсам приложений-функций.
Нажмите кнопку "Обновить значение ключа" рядом с ключом, который требуется продлить, а затем нажмите кнопку "Продлить" и "Сохранить".
Вы также можете обновить ключ функции на вкладке "Ключи функции" определенной функции, активироваемой HTTP.
Выполните следующий сценарий в Azure Cloud Shell, который обновляет default ключ узла с новым значением ключа, созданным функциями.
Azure CLI
az functionapp keys set --resource-group<RESOURCE_GROUP>--name<APP_NAME>--key-type functionKeys --key-name default
В этом скрипте замените <RESOURCE_GROUP> группу <APP_NAME> ресурсов и имя приложения-функции соответствующими. Этот скрипт был создан для запуска в Azure Cloud Shell (Bash). Его необходимо изменить для запуска в терминале Windows.
Для ссылки отображается новое значение ключа, созданное функциями. Это новое значение ключа должно быть безопасно распределено для всех приложений, использующих ключ узла. Так как выходные данные содержат конфиденциальную информацию, не сохраняйте выходные данные или не защищаете сохраненные выходные данные файла.
Выполните следующий скрипт, который использует REST API для продления default ключа узла с новым значением ключа, созданным Функцией.
PowerShell
# Variables - replace these with your actual values$resourceGroupName = "<RESOURCE_GROUP>"$functionAppName = "<APP_NAME>"# Construct the URI for the REST API call$uri = "https://management.azure.com/subscriptions/$((Get-AzContext).Subscription.Id)/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$functionAppName/host/default/listkeys?api-version=2021-02-01"# Construct the body of the request$body = @{
properties = @{
name = "default"
}
} | ConvertTo-Json# Invoke the REST API to create or update the host-level secret$response = Invoke-AzRestMethod -Method Post -Uri$uri -Payload$body# Output the updated key for reference
($response.Content | ConvertFrom-Json).functionKeys.default
В этом скрипте замените <RESOURCE_GROUP> группу <APP_NAME> ресурсов и имя приложения-функции соответствующими.
Для ссылки возвращается новое значение ключа, созданное функциями. Он должен быть безопасно распределен для всех приложений, использующих ключ узла. Так как выходные данные содержат конфиденциальную информацию, не сохраняйте выходные данные или не защищаете сохраненные выходные данные файла.
Удаление ключей доступа
Вы можете программно удалять ключи функций и узлов с помощью этих API Azure Resource Manager:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.
Создавайте комплексные решения в Microsoft Azure для создания Функции Azure, реализации веб-приложений и управления ими, разработке решений, использующих службу хранилища Azure, и т. д.