2 года назад у меня появилась возможность работать с известным государственным заказчиком, чтобы искоренить использование бумаги в их хранении документов и рабочих процессах. Это моя попытка обобщить решение и превратить его в метод многократного использования, который другие могут реализовать и улучшить.

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

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

Terraform и Ansible позволяли создавать и настраивать инфраструктуру в тестовой среде, прежде чем она будет переведена в предварительную среду, подписана и переведена в рабочую среду. Такая автоматизация снижает риск ошибок вручную и позволяет легко создавать новые среды.

Место хранения

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

Хотите верьте, хотите нет, одна из самых фундаментальных частей создания платформы для хранения - это наличие места для хранения вещей. AWS предоставляет это в форме S3 (Simple Storage Service), которая позволяет хранить и извлекать любой объем данных в любое время из любого места в Интернете. Хранилище объектов S3 известно как бакет, и именно здесь будут храниться ваши файлы.

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

Вычислить

Теперь, когда у нас есть место для хранения данных, нам нужен путь в систему. Лучший способ сделать это - создать приложение API. Затем вы можете разместить приложение на AWS, используя EC2 (Elastic Compute Cloud), который представляет собой веб-службу, которая обеспечивает безопасные вычислительные ресурсы с изменяемым размером в облаке.

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

Конвейер сборки приложения можно настроить для управления версией приложения в каждой среде с помощью Ansible. В ваших тестовых средах можно использовать последнюю версию, в то время как предварительная и производственная среды работают на закрепленных версиях.

Очередь

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

Лучший способ решить эту проблему - иметь 2 сегмента: доверенный сегмент и ненадежный сегмент, очередь обработки и приложение для запуска антивирусной проверки. Amazon SQS ( Simple Queue Service) - это служба, которая позволяет отправлять, хранить и получать сообщения между компонентами программного обеспечения в любом объеме без потери сообщений и без необходимости постоянной доступности других служб, чтобы мы могли создавать следующий трубопровод:

  1. Полученные файлы хранятся в ненадежной корзине
  2. В очереди SQS создается сообщение с указателями на ненадежные файлы.
  3. Антивирусное приложение опрашивает очередь сообщения
  4. При обнаружении сообщения запускается антивирусная проверка файлов.
  5. Если файл не прошел проверку на вирусы, его можно удалить.
  6. Если файл прошел проверку на вирусы, его можно переместить в доверенную корзину.
  7. Когда файл извлекается, он только просматривает доверенный сегмент.

Уведомление

Вышеупомянутый процесс означает, что загруженные файлы не сразу становятся доступными для извлечения. Здесь есть пробел, в котором мы можем использовать другую функцию AWS под названием SNS ( Simple Notification Service ), которая представляет собой службу уведомлений для координации доставки сообщения подписывающимся конечным точкам и клиентам.

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

логирование

Amazon CloudWatch - это служба мониторинга облачных ресурсов AWS и приложений, запускаемых на AWS. Это означает, что вы можете просматривать журналы приложений и выполнять поиск в них из консоли AWS. Вы также можете создать метрики на основе строк журнала, а затем создать сигнал тревоги на основе метрики.

Это очень полезно: скажем, ваше приложение пытается сохранить файл в вашей корзине S3, вам понадобится строка журнала, если это не удастся. Вы можете создать метрику, которая подсчитывает количество вхождений в эту конкретную строку журнала и запускать тревогу, если это количество превышает пороговое значение в течение определенного периода времени. Аварийные сигналы можно увидеть в консоли AWS или настроить для отправки уведомлений.

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

AWS IAM (управление идентификацией и доступом) позволяет безопасно управлять доступом к сервисам и ресурсам AWS. Используя IAM, вы можете создавать пользователей и группы AWS и управлять ими, а также использовать разрешения, чтобы разрешать и запрещать их доступ к ресурсам AWS.

Это означает, что вы можете создать роль IAM для своего приложения, и эта роль является единственным приложением, которое имеет доступ к вашим сегментам S3 и очередям SQS . Преимущество этих ролей заключается в ограничении доступа к вашим ресурсам только для ролей, которым требуется доступ к ним.

Процесс хранения файлов

  1. Клиент отправляет почтовый запрос в API для сохранения файла
  2. API генерирует идентификатор и сохраняет файл в корзине S3 с идентификатором в качестве имени
  3. API создает сообщение в очереди SQS с указателями на сохраненный файл
  4. API возвращает идентификатор клиенту

Антивирусный процесс

  1. Антивирусная программа находит сообщение в очереди
  2. Местоположение файла извлекается из сообщения, и файл загружается из ненадежного сегмента.
  3. Для файла запускается проверка на вирусы, и если она проходит, файл сохраняется в доверенной корзине.
  4. Сообщение опубликовано в соцсети
  5. SNS рассылает уведомления подписчикам

Процесс поиска файлов

  1. Клиент отправляет запрос на получение в API с идентификатором файла
  2. API ищет файл в доверенном ведре
  3. В случае обнаружения файл возвращается клиенту.