Защита данных с помощью S3 Object Lock (WORM)
Функция позволяет реализовать модель WORM (write-once-read-many), предотвращая удаление или перезапись объектов в течение заданного периода.
Object Lock работает в нескольких режимах на уровне бакета или объекта внутри.
- Режим Compliance: В этом режиме защищенная версия объекта не может быть удалена или перезаписана никем, включая корневого пользователя (root). Изменить режим или сократить срок хранения невозможно.
- Режим Governance: В этом режиме объекты также защищены от удаления или перезаписи, однако существуют исключения для пользователей с особыми правами.
Основные принципы работы
-
Object Lock подразумевает работу на уровне конкретных версий объектов. При загрузке файла с тем же именем создается новая версия. Если для новой версии не заданы настройки защиты, её можно будет удалить, при этом старая защищенная версия останется нетронутой.
- Активировать Object Lock возможно только на этапе создания бакета. При этом автоматически активируется версионность объектов.
-
При включении защиты на бакет, она автоматически применяется ко всем новым объектам.
- Правила жизненного цикла не могут удалять защищенные объекты.
- Бакет нельзя удалить, пока в нем есть хотя бы одна защищенная версия объекта, срок действия которой не истек.
Настройка через AWS CLI
Установка на Linux
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
sudo apt install unzip
unzip awscliv2.zip
sudo ./aws/install
aws --version
Установка на Windows
msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
Настройка подключения
aws configure
# Ввести:
# AWS Access Key ID: YOUR_ACCESS_KEY
# AWS Secret Access Key: YOUR_SECRET_KEY
# Default region name: None
# Default output format: json
# Добавить эндпоинт в конфигурацию
aws configure set endpoint_url https://s3.inferit.cloud
# Проверить работу загрузив список бакетов
aws s3api list-buckets
Создание бакета с опцией Object Lock
aws s3api create-bucket --bucket <Имя бакета> --object-lock-enabled-for-bucket
Настройка периода удержания по умолчанию (Bucket Level)
Чтобы все новые объекты автоматически получали защиту, настройте конфигурацию удержания для бакета.
-
Mode: COMPLIANCE или GOVERNANCE
-
Days или Years: период защиты.
aws s3api put-object-lock-configuration --bucket <Имя бакета> --endpoint-url https://s3.inferit.cloud --object-lock-configuration '{\"ObjectLockEnabled\": \"Enabled\", \"Rule\": {\"DefaultRetention\": {\"Mode\": \"COMPLIANCE\", \"Days\": 30}}}'
Установка защиты для конкретного объекта
Для отдельного объекта указывается конкретное время истечения периода защиты RetainUntilDate
aws s3api put-object-retention --bucket <Имя бакета> --key <Имя объекта> --retention "{\`"Mode\`": \`"GOVERNANCE\`", \`"RetainUntilDate\`": \`"2026-06-10T23:59:59Z\`"}"
Проверка
Для проверки защиты конкретного объекта указываем параметр key
aws s3api get-object-retention --bucket <Имя бакета> --key <Имя объекта>
Пример ответа:
{
"ObjectLockConfiguration": {
"ObjectLockEnabled": "Enabled",
"Rule": {
"DefaultRetention": {
"Mode": "COMPLIANCE",
"Days": 30
}
}
}
}
Удаление и восстановление объектов.
При удалении объекта, на его версию ставится маркер удаления, но сами данные не пропадут. Их можно вернуть, удалив этот маркер. Версионность позволяет хранить всю цепочку действий с объектом: создание, перезапись, удаление.
Просмотр и снятие маркера удаления с объекта
aws s3api list-object-versions --bucket <Имя бакета> --key <Имя объекта>
В разделе DeleteMarkers найти нужный файл с указанным ID. Выполнить удаление маркера
aws s3api delete-object --bucket <Имя бакета> --key <Имя объекта> --version-id <ID маркера>
После удаления маркера объект снова будет отображаться в хранилище.
Настройка через REST API
Для работы с API потребуются консольные утилиты (curl, wget) или графические утилиты (Postman, Insomnia). Далее примеры будет на Insomnia, поскольку он бесплатный и Open Source.
Установка
Для установки необходимо скачать установщик с официального сайта – https://insomnia.rest/download . Доступны реализации для Windows, Linux, Mac.
Настройка
Чтобы запросы к объектному хранилищу выполнялись успешно, в программе необходимо внести настройки: Method, URL, Auth, Body.

- Перейти на вкладку Auth, выбрать метод авторизации AWS IAM.
- Заполнить поля как на скриншоте:
Access Key – ключ доступа для пользователя ЛКК
Secret Key – секретный ключ для пользователя ЛКК
Region – None
Service – s3 - Перейти на вкладку Body, выбрать содержимое в формате XML и заполнить содержимое (при необходимости).
- Указать S3 Endpoint для отправки запроса и нажать кнопку Send.
- Справа будет вернувшийся результат.
Запрос всех бакетов.
GET https://s3.inferit.cloud/
No Body
Создание бакета с опцией Object Lock
Указать новую запись Headers: x-amz-bucket-object-lock-enabled : true
PUT https://s3.inferit.cloud/<Имя бакета>?object-lock
No Body
Настройка защиты для бакета
PUT https://s3.inferit.cloud/<Имя бакета>?object-lock
xml
<ObjectLockConfiguration xmlns="http://s3.amazonaws.com">
<ObjectLockEnabled>Enabled</ObjectLockEnabled>
<Rule>
<DefaultRetention>
<Mode>COMPLIANCE</Mode>
<Days>365</Days>
</DefaultRetention>
</Rule>
</ObjectLockConfiguration>
Настройка защиты для объекта
PUT https://s3.inferit.cloud/<Имя объекта>?retention
xml
<Retention xmlns="http://s3.amazonaws.com">
<Mode>COMPLIANCE</Mode>
<RetainUntilDate>2026-12-31T23:59:59Z</RetainUntilDate>
</Retention>
Проверка статуса защиты
Для поиска объекта добавляем prefix=<Имя объекта>
GET https://s3.inferit.cloud/<Имя объекта>?retention
No Body
Просмотр ID маркеров удаления
GET https://s3.inferit.cloud/<Имя бакета>?versions
No Body