Object Lock#

Блокировка объектов (Object Lock) позволяет защитить версии объектов от удаления и перезаписи. Она реализует механизм однократной записи с возможностью чтения (Write Once Read Many, WORM) для объектного хранилища. Object Lock может использоваться для соблюдения законодательных требований к срокам хранения данных, предотвращения изменений данных и их защиты от кибератак, в частности от шифрования данных с помощью программ-вымогателей.

Версии объектов могут блокироваться как на предопределённый период времени (Retention Period), так и бессрочно (Legal Hold). Эти способы блокировки независимы друг от друга и могут применяться к одной и той же версии объекта одновременно. Для разных версий одного объекта можно задать различные сроки блокировки и включить или отключить бессрочную блокировку.

При блокировке на конечный срок поддерживаются два режима — Compliance и Governance. Первый обеспечивает строгую блокировку: никто не может удалить или перезаписать защищённую версию объекта. Кроме того, нельзя изменить режим блокировки, а срок хранения версии можно только увеличить. При использовании второго режима срок хранения может изменить любой пользователь с правами на объектное хранилище, так что его имеет смысл использовать только для защиты от случайных удалений, но не для защиты от кибер-угроз.

Блокировка объектов доступна только для бакетов, при создании которых она была включена явным образом с помощью опции –object-lock-enabled-for-bucket (см. пример создания бакета). При создании такого бакета активируется версионирование объектов, которое нельзя приостановить. Для автоматической блокировки всех загружаемых объектов необходимо задать политику по умолчанию.

Вы можете переопределить параметры блокировки для конкретного объекта при его загрузке (см. :ref`пример загрузки объекта с заданной политикой блокировки <PutAndLockObject>`). Индивидуальную блокировку можно использовать и когда политика по умолчанию для бакета не задана. Политику по умолчанию можно изменить или отменить, однако её изменение не влияет на блокировку уже загруженных версий объектов.

При загрузке в бакет объекта с тем же именем (ключом в терминологии S3) создаётся новая версия объекта. Предыдущая версия остаётся заблокирована в соответствии с заданными параметрами блокировки. При удалении объекта с блокировкой для последней версии объекта создаётся маркер удаления, как и при удалении объекта без блокировки. Однако, версия по-прежнему защищена от удаления.

В режиме Compliance заблокированную версию объекта нельзя удалить до окончания срока хранения. В режиме Governance версию можно удалить с помощью обхода блокировки (опция x-amz-bypass-governance-retention). Если на версию объекта установлена также бессрочная блокировка, то перед удалением её необходимо снять (см. пример удаления версии объекта).

Блокировку можно настроить также с помощью утилиты aws s3api.

PutObjectLockConfiguration#

Задаёт политику по умолчанию блокировки объектов в бакете. Данная политика применяется ко всем загружаемым объектам, если для них не указаны иные параметры блокировки.

Вы можете не задавать политику по умолчанию и указывать параметры блокировки для каждого объекта отдельно при его загрузке. При заданной политике по умолчанию вы также можете указать свои параметры блокировки для конкретного объекта при его загрузке (см. пример запроса с блокировкой загружаемого объекта).

Этот метод можно использовать также для изменения политики по умолчанию. Если вы хотите отменить блокировку по умолчанию, то в теле запроса необходимо передать пустое правило.

Пример запроса (задание политики по умолчанию)#

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

Примечание

Если для версии объекта задана блокировка в режиме GOVERNANCE, такую версию можно удалить только по истечении срока хранения. Однако, вы можете увеличить срок хранения с помощью метода PutObjectRetention.

Запрос
PUT /bucket1?object-lock=null HTTP/1.1
Host: s3.k2.cloud
Content-MD5: iaaXsYKGHBn4bP0RmNeHkQ==
Content-Type: application/json
X-Amz-Content-Sha256: beaead3198f7da1e70d03ab969765e0821b24fc913697e929e726aeaebf0eba3
X-Amz-Date: 20240805T113757Z
Authorization: AWS4-HMAC-SHA256 Credential=project:user@company/20220530/{region}/s3/aws4_request, SignedHeaders=content-length;content-md5;content-type;host;x-amz-content-sha256;x-amz-date, Signature=fe36e9908d98bd1c31de9018c3bb1190927519b6caafbdc603a9348b15ad241a
Content-Length: 289

<ObjectLockConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<ObjectLockEnabled>Enabled</ObjectLockEnabled>
<Rule>
    <DefaultRetention>
        <Days>365</Days>
        <Mode>COMPLIANCE</Mode>
    </DefaultRetention>
</Rule>
</ObjectLockConfiguration>

Пример ответа#

