Управление блокировками версий объектов (object lock) в бакете
В версионируемых бакетах можно настроить механизм блокировки версий объектов (object lock). Когда он включен, вы можете установить на версию объекта блокировку, то есть запрет на удаление или перезапись. Также для бакета можно настроить блокировки по умолчанию: они будут устанавливаться на все новые версии объектов.
Примечание
В бакетах с приостановленным версионированием блокировка версий объектов недоступна.
Включить возможность блокировок
Включение механизма блокировок не устанавливает блокировки на уже загруженные версии объектов, а только позволяет устанавливать их.
Минимальная необходимая роль — storage.admin
.
Чтобы включить возможность блокировок:
- В консоли управления
в списке сервисов выберите Object Storage и перейдите в бакет, для которого хотите настроить блокировку. - На панели слева выберите
Безопасность. - Выберите вкладку Блокировки объектов.
- Чтобы включить возможность работать с блокировками, включите опцию Включить блокировки.
- Нажмите Сохранить.
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
Выполните следующую команду:
aws s3api put-object-lock-configuration \
--bucket <имя_бакета> \
--object-lock-configuration ObjectLockEnabled=Enabled \
--endpoint-url=https://storage.yandexcloud.net
Где:
--bucket
— имя бакета.--object-lock-configuration
— настройки блокировок в бакете. ЗначениеObjectLockEnabled=Enabled
включает механизм блокировок.--endpoint-url
— эндпоинт Object Storage.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Откройте файл конфигурации Terraform и добавьте к описанию бакета блок
object_lock_configuration
:resource "yandex_storage_bucket" "b" { ... object_lock_configuration { object_lock_enabled = "Enabled" } }
Где:
object_lock_configuration
— настройки блокировки версий объектов:object_lock_enabled
— включает блокировку версий объектов. Требует включенное версионирование бакета. Необязательный параметр.
Более подробную информацию о параметрах бакета, которые вы можете задать с помощью Terraform, см. в документации провайдера
. -
Создайте ресурсы:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
После этого в указанном каталоге будет создана блокировка объектов для бакета. Проверить появление блокировки можно с помощью команды CLI:
yc storage bucket get <имя_бакета>
Результат:
name: my-bucket
folder_id: b1geoelk2fld*********
...
object_lock:
status: OBJECT_LOCK_STATUS_ENABLED
Воспользуйтесь методом S3 API putObjectLockConfiguration, методом REST API update для ресурса Bucket или вызовом gRPC API BucketService/Update.
Настроить блокировки по умолчанию
Блокировки по умолчанию устанавливаются на все новые версии объектов, загружаемые в бакет. Настройки не влияют на уже загруженные версии.
Минимальная необходимая роль — storage.admin
.
Чтобы настроить блокировки по умолчанию:
- В консоли управления
в списке сервисов выберите Object Storage и перейдите в бакет, для которого хотите настроить блокировку по умолчанию. - На панели слева выберите
Безопасность. - Выберите вкладку Блокировки объектов.
- Чтобы включить или выключить возможность работать с блокировками, используйте опцию Включить блокировки.
- Включите опцию Блокировки по умолчанию для новых версий.
- Выберите Тип блокировки по умолчанию:
- Временная управляемая — пользователь с ролью
storage.admin
может обойти блокировку, изменить ее срок или снять ее. - Временная строгая — пользователь с ролью
storage.admin
может только продлить блокировку. Обойти, сократить или снять блокировку до ее окончания нельзя.
- Временная управляемая — пользователь с ролью
- Установите Срок блокировки по умолчанию в днях или годах. Отсчитывается от момента, когда версия объекта загружена в бакет.
- Нажмите Сохранить.
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
-
Опишите конфигурацию блокировок по умолчанию в формате JSON:
{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "<тип_блокировки>", "Days": <срок_блокировки_в_днях>, "Years": <срок_блокировки_в_годах> } } }
Где:
-
ObjectLockEnabled
— статус механизма блокировок:Enabled
— механизм включен.Внимание
Это обязательное поле. Если не указать его со значением
Enabled
, появится сообщение об ошибкеInvalidRequest
, а механизм блокировок не включится. См. также Выключить возможность блокировок. -
Mode
— тип блокировки:GOVERNANCE
— временная управляемая блокировка.COMPLIANCE
— временная строгая блокировка.
-
Days
— срок блокировки в днях от момента загрузки версии объекта. Должен быть положительным целым числом. Нельзя указывать вместе сYears
. -
Years
— срок блокировки в годах от момента загрузки версии объекта. Должен быть положительным целым числом. Нельзя указывать вместе сDays
.
Готовую конфигурацию можно поместить в файл, например,
default-object-lock.json
. -
-
Загрузите конфигурацию в бакет:
aws s3api put-object-lock-configuration \ --bucket <имя_бакета> \ --object-lock-configuration file://default-object-lock.json \ --endpoint-url=https://storage.yandexcloud.net
Где:
--bucket
— имя бакета.--object-lock-configuration
— настройки блокировок по умолчанию. В данном случае указаны в файлеdefault-object-lock.json
.--endpoint-url
— эндпоинт Object Storage.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Откройте файл конфигурации Terraform и добавьте настройки блокировок по умолчанию в блок
object_lock_configuration
:... rule { default_retention { mode = "GOVERNANCE" years = 1 } } ...
Где:
rule
— правило для блокировки версий объектов. Содержит в себе параметрdefault_retention
с настройками хранения:mode
— тип блокировки. Может принимать значенияGOVERNANCE
илиCOMPLIANCE
. Необязательный параметр.years
илиdays
— время, на которое распространяется блокировка объекта. Указывается в виде числа. Необязательный параметр.
-
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
Проверить появление блокировки можно с помощью команды CLI:
yc storage bucket get <имя_бакета>
Результат:
name: my-bucket
folder_id: b1geoelk2fld********
...
object_lock:
status: OBJECT_LOCK_STATUS_ENABLED
default_retention:
mode: MODE_GOVERNANCE
years: "1"
Выключить возможность блокировок
Выключение механизма блокировок не снимает установленные блокировки: они продолжают работать, их нельзя будет снять или изменить.
Минимальная необходимая роль — storage.admin
.
Чтобы выключить возможность блокировок:
- В консоли управления
в списке сервисов выберите Object Storage и перейдите в бакет, для которого хотите настроить блокировку. - На панели слева выберите
Безопасность. - Выберите вкладку Блокировки объектов.
- Чтобы выключить возможность работать с блокировками, выключите опцию Включить блокировки.
- Нажмите Сохранить.
Если у вас еще нет AWS CLI, установите и сконфигурируйте его.
Выполните следующую команду:
aws s3api put-object-lock-configuration \
--bucket <имя_бакета> \
--object-lock-configuration ObjectLockEnabled="" \
--endpoint-url=https://storage.yandexcloud.net
Где:
--bucket
— имя бакета.--object-lock-configuration
— настройки блокировок в бакете. ЗначениеObjectLockEnabled=""
отключает механизм блокировок.--endpoint-url
— эндпоинт Object Storage.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Откройте файл конфигурации Terraform и удалите блок
object_lock_configuration
:Пример описания блокировки версий объектов в конфигурации Terraform
... object_lock_configuration { object_lock_enabled = "Enabled" rule { default_retention { mode = "GOVERNANCE" years = 1 } } } ...
-
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
-
Проверить удаление блокировки можно с помощью команды CLI:
yc storage bucket get <имя_бакета>
Результат:
name: my-bucket
folder_id: b1geoelk2fld********
...
object_lock:
status: OBJECT_LOCK_STATUS_DISABLED
Чтобы выключить возможность блокировок версий объектов в бакете, воспользуйтесь методом S3 API putObjectLockConfiguration, методом REST API update для ресурса Bucket или вызовом gRPC API BucketService/Update.
В теле запроса передайте параметр блокировки версий объектов с пустым значением:
ObjectLockConfiguration
— для S3 API.objectLock
— для REST API.object_lock
— для gRPC API.
Пример тела HTTP-запроса для S3 API:
<ObjectLockConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/" />