Как настроить ClamAV Антивирус для S3
Да, да, вы не ослышались, существуют антивирусы для S3 бакетов, в основном их используют для прохождения FedRAMP, который обязывает, что бы все было супер секюрно.
Если вы загуглите, то несомненной найдете ссылку на upsidetravel/bucket-antivirus-function который позволяет поднять и настроить ClamAV на лямбдах.
Скажу сразу, все поднимается и отлично работает, но есть одна Но. Если вы почитаете описание как его сетапить - у вас на это уйдет не один час, так как нужно сперва собрать докер образ, достать оттуда архив, развернуть лямбды | политики | sns и прочее.
Вы сейчас скажете, камон, сейчас 2021 год, где IaaC? где тераформ? И я буду с вами полностью согласен.
Давайте искать тераформ. Поиски скорей всего приведут вас к репозиторию ferozsalam/terraform-s3-clamav, код которого не изменялся уже больше 2х лет. Если попытаться поднять данный тераформ, у вас ничего не заработает так как некоторые данные устарели, включая пайтон 2й версии. (Я ничего не имею против 2го пайтона, но блин, есть же замечательный 3й)
Немного подсидев над этим тераформом, я понял, что нужно собирать версию ClamAV под Python3 + заставить антивирус работать + привести тераформ к бест-практис.
В итоге, спустя некоторое время, появился репозиторий Alpacked/terraform-clamav-s3 в нашей компании, где я все поправил и привел в божеский вид. Теперь лямбда юзает Python3 и все отлично работает.
Как работает
- Каждый раз, когда в бакет загружается новый файл тригерится лямбда
scan-bucket-file
- Лямбда скачивает антивирусную базу со своего бакета
- Файл проверяется на вирусы и уязвимости. Файлы архива извлекаются, и файлы внутри также проверяются
- После проверки теги файла обновляются, что бы отобразить результат
CLEAN
илиINFECTED
и дату сканирования.
Дополнительная информация:
- Если файл помечен как
INFECTED
- открыть его или скачать у вас не получится. Это блокируется `Bucket policy` - Антивирусная база обновляется каждые 3 часа лямбдой
update-clamav-definitions
- Полные логи сканирования по каждом файле можно найти в CloudWatch
aws/lambda/scan-bucket-file
Результат
Он может быть как таким
Так и таким
Все исходники и примеры вы можете найти в репозитории Alpacked/terraform-clamav-s3