Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

Object Lock в S3

Object Lock используется для защиты объектов в S3 от удаления и изменений в течение заданного времени. Эта функция гарантирует неизменность данных на весь период хранения. Object Lock особенно полезен при работе с важными архивами, резервными копиями и другой критичной информацией, которую нужно защитить от случайных или намеренных действий.

Включение Object Lock

Для включения Object Lock перейдите во вкладку «Настройки» и нажмите кнопку «Изменить» напротив пункта «Блокировка объектов отключена».

Image1

В открывшемся меню включите блокировку, нажав кнопку «Включить блокировку объектов».

Обратите внимание: при включении блокировки также будет включено версионирование объектов. Отключить блокировку объектов, как и версионирование, невозможно.

Создание бакета с Object Lock

Включить Object Lock можно сразу при создании бакета, но только с помощью сторонних утилит. Рассмотрим пример создания бакета через AWS CLI.

Создадим бакет:

    
aws s3api create-bucket \ --bucket object-lock-bucket \ --endpoint-url https://s3.twcstorage.ru \ --object-lock-enabled-for-bucket

Также можем создать бакет с холодным классом хранения:

    
aws s3api create-bucket \ --bucket object-lock-bucket \ --endpoint-url https://s3.twcstorage.ru \ --create-bucket-configuration LocationConstraint=ru:ru-1-cold \ --object-lock-enabled-for-bucket

Указать объем бакета при создании невозможно. При создании бакета через сторонние клиенты всегда устанавливается минимально возможный объем — 10 ГБ для стандартного класса хранения и 1 ГБ для холодного класса. После создания бакета объем можно увеличить через панель управления.

Проверим, что Object Lock активен:

    
aws s3api get-object-lock-configuration \ --bucket object-lock-bucket \ --endpoint-url https://s3.twcstorage.ru

Ответ будет таким:

    
{ "ObjectLockConfiguration": { "ObjectLockEnabled": "Enabled" } }

Object Lock работает только с включенным версионированием. Убедимся, что оно активно:

    
aws s3api get-bucket-versioning \ --bucket object-lock-bucket \ --endpoint-url https://s3.twcstorage.ru

В ответе отобразится статус версионирования:

    
{ "Status": "Enabled", "MFADelete": "Disabled" }

Режимы Object Lock

Object Lock поддерживает два режима блокировки объектов: временную блокировку (Retention Mode) и постоянную блокировку (Legal Hold).

Временная блокировка

Для временной блокировки доступны два режима:

COMPLIANCE — строгий режим защиты. Объект и его версии нельзя удалить или изменить до окончания срока блокировки. Даже с правами администратора и специальными параметрами удалить данные невозможно. Этот режим подходит для сценариев, где критично обеспечить неизменность данных.

GOVERNANCE — гибкий режим защиты. Объекты защищены от удаления и изменений, но пользователи с правами BypassGovernanceRetention могут удалить данные до истечения срока блокировки. Подходит для защиты от случайных удалений.

