Безопасный сетевой доступ для приложений Azure Functions

Завершено

Приложение-функция с настроенной аутентификацией определяет, кто может его вызывать, но конечная точка функции по-прежнему остаётся доступной по любому сетевому пути, включая общедоступный Интернет. Сетевые элементы управления добавляют отдельный уровень принудительного применения: ограничение доступа к функции и управление сетевыми путями, которые функция использует для собственных исходящих вызовов. Аутентификация и сетевая изоляция являются независимыми и взаимодополняющими. Оба должны быть внедрены для обеспечения надёжного уровня защищённости.

Ограничение входящего доступа с помощью списков разрешений IP-адресов

Ограничения доступа позволяют задать список разрешающих и запрещающих правил, упорядоченный по приоритету, на основании IP-адреса источника, диапазона бесклассовой междоменной маршрутизации (CIDR) или тега службы Azure. При наличии любого явного правила ко всему трафику, который не подпадает под него, применяется неявное правило запрета всего остального — добавлять правило запрета вручную не нужно.

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

Ограничения доступа поддерживаются во всех планах размещения приложений-функций, включая Consumption, Flex Consumption, Elastic Premium и Dedicated.

Tip

Настройте ограничения доступа, чтобы запретить весь трафик по умолчанию и добавить явные правила разрешения для известных источников перед развертыванием в рабочей среде. Исходить из подхода «запретить всё» проще для аудита, чем формировать список блокировки в случае неявного разрешения всего.

Развертывание частной конечной точки для входящего доступа

Когда трафик приложения-функции никогда не должен проходить через общедоступный Интернет, частная конечная точка полностью удаляет общедоступную конечную точку. Частная конечная точка назначает приложению-функции частный IP-адрес в виртуальной сети (виртуальной сети). Весь входящий трафик поступает через этот частный IP-адрес — внешние клиенты не могут получить доступ к URL-адресу функции через Интернет, так как публичный маршрут отсутствует.

Частные конечные точки доступа для приложений-функций поддерживаются в планах размещения Flex Consumption, Elastic Premium и Dedicated (App Service). Стандартный план потребления не поддерживает частные конечные точки.

После настройки приватной конечной точки клиенты внутри VNet, включая другие службы Azure, подключенные к той же сети, разрешают имя узла функции в частный IP-адрес. Для такого разрешения имен требуются частные зоны Azure DNS. Если ваша функция выступает серверной частью для Azure API Management или Application Gateway, эти ресурсы подключаются к приложению-функции через частную конечную точку, а не через общедоступный URL-адрес, благодаря чему весь трафик остается в магистральной сети Azure.

Important

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

Настройка интеграции виртуальной сети для исходящего трафика

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

С включенной интеграцией виртуальной сети приложение-функция направляет исходящие сетевые вызовы через делегированную подсеть в виртуальной сети. Это позволяет функции вызывать ресурсы, которые не предоставляются общедоступному Интернету: учетная запись Cosmos DB без общедоступного доступа, учетная запись хранения, заблокированная для определенных подсетей виртуальной сети, или частный REST API, размещенный на виртуальной машине в той же сети.

Интеграция региональной виртуальной сети доступна в планах Flex Consumption, Elastic Premium и Выделенных планах и является рекомендуемой конфигурацией для большинства сценариев. Приложение-функция и виртуальная сеть должны находиться в одном регионе Azure. Интеграция использует делегированную подсеть, которая не может использоваться для других ресурсов, таких как виртуальные машины или частные конечные точки.

Important

Интеграция виртуальной сети не направляет весь исходящий трафик через виртуальную сеть. По умолчанию только трафик, направленный в диапазоны частных IP-адресов (RFC 1918), маршрутизируется через подсеть интеграции. Чтобы принудительно направлять весь исходящий трафик, включая вызовы к общедоступным интернет-адресам, через виртуальную сеть, задайте для параметра приложения WEBSITE_VNET_ROUTE_ALL значение 1 или включите Маршрутизировать весь трафик на экране настройки интеграции с виртуальной сетью.

Настройка CORS для клиентов на основе браузера

Совместное использование ресурсов между доменами (CORS) используется, когда браузерные веб-приложения напрямую вызывают приложения-функции, активируемые HTTP-запросами. По умолчанию браузеры блокируют запросы между источниками. Функции Azure позволяет настроить, какие источники разрешены для выполнения этих запросов.

В рабочей среде укажите явные допустимые источники, например https://contoso-retail.com. Никогда не используйте подстановочный знак (*) в рабочей среде. Конфигурация CORS с подстановочными знаками позволяет любому источнику отправлять запросы в приложение-функцию, что удаляет защиту между источниками, которую CORS предоставляет для клиентов на основе браузера.

Ограничения CORS применяются только к http-клиентам на основе браузера. Межсерверные вызовы — от серверных служб, служб Azure или HTTP-клиентов, не использующих браузер, — не подпадают под действие политики CORS. CORS — это механизм безопасности браузера, а не управление доступом на стороне сервера.

Ссылки на секреты Key Vault в параметрах приложения

Параметры приложения в Функции Azure являются одним из наиболее распространенных расположений, где строки подключения и ключи API в конечном итоге хранятся в виде обычного текста. Шаблон ссылок Key Vault заменяет значение параметра обычного текстового приложения ссылкой, которую приложение-функция разрешает во время выполнения с помощью управляемого удостоверения.

Синтаксис ссылки на Key Vault в параметре приложения:

@Microsoft.KeyVault(SecretUri=https://<vault-name>.vault.azure.net/secrets/<secret-name>/<version>)

Если не указать идентификатор версии, приложение-функция использует последнюю версию секрета. Это полезно для секретов, которые регулярно обновляются: функция подхватывает обновлённое значение в течение 24 часов после ротации, без повторного развёртывания.

Чтобы использовать ссылки на Key Vault, выполните следующие действия.

  1. Включите управляемое удостоверение, назначаемое системой, в приложении-функции.
  2. Назначьте управляемой идентичности роль Key Vault Secrets User в хранилище ключей.
  3. Замените значение обычного текста в каждом параметре приложения синтаксисом ссылок @Microsoft.KeyVault(...).

Приложение-функция разрешает ссылку при запуске и внедряет значение секрета в качестве значения параметра приложения. Код функции считывает значение параметра с помощью Environment.GetEnvironmentVariable("SETTING_NAME") — это тот же вызов, который используется для любого другого параметра приложения и не учитывает механизм ссылок на Key Vault.

Note

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