Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье содержится комплексное руководство по развертыванию надежной и рабочей инфраструктуры для упрощения размещения, защиты, масштабирования и мониторинга веб-приложения на платформе Azure.
Развертывание Yelb в AWS
Пример веб-приложения Yelb в AWS развертывается с помощью Bash, AWS CLI, eksctl, kubectl и Helm. Пример сопроводительного материала содержит скрипты Bash и манифесты YAML, которые можно использовать для автоматизации развертывания приложения Yelb в AWS Elastic Kubernetes Service (EKS). Это решение демонстрирует, как реализовать брандмауэр веб-приложения с помощью AWS WAF для защиты веб-приложения, работающего в Amazon Elastic Kubernetes Service (EKS). Скрипты Bash можно использовать для создания кластера EKS и развертывания приложения Yelb . Веб-приложение Yelb предоставляется в общедоступном Интернете с помощью Amazon Application Load Balancer (ALB) и защищено с помощью списка управления веб-доступом AWS WAF (веб-ACL). Подробные инструкции см. в статье Перенос веб-приложения из службы AWS Elastic Kubernetes (EKS) в службу Azure Kubernetes (AKS).
Развертывание Yelb в Azure
В следующих разделах вы узнаете, как развернуть пример веб-приложения Yelb в кластере Службы Azure Kubernetes (AKS) и предоставить его через контроллер входящего трафика, например контроллер входящего трафика NGINX. Служба контроллера входящего трафика доступна через внутреннюю (или частную) подсистему балансировки нагрузки, которая балансирует трафик в виртуальной сети, где находится кластер AKS. В гибридном сценарии внешний интерфейс подсистемы балансировки нагрузки можно получить из локальной сети. Дополнительные сведения о внутренней балансировке нагрузки см. в статье "Использование внутреннего балансировщика нагрузки" со службой Azure Kubernetes (AKS).
Пример компаньона поддерживает установку управляемого контроллера входящего трафика NGINX с надстройкой маршрутизации приложений или неуправляемым контроллером входящего трафика NGINX с помощью диаграммы Helm. Надстройка маршрутизации приложений с контроллером входящего трафика NGINX предоставляет следующие функции:
- Простая настройка управляемых контроллеров входящего трафика NGINX на основе контроллера входящего трафика Kubernetes NGINX.
- Интеграция с Azure DNS для управления общедоступными и частными зонами.
- Завершение SSL с сертификатами, хранящимися в Azure Key Vault.
Для других конфигураций
- Конфигурация DNS и SSL
- Конфигурация надстройки маршрутизации приложений
- Настройте внутренний контроллер входящего трафика NGIX для частной зоны DNS Azure.
Чтобы повысить безопасность, приложение Yelb защищено ресурсом шлюза приложений Azure . Этот ресурс развертывается в выделенной подсети в той же виртуальной сети, что и кластер AKS или в одноранговой виртуальной сети. Брандмауэр веб-приложений Azure (WAF) защищает доступ к веб-приложению, размещённому в службе Azure Kubernetes (AKS) и выставленному через шлюз приложений Azure от распространённых эксплойтов и уязвимостей.
Предпосылки
- Активная подписка Azure . Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начать работу.
- Встроенная роль владельца Azure, или встроенные роли администратора доступа пользователей и вкладчика в подписке в вашей учетной записи Azure.
- Azure CLI версии 2.61.0 или более поздней. Дополнительные сведения см. в статье "Установка Azure CLI".
- Расширение предварительной версии Службы Azure Kubernetes (AKS).
- jq версии 1.5 или более поздней.
- Python 3 или более поздней версии.
- kubectl версии 1.21.0 или более поздней
- Helm версии 3.0.0 или более поздней
- Visual Studio Code установлен на одной из поддерживаемых платформ вместе с расширением Bicep.
- Существующий ресурс Azure Key Vault с допустимым сертификатом TLS для веб-приложения Yelb.
- Существующая зона Azure DNS или эквивалентный DNS-сервер для разрешения имен приложения Yelb.
Архитектура
В этом примере представлена коллекция шаблонов Bicep, скриптов Bash и манифестов YAML для создания кластера AKS, развертывания приложения Yelb, предоставления службы пользовательского интерфейса с помощью контроллера входящего трафика NGINX и защиты ее с помощью шлюза приложений Azure и брандмауэра веб-приложений Azure (WAF).
Этот пример также включает два отдельных файла параметров Bicep и два набора скриптов Bash и манифесты YAML, каждый из которых предназначен для развертывания двух различных вариантов решения. Дополнительные сведения о Bicep см. в разделе "Что такое Bicep?"
Завершение TLS на шлюзе приложений и вызов Yelb через HTTP.
В этом решении брандмауэр веб-приложений Azure (WAF) обеспечивает безопасность системы, блокируя вредоносные атаки.
Шлюз приложений Azure получает входящие вызовы от клиентских приложений, выполняет завершение TLS и пересылает запросы в размещенную yelb-ui
службу AKS. Эта связь достигается с помощью внутреннего подсистемы балансировки нагрузки и контроллера входящего трафика NGINX с помощью протокола транспорта HTTP. На следующей схеме показана архитектура:
Поток сообщений выглядит следующим образом:
-
Шлюз приложений Azure обрабатывает завершение TLS и отправляет входящие вызовы в службу, размещенную
yelb-ui
в AKS, по протоколу HTTP. - Прослушиватель шлюза приложений использует SSL-сертификат, полученный из Azure Key Vault , для обеспечения безопасного взаимодействия.
- Политика WAF Azure, связанная с прослушивателем, применяет правила OWASP и настраиваемые правила к входящим запросам, эффективно предотвращая многие типы вредоносных атак.
- Внутренние параметры HTTP шлюза приложений вызывают приложение Yelb через HTTP с помощью порта 80.
- Серверный пул шлюза приложений и проба работоспособности вызывают контроллер входящего трафика NGINX через внутреннюю подсистему балансировки нагрузки AKS с помощью протокола HTTP для управления трафиком.
- Контроллер входящего трафика NGINX использует внутреннюю подсистему балансировки нагрузки AKS для обеспечения безопасного взаимодействия в кластере.
- Объект входящего трафика Kubernetes использует контроллер входящего трафика NGINX для предоставления приложения через HTTP через внутреннюю подсистему балансировки нагрузки.
-
yelb-ui
Служба типаClusterIP
ограничивает выполнение в пределах кластера или через контроллер входящего трафика NGINX.
Реализация сквозного TLS с помощью шлюза приложений Azure
завершение сеанса TLS;
Шлюз приложений Azure поддерживает завершение TLS на уровне шлюза, что означает, что трафик расшифровывается на шлюзе перед отправкой на внутренние серверы. Чтобы настроить завершение TLS, необходимо добавить TLS/SSL-сертификат в прослушиватель. Сертификат должен находиться в формате PFX, который содержит как закрытые, так и открытые ключи. Сертификат можно импортировать из Azure Key Vault в шлюз приложений. Дополнительные сведения см. в статье о завершении TLS-подключений с использованием сертификатов из Key Vault.
Модель безопасности нулевого доверия
При внедрении модели безопасности нулевого доверия следует предотвратить незашифрованное взаимодействие между прокси-сервером службы, например шлюзом приложений Azure и серверными серверами. При использовании модели безопасности "Нулевое доверие" доверие не предоставляется пользователю или устройству, пытающимся получить доступ к ресурсам в сети. Вместо этого требуется непрерывная проверка удостоверений и авторизации для каждого запроса независимо от расположения или сети пользователя. В нашем сценарии реализация модели безопасности "Нулевое доверие" включает использование шлюза приложений Azure в качестве прокси-сервера службы, который выступает в качестве внешнего интерфейса для входящих запросов. Затем эти запросы отправляются к контроллеру входящего трафика NGINX в службе Azure Kubernetes (AKS) в зашифрованном формате.
Сквозной протокол TLS с помощью шлюза приложений
Вы можете реализовать подход "Нулевое доверие", настроив шлюз приложений Azure для сквозного шифрования TLS с внутренними серверами. Сквозное шифрование TLS позволяет безопасно передавать конфиденциальные данные в серверную часть, используя функции балансировки нагрузки на уровне 7 шлюза приложений, включая привязку сеансов на основе файлов cookie, маршрутизацию по URL, маршрутизацию по сайтам, а также возможность перезаписывать или внедрять заголовки X-Forwarded-*.
Если шлюз приложений настроен с использованием сквозного режима связи TLS, он завершает сеансы TLS на шлюзе и расшифровывает трафик пользователя. Затем он применяет настроенные правила, чтобы выбрать соответствующий экземпляр внутреннего пула для маршрутизации трафика. Затем шлюз приложений инициирует новое подключение TLS к внутреннему серверу и повторно шифрует данные с помощью сертификата открытого ключа внутреннего сервера перед передачей запроса в серверную часть. Ответ от веб-сервера следует тому же процессу, прежде чем достичь конечного пользователя. Чтобы включить сквозной протокол TLS, необходимо задать параметр протокола в параметре HTTP серверной части для HTTPS и применить его к внутреннему пулу. Такой подход гарантирует, что обмен данными с внутренними серверами обеспечивается и соответствует вашим требованиям.
Дополнительные сведения см. в разделе сквозное шифрование TLS шлюза приложений и рекомендации по защите шлюза приложений.
В этом решении брандмауэр веб-приложений Azure (WAF) обеспечивает безопасность системы, блокируя вредоносные атаки. Шлюз приложений Azure обрабатывает входящие вызовы из клиентских приложений, выполняет завершение TLS и реализует сквозную TLS, обращаясь к базовой службе, размещенной в AKS, с помощью транспортного протокола HTTPS через внутренний балансировщик нагрузки и контроллер входящего трафика NGINX. На следующей схеме показана архитектура:
Поток сообщений выглядит следующим образом:
- Шлюз приложений Azure обрабатывает завершение TLS и взаимодействует с серверным приложением по протоколу HTTPS.
- Прослушиватель шлюза приложений использует SSL-сертификат, полученный из Azure Key Vault.
- Политика WAF Azure, связанная с прослушивателем, запускает правила OWASP и настраиваемые правила для входящих запросов, чтобы блокировать вредоносные атаки.
- Параметры HTTP серверной части шлюза приложений настроены для вызова размещенной
yelb-ui
службы AKS через HTTPS через порт 443. - Серверный пул шлюза приложений и проба работоспособности вызывают контроллер входящего трафика NGINX через внутреннюю подсистему балансировки нагрузки AKS с помощью HTTPS.
- Контроллер входящего трафика NGINX развертывается для использования внутренней подсистемы балансировки нагрузки AKS.
- Кластер SAKS настроен с использованием поставщика Azure Key Vault для дополнения Secrets Store CSI Driver для извлечения секретов, сертификатов и ключей из Azure Key Vault через том CSI.
- Класс SecretProviderClass используется для получения сертификата, используемого шлюзом приложений из Key Vault.
- Объект ingress Kubernetes использует контроллер ingress NGINX для предоставления доступа к приложению через HTTPS через внутренний балансировщик нагрузки AKS.
- Служба
yelb-ui
имеетClusterIP
тип, который ограничивает его вызов в кластере или через контроллер входящего трафика NGINX.
Чтобы обеспечить безопасность и стабильность системы, рассмотрите следующие рекомендации:
- Регулярно обновляйте политику WAF Azure с помощью последних правил, чтобы обеспечить оптимальную безопасность.
- Реализуйте механизмы мониторинга и ведения журнала для отслеживания и анализа входящих запросов и потенциальных атак.
- Регулярно выполняйте обслуживание и обновления кластера AKS, контроллера входящего трафика NGINX и шлюза приложений для решения любых уязвимостей безопасности и поддержания безопасной инфраструктуры.
- Реализуйте механизмы мониторинга и ведения журнала для отслеживания и анализа входящих запросов и потенциальных атак.
- Регулярно выполняйте обслуживание и обновления кластера AKS, контроллера входящего трафика NGINX и шлюза приложений для решения любых уязвимостей безопасности и поддержания безопасной инфраструктуры.
Hostname (Имя узла)
Прослушиватель шлюза приложений и входной шлюз Kubernetes настроены для использования того же хостнейма. Важно использовать одно и то же имя узла для прокси-сервера службы и серверного веб-приложения по следующим причинам:
- Сохранение состояния сеанса: при использовании другого имени узла для прокси-сервера и серверного приложения состояние сеанса может быть потеряно. Это означает, что сеансы пользователей могут не сохраняться должным образом, что приводит к плохому опыту пользователя и потенциальному потере данных.
- Сбой проверки подлинности: если имя хоста отличается у прокси-сервера и серверного приложения, механизмы проверки подлинности могут не сработать. Такой подход может привести к тому, что пользователи не могут войти в систему или получить доступ к безопасным ресурсам в приложении.
- Непреднамеренное раскрытие URL-адресов: если имя хоста не сохраняется, существует риск предоставления внутренних URL-адресов конечным пользователям. Это может привести к потенциальным уязвимостям безопасности и несанкционированным доступом к конфиденциальной информации.
- Проблемы с файлами cookie: файлы cookie играют важную роль в обслуживании сеансов пользователей и передаче информации между клиентом и сервером. Если имя узла отличается, файлы cookie могут работать неправильно, что приводит к таким проблемам, как сбой проверки подлинности, неправильное обработка сеансов и неправильное перенаправление.
- Сквозные требования TLS/SSL. Если для безопасного обмена данными между прокси-сервером и серверной службой требуется сквозное подключение TLS/SSL, необходим соответствующий сертификат TLS для исходного имени узла. Использование того же имени узла упрощает процесс управления сертификатами и гарантирует, что безопасное взаимодействие устанавливается без проблем.
Эти проблемы можно избежать с помощью того же имени узла для прокси-сервера службы и серверного веб-приложения. Серверное приложение видит тот же домен, что и веб-браузер, обеспечивая правильность обработки состояния сеанса, проверки подлинности и URL-адреса.
Поток сообщений
На следующей схеме показаны шаги для потока сообщений во время развертывания и среды выполнения.
Рабочий процесс развертывания
Ниже описан процесс развертывания. Этот рабочий процесс соответствует зеленым числам на предыдущей схеме.
- Инженер безопасности создает сертификат для личного домена, который использует рабочая нагрузка, и сохраняет его в хранилище ключей Azure. Вы можете получить действительный сертификат из известного центра сертификации (ЦС).
- Инженер платформы указывает необходимые сведения в файле параметров main.bicepparams Bicep и развертывает шаблоны Bicep для создания ресурсов Azure. Необходимые сведения включают:
- Префикс для ресурсов Azure.
- Имя и группа ресурсов существующего хранилища ключей Azure, в котором хранится сертификат TLS для имени узла рабочей нагрузки и настраиваемого домена слушателя Application Gateway.
-
Скрипт развертывания можно настроить для установки следующих пакетов в кластер AKS. Для получения дополнительных сведений см. раздел параметров модуля Bicep.
- Prometheus и Grafana с помощью диаграмм Kubernetes Kubernetes Helm: по умолчанию эта конфигурация не устанавливает Prometheus и Grafana в кластер AKS. Вместо этого он устанавливает Azure Управляемый Prometheus и Azure Управляемый Grafana.
- Диспетчер сертификатов. Диспетчер сертификатов не требуется в этом примере, так как шлюз приложений и контроллер ingress NGINX используют предварительно загруженный сертификат TLS из Azure Key Vault.
- Контроллер входящего трафика NGINX с помощью диаграммы Helm: если вы используете управляемый контроллер входящего трафика NGINX с надстройкой маршрутизации приложений, вам не нужно устанавливать другой экземпляр контроллера входящего трафика NGINX через Helm.
- Прослушиватель шлюза приложений получает сертификат TLS из Azure Key Vault.
- Объект входящего трафика Kubernetes использует сертификат, полученный от поставщика Azure Key Vault для драйвера CSI хранилища секретов, чтобы предоставить службу пользовательского интерфейса Yelb через HTTPS.
- Прослушиватель шлюза приложений извлекает сертификат TLS из Хранилища ключей Azure.
- Объект входящего трафика Kubernetes использует сертификат, полученный от поставщика Azure Key Vault для драйвера CSI хранилища секретов, чтобы предоставить службу пользовательского интерфейса Yelb через HTTPS.
Рабочий процесс выполнения
- Клиентское приложение вызывает пример веб-приложения с помощью имени узла. Зона DNS, связанная с личным доменом прослушивателя шлюза приложений, использует
A
запись для разрешения DNS-запроса с адресом общедоступного IP-адреса Azure, используемого интерфейсной IP-конфигурацией шлюза приложений. - Запрос отправляется в общедоступный IP-адрес Azure, используемый интерфейсной IP-конфигурацией шлюза приложений.
- Шлюз приложений выполняет следующие действия:
- Шлюз приложений обрабатывает завершение TLS и взаимодействует с серверным приложением по протоколу HTTPS.
- Прослушиватель шлюза приложений использует SSL-сертификат, полученный из Azure Key Vault.
- Политика WAF Azure, связанная с прослушивателем, запускает правила OWASP и пользовательские правила для входящего запроса и блокирует вредоносные атаки.
- Параметры HTTP серверной части шлюза приложений настраиваются для вызова примера веб-приложения через HTTPS через порт 443.
- Серверный пул шлюза приложений вызывает контроллер входящего трафика NGINX через внутреннюю подсистему балансировки нагрузки AKS с помощью HTTPS.
- Запрос отправляется на один из узлов агента, на котором размещен модуль pod контроллера входящего трафика NGINX.
- Одна из реплик контроллера входящего трафика NGINX обрабатывает запрос и отправляет запрос в одну из конечных
yelb-ui
точек службы. -
yelb-ui
вызываетyelb-appserver
службу. -
yelb-appserver
вызывает службыyelb-db
иyelb-cache
. -
yelb-ui
вызываетyelb-appserver
службу. -
yelb-appserver
вызывает службыyelb-db
иyelb-cache
.
Развертывание
По умолчанию шаблоны Bicep устанавливают кластер AKS с сетевым плагином Azure CNI Overlay и посредством плоскости управления Cilium. Можно использовать альтернативный сетевой плагин. Кроме того, в проекте показано, как развернуть кластер AKS со следующими расширениями и функциями:
- Идентификатор рабочей нагрузки Microsoft Entra
- Сервисная сетка на основе Istio
- Интеграция виртуальной сети сервера API
- Шлюз Azure NAT
- Модуль масштабации на основе событий (KEDA)
- Расширение Dapr
- Расширение Flux V2
- Автомасштабирование вертикального модуля Pod
- Поставщик Azure Key Vault для CSI-драйвера хранилища секретов
- Очистка изображений
- Наблюдаемость сети Службы Azure Kubernetes (AKS)
- Управляемый вход NGINX с дополнением маршрутизации приложений
В рабочей среде настоятельно рекомендуется развертывать частный кластер AKS с соглашением об уровне обслуживания uptime. Дополнительные сведения см. в частном кластере AKS с общедоступным DNS-адресом.
Кроме того, можно развернуть общедоступный кластер AKS и защитить доступ к серверу API с помощью диапазонов авторизованных IP-адресов. Подробные сведения и инструкции по развертыванию инфраструктуры в Azure с помощью шаблонов Bicep см. в примере кода компаньона Azure.
В рабочей среде настоятельно рекомендуется развертывать частный кластер AKS с соглашением об уровне обслуживания uptime. Дополнительные сведения см. в частном кластере AKS с общедоступным DNS-адресом. Кроме того, можно развернуть общедоступный кластер AKS и защитить доступ к серверу API с помощью диапазонов авторизованных IP-адресов. Смотрите в сопутствующем примере кода Azure подробные сведения и инструкции по развертыванию инфраструктуры в Azure с помощью шаблонов Bicep.
Следующий шаг
Соавторы
Корпорация Майкрософт поддерживает эту статью. Следующие участники первоначально написали его:
Основной автор:
- Паоло Сальватори | Главный инженер клиента
Другие участники:
- Кен Килти | Ведущий технический менеджер программы
- Рассел де Пина | Главный TPM
- Эрин Шаффер | Разработчик содержимого 2
Azure Kubernetes Service