Основной пользователь S3 создается с полными правами, включая BypassGovernanceRetention. Для дополнительных пользователей BypassGovernanceRetention активен для пользователей с уровнем доступа «Управление». Для пользователей с уровнем доступа «Чтение» BypassGovernanceRetention можно включить вручную, задав полиси. Для этого создайте файл s3-bypass.json:

    
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:DeleteObjectVersion", "s3:BypassGovernanceRetention" ], "Resource": "arn:aws:s3:::<имя_бакета>/*" } ] }

Вместо <имя_бакета> укажите имя вашего бакета.

Примените полиси:

    
aws iam put-user-policy \ --user-name <имя__дополнительного_пользователя> \ --policy-name allow-delete-with-bypass \ --policy-document file://s3-bypass.json \ --endpoint-url https://s3.twcstorage.ru

Постоянная блокировка

LEGAL HOLD — гибкая блокировка без срока. Объект или его версию нельзя удалить, пока удержание не будет снято вручную. Блокировка не зависит от даты и действует бессрочно. 

Настройка Object Lock

Для Object Lock можно задать настройки, которые будут использоваться по умолчанию для всех загружаемых объектов. Перейдите во вкладку «Настройки» и нажмите кнопку «Изменить» напротив пункта «Блокировка объектов включена».

Image3

В открывшемся меню выберите режим блокировки:

  • COMPLIANCE
  • GOVERNANCE
  • Без глобальной политики — при выборе этого пункта для объектов не будет устанавливаться Object Lock без явной установки.

Укажите период, в течение которого объект будет защищен.

Эти настройки задают значения по умолчанию, но не мешают использовать другой режим и срок для отдельного объекта.

Использование временных блокировок

Рассмотрим примеры использования режимов COMPLIANCE и GOVERNANCE.

Загрузим файл с блокировкой на 30 дней:

    
aws s3api put-object \ --bucket object-lock-bucket \ --key compliance-file.txt \ --body compliance-file.txt \ --object-lock-mode COMPLIANCE \ --object-lock-retain-until-date "$(date -d '+30 days' --utc +%Y-%m-%dT%H:%M:%SZ)" \ --endpoint-url https://s3.twcstorage.ru

Описание параметров:

  • --bucket — имя бакета, в который загружается объект.
  • --key — имя (путь) объекта в бакете.
  • --body — путь к файлу, который загружается.
  • --object-lock-mode — режим блокировки.
  • --object-lock-retain-until-date — дата и время окончания блокировки в формате YYYY-MM-DDTHH:MM:SSZ. До этой даты объект защищен от удаления.

Убедимся, что защита применена:

    
aws s3api get-object-retention \ --bucket object-lock-bucket \ --key compliance-file.txt \ --endpoint-url https://s3.twcstorage.ru

В ответ получим подобный вывод:

    
{ "Retention": { "Mode": "COMPLIANCE", "RetainUntilDate": "2025-04-04T10:02:21.000000000Z" } }

Попробуем удалить объект:

    
aws s3api delete-object \ --bucket object-lock-bucket \ --key compliance-file.txt \ --endpoint-url https://s3.twcstorage.ru

При удалении файл пропадет из раздела «Объекты» в панели управления бакетом и не будет отображаться при просмотре в сторонних клиентах. При таком удалении создается маркер удаления, но сам объект остается в бакете.

Проверим версии объекта:

    
aws s3api list-object-versions \ --bucket object-lock-bucket \ --prefix compliance-file.txt \ --endpoint-url https://s3.twcstorage.ru

Мы увидим, что версия сохранена и для нее создан маркер.

Image2

Удаленную версию можно восстановить по инструкции.

Удаление конкретной версии с активной блокировкой будет невозможно:

    
aws s3api delete-object \ --bucket object-lock-bucket \ --key compliance-file.txt \ --version-id <VersionId_объекта> \ --endpoint-url https://s3.twcstorage.ru

До истечения срока блокировки команда вернет ошибку:

    
An error occurred (AccessDenied) when calling the DeleteObject operation: forbidden by object lock

Использование постоянной блокировки

В отличие от временной блокировки COMPLIANCE и GOVERNANCE, LegalHold не требует указания срока и действует бессрочно. Объект остается защищенным до тех пор, пока блокировка не будет снята вручную. Это удобно в ситуациях, когда невозможно заранее определить срок хранения данных.

Загрузим файл в бакет с включенным Object Lock:

    
aws s3api put-object \ --bucket object-lock-bucket \ --key legalhold-file.txt \ --body legalhold-file.txt \ --endpoint-url https://s3.twcstorage.ru

После загрузки включим LegalHold для объекта:

    
aws s3api put-object-legal-hold \ --bucket object-lock-bucket \ --key legalhold-file.txt \ --legal-hold "Status=ON" \ --endpoint-url https://s3.twcstorage.ru

Проверим статус блокировки:

    
aws s3api get-object-legal-hold \ --bucket object-lock-bucket \ --key legalhold-file.txt \ --endpoint-url https://s3.twcstorage.ru

Ожидаемый вывод:

    
{ "LegalHold": { "Status": "ON" } }

Попробуем удалить объект:

    
aws s3api delete-object \ --bucket object-lock-bucket \ --key legalhold-file.txt \ --endpoint-url https://s3.twcstorage.ru

Результатом выполнения команды будет установка маркера:

    
{ "DeleteMarker": true, "VersionId": "F1IzDfHkrhpMtWUZ7gUcnYPAE2xPQ7w" }

Проверим версии объекта:

    
aws s3api list-object-versions \ --bucket object-lock-bucket \ --prefix legalhold-file.txt \ --endpoint-url https://s3.twcstorage.ru

Вы увидите версию и маркер удаления.

Image4

Удаленную версию можно восстановить по инструкции.

Попробуем удалить конкретную версию:

    
aws s3api delete-object \ --bucket object-lock-bucket \ --key legalhold-file.txt \ --version-id <VersionId_объекта> \ --endpoint-url https://s3.twcstorage.ru

Выполнение команды вызовет ошибку.

Чтобы снять блокировку, выполните:

    
aws s3api put-object-legal-hold \ --bucket object-lock-bucket \ --key legalhold-file.txt \ --legal-hold "Status=OFF" \ --endpoint-url https://s3.twcstorage.ru

После снятия блокировки версию объекта можно будет удалить.

Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев