Интегрированные бессерверные микрослужбы виртуальной сети

Cлужба управления Azure API
Azure Cosmos DB
Функции Azure
Azure Key Vault
Виртуальная сеть Azure

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

В этой статье и связанном проекте кода приведен пример сценария с указанием основных технических компонентов, который можно использовать за основу в конкретных реализациях. Решение автоматизирует все развертывания кода и инфраструктуры с помощью Terraform и включает автоматическую интеграцию, модуль и нагрузочное тестирование.

Архитектура

На следующей схеме показан поток запроса на создание амбулаторной карты.

Diagram showing virtual network integrated microservices.

Скачайте файл Visio для этой архитектуры.

Workflow

  1. Внешние службы и клиенты отправляют запрос POST к APIM с данными, содержащим сведения о пациенте.
  2. APIM вызывает функцию CreatePatient в API пациента с заданными сведениями о пациенте.
  3. Функция CreatePatient в API пациента вызывает функцию CreateAuditRecord в приложении-функции API аудита для создания записи аудита.
  4. Функция CreateAuditRecordAPI аудита создает запись аудита в Azure Cosmos DB и возвращает ответ об успешном выполнении в функцию CreatePatientAPI пациента.
  5. Функция CreatePatient создает амбулаторную карту пациента в Azure Cosmos DB и возвращает ответ об успешном выполнении в APIM.
  6. Внешние службы и клиенты получают ответ об успешном выполнении от APIM.

Компоненты

Решение использует следующие компоненты:

  • Azure Управление API (APIM) — это гибридная многооблачная платформа для управления API во всех средах. В этом решении APIM контролирует внутренний и сторонний доступ к API пациента, который обеспечивает чтение и/или запись данных. APIM обеспечивает беспроблемную интеграцию с различными механизмами проверки подлинности.

  • Функции Azure — это бессерверная платформа вычислений, которая обрабатывает небольшие фрагменты кода, управляемые событиями. Облачная инфраструктура предоставляет необходимые обновленные серверы для выполнения функций в большом масштабе. В текущем решении используется набор из двух микрослужб API Функций Azure, которые создают операции для результатов анализов пациентов и записей аудита и управляют ими.

  • Виртуальная сеть Azure предоставляет изолированную и высокозащищенную среду приложений за счет ограничения доступа к сети с определенных IP-адресов или подсетей. Как APIM, так и Функции Azure поддерживают ограничения доступа и развертывание в виртуальных сетях. Это решение использует интеграцию с региональной виртуальной сетью для развертывания приложений-функций в одной и той же виртуальной сети в одном и том же регионе.

  • Azure Key Vault служит для централизованного хранения, шифрования ключей, сертификатов и строк подключения, а также для управления доступом к ним. В этом решении ключи узла Функций Azure и строки подключения Azure Cosmos DB хранятся в Key Vault, доступ к которому имеют только обладатели определенных удостоверений.

  • Azure Cosmos DB — это полностью управляемая бессерверная база данных с мгновенной и автоматической масштабируемостью. В текущем решении обе микрослужбы хранят данные в Azure Cosmos DB с помощью драйвера MongoDB Node.js. Службы не используют данные совместно, и вы можете развернуть каждую службу в отдельной независимой базе данных.

  • Application Insights, функция Azure Monitor, сообщает о производительности, использовании, доступности и поведении приложений для обнаружения и диагностики аномалий.

    Сбои в работе архитектуры на основе микрослужб зачастую связаны с различными компонентам, и для их выявления необходимо изучить архитектуру в комплексе, не отдельные службы. Возможность корреляции данных телеметрии от компонентов крайне важна для диагностики таких проблем. Телеметрия Application Insights централизует ведение журнала в рамках всего конвейера запросов для обнаружения аномалий производительности. Для данных телеметрии используется общий идентификатор операции, что позволяет сопоставлять компоненты.

    APIM и среда выполнения Функций Azure имеют встроенную поддержку Application Insights для создания и сопоставления разнообразных данных телеметрии, включая стандартные выходные данные приложения. Приложения-функции используют пакет SDK Node.js для Application Insights для отслеживания зависимостей и других настраиваемых данных телеметрии вручную.

    Дополнительные сведения о распределенной трассировке телеметрии в этом решении см. в разделе Распределенная телеметрия.

