Защита Azure Container Apps с помощью межсетевого экрана веб-приложений на Application Gateway

При размещении приложений или микрослужб в приложениях контейнеров Azure может не потребоваться опубликовать их непосредственно в Интернете. Вместо этого вы можете открыть к ним доступ через обратный прокси-сервер.

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

С помощью обратных прокси-серверов вы можете размещать службы перед приложениями, поддерживающими перекрестные функциональные возможности, в том числе:

  • Маршрутизация
  • Кэширование
  • Ограничение частоты
  • Балансировка нагрузки
  • Уровни безопасности
  • Фильтрация запросов

В этой статье показано, как защитить приложения контейнеров с помощью брандмауэра веб-приложений (WAF) в шлюзе приложений Azure с помощью внутренней среды приложений контейнеров.

Дополнительные сведения о сетевых концепциях в контейнерных приложениях см. в разделе "Сетевая среда" в приложениях контейнеров Azure.

Предварительные требования

  • Внутренняя среда с виртуальной сетью: у вас есть приложение-контейнер, которое находится во внутренней среде и интегрировано с виртуальной сетью. Дополнительные сведения о создании интегрированного приложения виртуальной сети см. в статье о предоставлении виртуальной сети внутренней среде приложений контейнеров Azure.

  • Сертификаты безопасности. Если необходимо использовать шифрование TLS/SSL для шлюза приложений, необходимо действительный общедоступный сертификат для привязки к шлюзу приложений.

Получение домена приложения-контейнера

Чтобы получить значения домена по умолчанию и статического IP-адреса, выполните следующие действия, чтобы настроить зону Частная зона DNS.

  1. В окне обзора группы ресурсов на портале выберите приложение-контейнер.

  2. В окне "Обзор" для ресурса контейнерного приложения выберите ссылку на среду "Приложения контейнеров".

  3. В окне "Обзор" для ресурса среды приложения контейнера выберите Просмотр JSON в правом верхнем углу страницы, чтобы просмотреть представление среды приложений контейнеров в формате JSON.

  4. В представлении JSON найдите раздел properties и следующие значения:

    • Домен по умолчанию: поиск properties.defaultDomain или properties.environmentFqdn

    • Статический IP-адрес: посмотрите properties.staticIp

  5. Скопируйте эти значения и вставьте их в текстовый редактор. Значение домена по умолчанию используется при создании частной зоны DNS в следующем разделе.

Создайте и настройте зону частной DNS Azure

Чтобы создать и настроить частную зону DNS Azure, выполните следующие действия.

  1. Перейдите на портал Azure.

  2. В строке поиска введите частную зону DNS.

  3. Выберите частную зону DNS из результатов поиска.

  4. Нажмите кнопку "Создать".

  5. Введите следующие значения:

    Настройка Действие
    Подписка Выберите свою подписку Azure.
    Группа ресурсов Выберите группу ресурсов приложения-контейнера.
    Имя. Введите свойство домена по умолчанию среды приложений контейнеров из предыдущего раздела ( defaultDomain или environmentFqdn).
    Расположение группы ресурсов Оставьте значение по умолчанию. Не требуется значение, так как частные зоны DNS являются глобальными.
  6. Выберите Просмотреть + создать. После завершения проверки нажмите кнопку Создать.

  7. После создания частной зоны DNS выберите "Перейти к ресурсу".

  8. В окне обзора выберите +Набор записей , чтобы добавить новый набор записей.

  9. В окне "Добавление набора записей" введите следующие значения:

    Настройка Действие
    Имя. Введите *.
    Тип Выберите A-Address Record.
    TTL Оставьте значения по умолчанию.
    Единица TTL Оставьте значения по умолчанию.
    IP-адрес Введите свойство статического IP-адреса среды приложений для контейнеров из предыдущего раздела (staticIp).
  10. Нажмите кнопку "ОК ", чтобы создать набор записей.

  11. Нажмите кнопку +Запись снова, чтобы добавить второй набор записей.

  12. В окне "Добавление набора записей" введите следующие значения:

    Настройка Действие
    Имя. Введите @.
    Тип Выберите A-Address Record.
    TTL Оставьте значения по умолчанию.
    Единица TTL Оставьте значения по умолчанию.
    IP-адрес Введите свойство статического IP-адреса среды приложений для контейнеров из предыдущего раздела (staticIp).
  13. Нажмите кнопку "ОК ", чтобы создать набор записей.

  14. Выберите окно ссылок виртуальной сети в меню слева от страницы.

  15. Нажмите кнопку +Добавить , чтобы создать новую ссылку со следующими значениями:

    Настройка Действие
    Имя ссылки Введите my-vnet-pdns-link.
    Я знаю ИД ресурса виртуальной сети Оставьте его без флажка.
    Виртуальная сеть Выберите виртуальную сеть, с которым интегрировано приложение-контейнер.
    Включить авторегистрацию Оставьте его без флажка.
  16. Нажмите кнопку "ОК ", чтобы создать ссылку виртуальной сети.

Создание и настройка Шлюза приложений Azure

Чтобы создать и настроить шлюз приложений Azure, выполните следующие действия.

  1. Перейдите на портал Azure.

  2. В строке поиска введите Шлюз приложений.

  3. Выберите шлюз приложений из результатов поиска.

Теперь введите необходимые сведения на вкладке "Основные", вкладке frontends, вкладке backends и вкладке "Конфигурация".

Вкладка "Основные сведения"

Выполните следующие действия.

  1. Введите приведенные ниже значения в разделе Сведения о проекте.

    Настройка Действие
    Подписка Выберите свою подписку Azure.
    Группа ресурсов Выберите группу ресурсов для приложения-контейнера.
    Имя Шлюза приложений Введите my-container-apps-agw.
    Область/регион Выберите расположение, в котором вы подготовили контейнерное приложение.
    Уровень Выберите WAF V2. Вы можете использовать стандартную версию 2 , если вам не нужен WAF.
    Включение автомасштабирования Оставьте по умолчанию. Для производственных сред рекомендуется автоматическое масштабирование. См. Автомасштабирование для шлюза приложений Azure.
    Зона доступности Выберите Отсутствует. Для рабочих сред рекомендуется использовать Зоны доступности для повышения доступности.
    HTTP2 оставьте значение по умолчанию.
    Политика WAF Выберите «Создать новую» и введите my-waf-policy для политики WAF. Нажмите ОК. Если вы выбрали стандартную версию 2 для уровня, пропустите этот шаг.
    Виртуальная сеть Выберите виртуальную сеть, с которым интегрировано приложение-контейнер.
    Подсеть Выберите Управление конфигурацией подсети. Если у вас уже есть подсеть, которую вы хотите использовать, выберите эту подсеть и перейдите к разделу Frontends.
  2. В окне подсетеймоей виртуальной сети выберите +Подсеть и введите следующие значения:

    Настройка Действие
    Имя. Введите appgateway-subnet.
    Диапазон адресов подсети Оставьте значения по умолчанию.
  3. Для остальных параметров сохраните значения по умолчанию.

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

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

  6. Задайте следующие значения:

    Настройка Действие
    Подсеть Выберите созданную вами подсеть appgateway-subnet.
  7. Нажмите кнопку "Далее": интерфейсы для продолжения.

Вкладка "Фронтенды"

Выполните следующие действия.

  1. На вкладке Frontends введите следующие значения:

    Настройка Действие
    Тип интерфейсного IP-адреса Выберите Общедоступный.
    Общедоступный IP-адрес Выберите Добавить. Введите my-frontend в качестве названия вашего интерфейса и выберите ОК

    Примечание.

    Для SKU шлюза приложений версии 2 требуется общедоступный внешний IP-адрес. Дополнительные сведения см. в статьях Поддержка общедоступных и частных IP-адресов и Управление общедоступным IP-адресом с помощью шлюза приложений Azure.

  2. Выберите Далее: Бэкенды.

