Шаблоны проектирования безопасных бессерверных приложений

NovaInfo 132, с.24-25, скачать PDF
Опубликовано
Раздел: Технические науки
Просмотров за месяц: 21
CC BY-NC

Аннотация

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

Ключевые слова

LAMBDA, AWS, ДАННЫЕ, ШАБЛОН, ВЫЧИСЛЕНИЯ, БЕССЕРВЕРНЫЕ, МАШИНА, ФУНКЦИЯ

Текст научной работы

В рамках этой статьи рассматривается только AWS Lambda. AWS Lambda поддерживает различные среды выполнения, например Python, Node.js, Java, Go или C#, а также тесно интегрирован с остальной частью экосистемы AWS. Лямбда-функции имеют много преимуществ по сравнению с традиционными серверно-ориентированными архитектурами, такие как:

  • Развертывание: скорость, с которой код проходит стадии от написания до его выполнения намного быстрее, чем использование виртуальных машин или контейнеров;
  • Масштабируемость: Lambda позволяет выполнять тысячи одновременных исполнений функций;
  • Стоимость: в отличие от традиционных архитектур, использующих серверы, где нам нужно платить за время работы, мы платим только за время, когда код выполняется Lambda;
  • Интеграции: Lambda может подписаться на различные события такие как CloudWatch, S3, API Gateway, SNS и Kinesis;
  • Без сохранения состояния: функции Lambda не имеют состояния, что обеспечивает простоту реализации систем безопасности.

Первым шаблоном проектирования является шаблон периодических вызовов, показан на рисунке 1. Он представляет тип моделей, которые периодически вызывают функции Lambda с помощью планировщиков, таких как cron в операционных системах Unix или служба мониторинга CloudWatch. Каждая функция Lambda выполняет простую задачу и сообщает о результатах выполнения в каналы уведомлений, такие как асинхронные шины сообщений или электронные письма.

Шаблон периодического вызова.
Рисунок 1. Шаблон периодического вызова

Например, мы можем архивировать данные, к которым не обращались в течение длительного периода времени, в долгосрочное хранилище резервных копий, такое как служба хранения AWS Glacier, с помощью функции Lambda, которая сканирует данные с использованием метода LRU и копирует их в хранилище. Подход с периодическим вызовом также позволяет облачным арендаторам создавать приложения, которые обеспечивают постоянное соответствие требованиям системных и организационных средств управления (SOC2) или альянса безопасности облачных вычислений (CSA).

Эти приложения периодически проверяют состояние соответствия ресурсов, например, если какая-либо виртуальная машина подписана на группу безопасности, у которой порт SSH открыт для всех IP-адресов (0.0.0.0/0). Состояние соответствия сохраняется в хранилище данных для последующего просмотра.

Следующий шаблонов является событийно ориентированный, В шаблоне проектирования, управляемом событиями, как показано на рис. 2, набор функций Lambda подписывается на события из облачных ресурсов, такие как доступ к файлам в хранилище объектов или обновление таблицы в базе данных. Эти события запускают выполнение подписанной функции Lambda, передавая необходимый контекст.

Событийно ориентированный шаблон.
Рисунок 2. Событийно ориентированный шаблон

В отличие от шаблона периодического вызова, подход, управляемый событиями, может уменьшить задержку между возникновением событий и действием, предпринимаемым вызываемой Lambda. Например, облачные арендаторы могут внедрить антивирусное приложение для хранилища объектов S3, которое выполняет сканирование загруженных файлов на S3 на наличие вирусов. Как только происходит событие загрузки файла, S3 вызывает соответствующую функцию Lambda, которая удаляет вредоносные файлы на основе результатов сканирования на наличие вирусов.

В другом случае мы можем реализовать системы обнаружения вторжений, присоединив функции Lambda к балансировщикам нагрузки приложений. Учитывая, что все веб-соединения завершаются на балансировщике нагрузки, функция Lambda, принимающая журналы балансировщика нагрузки, имеет полную видимость входящих запросов. Мы можем выполнять два типа обнаружения в Lambda:

  1. Обнаружение на основе сигнатур, которое идентифицирует такие атаки, как SQL injection или межсайтовый скриптинг (XSS);
  2. Обнаружение на основе аномалий, которое изолирует вредоносные веб-запросы, отклоняющиеся от обычных поведение.

Шаблон проектирования, основанный на событиях, имеет несколько преимуществ:

  1. Он минимизирует затраты, вызывая лямбда-функцию только при возникновении события;
  2. Лямбда-функции автоматически масштабируются в зависимости от количества событий, обеспечивая масштабируемую структуру.
Шаблон проектирования потоковой передачи данных.
Рисунок 3. Шаблон проектирования потоковой передачи данных

В шаблоне проектирования потоковой передачи данных (изображен на рисунке 3) лямбда-функция находится на пути потока данных и функционирует либо как агрегатор, либо как разделитель данных. Например, лямбда может разделить входящий поток данных на несколько небольших потоков (раздел) или объединить несколько входящих потоков в один большой поток данных (агрегация). Эта функция разделения также помогает Lambda действовать как балансировщик нагрузки, который делит данные на множество потоков одинакового размера и передает их в несколько потоковых сервисов в зависимости от размера входящих потоков.

Шаблон потоковой передачи данных полезен для фильтрации событий из потока данных. Например, мы хотим немедленно получать уведомления, если внутренний облачный API вызывается с вредоносных IP-адресов. В отличие от традиционных схем, требующих развертывания другого конвейера обработки данных, мы разворачиваем функцию Lambda на пути обработки API, фильтруем запрос с использованием IP-адресов и генерируем оповещения, указывающие на наличие подозрительного трафика или его отсутствие.

Связанный шаблон объединяет два или более из ранее описанных шаблонов вместе, легко последовательно передавая события между ними. Концептуально это очень похоже на конвейеры UNIX, где каждая функция маленькая, точная и выполняет одну задачу, но идея заключается в объединении их в цепочку. Как показано на рисунке 4, набор функций образует конвейер обработки данных, который объединяет шаблон, управляемый данными с шаблоном потоковой передачи данных.

Связанный шаблон.
Рисунок 4. Связанный шаблон

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

Читайте также

Список литературы

  1. Gyanedra Rai. Serverless design patterts. — URL: https://www.globallogic.com/gl_news/serverless-design-patterns [Электронный ресурс].
  2. Mike Roberts. Serverless Architectures. — URL: https://martinfowler.com/articles/serverless.html [Электронный ресурс].
  3. Николай Алекс. Как повысить производительность, используя бессерверную архитектуру. — URL: https://habr.com/ru/company/funcorp/blog/354394/ [Электронный ресурс].

Цитировать

Мирошин, Д.Ю. Шаблоны проектирования безопасных бессерверных приложений / Д.Ю. Мирошин. — Текст : электронный // NovaInfo, 2022. — № 132. — С. 24-25. — URL: https://novainfo.ru/article/19270 (дата обращения: 30.06.2022).

Поделиться