Альтернативные варианты

  • Для текущего решения требуется ключ подписки для доступа к конечной точке APIM, но вы также можете использовать проверку подлинности Microsoft Entra.
  • Помимо использования ключей доступа к API, можно использовать встроенную проверку подлинности Служба приложений Функции Azure для включения авторизации Microsoft Entra для управляемых удостоверений API.
  • Вы можете заменить конечную точку Azure Cosmos DB в этом решении на другую службу MongoDB, не изменяя код.
  • Для обеспечения дополнительной безопасности Azure Cosmos DB можно заблокировать трафик от баз данных Azure Cosmos DB в приложения-функции.
  • Такие компоненты, как Azure Cosmos DB, могут передавать данные телеметрии в Azure Monitor, где их можно сопоставить с данными телеметрии из Application Insights.
  • Вместо Terraform можно использовать портал Azure или Azure CLI для задач смены ключей Key Vault.
  • Для автоматизации развертывания решения вместо Terraform можно использовать такую систему, как, например, Azure DevOps или GitHub Actions.
  • Для обеспечения высокого уровня доступности это решение можно развернуть в нескольких регионах. Настройте Azure Cosmos DB на использование нескольких источников, используйте встроенную поддержку нескольких регионов в APIM и разверните приложения Функций Azure в парных регионах.

Подробности сценария

В этой статье описывается интегрированное решение для управления амбулаторными картами. Медицинской организации необходимо хранить в облаке большие объемы данных медицинских анализов пациентов, которые являются строго конфиденциальными. Внутренние и сторонние системы должны иметь возможность безопасного чтения и записи данных через программный интерфейс (API). Все взаимодействия с данными должны регистрироваться в реестре аудита.

Потенциальные варианты использования

  • Доступ к строго конфиденциальным данным из назначенных внешних конечных точек.
  • Реализация безопасного аудита для операций доступа к данным.
  • Интеграция независимых приложений микрослужб с общим доступом и системой безопасности.
  • Использование функций безопасности виртуальной сети и преимуществ экономичности и гибкости бессерверных функций.

Льготы

Некоторые преимущества бессерверных приложений, таких как Функции Azure, — это экономичность и гибкость использования только необходимых вычислительных ресурсов вместо авансовых платежей за выделенные серверы. Это решение позволяет Функциям Azure использовать ограничения доступа к виртуальной сети для обеспечения безопасности без затрат и операционных издержек, связанных с полноценными средами службы приложений Azure (средами ASE).

APIM управляет внутренним и сторонним доступом к набору микрослужб API, созданных на основе Функций Azure. API пациента предоставляет операции создания, чтения, обновления и удаления (CRUD) для пациентов и их результатов анализов. Приложение-функция API аудита предоставляет операции для создания записей аудита.

Каждое приложение функции хранит свои данные в независимой базе данных Azure Cosmos DB. Azure Key Vault служит для безопасного хранения всех ключей, секретов и строк подключения, связанных с приложениями и базами данных. Телеметрия Application Insights и Azure Monitor позволяют централизовать ведение журнала в системе.

Рекомендации

Эти рекомендации реализуют основные принципы платформы Azure Well-Architected Framework, которая является набором руководящих принципов, которые можно использовать для улучшения качества рабочей нагрузки. Дополнительные сведения см. в статье Microsoft Azure Well-Architected Framework.

При реализации этого решения учитывайте следующие аспекты.

Безопасность

Безопасность обеспечивает гарантии от преднамеренного нападения и злоупотребления ценными данными и системами. Дополнительные сведения см. в разделе "Общие сведения о компоненте безопасности".

Ввиду конфиденциальности данных безопасность имеет первостепенное значение в этом решении. Решение использует несколько механизмов для защиты данных:

  • Управление шлюзом APIM
  • Ограничения доступа к виртуальной сети
  • Ключи доступа к службам и строки подключений
  • Управление ключами и строками подключения в Key Vault
  • Смена ключей Key Vault
  • Удостоверения управляемой службы

