Skip to content

Commit

Permalink
Updated Object Lock Beta page (#419)
Browse files Browse the repository at this point in the history
Work in progress. Have updated the [Object
Lock](https://storj.dev/dcs/api/s3/object-lock) page leaving some
placeholders to come back to.
  • Loading branch information
ferristocrat authored Sep 18, 2024
1 parent 387b8b4 commit 1f03972
Show file tree
Hide file tree
Showing 6 changed files with 155 additions and 57 deletions.
167 changes: 126 additions & 41 deletions app/(docs)/dcs/api/s3/object-lock/page.md
Original file line number Diff line number Diff line change
@@ -1,65 +1,150 @@
---
title: Object Lock (Technical Preview)
title: Object Lock (Beta)
docId: gjrGzPNnhpYrAGTTAUaj
metadata:
description: Detailed guide on the technical preview of object lock
title: 'Object Lock (Technical Preview)'
description: Detailed guide on the Beta of object lock
title: 'Object Lock (Beta)'
---
{% callout type="info" %}
**Technical Preview Service Release**
**Beta Service Release**

S3 Compatible Object Lock is in early development with restricted availability to invited customers for the purpose of testing or validating compatibility. Please refer to our [Terms of Service](https://www.storj.io/legal/terms-of-service) for more information on release definitions.
S3-Compatible Object Lock is currently available as pre-production beta and may not be suitable for all production environments.

Please refer to our [Terms of Service](https://www.storj.io/legal/terms-of-service) for more information on release definitions.
{% /callout %}

## Summary

### Overview
Storj is currently developing S3 Compatible Object Lock. As part of that development, we have an early Technical Preview Service Release that can be used to test compatibility. Note that any testing will not be representative of real-world performance, and there is no value in testing anything outside the correctness of the implementation.
Storj is currently developing [](docId:oogh5vaiGei6atohm5thi). As part of that development, we have released an early Beta Service Release, which includes **S3-Compatible Object Lock**, that can be used to evaluate the functionality.

## Beta Opt-In Instructions
1. Login to the [Storj web console](https://redirects.storj.io/login)
2. Navigate to the desired project
3. You will be prompted to enable the Object Versioning beta for the project which includes the Object Lock feature
- If you have already joined the Object Versioning beta, you already have access to the Object Lock actions
- If you do not see the prompt you can navigate to the project settings, where you will see information about the beta

## Enabling Object Lock on a Bucket
{% callout type="info" %}
Object Lock is not backwards compatible with existing buckets—a new bucket must be created to enable Object Lock.

Additionally, PutObjectLockConfiguration is not supported yet, so Object Lock can only be enabled during bucket creation and cannot be added afterward.
{% /callout %}

{% partial file="create-bucket.md" /%}

### FAQ
- **When will Object Lock be in Beta? When will it be fully released?**
- We expect to begin an open beta of Object Lock in Q3 of calendar year 2024.
- We tentatively plan to add Governance Mode and Legal Hold to the beta in Q3 of calendar year 2024, with the goal of rolling out Object Lock fully by the end of calendar year 2024.
- **Why would I test this Technical Preview?**
- We used this particular Technical Preview to do our own validation against key tools that implement S3's Object Lock, for example, Veeam.
- If your product or an integration uses Object Lock, you can use this Technical Preview to validate compatibility before we get into Beta.
- **How do I test the Technical Preview?**
- We are only opening testing to select customers and partners. Feel free to indicate your interest in the upcoming beta by filling out the form below.
- **How do I sign up to join the Beta when it arrives?**
- Fill out this form to be the first to know when the beta is arriving: [Sign Up Form](https://forms.gle/dkyqXjMkwQ34o7os6)
- **When will Object Lock be fully released?**
- We are actively working on Governance Mode and Legal Hold and plan to add them to the beta by as soon as they are ready.
- The full feature set will be released as generally available some time after the beta is feature complete
- **Why would I test this Beta?**
- If you plan to conduct a proof of concept or want to test a a pre-production instance of an integration that utilizes object lock.
- **How do I test the Beta?**
- See instructions above
- **Why doesn't the initial version support Governance Mode and Legal Hold?**
- Our initial goal is to implement the most common S3 features regarding immutability and deliver them as quickly as possible, which led us to focus on the strictest form of object lock: Compliance Mode.
- Our initial goal was to implement the most common S3 features regarding immutability and deliver them as quickly as possible, which led us to focus on the strictest form of object lock: Compliance Mode.
- We are actively working on Governance Mode, Legal Hold, and the `PutObjectLockConfiguration` action and will add them to the beta as soon as they are ready
- **How do I give feedback or request features related to Object Lock?**
- Our roadmap is public. Here are the relevant roadmap items:
- [S3 Object Lock: Compliance Mode](https://github.com/storj/roadmap/issues/47)
- [S3 Object Lock: Add Governance Mode and Legal Hold](https://github.com/storj/roadmap/issues/98)
- You can also let us know your thoughts/opinions/needs by indicating your interest in the Object Lock beta here: [Sign Up Form](https://forms.gle/dkyqXjMkwQ34o7os6)

## Instructions
1. Register on [https://satellite.qa.storj.io](https://satellite.qa.storj.io/)
1. This satellite is separate from our production satellites, so you will need to create a new account. You may use the same email you use on US1, EU1 or AP1.
2. [Generate S3-compatible credentials](docId:AsyYcUJFbO1JI8-Tu8tW3#generate-s3-compatible-credentials)
3. Use [https://gateway.staging.storjshare.io](https://gateway.staging.storjshare.io/) with generated credentials:
1. The Object Lock alpha implementation is enabled only using this specific endpoint.
- You may also submit a support request here: [https://support.storj.io/hc/en-us/requests/new](https://support.storj.io/hc/en-us/requests/new)

## Technical Details
### New S3 Actions Supported:
| Action | API Description | Description of Change(s) |
| -------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| GetObjectLockConfiguration | Gets the object lock configuration for a bucket. | Will return the ObjectLockConfiguration with `ObjectLockEnabled` either as `Enabled` or empty. `Rule` will not be included as a response element as specifying a bucket-level object Lock rule is initially out of scope. |
| PutObjectRetention | Places an object retention configuration on an object.<br> | The only value supported for `Mode` is `COMPLIANCE` as Governance Mode is initially out of scope. |
| GetObjectRetention | Retrieves an object's retention settings. | |
{% table %}
* Action
* API Description
* Description of Change(s)
---
* GetObjectLockConfiguration
* Gets the object lock configuration for a bucket.
* Will return the ObjectLockConfiguration with `ObjectLockEnabled` either as `Enabled` or empty.

`Rule` will not be included as a response element as specifying a bucket-level object Lock rule is initially out of scope.
---
* PutObjectRetention
* Places an object retention configuration on an object.
* The only value supported for `Mode` is `COMPLIANCE` as Governance Mode is initially out of scope.
---
* GetObjectRetention
* Retrieves an object's retention settings.
*
{% /table %}

### Existing S3 Actions Updated
| Method | API Description | Description of Change(s) |
| --------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| CreateBucket | Creates a new bucket. | CreateBucket will now accept the following request parameter:<br>- `x-amz-bucket-object-lock-enabled` |
| HeadObject | Retrieves metadata from an object without returning the object itself. | HeadObject will now return:<br>- Mode (only Compliance is supported initially) that is currently in place for the requested object<br>- Date/time that the object's lock will expire |
| GetObject | Retrieves an object from a bucket. | GetObject will now return:<br>- Mode (only Compliance is supported initially) that is currently in place for the requested object<br>- Date/time that the object's lock will expire |
| PutObject | Adds an object to a bucket. | PutObject will now:<br> - Prevent locked object versions from being overwritten<br><br>PutObject will now accept the following request parameters:<br>- `x-amz-object-lock-mode` (only Compliance is supported initially) <br>- `x-amz-object-lock-retain-until-date` |
| CopyObject | Creates a copy of an object that is already stored on Storj. | CopyObject will now accept the following request parameters:<br>- `x-amz-object-lock-mode` (only Compliance is supported initially) <br>- `x-amz-object-lock-retain-until-date` |
| CreateMultipartUpload | This action initiates a multipart upload and returns an upload ID. | CreateMultipartUpload will now accept the following request parameters:<br>- `x-amz-object-lock-mode` (only Compliance is supported initially) <br>- `x-amz-object-lock-retain-until-date`<br><br>Storj has a unique object level TTL. Any request that has both a TTL and a retention period will be rejected to prevent TTL's from conflicting with object lock retention periods. |
| DeleteBucket | Deletes the specified bucket. | Forced deletion of a bucket with locked objects will be prevented. |
| DeleteObject | Removes an object from a bucket. | Deletion of an object with a retention set will be prevented. |
{% table %}
* Action
* API Description
* Description of Change(s)
---
* CreateBucket
* Creates a new bucket.
* CreateBucket will now accept the following request parameter:
* `x-amz-bucket-object-lock-enabled`
---
* HeadObject
* Retrieves metadata from an object without returning the object itself.
* HeadObject will now return:
* Mode (only Compliance is supported initially) that is currently in place for the requested object
* Date/time that the object's lock will expire
---
* GetObject
* Retrieves an object from a bucket.
* GetObject will now return:
* Mode (only Compliance is supported initially) that is currently in place for the requested object
* Date/time that the object's lock will expire
---
* PutObject
* Adds an object to a bucket.
* PutObject will now:
* Prevent locked object versions from being overwritten

PutObject will now accept the following request parameters:
* `x-amz-object-lock-mode` (only Compliance is supported initially)
* `x-amz-object-lock-retain-until-date`
---
* CopyObject
* Creates a copy of an object that is already stored on Storj.
* CopyObject will now accept the following request parameters:
* `x-amz-object-lock-mode` (only Compliance is supported initially)
* `x-amz-object-lock-retain-until-date`
---
* CreateMultipartUpload
* This action initiates a multipart upload and returns an upload ID.
* CreateMultipartUpload will now accept the following request parameters:
* `x-amz-object-lock-mode` (only Compliance is supported initially)
* `x-amz-object-lock-retain-until-date`

Storj has a unique object level TTL. Any request that has both a TTL and a retention period will be rejected to prevent TTL's from conflicting with object lock retention periods.
---
* DeleteBucket
* Deletes the specified bucket.
* Forced deletion of a bucket with locked objects will be prevented.
---
* DeleteObject
* Removes an object from a bucket.
* Deletion of an object with a retention set will be prevented.
{% /table %}

### Actions not yet available (currently in active development)
{% table %}
* Action
* API Description
* Description of Change(s)
---
* PutObjectLockConfiguration
* Enables Object Lock configuration on a bucket.
* **ObjectLockEnabled**: Indicates if Object Lock is enabled on the bucket.

In addition to the new and updated actions supported above, we have a follow on roadmap item to implement the remaining scope of S3 Compatible Lock, mainly the addition of Governance Mode and Legal hold. These additional actions are outlined in the roadmap item here: https://github.com/storj/roadmap/issues/98
**Rule**: Specifies the Object Lock rule (mode and period) for the bucket. The period can be either `Days` or `Years`.
---
* GetObjectLegalHold
* Retrieves the Legal Hold status of an object.
*
---
* PutObjectLegalHold
* Applies a Legal Hold to the specified object.
*
{% /table %}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,14 @@ metadata:
title: 'Object Versioning in Storj'
---

Storj has released S3 Compatible Object Versioning in open beta.
{% callout type="info" %}
**Beta Service Release**

S3-Compatible Object Versioning is currently available as pre-production beta and may not be suitable for all production environments.

Please refer to our [Terms of Service](https://www.storj.io/legal/terms-of-service) for more information on release definitions.
{% /callout %}


## How do I opt in to the object versioning beta?

Expand All @@ -16,10 +23,6 @@ You need to opt in to the object versioning beta per project. To opt in to the o
2. Navigate to the desired project
3. You will be prompted to enable object versioning for the project

{% callout type="warning" %}
Object versioning is currently in open beta and may not be suitable for all production environments.
{% /callout %}

## How does object versioning work?

Object versioning enables you to preserve, retrieve, and restore every version of every object stored in a bucket. This feature adds an extra layer of data protection and recovery options, allowing you to safeguard against accidental deletions and overwrites.
Expand All @@ -32,15 +35,15 @@ Object versioning enables you to preserve, retrieve, and restore every version o

- **Recovery and Rollback:** In case of accidental deletion or if an object is overwritten with an undesired version, you can easily recover the previous version of the object.


- **Object Lock:** For more details on Object Lock support see [](docId:gjrGzPNnhpYrAGTTAUaj).

{% callout type="info" %}
Note that enabling object versioning can increase storage costs since each version of an object is stored separately.
{% /callout %}

### Supported S3 API Methods for Object Versioning

Storj's S3 Compatible Object Versioning supports a range of S3 API methods, allowing you to manage and interact with versioned objects. Below are the key S3 API methods supported by Storj's object versioning, along with a brief description of their use:
Storj's S3-Compatible Object Versioning supports a range of S3 API methods, allowing you to manage and interact with versioned objects. Below are the key S3 API methods supported by Storj's object versioning, along with a brief description of their use:

#### Bucket Operations

Expand Down
14 changes: 7 additions & 7 deletions app/(docs)/dcs/api/s3/s3-compatibility/page.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,9 @@ The Storj S3-compatible Gateway supports a RESTful API that is compatible with t
| GetBucketWebsite | No | |
| GetObject | Partial | We need to add support for the partNumber parameter |
| GetObjectAcl | No | |
| GetObjectLegalHold | No | |
| GetObjectLockConfiguration | No | |
| GetObjectRetention | No | |
| GetObjectLegalHold | No | Currently in active development. See [](docId:gjrGzPNnhpYrAGTTAUaj) |
| GetObjectLockConfiguration | No | Currently in active development. See [](docId:gjrGzPNnhpYrAGTTAUaj) |
| GetObjectRetention | Yes (Beta) | [](docId:gjrGzPNnhpYrAGTTAUaj) |
| GetObjectTagging | Full | Tags can be modified outside of tagging endpoints |
| GetObjectTorrent | No | |
| GetPublicAccessBlock | No | |
Expand All @@ -73,7 +73,7 @@ The Storj S3-compatible Gateway supports a RESTful API that is compatible with t
| ListBucketMetricsConfigurations | No | |
| ListBuckets | Full | |
| ListMultipartUploads | Partial | See ListMultipartUploads section |
| ListObjectVersions | Yes (Beta) | |
| ListObjectVersions | Yes (Beta) | [](docId:gjrGzPNnhpYrAGTTAUaj) |
| ListObjects | Partial | See ListObjects section |
| ListObjectsV2 | Partial | See ListObjects section |
| ListParts | Full | |
Expand All @@ -95,13 +95,13 @@ The Storj S3-compatible Gateway supports a RESTful API that is compatible with t
| PutBucketReplication | No | |
| PutBucketRequestPayment | No | Planned support status needs verification |
| PutBucketTagging | No | |
| PutBucketVersioning | Yes (Beta) | |
| PutBucketVersioning | Yes (Beta) | [](docId:gjrGzPNnhpYrAGTTAUaj) |
| PutBucketWebsite | No | |
| PutObject | Full | |
| PutObjectAcl | No | |
| PutObjectLegalHold | No | |
| PutObjectLockConfiguration | No | |
| PutObjectRetention | No | |
| PutObjectLockConfiguration | No | Currently in active development. See [](docId:gjrGzPNnhpYrAGTTAUaj) |
| PutObjectRetention | Yes (Beta) | [](docId:gjrGzPNnhpYrAGTTAUaj) |
| PutObjectTagging | Full | Tags can be modified outside of tagging endpoints |
| PutPublicAccessBlock | No | |
| RestoreObject | No | |
Expand Down
Loading

0 comments on commit 1f03972

Please sign in to comment.