Вкладка "Серверные компоненты"

Серверный пул направляет запросы на соответствующие серверные серверы. Вы можете создавать серверные пулы из любого сочетания следующих ресурсов:

  • Сетевые карты
  • общедоступные IP-адреса;
  • Внутренние IP-адреса
  • Масштабируемые наборы виртуальных машин
  • Полные доменные имена (FQDN)
  • Мультитенантные бэкенд-системы, такие как Служба приложений Azure и контейнерные приложения

В этом примере создается пул на серверной стороне, предназначенный для контейнерного приложения.

Чтобы создать бекэнд-пул, выполните следующие шаги.

  1. Щелкните Добавление серверного пула.

  2. Откройте новую вкладку и перейдите в приложение контейнера.

  3. В окне обзора приложения-контейнера найдите URL-адрес приложения и скопируйте его.

  4. Вернитесь на вкладку Backends и введите следующие значения в окне "Добавление серверного пула ".

    Настройка Действие
    Имя. Введите my-agw-backend-pool.
    Добавление серверного пула без целевых объектов Выберите Нет.
    Целевой тип Выберите IP-адрес или полное доменное имя.
    Цель Введите URL-адрес приложения контейнера, скопированный и удалите префикс https://. Это полное доменное имя вашего контейнерного приложения.
  5. Выберите Добавить.

  6. На вкладке "Серверные части" нажмите кнопку "Далее: конфигурация".

Вкладка конфигурации

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

Чтобы подключить пул фронтенда и бэкенда, выполните следующие действия.

  1. Выберите " Добавить правило маршрутизации". Введите следующие значения:

    Настройка Действие
    Имя. Введите my-agw-routing-rule.
    Приоритет Введите 1.
  2. На вкладке прослушивателя введите следующие значения:

    Настройка Действие
    Имя прослушивателя Введите my-agw-listener.
    Внешний IP-адрес Выберите Общедоступный.
    Протокол Выберите HTTPS. Если у вас нет сертификата, который вы хотите использовать, можно выбрать HTTP
    Порт Введите 443. Если вы выбрали HTTP для протокола, введите 80 и перейдите к разделу по умолчанию или личного домена.
    Выбор сертификата Выберите " Отправить сертификат". Если сертификат хранится в хранилище ключей, можно выбрать сертификат из Key Vault.
    Имя сертификата Введите имя сертификата.
    PFX-файл сертификата Выберите действительный общедоступный сертификат.
    Пароль Введите пароль сертификата.

    Если вы хотите использовать домен по умолчанию, введите следующие значения:

    Настройка Действие
    Тип прослушивателя Выберите Базовый.
    URL-адрес страницы ошибки Оставьте как нет

    Кроме того, если вы хотите использовать личный домен, введите следующие значения:

    Настройка Действие
    Тип прослушивателя Выберите Мультисайт
    Тип хоста Выбор одного
    Имена хостов Введите личный домен, который вы хотите использовать.
    URL-адрес страницы ошибки Оставьте как нет
  3. Перейдите на вкладку Цели бэкенда и введите следующие значения:

    Настройка Действие
    Целевой тип Выберите my-agw-backend-pool, который вы создали ранее.
    Параметры серверной части Выберите Добавить.
  4. В окне "настройки добавления серверной части" введите следующие значения:

    Настройка Действие
    Имя параметров серверной части Введите параметр my-agw-backend-setting.
    Протокол серверной части Выберите HTTPS.
    Серверный порт Введите 443.
    Использовать сертификат хорошо известного центра сертификации Выберите Да.
    Привязка на основе файлов cookie Оставьте значение "Отключить".
    Сток подключений Оставьте значение "Отключить".
    Время ожидания запроса (секунды) Оставьте значение по умолчанию.
    Переопределить с новым именем узла Выберите Да, затем выберите Имя узла из целевого backend-сервера.
    Использовать пользовательский датчик Выберите Нет.
  5. Нажмите кнопку "Добавить ", чтобы добавить параметры серверной части.

    Примечание.

    Чтобы сохранить исходный заголовок узла для перенаправлений и сценариев единого входа, настройте перезапись заголовка после создания шлюза приложений. Дополнительные сведения см. в разделе "Сохраняйте исходный заголовок хоста для перенаправлений и SSO".

  6. В окне "Добавление правила маршрутизации" снова нажмите кнопку "Добавить".

  7. Нажмите кнопку "Далее": теги.

  8. Нажмите кнопку "Далее": просмотр и создание, а затем нажмите кнопку "Создать".

