Сканировать файлы в корзине AWS S3 на наличие вирусов с помощью лямбда

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

Однако я не понимаю, каким должен быть путь для сканирования на вирусы в конфигурации clamscan. Кроме того, есть ли учебник, на который я могу сослаться. Серверная часть нашего приложения находится в Node.js.

Я также открыт для других библиотек/сервисов.


person Nikhil    schedule 25.09.2019    source источник
comment
Я бы рассмотрел возможность промежуточной загрузки в выделенной корзине S3 (или в выделенном префиксе в существующей корзине) и запускал антивирусный рабочий процесс при загрузке каждого объекта. Рабочий процесс может использовать пошаговые функции, а не Lambda, чтобы он мог сканировать большие файлы в EC2 (без ограничений по дисковому пространству, без ограничений по времени), и рабочий процесс, наконец, перемещал (чистый) отсканированный файл в его окончательное местоположение S3.   -  person jarmod    schedule 25.09.2019


Ответы (2)


Трудно сказать без дополнительной информации (например, архитектура, на которой работает ваш код и т. д.).

Я бы сказал, что самый простой способ добиться того, чего вы хотите, — это подключить триггер к каждому событию PUT в вашем ведре S3. Я никогда не использовал какой-либо инструмент сканирования на вирусы, но я считаю, что все они работают как демон на сервере, поэтому вы можете подписаться на очередь SQS на событие корзины S3 и иметь сервер (который может быть экземпляром EC2 или экземпляром ECS). задача) с установленным средством поиска вирусов опросить очередь SQS на наличие новых сообщений.

После обработки сообщения и обнаружения уязвимости вы можете просто вызвать putObjectTagging API для вредоносного объекта.

person Thales Minussi    schedule 25.09.2019

Мы делали что-то подобное, но в нашем случае это до сохранения файла в S3. Я думаю, это нормально, решение все равно будет работать для вас.

У нас есть один экземпляр EC2, в котором мы установили файл clamav. Затем написали веб-службу, которая принимает файл из нескольких частей, берет содержимое этого файла и внутренне вызывает команду ClamAv для сканирования этого файла. В ответ эта служба возвращает, является ли файл Infected или not.

Ваше решение, может быть,

  1. Создайте веб-сервис, как указано выше, и разместите его на EC2 (давайте назовем его virus scan service).
  2. В функции Lambda вызовите virus scan service, передав содержимое.
  3. Основываясь на ответе Virus Scan service, пометьте свой файл S3 соответствующим образом.

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

Я надеюсь, что это помогает.

person Red Boy    schedule 25.09.2019
comment
Что, если я получу объект из корзины S3, преобразую его в читаемый поток и пройду через метод .scan_stream(stream[,callback]) библиотеки Clamscan, и на основе вывода мы обновим тег. Это будет работать? - person Nikhil; 30.09.2019
comment
@Nikhil, я думаю, это должно сработать, хотя я этого не делал, поэтому не уверен, как в целом будет вести себя библиотека Clamscan? Шаги, которые я написал, относятся к высокому уровню, и, очевидно, вам, возможно, придется сделать отклонения, которые решают ваш конкретный вариант использования. Я надеюсь, что это помогает. - person Red Boy; 30.09.2019