Ответ
HTTP/1.1 200
x-amz-request-id: tx000009502b4d37552e406-0066b0c117-b929c455-default
content-length: 0
date: Mon, 05 Aug 2024 08:33:28 GMT

Пример запроса (отмена политики по умолчанию)#

Запрос
PUT /bucket1?object-lock=null HTTP/1.1
Host: s3.k2.cloud
Content-MD5: plNlCWpKYPtD4d/5BLjIsg==
Content-Type: application/json
X-Amz-Content-Sha256: beaead3198f7da1e70d03ab969765e0821b24fc913697e929e726aeaebf0eba3
X-Amz-Date: 20240805T120234Z
Authorization: AWS4-HMAC-SHA256 Credential=project:user@company/20220530/{region}/s3/aws4_request, SignedHeaders=content-length;content-md5;content-type;host;x-amz-content-sha256;x-amz-date, Signature=74c19d49039c2f6acd13b0f38a3cbfacf9676a2d620602c7e4b500c530ae06d3
Content-Length: 152

<ObjectLockConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<ObjectLockEnabled>Enabled</ObjectLockEnabled>
</ObjectLockConfiguration>

Пример ответа#

Ответ
HTTP/1.1 200
x-amz-request-id: tx00000c9727a514fb22d88-0066b0bf22-b9ce00b3-default
content-length: 0
date: Mon, 05 Aug 2024 08:33:28 GMT

GetObjectLockConfiguration#

Возвращает заданную по умолчанию политику блокировки объектов в бакете.

Пример запроса#

Запрос
GET /bucket1?object-lock=null HTTP/1.1
Host: s3.k2.cloud
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20240805T083424Z
Authorization: AWS4-HMAC-SHA256 Credential=project:user@company/20220530/{region}/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=b6eb4c29f82a14deb13cb1aaf669c29d5cd3e4ef3f85047ee5d15b6e375235a6

Пример ответа#

Пример ответа, когда при создании бакета не был включён Object Lock
HTTP/1.1 404 Not Found
content-length: 269
x-amz-request-id: tx00000f6e86038c86ccae0-0066b0b822-b9cde984-default
accept-ranges: bytes
content-type: application/xml
date: Mon, 05 Aug 2024 08:33:28 GMT

<?xml version="1.0" encoding="UTF-8"?>
<Error>
   <Code>ObjectLockConfigurationNotFoundError</Code>
   <Message></Message>
   <BucketName>doc-test</BucketName>
   <RequestId>tx00000f6e86038c86ccae0-0066b0b822-b9cde984-default</RequestId>
   <HostId>b9cde984-default-default</HostId>
</Error>
Пример ответа, когда для бакета не задана политика по умолчанию
HTTP/1.1 200 OK
x-amz-request-id: tx00000d3bd8035ad65d9a4-0066b08e58-b929c455-default
content-type: application/xml
content-length: 135
date: Mon, 05 Aug 2024 08:33:28 GMT

<?xml version="1.0" encoding="UTF-8"?>
<ObjectLockConfiguration>
   <ObjectLockEnabled>Enabled</ObjectLockEnabled>
</ObjectLockConfiguration>
Пример ответа, когда для бакета задана политика по умолчанию
HTTP/1.1 200 OK
x-amz-request-id: tx00000445ea64132709e83-0066b0b8ad-b929d8f0-default
content-type: application/xml
content-length: 224
date: Mon, 05 Aug 2024 08:33:28 GMT

<?xml version="1.0" encoding="UTF-8"?>
<ObjectLockConfiguration>
   <ObjectLockEnabled>Enabled</ObjectLockEnabled>
   <Rule>
       <DefaultRetention>
           <Mode>COMPLIANCE</Mode>
           <Days>365</Days>
       </DefaultRetention>
   </Rule>
</ObjectLockConfiguration>

PutObjectRetention#

Позволяет увеличить срок хранения для версии объекта, если для неё установлен режим блокировки COMPLIANCE. Позволяет изменить режим блокировки и срок хранения для версии объекта, если для неё установлен режим блокировки GOVERNANCE. Если версия не указана, то параметры блокировки меняются у последней версии объекта.

Если у версии объекта установлен режим блокировки COMPLIANCE, то попытка уменьшить срок хранения или изменить режим блокировки вызовет ошибку Access denied. Если у версии объекта установлен режим блокировки GOVERNANCE, то, чтобы сократить срок хранения или изменить режим блокировки, необходимо передать заголовок x-amz-bypass-governance-retention со значением true для обхода блокировки.

Внимание

Изменить параметры блокировки у версии объекта с режимом блокировки GOVERNANCE может любой пользователь проекта с полным набором привилегий для работы с объектным хранилищем (если ему назначена политика S3FullAccess или он входит в группу IAM, которой назначена такая политика).

Пример запроса#

