Object Lock (неизменяемое хранение объектов)
Object Lock (блокировка объектов) это функция Amazon S3 по модели WORM (write once, read many, «записать один раз, читать многократно»), которая не даёт удалить или перезаписать версию объекта в течение заданного срока или пока не снято юридическое удержание. Требует версионирования бакета, имеет режимы governance и compliance и защищает резервные копии от шифровальщиков и украденных ключей.
Что такое Object Lock и как он работает
Согласно документации AWS, S3 Object Lock использует модель WORM (write once, read many) и не даёт удалить или перезаписать объекты на фиксированное или переменное время либо бессрочно. Он работает только в бакетах с включённым S3 Versioning и защищает отдельные версии объектов.
Инструментов два. Период хранения блокирует версию до даты окончания, которую задают для объекта или для всего бакета по умолчанию в днях или годах, в одном из двух режимов. В режиме governance пользователи не могут удалить объект или изменить блокировку без особых разрешений. В режиме compliance версию не может удалить или перезаписать никто, включая корневого пользователя аккаунта, а режим нельзя сменить и срок нельзя сократить. Юридическое удержание (legal hold) даёт ту же защиту без даты окончания, пока его не снимет пользователь с нужным разрешением, и не зависит от периода хранения.
У версии может быть период хранения, юридическое удержание или оба сразу.
Как включить и проверить Object Lock
По руководству AWS по настройке, версионирование и Object Lock включают на бакете до того, как что-либо блокировать, а после включения Object Lock его нельзя выключить и нельзя приостановить версионирование. Начните с режима governance: AWS предлагает использовать его для проверки настроек перед переходом на compliance.
# Новый бакет с Object Lock (добавьте свои параметры региона)
aws s3api create-bucket --bucket BUCKET --object-lock-enabled-for-bucket
# Срок по умолчанию: 30 дней, режим governance
aws s3api put-object-lock-configuration --bucket BUCKET --object-lock-configuration '{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "GOVERNANCE", "Days": 30 }}}'
# Посмотреть текущие настройки
aws s3api get-object-lock-configuration --bucket BUCKET
aws s3api get-object-retention --bucket BUCKET --key backup.tar.gz
Затем проверьте на тестовом объекте: окончательное удаление с указанием идентификатора версии должно завершиться ошибкой 403 Access Denied, как сказано в той же документации.
Ограничения и частые ошибки
- Блокируются версии, а не ключ. Срок хранения и legal hold защищают только ту версию, на которую поставлены, и не мешают создавать новые версии и маркеры удаления. Простой DELETE возвращает 200 OK и добавляет маркер удаления, а окончательное удаление заблокированной версии отклоняется.
- Откатить трудно. В режиме compliance единственный описанный способ удалить объект раньше срока это удалить весь аккаунт AWS, поэтому неверная дата окончания превращается в счёт за хранение.
- У governance есть обход. Тот, у кого есть
s3:BypassGovernanceRetentionи кто передаёт заголовок обхода, может снять защиту, а консоль передаёт этот заголовок по умолчанию. Тот, у кого естьs3:PutObjectRetention, может продлить срок. - Побочные эффекты. Бакеты с Object Lock нельзя использовать как приёмник журналов доступа к серверу.
- Другие провайдеры. Некоторые S3-совместимые и не относящиеся к AWS сервисы предлагают похожую неизменяемость под другими названиями. Поведение различается, поэтому читайте документацию своего провайдера: на этой странице проверен только AWS.
- Это ещё не резервная копия. Заблокированный бакет хранит то, что вы в него записали, поэтому проверки восстановления всё равно нужны.
Место Object Lock в укреплении сервера
Object Lock отвечает на конкретный вопрос: сможет ли злоумышленник с ключами сервера стереть резервные копии? Руководство CISA #StopRansomware рекомендует включать защиту от удаления или object lock на хранилищах, которые часто атакуют шифровальщики. Там же предупреждают, что неизменяемое хранилище не соответствует критериям некоторых нормативных требований и что ошибки настройки могут дорого обойтись.
На практике отправляйте одну копию в заблокированный бакет, а учётной записи, которой пользуется VPS, давайте право только на запись, без прав удаления, обхода и изменения срока хранения. Делайте срок хранения больше времени, за которое вы заметите проблему, ведь блокировка защищает только то, что охватывает. Так правило 3-2-1 дополняется неизменяемой копией, как описано в руководстве по стратегии резервного копирования VPS. Шире тема раскрыта в руководстве по защите от шифровальщиков, а учётную запись для записи держите по принципу наименьших привилегий. Регулярно проверяйте восстановление: блокировка сохраняет данные, но не доказывает, что их можно восстановить.
Связанные термины: Правило 3-2-1, Шифровальщик, RPO и RTO, Наименьшие привилегии, Восстановлено и проверено.
Часто задаваемые вопросы
Что делает Object Lock?
Object Lock это функция Amazon S3, которая по модели WORM (write once, read many) не даёт удалить или перезаписать версии объектов в течение заданного срока или пока не снято юридическое удержание.
Чем отличаются режимы governance и compliance?
В режиме governance пользователи с особыми разрешениями могут обойти или изменить блокировку. В режиме compliance никто, включая корневого пользователя аккаунта AWS, не может удалить или перезаписать версию, сократить срок хранения или сменить режим.
Нужно ли для Object Lock версионирование?
Да. AWS указывает, что Object Lock работает только в бакетах с включённым S3 Versioning, а после включения Object Lock его нельзя выключить и нельзя приостановить версионирование этого бакета.
Можно ли включить Object Lock на существующем бакете?
Да. AWS описывает включение Object Lock на существующем бакете через консоль, AWS CLI, SDK или REST API при условии, что в бакете включено версионирование.
Защищает ли Object Lock от шифровальщиков?
Он не даёт удалить или перезаписать заблокированные версии в течение срока хранения, поэтому CISA и рекомендует object lock для хранилищ, которые атакуют шифровальщики. Но он не мешает записывать новые версии, поэтому нужны проверки восстановления и срок хранения дольше времени обнаружения.
Хотите увидеть, в каком состоянии ваш сервер?
Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.
Получить бесплатную проверку сервераОткрыть Security Lab