Versioning и Object Lock: в чем разница
Обе функции защищают данные, но делают это по-разному. Versioning (версионирование) по сути хранит историю объекта, сохраняя несколько версий объекта и позволяя восстановить данные после перезаписи или удаления. Object Lock (блокировка объектов) же защищает версии от изменения и удаления с помощью Retention Period и Legal Hold.
Для включения Object Lock в PC-Storage необходимо предварительно включить Versioning.
| Механизм | Что делает | Когда использовать |
|---|---|---|
| Versioning | Сохраняет версии объекта с отдельными Version ID. | Восстановление после перезаписи или удаления. |
| Object Lock / Retention Period | Запрещает изменение или удаление версии до заданной даты. | Защита данных на фиксированный период. |
| Object Lock / Legal Hold | Запрещает изменение или удаление версии до снятия блокировки. | Защита без заранее заданной даты окончания. |
1. Versioning: хранение версий объектов
После включения Versioning каждый новый объект получает уникальный Version ID (идентификатор версии). Если объект с тем же ключом загружается повторно, новая версия сохраняется отдельно, а предыдущая остается доступной.
Состояния Versioning
- Enabled – версионирование включено. Новые объекты получают уникальный Version ID.
- Suspended – создание новых версий приостановлено. Новые объекты получают Version ID = null.
Важно: после включения Versioning его нельзя полностью отключить. Можно только приостановить создание новых версий, переведя бакет в состояние Suspended.
Как включить Versioning через веб-интерфейс
- Откройте S3-хранилище и выберите нужный бакет.
- Разверните раздел «Versioning».
- Включите переключатель «Хранить историю изменений».
- Нажмите «Сохранить».

Чтобы приостановить создание новых версий, разверните тот же раздел, включите «Suspended» и сохраните изменения.