Вы можете установить защищенное подключение к средам приложений контейнеров, доступным только изнутри, с помощью частной ссылки. С помощью приватного канала шлюз приложений может взаимодействовать с приложением-контейнером в серверной части через виртуальную сеть.

  1. После создания шлюза приложений выберите "Перейти к ресурсу".

  2. В меню слева выберите приватную ссылку, а затем нажмите кнопку "Добавить".

  3. Введите следующие значения:

    Настройка Действие
    Имя. Введите my-agw-private-link.
    Подсеть приватного канала Выберите подсеть, которую вы хотите использовать для создания приватного канала.
    Конфигурация IP внешнего интерфейса Выберите фронтальный IP-адрес для Шлюза приложений.
  4. В разделе "Параметры частного IP-адреса" нажмите кнопку "Добавить".

  5. Выберите " Добавить " в нижней части окна.

Сохранение исходного заголовка хоста для перенаправлений и единого входа

При настройке Шлюза приложений Azure в качестве обратного прокси-сервера и включении параметра Переопределение с новым именем узла, изменяется заголовок Host. Изменение заголовка может препятствовать приложениям, которые полагаются на исходное значение узла для создания URL-адресов перенаправления, абсолютных ссылок или поддержки потоков проверки подлинности OpenID Connect (OIDC).

Чтобы перенаправить исходный заголовок узла, его можно внедрить в X-Forwarded-Host заголовок, используя функцию перезаписи заголовков запросов шлюза приложений в Application Gateway.

Настройка инъекции X-Forwarded-Host

Чтобы включить X-Forwarded-Host внедрение:

  1. На вкладке "Конфигурация" выберите раздел параметров серверной части правила маршрутизации шлюза приложений:

    • Включите перезапись заголовка запроса.
    • Добавьте новый заголовок запроса со следующими значениями:
      • Имя заголовка: X-Forwarded-Host
      • Значение: {http_req_host}

    Теперь серверная часть приложения может получать оригинальный хост запроса с помощью заголовка X-Forwarded-Host.

Примечание.

При настройке правил перезаписи заголовков обязательно используйте правильный синтаксис переменной. Переменные сервера должны использовать соответствующий префикс, например http_req_ для заголовков запросов. Для устранения неполадок ошибок конфигурации правил переписывания см. статью "Перезапись заголовков HTTP и URL-адресов с помощью шлюза приложений".

Проверка приложения-контейнера

  1. Найдите общедоступный IP-адрес шлюза приложений на странице обзора или найдите адрес. Чтобы выполнить поиск, выберите все ресурсы и введите my-container-apps-agw-pip в поле поиска. Затем выберите IP-адрес в результатах поиска.

  2. Перейдите по общедоступному IP-адресу шлюза приложений.

  3. Запрос автоматически направляется в приложение-контейнер, которое проверяет успешное создание шлюза приложений.

Очистка ресурсов

Если созданные ресурсы вам больше не нужны, удалите их. При удалении группы ресурсов также удаляются все связанные ресурсы.

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

  1. В меню портала Azure выберите Группы ресурсов или выполните поиск по запросу Группы ресурсов и выберите этот пункт.

  2. На странице групп ресурсов найдите и выберите my-container-apps.

  3. На странице группы ресурсов выберите Удалить группу ресурсов.

  4. Введите my-container-apps в поле "ВВЕДИТЕ ИМЯ ГРУППЫ РЕСУРСОВ" и нажмите кнопку "Удалить".

Следующие шаги