Запрос
PUT /bucket1/image.svg?retention=null HTTP/1.1
Host: s3.k2.cloud
x-amz-bypass-governance-retention: true
Content-Type: application/json
X-Amz-Content-Sha256: beaead3198f7da1e70d03ab969765e0821b24fc913697e929e726aeaebf0eba3
X-Amz-Date: 20240806T070611Z
Authorization: AWS4-HMAC-SHA256 Credential=project:user@company/20240806/{region}/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-bypass-governance-retention;x-amz-content-sha256;x-amz-date, Signature=7d10fc5ef6ead8008cf91e3420032660932760eb11dd89443da9c566602a8470
Content-Length: 158

<?xml version="1.0" encoding="UTF-8"?>
<Retention>
    <Mode>GOVERNANCE</Mode>
    <RetainUntilDate>2024-09-01T01:00:00.00Z</RetainUntilDate>
</Retention>
Ответ
HTTP/1.1 200
x-amz-request-id: tx00000f5497cf18231800b-0066b1cb2b-b929c455-default
content-length: 0
date: Mon, 05 Aug 2024 08:33:28 GMT

GetObjectRetention#

Запрос информации о режиме блокировки (COMPLIANCE или GOVERNANCE) и сроке хранения версии объекта (retention period). Если версия не указана, то запрос возвращает информацию о параметрах блокировки для последней версии.

Пример запроса#

Запрос
GET /bucket1/image.jpg?retention=null&versionId=Qy1mg2c2a0gbssjcAMbYVY4w.FB0.we HTTP/1.1
Host: s3.k2.cloud
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20240806T062315Z
Authorization: AWS4-HMAC-SHA256 Credential=project:user@company/20240806/{region}/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=5bfaa54a63cb0226beb63e631a0d782de61c13c9ddac8b7c363336b84ca81656
Ответ
HTTP/1.1 200
x-amz-request-id: tx0000075c5d7514860b31b-0066b1c11b-b9b75b52-default
content-type: application/xml
content-length: 149
date: Mon, 05 Aug 2024 08:33:28 GMT

<?xml version="1.0" encoding="UTF-8"?>
<Retention>
   <Mode>COMPLIANCE</Mode>
   <RetainUntilDate>2024-11-20T00:00:00.000000000Z</RetainUntilDate>
</Retention>

PutObjectLegalHold#

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

Внимание

Изменить статус бессрочной блокировки может любой пользователь проекта с полным набором привилегий для работы с объектным хранилищем (если ему назначена политика S3FullAccess или он входит в группу IAM, которой назначена такая политика).

Пример запроса#

Запрос
PUT /bucket1/image.svg?legal-hold=null&versionId=N7Xv5VGagklPKnyOq9DHHfVzaAH4Zlj HTTP/1.1
Host: s3.k2.cloud
Content-Type: application/json
X-Amz-Content-Sha256: beaead3198f7da1e70d03ab969765e0821b24fc913697e929e726aeaebf0eba3
X-Amz-Date: 20240806T061057Z
Authorization: AWS4-HMAC-SHA256 Credential=project:user@company/20240806/{region}/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-content-sha256;x-amz-date, Signature=5e6e5ebc15979fc61a7665d148de6f567ceea699a46c00d5f57e9645bd37a2c4
Content-Length: 97

<LegalHold xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Status>ON</Status>
</LegalHold>

Пример ответа#

Ответ
HTTP/1.1 200
x-amz-request-id: tx0000085068c14cd954f6a-0066b1be39-b9b75b52-default
content-length: 0
date: Mon, 05 Aug 2024 08:33:28 GMT

GetObjectLegalHold#

Запрос информации о статусе бессрочной блокировки для версии объекта. Если версия не указана, то запрос возвращает информацию о статусе блокировки для последней версии. Если статус блокировки не определён, то возвращается ошибка Object Lock Configuration Not Found.

Пример запроса#

Запрос
GET /bucket1/image.svg?legal-hold=null&versionId=N7Xv5VGagklPKnyOq9DHHfVzaAH4Zlj HTTP/1.1
Host: s3.k2.cloud
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20240806T054235Z
Authorization: AWS4-HMAC-SHA256 Credential=project:user@company/20240806/{region}/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=1b46638a5f455bcbe743ca23d6c63c80ec54b087a67a2b483138bde06932a55f

Пример ответа#

Ответ
 HTTP/1.1 200
 x-amz-request-id: tx00000cb71e50c1724baa3-0066b1b8a6-b9b5e844-default
 content-type: application/xml
 content-length: 80
 date: Mon, 05 Aug 2024 08:33:28 GMT

<?xml version="1.0" encoding="UTF-8"?>
<LegalHold>
    <Status>ON</Status>
</LegalHold>