Управление Versioning через AWS CLI
Включить версионирование:
aws s3api put-bucket-versioning --bucket example-bucket --versioning-configuration status=enabled --endpoint-url=https://eu-s3.platformcraft.com
Приостановить создание новых версий:
aws s3api put-bucket-versioning --bucket example-bucket --versioning-configuration status=suspended --endpoint-url=https://eu-s3.platformcraft.com
Проверить состояние:
aws s3api get-bucket-versioning --bucket example-bucket --endpoint-url=https://eu-s3.platformcraft.com
{
"Status": "Enabled"
}
2. Delete Marker и восстановление удаленных объектов
В бакете с включенным Versioning удаление объекта без указания Version ID не удаляет сохраненную версию окончательно. Для объекта создается Delete Marker (маркер удаления), он становится текущей версией, а предыдущая версия остается в хранилище.
Дополнительно:
- DELETE без Version ID – создается Delete Marker; предыдущая версия объекта остается в хранилище.
- Доступ к сохраненной версии – используйте ключ объекта и его Version ID.
- Восстановление через веб-интерфейс – включите отображение версий и скопируйте нужную сохраненную версию.
- Окончательное удаление – необходимо удалить конкретную версию, указав Version ID; в интерфейсе также удалите соответствующий Delete Marker.
Получить список версий
aws s3api list-object-versions --bucket example-bucket --delimiter / --prefix Directory1/ --endpoint-url=https://eu-s3.platformcraft.com
Параметр prefix ограничивает выдачу ключами с указанным началом, а delimiter позволяет использовать разделитель в ключах и группировать виртуальные «директории» в CommonPrefixes.
Удалить конкретную версию
Для окончательного удаления объекта в версионируемом бакете укажите Version ID. Метод delete-object поддерживает параметр version-id.
aws s3api delete-object --bucket example-bucket --key documents/report.pdf --version-id VERSION_ID --endpoint-url=https://eu-s3.platformcraft.com
Object Lock: если указанная версия защищена Object Lock, удаление может быть отклонено. Высветится ошибка InvalidRequest: Access Denied because object protected by object lock.
3. Object Lock: защита версии от изменения и удаления
Object Lock применяется к версиям объектов. В документации ниже настройка Object Lock будет описана через S3 API / AWS CLI.
Retention Period: блокировка на срок
Retention Period (период блокировки) запрещает изменение и удаление версии объекта в течение заданного периода. Поддерживаются два режима:
- COMPLIANCE – когда пользователи, включая владельца учетной записи, не могут изменить или удалить защищенную версию до окончания периода; сам период также нельзя изменить.
- GOVERNANCE – когда пользователи не могут изменить или удалить защищенную версию, однако пользователи с необходимыми правами могут изменить или снять блокировку.
Legal Hold: блокировка без срока
Legal Hold запрещает изменение и удаление версии до снятия блокировки. Снять такую блокировку может пользователь с разрешением s3:PutObjectLegalHold.
4. Настройка Object Lock для бакета
Для бакета можно задать конфигурацию Object Lock с режимом и периодом Retention по умолчанию. В примере ниже используется COMPLIANCE на 1 день.
{
"ObjectLockEnabled": "Enabled",
"Rule": {
"DefaultRetention": {
"Mode": "COMPLIANCE",
"Days": 1
}
}
}
Применить конфигурацию:
aws s3api put-object-lock-configuration --bucket example-bucket --object-lock-configuration file://object-lock-configuration.json --endpoint-url=https://eu-s3.platformcraft.com
Получить текущую конфигурацию:
aws s3api get-object-lock-configuration --bucket example-bucket --endpoint-url=https://eu-s3.platformcraft.com
Ошибки конфигурации: put-object-lock-configuration может вернуть NoSuchBucket, AccessDenied или MalformedXML. get-object-lock-configuration также возвращает Bucket is missing ObjectLockConfiguration, если конфигурация для бакета не установлена.
5. Блокировка конкретной версии объекта
Установить Legal Hold
aws s3api put-object-legal-hold --bucket example-bucket --key documents/report.pdf --version-id VERSION_ID --legal-hold Status=ON --endpoint-url=https://eu-s3.platformcraft.com
Параметр legal-hold принимает ON для включения и OFF для снятия блокировки.
Установить Retention Period
Пример файла retention-period.json:
{
"Mode": "GOVERNANCE",
"RetainUntilDate": "2026-12-12T00:00:00"
}
aws s3api put-object-retention --bucket example-bucket --key image.jpg --version-id VERSION_ID --retention file://retention-period.json --endpoint-url=https://eu-s3.platformcraft.com
Метод put-object-retention также содержит параметр bypass-governance-retention, то есть преодоление блокировки объекта.
Получить Retention Period
aws s3api get-object-retention --bucket example-bucket --key image.jpg --endpoint-url=https://eu-s3.platformcraft.com
Пример ответа:
{
"Retention": {
"Mode": "GOVERNANCE",
"RetainUntilDate": "2026-12-12T00:00:00+00:00"
}
}
Задать Retention при загрузке объекта
Метод put-object поддерживает object-lock-mode и object-lock-retain-until-date. Это позволяет задать режим и дату блокировки при загрузке объекта.
aws s3api put-object --bucket example-bucket --key archive/report.pdf --body ./report.pdf --object-lock-mode GOVERNANCE --object-lock-retain-until-date 2026-12-12T00:00:00 --endpoint-url=https://eu-s3.platformcraft.com
6. Как выбрать механизм защиты
| Задача | Что использовать |
|---|---|
| Нужно восстановить случайно перезаписанный объект | Versioning. |
| Нужно восстановить удаленный объект | Versioning + сохраненная версия / Delete Marker. |
| Нужно запретить изменение и удаление на фиксированный срок | Object Lock + Retention Period. |
| Блокировку нельзя менять до окончания срока | COMPLIANCE. |
| Нужна возможность управлять блокировкой при наличии соответствующих прав | GOVERNANCE. |
| Нужно удерживать версию без заранее заданной даты окончания | Legal Hold. |
7. Типовые ошибки и диагностика
| Ошибка | Что проверить |
|---|---|
| NoSuchBucket | Имя бакета. |
| AccessDenied | Права пользователя на бакет и операцию. |
| NoSuchKey | Ключ объекта и, если указана версия, Version ID. |
| MalformedXML | Структуру файла конфигурации Object Lock. |
| Bucket is missing ObjectLockConfiguration | Установлена ли конфигурация Object Lock на бакете. |
| Invalid JSON | Корректность файла конфигурации Retention Period. |
| InvalidRequest: object protected by object lock | Действует ли Retention Period или Legal Hold для удаляемой версии. |
Быстрая диагностика: если удаленный объект необходимо вернуть, сначала проверьте, включен ли Versioning и доступна ли предыдущая версия. Если конкретная версия не удаляется, проверьте Object Lock, Retention Period и Legal Hold.