Вы можете защитить экземпляр Azure Управление API от распределенных атак типа "отказ в обслуживании" (DDoS) с помощью защиты от атак DDoS Azure. Защита от атак DDoS Azure предоставляет расширенные функции устранения рисков DDoS для защиты от атак DDoS в томах и протоколах.

Дополнительные сведения о шаблоне безопасности этого решения см. в разделе "Шаблон безопасности" для обмена данными между Управление API, приложениями-функциями и Azure Cosmos DB.

Управление шлюзом API

Доступ к системе предоставляется только через одну управляемую конечную точку APIM. Подсеть APIM разрешает входящий трафик на указанные IP-адреса узла шлюза.

APIM обеспечивает беспроблемную интеграцию с различными механизмами проверки подлинности. Для текущего решения требуется ключ подписки, но вы также можете использовать идентификатор Microsoft Entra для защиты конечной точки APIM без необходимости управлять ключами подписки в APIM.

Виртуальная сеть

Чтобы не предоставлять общий доступ к интерфейсам API и функциям, виртуальная сеть Azure предоставляет доступ к сети для интерфейсов API и функций только с определенных IP-адресов или подсетей. Служба Управления API и Функции Azure поддерживают ограничения доступа и развертывание в виртуальных сетях.

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

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

Решение использует интеграцию с региональной виртуальной сетью для интеграции APIM и приложений-функций с одними и теми же виртуальной сетью и регионом Azure. Существует несколько важных моментов, касающихся использования интеграции с региональной виртуальной сетью.

  • Для обеспечения интеграции с региональной виртуальной сетью и ее масштабируемости необходимо использовать Функции Azure ценовой категории "Премиум".
  • Для обеспечения подключения к виртуальной сети необходимо использовать APIM ценовой категории "Разработчик" или "Премиум".
  • Поскольку вы развертываете приложения-функции в подсети виртуальной сети, настройте ограничения доступа для приложений-функций, чтобы разрешить трафик из других подсетей в виртуальной сети.
  • Интеграция с региональными виртуальными сетями ограничивает только исходящий трафик из Функции Azure в виртуальную сеть. Входящий трафик по-прежнему направляется за пределы виртуальной сети, хотя он ограничен списком доступа приложения.

Только Среды службы приложений обеспечивают полную изоляцию виртуальной сети на уровне сети. Реализовать среды ASE может оказаться значительно затратнее и сложнее, чем Функции Azure, которые поддерживают интеграцию с региональной виртуальной сетью. Масштабирование ASE также является менее эластичным.

Access keys

Вы можете вызывать APIM и приложения-функции без использования ключей доступа. Однако отключение ключей доступа не рекомендуется, поэтому для доступа ко всем компонентам этого решения требуются ключи.

  • Для доступа к APIM требуется ключ подписки, поэтому пользователям необходимо включить Ocp-Apim-Subscription-Key в заголовки HTTP.
  • Всем функциям в приложении функции API пациента требуется ключ доступа API, поэтому при вызове API пациента APIM должен включать x-functions-key в заголовок HTTP.
  • Для вызова CreateAuditRecord в приложении функции API аудита требуется ключ доступа API, поэтому при вызове функции CreateAuditRecord API пациента должен включать x-functions-key в заголовок HTTP.
  • Оба приложения Функций используют Azure Cosmos DB в качестве хранилища данных, поэтому они должны использовать строка подключения для доступа к базам данных Azure Cosmos DB.

Хранилище Key Vault

Несмотря на то, что имеется возможность хранить ключи доступа и строки подключения в параметрах приложения, это не рекомендуется, поскольку любой пользователь, у которого есть доступ к приложению, может видеть ключи и строки. Лучшим вариантом, особенно для рабочих сред, является хранение ключей и строк в Azure Key Vault и использование ссылок Key Vault для вызова приложений. Key Vault разрешает доступ только указанным управляемым удостоверениям.

Для повышения производительности APIM использует политику входящего трафика для кэширования ключа узла API пациента. Для последующих попыток APIM сначала ищет ключ в кэше.

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

Смена ключей

