Короткий ответ
Нужно немедленно исправить источник публичного доступа (ACL или слишком широкую bucket-политику), включить блокировку публичного доступа на уровне bucket/аккаунта, затем провести ревизию логов доступа, чтобы понять, обращался ли кто-то посторонний к данным, и внедрить автоматическую проверку, предотвращающую повторное появление публичных bucket.
Как это работает подробнее
публичный доступ обычно появляется либо из-за ACL, явно разрешающей чтение «всем», либо из-за bucket-политики с принципалом * без условий; у большинства провайдеров есть отдельная настройка уровня аккаунта, блокирующая публичный доступ даже при ошибочной политике на конкретном bucket.
Пример кода
example.txt
# Было (опасно):
{"Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::prod-data/*"}
# Стало:
aws s3api put-public-access-block --bucket prod-data \
--public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=trueЧто использовать на практике
- Рекомендация. сначала закрывают доступ, затем проверяют access-логи bucket на предмет обращений с внешних/неожиданных IP за период, пока bucket был открыт; дальше добавляют превентивный контроль — автоматическое сканирование конфигурации, которое будет алертить или блокировать создание публичного bucket.
- Проверка. анонимный запрос к объекту после исправления должен вернуть ошибку доступа вместо содержимого файла.
Подводные камни
- Риск. закрыть доступ, но не проверить логи и не понять, было ли фактическое обращение посторонних
- Риск. исправить один конкретный bucket, не проверив остальные bucket аккаунта на ту же проблему
- Риск. не добавить автоматическую проверку, полагаясь только на разовое ручное исправление.