Версионирование и защита объектов: Versioning и Object Lock

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 через веб-интерфейс

  1. Откройте S3-хранилище и выберите нужный бакет.
  2. Разверните раздел «Versioning».
  3. Включите переключатель «Хранить историю изменений».
  4. Нажмите «Сохранить».
Включение Versioning в веб-интерфейсе PC-Storage
Включение Versioning в веб-интерфейсе PC-Storage.

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

Состояние Suspended
Состояние 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 (период блокировки) запрещает изменение и удаление версии объекта в течение заданного периода. Поддерживаются два режима:

  1. COMPLIANCE – когда пользователи, включая владельца учетной записи, не могут изменить или удалить защищенную версию до окончания периода; сам период также нельзя изменить.
  2. 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.

Подпишитесь на наши новости,
чтобы быть в курсе всех событий

    Прокрутить вверх