Смена ключей Key Vault помогает повысить безопасность системы. Можно настроить регулярную автоматическую смену ключей, а также смену ключей вручную или по запросу в случае утечки.

Смена ключей включает в себя обновление нескольких параметров:

  • Сам ключ узла приложения-функции
  • Секрет в Key Vault, в котором хранится ключ узла
  • Ссылка Key Vault в параметрах приложения-функции для ссылки на последнюю версию секрета
  • Ссылка Key Vault в политике кэширования APIM для API пациента

Для большинства задач смены ключей текущее решение использует Terraform. Дополнительные сведения см. статье Структура смены ключей с помощью Terraform.

Управляемые удостоверения

В этом решении APIM и приложения-функции используют назначенные системой удостоверения управляемых служб (MSI) Azure для доступа к секретам Key Vault. Key Vault имеет следующие отдельные политики доступа для управляемого удостоверения каждой службы:

  • APIM может получить ключ узла для приложения-функции API пациента.
  • Приложение-функция API пациента может получить ключ узла API аудита и строка подключения Azure Cosmos DB для своего хранилища данных.
  • Приложение-функция API аудита может получить строка подключения Azure Cosmos DB для своего хранилища данных.

Оптимизация затрат

Оптимизация затрат заключается в поиске способов уменьшения ненужных расходов и повышения эффективности работы. Дополнительные сведения см. в разделе Обзор критерия "Оптимизация затрат".

Одним из основных преимуществ бессерверных приложений, таких как Функции Azure, является экономия денег за счет оплаты только за потребленные ресурсы, а не за использование выделенных серверов. Для поддержки виртуальных сетей требуется план Функций Azure уровня "Премиум" (за отдельную плату). Функции Azure уровня "Премиум" поддерживают интеграцию с региональной виртуальной сетью при сохранении поддержки динамического масштабирования. Функции Azure ценовой категории "Премиум" включают интеграцию виртуальной сети в APIM.

Дополнительные сведения и калькулятор цен см. на странице Цены на Функции Azure.

Функции также можно размещать на виртуальных машинах Службы приложений. Только Среды службы приложений (ASE) обеспечивают полную изоляцию виртуальной сети на уровне сети. Среды ASE могут оказаться значительно дороже, чем план Функций Azure, поддерживающий интеграцию с региональной виртуальной сетью, а масштабирование ASE менее эластичное.

Развертывание этого сценария

Исходный код для этого решения находится в здесь.

Исходный код TypeScript для API PatientTest и API аудита находятся в папке/src. Исходный код каждого API содержит контейнер разработки, в котором установлены все необходимые компоненты, которые помогут вам быстро приступить к работе.

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

Развертывание Terraform

В папке /env кода проекта находятся скрипты и шаблоны для развертывания Terraform. Terraform развертывает APIM и приложения-функции и настраивает их для использования развернутого экземпляра Application Insights. Terraform также подготавливает все ресурсы и конфигурации, включая блокировку сети и структуру безопасности ключа доступа.

В файле сведений о развертывании объясняется, как развернуть среду Terraform в своей подписке Azure. В папке /env также имеется контейнер разработки, в котором установлены все необходимые компоненты для развертывания Terraform.

Нагрузочное тестирование Locust

Чтобы оценить производительность API, можно выполнить нагрузочное тестирование для API-интерфейсов с помощью нагрузочных тестов Locust, которые входят в набор. Locust — это средство нагрузочного тестирования с открытым исходным кодом, а тесты написаны на языке Python. Нагрузочные тесты можно выполнять локально или удаленно в кластере Azure Kubernetes Service (AKS). В ходе тестирования выполняются различные операции с конечной точкой APIM и проверяется поведение в соответствии с критериями успешного выполнения и сбоя.

Соавторы

Эта статья поддерживается корпорацией Майкрософт. Первоначально он был написан следующими участник.

Автор субъекта:

  • Ханнес Нель | Главный руководитель по разработке программного обеспечения

Чтобы просмотреть недоступные профили LinkedIn, войдите в LinkedIn.

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

Следующие архитектуры охватывают ключевые сценарии Управление API.

В следующих статьях рассматриваются ключевые сценарии функций: