---
title: 'Object Lock'
sidebar_label: 'Object Lock'
description: 'Как работает Object Lock, какие есть типы и режимы блокировки, как настроить Object Lock'
sidebar_position: 6
---

import {CustomTable} from 'docs-kit/components'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {TabItemLabel} from 'docs-kit/components'
import Formbricks from '@theme/MDXComponents/Formbricks'

# Object Lock

Object Lock работает по принципу WORM (Write Once Read Many) и позволяет заблокировать объекты, чтобы предотвратить их перезапись или удаление.

Для использования Object Lock в бакете должно быть включено [версионирование](/s3/buckets/versioning.mdx).
Блокировка объектов применяется только к версиям объектов.

Блокировка может быть разных [типов и режимов](#lock-types-and-modes).
В зависимости от типа блокировки ее можно установить на отдельные объекты или на бакет по умолчанию — блокировка будет применяться к новым объектам.

Возможность управления блокировкой также зависит от [роли](/s3/manage/manage-access.mdx#access-within-roles) пользователя и правил [политики доступа](/s3/buckets/bucket-policy/about-bucket-policy.mdx), подробнее в инструкции [Управлять доступом в S3](/s3/manage/manage-access.mdx).
Работать с Object Lock можно в панели управления (возможности ограничены), через [S3 API](/api/object-storage-s3/) и [инструменты](/s3/tools/), которые его используют — например, [AWS CLI](/s3/tools/aws-cli.mdx).

Чтобы управлять блокировкой объектов после настройки Object Lock, используйте инструкцию [Управлять блокировкой объекта](/s3/objects/manage-object-lock.mdx).

Если вы [удалите проект](/access-control/projects/manage/delete-project.mdx), в котором есть заблокированные объекты, они не будут удалены, пока блокировка активна.
При этом они не будут отображаться в панели управления и через API.
Чтобы восстановить заблокированные объекты после удаления проекта, [создайте тикет](https://my.selectel.ru/tickets/create/).

## Типы и режимы блокировки \{#lock-types-and-modes}

Блокировка может быть временной и бессрочной.
У временной блокировки есть два режима — Governance и Compliance.

Если у объекта одновременно включены временная и бессрочная блокировки, приоритет имеет бессрочная блокировка.

<CustomTable>
  <table>
    <thead>
      <tr>
        <th rowspan="2" />

        <th rowspan="2">Бессрочная</th>
        <th colspan="2">Временная</th>
      </tr>

      <tr>
        <th>Режим Governance</th>
        <th>Режим Compliance</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <th>На что можно назначить</th>
        <td>На объекты</td>

        <td>
          * на объекты;
          * на бакет по умолчанию — блокировка будет применяться ко всем новым объектам
        </td>

        <td>
          * на объекты;
          * на бакет по умолчанию — блокировка будет применяться ко всем новым объектам
        </td>
      </tr>

      <tr>
        <th>Возможные действия с блокировкой</th>
        <td>Отключение блокировки</td>

        <td>
          * сокращение срока блокировки`*`;
          * продление срока блокировки;
          * изменение режима блокировки на Compliance
        </td>

        <td>Продление срока блокировки</td>
      </tr>

      <tr>
        <th>Возможность удаления объектов</th>
        <td>Нельзя никому, пока блокировка включена</td>
        <td>Можно`*`</td>
        <td>Нельзя никому до истечения срока блокировки</td>
      </tr>
    </tbody>
  </table>
</CustomTable>

`*` Доступно только пользователям:

* с ролью [`member`](/s3/manage/manage-access.mdx#member);
* с [другими ролями с доступом в S3](/s3/manage/manage-access.mdx#access-within-roles), если в бакете есть политика доступа, которая разрешает [действие](/s3/buckets/bucket-policy/about-bucket-policy.mdx#actions) `s3:BypassGovernance`.

## Включить Object Lock в бакете \{#enable-object-lock}

:::info

Включить Object Lock могут:

* [Владелец аккаунта](/access-control/user-types.mdx#account-owner);
* пользователи с ролями [`member`](/s3/manage/manage-access.mdx#member), [`s3.admin`](/s3/manage/manage-access.mdx#s3-admin) и [`object_storage:admin`](/s3/manage/manage-access.mdx#object-storage-admin);
* пользователи с ролями [`s3.bucket.user`](/s3/manage/manage-access.mdx#s3-bucket-user), [`s3.user`](/s3/manage/manage-access.mdx#s3-user) и [`object_storage_user`](/s3/manage/manage-access.mdx#object-storage-user) если политика доступа разрешает им [действие](/s3/buckets/bucket-policy/about-bucket-policy.mdx#actions) `s3:PutBucketObjectLockConfiguration`.

:::

Если вы включили Object Lock, его нельзя отключить и нельзя приостановить [версионирование](/s3/buckets/versioning.mdx).

Включение Object Lock не блокирует объекты автоматически.
После настройки Object Lock в бакете вы сможете:

* [управлять блокировкой объектов](/s3/objects/manage-object-lock.mdx);
* [загружать объекты сразу с активной блокировкой](/s3/tools/aws-cli.mdx?upload-object=with-object-lock) (только через [S3 API](/api/object-storage-s3/) и [инструменты](/s3/tools/), которые его используют);
* [управлять временной блокировкой по умолчанию в бакете](#manage-default-retention).

<Tabs queryString="enable-object-lock">
  <TabItem value="control-panel" default>
    <TabItemLabel>
      Панель управления
    </TabItemLabel>

    Если в бакете отключено или приостановлено версионирование, оно будет включено автоматически при включении Object Lock.

    1. В [панели управления](https://my.selectel.ru/storage/) в верхнем меню нажмите **Продукты** и выберите **S3**.

    2. Перейдите в раздел **Бакеты**.

    3. Откройте страницу бакета → вкладка **Конфигурация**.

    4. В блоке **Защита данных** в строке **Object Lock** нажмите **Изменить**.

    5. Отметьте чекбокс **Включить Object Lock**.

    6. Опционально: включите временную блокировку по умолчанию в бакете:

       6.1.  Отметьте чекбокс **Включить блокировку по умолчанию**.

       6.2.  Выберите [режим блокировки](#lock-types-and-modes).

       6.3.  Укажите срок блокировки.

       Вы сможете [управлять временной блокировкой по умолчанию](#manage-default-retention) и после включения Object Lock.

    7. Нажмите **Сохранить**.
  </TabItem>

  <TabItem value="aws-cli">
    <TabItemLabel>
      AWS CLI
    </TabItemLabel>

    1. Убедитесь, что у вас [включено версионирование](/s3/buckets/versioning.mdx#enable-versioning).

    2. Если вы не использовали AWS CLI, [настройте его](/s3/tools/aws-cli.mdx#configure-aws-cli).

    3. Откройте CLI.

    4. Включите Object Lock:

       ```bash
       aws s3api put-object-lock-configuration \
           --bucket "<bucket_name>" \
           --object-lock-configuration '{
               "ObjectLockEnabled": "Enabled"}'
       ```

       Укажите `<bucket_name>` — имя бакета.

    5. Убедитесь, что Object Lock включен:

       ```bash
       aws s3api get-object-lock-configuration --bucket "<bucket_name>"
       ```

       Укажите `<bucket_name>` — имя бакета.

       При включенном Object Lock вернется ответ:

       ```bash
       {
           "ObjectLockConfiguration": {
               "ObjectLockEnabled": "Enabled"
           }
       }
       ```
  </TabItem>
</Tabs>

## Управлять временной блокировкой по умолчанию в бакете \{#manage-default-retention}

:::info

Управлять временной блокировкой по умолчанию могут:

* [Владелец аккаунта](/access-control/user-types.mdx#account-owner);
* пользователи с ролями [`member`](/s3/manage/manage-access.mdx#member), [`s3.admin`](/s3/manage/manage-access.mdx#s3-admin) и [`object_storage:admin`](/s3/manage/manage-access.mdx#object-storage-admin);
* пользователи с ролями [`s3.bucket.user`](/s3/manage/manage-access.mdx#s3-bucket-user), [`s3.user`](/s3/manage/manage-access.mdx#s3-user) и [`object_storage_user`](/s3/manage/manage-access.mdx#object-storage-user), если политика доступа разрешает им соответствующие [действия](/s3/buckets/bucket-policy/about-bucket-policy.mdx#actions).

:::

### Включить временную блокировку по умолчанию \{#enable-default-retention}

Временная блокировка будет применяться ко всем новым объектам в бакете.

<Tabs queryString="enable-default-retention">
  <TabItem value="control-panel" default>
    <TabItemLabel>
      Панель управления
    </TabItemLabel>

    1. В [панели управления](https://my.selectel.ru/storage/) в верхнем меню нажмите **Продукты** и выберите **S3**.
    2. Перейдите в раздел **Бакеты**.
    3. Откройте страницу бакета → вкладка **Конфигурация**.
    4. В блоке **Защита данных** в строке **Object Lock** нажмите **Изменить**.
    5. Убедитесь, что у вас отмечен чекбокс **Включить Object Lock**.
    6. Отметьте чекбокс **Включить блокировку по умолчанию**.
    7. Выберите [режим блокировки](#lock-types-and-modes).
    8. Укажите срок блокировки.
    9. Нажмите **Сохранить**.
  </TabItem>

  <TabItem value="aws-cli">
    <TabItemLabel>
      AWS CLI
    </TabItemLabel>

    1. Откройте CLI.

    2. Включите временную блокировку в бакете по умолчанию:

       ```bash
       aws s3api put-object-lock-configuration \
           --bucket "<bucket_name>" \
           --object-lock-configuration '{
               "ObjectLockEnabled": "Enabled",
               "Rule": { "DefaultRetention": { "Mode": "<lock_mode>", "<time_gap>": <number> } }
       }'
       ```

       Укажите:

       * `<bucket_name>` — имя бакета;
       * `<lock_mode>` — [режим блокировки](#lock-types-and-modes). Возможные значения — `GOVERNANCE` или `COMPLIANCE`;
       * `<time_gap>` — единица времени, в которой будет измеряться срок блокировки. Возможные значения — `DAYS` или `YEARS`;
       * `<number>` — срок блокировки в днях или годах. Не может быть больше одного года или 365 дней.

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

       ```bash
       aws s3api get-object-lock-configuration --bucket "<bucket_name>"
       ```

       Укажите `<bucket_name>` — имя бакета.

       Пример ответа при включенной временной блокировке:

       ```bash
       {
           "ObjectLockConfiguration": {
               "ObjectLockEnabled": "Enabled",
               "Rule": {
                   "DefaultRetention": {
                       "Mode": "GOVERNANCE",
                       "Days": 30
                   }
               }
           }
       }
       ```
  </TabItem>
</Tabs>

### Изменить срок временной блокировки по умолчанию \{#change-default-retention-period-time}

Если установлен режим блокировки:

* Governance — срок блокировки можно сократить или продлить;
* Compliance — срок блокировки можно только продлить.

<Tabs queryString="change-default-retention-period-time">
  <TabItem value="control-panel" default>
    <TabItemLabel>
      Панель управления
    </TabItemLabel>

    1. В [панели управления](https://my.selectel.ru/storage/) в верхнем меню нажмите **Продукты** и выберите **S3**.
    2. Перейдите в раздел **Бакеты**.
    3. Откройте страницу бакета → вкладка **Конфигурация**.
    4. В блоке **Защита данных** в строке **Object Lock** нажмите **Изменить**.
    5. Укажите новый срок блокировки.
    6. Нажмите **Сохранить**.
  </TabItem>

  <TabItem value="aws-cli">
    <TabItemLabel>
      AWS CLI
    </TabItemLabel>

    Чтобы изменить срок блокировки, используйте подраздел [Включить временную блокировку по умолчанию](#enable-default-retention) и укажите новые значения параметров `<time_gap>` и `<number>`.
  </TabItem>
</Tabs>

### Изменить режим временной блокировки по умолчанию \{#change-default-retention-period-mode}

Можно только изменить режим блокировки Governance на Compliance.

<Tabs queryString="change-default-retention-period-regime">
  <TabItem value="control-panel" default>
    <TabItemLabel>
      Панель управления
    </TabItemLabel>

    1. В [панели управления](https://my.selectel.ru/storage/) в верхнем меню нажмите **Продукты** и выберите **S3**.
    2. Перейдите в раздел **Бакеты**.
    3. Откройте страницу бакета → вкладка **Конфигурация**.
    4. В блоке **Защита данных** в строке **Object Lock** нажмите **Изменить**.
    5. Выберите режим блокировки **Compliance**.
    6. Укажите срок блокировки.
    7. Нажмите **Сохранить**.
  </TabItem>

  <TabItem value="aws-cli">
    <TabItemLabel>
      AWS CLI
    </TabItemLabel>

    Чтобы изменить режим блокировки, используйте подраздел [Включить временную блокировку по умолчанию](#enable-default-retention) и в параметре `<lock_mode>` укажите `COMPLIANCE`.
  </TabItem>
</Tabs>

### Отключить временную блокировку по умолчанию \{#disable-default-retention-perion}

Можно отключить только временную блокировку в режиме Governance.

При отключении временной блокировки новые объекты не будут блокироваться.
Объекты, которые были загружены и автоматически заблокированы до отключения временной блокировки по умолчанию, останутся заблокированными в соответствии с [режимом блокировки](#lock-types-and-modes).
Сам Object Lock в бакете не будет отключен.

<Tabs queryString="disable-object-lock">
  <TabItem value="control-panel" default>
    <TabItemLabel>
      Панель управления
    </TabItemLabel>

    Отключить временную блокировку в панели управления может только [Владелец аккаунта](/access-control/user-types.mdx#account-owner) или пользователь с ролью [`member`](/s3/manage/manage-access.mdx#member).

    1. В [панели управления](https://my.selectel.ru/storage/) в верхнем меню нажмите **Продукты** и выберите **S3**.
    2. Перейдите в раздел **Бакеты**.
    3. Откройте страницу бакета → вкладка **Конфигурация**.
    4. В блоке **Защита данных** в строке **Object Lock** нажмите **Изменить**.
    5. Снимите чекбокс **Включить блокировку по умолчанию**.
    6. Нажмите **Сохранить**.
  </TabItem>

  <TabItem value="aws-cli">
    <TabItemLabel>
      AWS CLI
    </TabItemLabel>

    Отключить временную блокировку через AWS CLI может [Владелец аккаунта](/access-control/user-types.mdx#account-owner), пользователь с ролью [`member`](/s3/manage/manage-access.mdx#member) или пользователь с другой [ролью с доступом в S3](/s3/manage/manage-access.mdx), если политика доступа разрешает ему [действие](/s3/buckets/bucket-policy/about-bucket-policy.mdx#actions) `s3:BypassGovernanceRetention`.

    1. Откройте CLI.

    2. Отключить временную блокировку в бакете по умолчанию:

       ```bash
       aws s3api put-object-lock-configuration \
           --bucket "<bucket_name>" \
           --object-lock-configuration '{
               "ObjectLockEnabled": "Enabled"
       }'
       ```

       Укажите `<bucket_name>` — имя бакета.

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

       ```bash
       aws s3api get-object-lock-configuration --bucket "<bucket_name>"
       ```

       Укажите `<bucket_name>` — имя бакета.

       Пример ответа при отключенной временной блокировке:

       ```bash
       {
           "ObjectLockConfiguration": {
               "ObjectLockEnabled": "Enabled"
           }
       }
       ```
  </TabItem>
</Tabs>

<Formbricks />
