# Console

Scope: Object Storage Administrator Account Administrator
Account Member

The Object Storage Console provides management access for
Object Storage accounts. It is not a tool for
read/write operations from or to the Object Storage. Using the console, you can
create, delete and view containers, and list their contents.
Within a container, you can create and delete
folders to better organize the objects, and set permissions and other management
configurations.

<a id="console-window"></a>

## The Object Storage Console Window

The Console Window comprises:

1. [Containers pane](#containers-pane) - lists the containers in the Object Storage.
2. [Folders/Objects pane](#folders-objects-pane) - Note that the
   view shows either folders or objects.  Click on a container to display
   the content folders. Click on a folder
   to display the content objects. To return from
   object view to folder view, or in the case of nested folders, to move back
   within the folder hierarchy click on **..** above the object pane.
3. [Details Pane](#ngos-console-details-pane) - shows
   different properties and permissions depending on whether a container,
   folder, or object is selected in the top pane.

<a id="encrypted-containers"></a>

## Encrypted Containers

Encryption management of Data-at-Rest (data on the disk drives) is applied
by the Object Storage on a per-container basis. Encrypted and unencrypted
containers can coexist in the same account.

An Object Storage generates a random 256-bit unique Encryption Key per
encrypted container and uses the Advanced Encryption Standard (AES) to
encrypt and decrypt the objects’ data.

The Encryption Keys are stored on disk as ciphertext, using AES
with a 256-bit Master Encryption Key, which is generated from
a user-supplied **Master Encryption Password.**

The user owns the Master Encryption Password. It is *never* stored on
any persistent media. Instead, only its SHA3 hash-sum is saved on disk
for password validation.

During Object Storage operation, the Master Encryption Password itself
is held in kernel memory of the Object Storage. Core-dumping any User Mode process within
the Object Storage will not reveal the Master Encryption Key.

This method ensures that encrypted Data-at-Rest cannot be accessed
without explicitly knowing the user-supplied Master Encryption Password,
thus providing you full protection if you enable Data-at-Rest Volume
encryption.

### Setting Encryption Password

Scope: Object Storage Administrator

To create a Master Encryption Password, go to the **Settings** page,
**Security** tab and click **Edit** in the **Encryption** section. Read the
instructions and warning. Enter your password and click **Save**.

**Store your Master Encryption Password in a secure place.**

<a id="containers-pane"></a>

## Containers pane

The Containers pane displays a list of containers in the Object Storage
instance, that the current user is granted access.

The Containers pane includes the following controls:

* [Search for Containers](#search-for-containers)
* [Sorting the Containers list](#sort-containers-list)
* [Create Containers](#create-containers)
* [Delete Containers](#delete-containers)

<a id="search-for-containers"></a>

### Search for Containers

In the Console screen, you can search and filter the list of containers in
the Containers pane to find a specific container or a list of containers.
The search locates the container names that match a user-provided
case-sensitive prefix.

1. In the left navigation tree, select **Object Operations > Console**.

   The Console screen displays.
2. In the **Search Containers** search box, in the toolbar above the
   Containers pane, enter the leading characters of the container that you
   want to find.

   As each character is entered, the containers list filters to
   display container names that match the entered prefix.

To clear the search filter and redisplay the full list, click **X** in the
search box’s right edge.

<a id="sort-containers-list"></a>

### Sorting the Containers list

In the Console screen’s Containers pane, you can sort the list of containers
to display in ascending or descending order, by clicking the
**Container Name** column header.

<a id="create-containers"></a>

### Create Containers

To create a new container in the account, open the console, and click **Add**
in the toolbar above the console pane. The **Create Container** dialog
will open.

Enter the following information:

* **Name** - Enter the container name.
* **Storage Policy** - the target storage policy for the container creation
* **Encrypted** - select if the container should be encrypted.
* **Object Lock** - selecting object lock will prevent the deletion or
  modification of any object prior to its retention period expiration.
  For more information on Object Lock, see [Object Lock Containers](#object-storage-immutability).
* **Container logging** - selecting container logging generates audit logs
  for all object operations.
  * **Target Container** - from the dropdown, select the target container
    for storing the audit logs.
  * **Apply logging prefix** - define a prefix to simplify locating and
    identifying log objects.

  For more information, see [Container logging](ngos-logging.md#container-logging).

Click **Create**. The new container will be displayed in the Containers pane.

<a id="delete-containers"></a>

### Delete Containers

To delete a container, open the console, go to the containers pane,
select the container to be deleted and click **Delete**. The system
will prompt you for deletion confirmation.

#### Delete a non-empty container

1. Object-Lock enabled container which contains objects cannot be deleted from
   the console. In order to delete it all contents (including object versions)
   should be deleted. Empty container can be deleted from the console.
2. Container without object-lock enabled can be deleted directly from the
   console, once the operation is confirmed by the user, the system will empty
   the container’s data and will delete the container itself.

<a id="folders-objects-pane"></a>

## Folders/Objects pane

By definition, containers are flat and there is no hierarchy
structure for storing the objects. However, since many users are accustomed
to the folders tree concept of file systems, the Object Storage Console
gives you an option to simulate a hierarchical structure within the Object
Storage Containers.

> <a id="search-for-folders-or-objects"></a>

### Search for Folders or Objects

In the Console screen’s Objects pane for a selected container, you can
search and filter the currently displayed folder tree branch level to find
folders or objects with names that match a user-provided case-sensitive
prefix.

1. In the left navigation tree, select **Object Operations > Console**.

   The Console screen displays.
2. In the Containers pane, select a container.

   Optionally, use the [Search for Containers](#search-for-containers) function to locate a
   container.

   The selected container’s list of top-level folders and objects displays
   in the Objects pane.
3. In the **Search Objects** search bar, in the toolbar above the Objects
   pane, enter the leading characters of the folders or objects that
   you want to find.

   As each character is entered, the folders and objects list filters to
   display folder and object names that match the entered prefix.

To clear the search filter and redisplay the full list, click **X** in the
search box’s right edge.

#### Sorting a Container Folder’s content list

In the Console screen’s Objects pane, you can sort the current folder’s
contents list to display in ascending or descending order, by clicking the
respective **Container Name**, **Size** or **Last Modified** column header.

### Adding folders

To create a folder, open the console, select a container in the
containers pane, navigate to the hierarchy level where you want to
create the new folder, and click **Add Folder**. Give it a name and
click **Submit**.

Navigation within the container’s folders tree is done in a way similar
to the common user experience of file systems explorer. By double clicking
a folder, you enter it and see its content (objects and sub-folders). By
double clicking the **..** at the top of the objects pane, you navigate
one level up to the parent Folder. The path indicator above the objects
pane always show you current position in the tree.

<a id="uploading-folders-or-objects"></a>

### Uploading Folders or Objects

You can upload an entire folder or individual files to a container or to a
folder in a container.

To upload a folder or file:

1. In the left navigation tree, select **Object Operations > Console**.

   The Console screen displays.
2. In the Containers pane, select a container.

   Optionally, use the [Search for Containers](#search-for-containers) function to locate a
   container.

   The selected container’s list of top-level folders and objects displays
   in the Objects pane.

   If a folder or files should be uploaded below another folder in the
   container, navigate to the container’s destination folder.
3. In the toolbar above the Objects pane, click **Upload**, and then
   **Folder** or **File**, depending on the scope of the upload.

   An explorer window opens.
   1. In the explorer window, navigate to the folder or files to upload.
      * **Folder**: Click the folder or enter its name in the **Folder**
        field.
      * **File**: Selected a file or files, so that their names are
        listed in the **File name** field.

      Click **Upload**.

   The explorer window closes.

   An upload status window opens, displaying the uploading progress.

<a id="downloading-folders-or-objects"></a>

### Downloading Objects

The Console supports single file download only.

To download a file:

1. In the Containers pane, select the container containing the file.

   Optionally, use the [Search for Containers](#search-for-containers) function to locate a
   container.

   The selected container’s list of top-level folders and objects displays
   in the Objects pane.
2. In the Objects pane, select the file to download.

   Optionally, use the [Search for Folders or Objects](#search-for-folders-or-objects) function to
   locate a folder or file in the current folder.

   If the file that should be downloaded is below another folder in the
   container, navigate to that folder and select the file.
3. In the toolbar above the Objects pane, click **Download**.

   A download status window opens, displaying the downloading progress.

### Deleting folders

To delete a folder, navigate to its parent folder, select the folder to
be deleted and click **Delete** from the toolbar above the folder pane.

After confirmation, the folder with all its content will be deleted.

<a id="ngos-console-details-pane"></a>

## Details Pane

The details pane at the bottom of the console screen includes the following
tabs:

* **Properties** - displays read only properties of selected container, folder,
  or object.
* **HTTP Headers** - display, edit, add, or delete the HTTP headers used
  in the object storage operations.
* **Permissions** - for information on assigning permissions to containers,
  see [Setting Container Permissions](administration-acl.md#setting-container-permissions).
* **Quotas** - quotas allow placement of limits on size (in GiB)
  per container (**Console** view) or per account (**Account** view).
  For more information on quotas, see [Account Quota Management](administration-accounts-users.md#quota-management).
* **Versioning** - if enabled, versioning supports storing multiple versions
  of an object in the same container thus allowing recovery
  from unintended actions or failures. Note that once versioning is enabled
  for a container it cannot be disabled.
* **Versions** - displays versions for all folders and objects within a container.
  Note this tab is only available for containers for which versioning is
  enabled.
* **Container Logging** - display, enable, edit or disable container logging
  settings.
  If container logging is enabled, audit logs are generated in the selected
  **Target Container** for all object operations.
  **Apply logging prefix** to simplify locating and identifying log objects.
  For more information, see [Create Containers](#create-containers) and
  [Container logging](ngos-logging.md#container-logging).
* **Object Lifecycle Rules** Version: 23.09

  Display, configure and manage the rules of a
  container’s Object Lifecycle Policy.
  For more information, see [Object Lifecycle Policy](#ngos-object-lifecycle-policy).
* **Event Log** - displays log of events related to selected container.
* **Replication** Version: 25.07

  A container that contains source objects for a Replication Job has a
  [Replication tab](#console-container-replication-tab) that
  displays the Replication Job details, status, associated
  Replication Target, destination account, destination container, object
  deletion propagation properties, and prefix filter.

  See the [Replication](ngos-replication.md#ngos-replication) page for more detailed information on
  container replication.

<a id="container-http-headers"></a>

### Container and Object HTTP headers

HTTP headers play a crucial role in managing container and object metadata,
controlling access, and defining behavior during interactions with the
stored objects. These headers are part of the standard HTTP protocol and
are used in both requests and responses.

The tab display label is context-sensitive, displaying either
**Container HTTP Headers** or **Object HTTP Headers**, depending on whether
a container or object is selected.

#### System Defined HTTP headers

During creation, containers and objects have several automatically created
System Defined HTTP headers.

Most System Defined HTTP headers are defined as `Read-Only=True`,
and these headers cannot be edited or deleted.

The following System Defined HTTP headers are defined as `Read-Only=False`,
and can be edited or deleted:

* `Cache-Control`
* `Content-Language`
* `Content-Type`
* `Expires`

#### User Defined HTTP headers

Zadara Object Storage supports creation and configuration of custom
User Defined HTTP headers, that are also defined `Read-Only=False`,
and can be edited or deleted:

* User Defined **Container HTTP Headers** have the prefix
  `x-container-meta-`, and the suffix is user-supplied.
* User Defined **Object HTTP Headers** have the prefix
  `x-object-meta-`, and the suffix is user-supplied.

#### Viewing Container and Object HTTP headers

To view HTTP headers of a container or object:

1. In the left navigation tree, select **Object Operations > Console**.
2. In the top pane, select the container.

   To view an object’s HTTP headers, navigate and select the
   object in the container’s Folders/Object pane.
3. Depending on the context, select the **Container HTTP Headers** or
   **Object HTTP Headers** tab in the lower details pane.

#### Create a Container HTTP header

To create a custom HTTP header for a container:

1. In the left navigation tree, select **Object Operations > Console**.
2. In the top pane, select the container.
3. Select the **Container HTTP Headers** tab in the lower details pane.
4. Click **Add**.

   The **Add Header** dialog opens.
5. In the **Add Header** dialog:
   * **Header**:

     The header is User Defined.

     Enter a meaningful suffix after the `x-container-meta-` prefix.
   * **Value**:

     Enter the header’s value.
6. Click **Create**.

#### Create an Object HTTP header

To create a custom HTTP header for an object:

1. In the left navigation tree, select **Object Operations > Console**.
2. In the top pane, select the container.
3. In the container’s Folders/Object pane, navigate and select the object.
4. Select the **Object HTTP Headers** tab in the lower details pane.
5. Click **Add**.

   The **Add Header** dialog opens.
6. In the **Add Header** dialog:
   * **Header Type**:
     Select **System Defined** or **User Defined**, according to the requirement.
   * **Header**:
     * For a new **System Defined** header, from the dropdown select the
       **Header** to configure.
     * For a new **User Defined** header, enter a meaningful suffix
       after the `x-object-meta-` prefix.
   * **Value**:

     Enter the header’s value.
7. Click **Create**.

#### Edit an HTTP header

To edit an HTTP header:

1. In the left navigation tree, select **Object Operations > Console**.
2. In the top pane, select the container.

   If the HTTP header is for an object, navigate and select the
   object in the container’s Folders/Object pane.
3. Depending on the context, select the **Container HTTP Headers** or
   **Object HTTP Headers** tab in the lower details pane.
4. Select the header to edit, and click **Edit**.

   The **Edit Header** dialog opens.
5. Enter the new header value in the **Value** field.
6. Click **Update** to confirm the update.

#### Delete an HTTP header

To delete an HTTP header:

1. In the left navigation tree, select **Object Operations > Console**.
2. In the top pane, select the container.

   If the HTTP header is for an object, navigate and select the
   object in the container’s Folders/Object pane.
3. Depending on the context, select the **Container HTTP Headers** or
   **Object HTTP Headers** tab in the lower details pane.
4. Select the header to delete, and click **Delete**.

   The **Delete header** dialog opens.
5. Click **Yes** to confirm the deletion.

<a id="container-quota-management"></a>

### Container Quota Management

Scope: Account Administrator

Quotas are a useful way to control capacity consumption on a specific
account or container.

For more information, see [Account Quota Management](administration-accounts-users.md#quota-management).

1. Navigate to **Console**.
2. In the top pane select the desired container, and open the **Quotas**
   tab in the bottom details pane.
3. Mark the **Enable capacity quota** checkbox.
4. Enter the **Capacity (GiB)** quota. The minimum is 1 GiB.
5. Click **Update**.

See [Account Admininstrator Quota Alerts](administration-accounts-users.md#account-admin-quota-alerts) to configure the system to issue
alert notifications to the Account Administrator when the
quota’s warning, emergency and 100% utilization thresholds are reached.

<a id="ngos-versioned-container"></a>

### Versioned Container

Zadara’s Object Storage supports container versioning which is the ability
to maintain multiple versions of an object instance in the same container.

Object Storage PUT operation which normally would replace (overwrite)
an existing object would yield an additional a new object version. The versioning
mechanism intends to protect against unintended deletion.

Versioning is a pre-requisite for enabling [Object Lock Containers](#object-storage-immutability).

“Versioned” container would add a version ID attribute to each object and a
“Latest” flag to the most recent object’s version which is retrieved by default.

S3 API allows the user to list, get or delete a specific version while using
its version ID.

<a id="ngos-container-enable-versioning"></a>

#### Enable Versioning

To enable versioning on a container:

1. Locate the container in the Containers pane, and select it.
2. In the Details pane, select the container’s Versioning tab.
3. Activate the **Enable container versioning** toggle and click **Save**.

<a id="downloading-versioned-object"></a>

#### Downloading a Versioned Object

The Console supports single file download only.

To download a versioned file:

1. In the Containers pane, select a container.

   Optionally, use the [Search for Containers](#search-for-containers) function to locate a
   container.

   The selected container’s list of top-level folders and objects displays
   in the Objects pane.
2. In the Objects pane, select the file to download.

   Optionally, use the [Search for Folders or Objects](#search-for-folders-or-objects) function to
   locate a folder or file in the current folder.

   If the file that should be downloaded is below another folder in the
   container, navigate to that folder and select the file.
3. In the selected file’s Details pane, select the **Versions** tab.

   All of the versions of the selected file display, including deleted
   versions.
4. In the **Versions** tab, select a specific version of the file to
   download.
5. In the Details pane toolbar, click **Download**.

   A download status window opens, displaying the downloading progress.

#### Deleting an object

Deleting an object in a container with versioning enabled would yield a new
0-byte version of the same object with a DeleteMarker tombstone. The DeleteMarker
version will list the object as deleted however, all previous versions are retained.

In the following example, we have a container with two versions of the same
object:

```default
$ aws s3api list-object-versions --endpoint-url=$ENDPOINT --profile=$PROFILE \
  --bucket $BUCKET --output yaml
```

```default
Versions:
- ETag: '"49e5c77426e2e3f5b635f7965f0020e3"'
  IsLatest: true
  Key: my-data.csv
  LastModified: '2023-04-11T21:07:45.053000+00:00'
  Owner:
    DisplayName: <truncated>
    ID: <truncated>
  Size: 22032
  StorageClass: STANDARD
  VersionId: '1681247265.05321'
- ETag: '"49e5c77426e2e3f5b635f7965f0020e3"'
  IsLatest: false
  Key: my-data.csv
  LastModified: '2023-04-11T21:05:02.306000+00:00'
  Owner:
    DisplayName: <truncated>
    ID: <truncated>
  Size: 22032
  StorageClass: STANDARD
  VersionId: '1681247102.30656'
```

Deleting the object without specifying a version ID would delete the object
from the bucket listing while retaining the existing versions.

Delete the object:

```default
$ aws s3api delete-object --endpoint-url=$ENDPOINT --profile=$PROFILE  --bucket $BUCKET --key my-data.csv
```

Listing the container’s object would output an empty list.

```default
$ aws s3api list-objects --endpoint-url=$ENDPOINT --profile=$PROFILE  --bucket $BUCKET --output yaml
```

While listing the object’s versions:

```default
$ aws s3api list-object-versions  --endpoint-url=$ENDPOINT --profile=$PROFILE  --bucket $BUCKET --output yaml
```

```default
DeleteMarkers:
- IsLatest: true
  Key: my-data.csv
  LastModified: '2023-04-11T21:14:41.045000+00:00'
  Owner:
    DisplayName: <truncated>
    ID: <truncated>
  VersionId: '1681247681.04512'
Versions:
- ETag: '"49e5c77426e2e3f5b635f7965f0020e3"'
  IsLatest: false
  Key: my-data.csv
  LastModified: '2023-04-11T21:07:45.053000+00:00'
  Owner:
    DisplayName: <truncated>
    ID: <truncated>
  Size: 22032
  StorageClass: STANDARD
  VersionId: '1681247265.05321'
- ETag: '"49e5c77426e2e3f5b635f7965f0020e3"'
  IsLatest: false
  Key: my-data.csv
  LastModified: '2023-04-11T21:05:02.306000+00:00'
  Owner:
    DisplayName: <truncated>
    ID: <truncated>
  Size: 22032
  StorageClass: STANDARD
  VersionId: '1681247102.30656'
```

<a id="object-storage-immutability"></a>

### Object Lock Containers

Zadara Object Storage Immutability ensures data integrity by stopping stored
objects from being deleted or overwritten during a specific retention timeframe.
When an object is locked in compliance mode, its retention mode can’t be
changed, and its retention period can’t be shortened.
Immutability ensures object version integrity and availability throughout the
defined retention period.

This feature can be leveraged directly from the S3 Compatible backup software
(i.e. Veeam Backup and Replication) to ensure the integrity and availability
of the backup as required.
A configuration guide for Veeam Backup & Replication can be found in [Zadara’s Knowledge-Base portal](https://support.zadarastorage.com/).

#### S3 Object Lock

The NextGen Object Storage uses the S3 Object Lock feature (Compliance Mode)
in order to set a retention period to a given object and mark it as an immutable
object. Deleting an object will be blocked until its retention period has
expired. Object Lock should be enabled when creating a new
container, directly from the management interface or by using AWS S3 Tools
(CLI/SDK).

#### Enable Object Lock from the management interface

Object Lock can be enabled for a new container during its creation.
In order to create a new container with Object Lock:

1. Log in to the management interface.
2. Navigate to the Object Storage Console section.
3. In the upper options menu, click on the Add button.
4. Enter a new container name.
5. Check the “Object Lock” option.
6. Clicking Create to create the new container.

On creation, the Versioning feature will be automatically enabled for the
new container.

A container’s Object Lock property set to “true” identifies the container
as being Object Lock enabled.

#### Enable Object Lock using the AWS S3 CLI

In the following examples, Object Lock is enabled using AWS Tools for
PowerShell.

Currently, Object Lock can be enabled and reviewed only from the NextGen Object Storage
S3 API interface.

#### Enabling Object Lock

Object Lock should be enabled on the container level at creation time.
Object versioning will be enabled automatically.

Make sure that the Object Storage credentials are set.

Define the NextGen Object Storage as an endpoint:

```console
$ENDPOINT="https://vsa-0000000b-zadara-qa13.zadara.com"
```

<!-- end -->

**Container creation**

```console
$BUCKET="immutable-container"
aws s3api --endpoint-url=$ENDPOINT create-bucket --bucket $BUCKET --object-lock-enabled-for-bucket
```

<!-- end -->

The expected result should be:

```console
{
    "Location": "/immutable-container"
}
```

<!-- end -->

**Confirm that Object Lock was enabled for the newly created container**

```console
aws s3api --endpoint-url=$ENDPOINT get-object-lock-configuration --bucket $BUCKET
```

<!-- end -->

The expected result should be:

```console
{
    "ObjectLockConfiguration": {
        "ObjectLockEnabled": "Enabled"
    }
}
```

<!-- end -->

**Upload a new object**

```console
$OBJECT="new-object-with-lock.log"
aws s3api --endpoint-url=$ENDPOINT put-object --bucket $BUCKET --key $OBJECT --body $OBJECT

#Response

{
   "ETag": "\"c6125a47483a2823d993da3d31ba6a50\"",
   "VersionId": "MzMxNjlmNzItOWQ3Ni00MWI0LTllOGYtZDQyN2RkMjRlN2Jk"
}
```

<!-- end -->

**Set Object retention mode and date**

```console
aws s3api --endpoint-url=$ENDPOINT put-object-retention --bucket $BUCKET --key $OBJECT --retention Mode=COMPLIANCE,RetainUntilDate=2020-04-01
```

<!-- end -->

**Retrieve Object Lock configuration**

```console
aws s3api --endpoint-url=$ENDPOINT get-object-retention --bucket $BUCKET --key $OBJECT

#Response

{
   "Retention": {
      "Mode": "COMPLIANCE",
      "RetainUntilDate": "2020-04-01T00:00:00"
   }
}
```

<!-- end -->

In this example, the object will remain locked until April 1st, 2020.

**List an object’s versions and attempt to delete a specific version**

List an object’s versions:

```console
aws s3api --endpoint-url=$ENDPOINT list-object-versions --bucket $BUCKET  --prefix $OBJECT
{
   "Versions": [
      {
            "ETag": "%22c6125a47483a2823d993da3d31ba6a50%22",
            "Size": 14871255,
            "StorageClass": "STANDARD",
            "Key": "new-object-with-lock.log",
            "VersionId": "MzMxNjlmNzItOWQ3Ni00MWI0LTllOGYtZDQyN2RkMjRlN2Jk",
            "IsLatest": true,
            "LastModified": "2020-03-08T16:54:30.225Z",
            "Owner": {
               "DisplayName": "veeam:client",
               "ID": "veeam:client"
            }
      }
   ]
}
```

<!-- end -->

Attempt to delete a specific version of an object:

```console
aws s3api --endpoint-url=$ENDPOINT delete-object --bucket=$BUCKET --key=$OBJECT --version-id=$VERSION

An error occurred (AccessDenied) when calling the DeleteObject operation: Access Denied.
```

<!-- end -->

#### Configure container’s default retention values with object lock

Via the CLI, there is the option to configure an object lock and its
default retention values at the bucket level, in a single command.

**Configure a bucket’s object lock with default retention values**

```console
aws s3api --profile $AWSUSER --endpoint-url=$ENDPOINT put-object-lock-configuration --bucket $BUCKET --object-lock-configuration '{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "COMPLIANCE", "Days": 50 }}}'
```

Retrieve the bucket’s object lock configuration:

```console
aws s3api --profile $AWSUSER --endpoint-url=$ENDPOINT get-object-lock-configuration --bucket $BUCKET

# Response

{
    "ObjectLockConfiguration": {
        "ObjectLockEnabled": "Enabled",
        "Rule": {
            "DefaultRetention": {
                "Mode": "COMPLIANCE",
                "Days": 50
            }
        }
    }
}
```

<a id="ngos-object-lifecycle-policy"></a>

### Object Lifecycle Policy

Version: 23.09-SP1

An optional Object Lifecycle Policy can be configured for a container, to
determine the retention period for the container’s objects.

One or more Object Lifecycle Rules establish an Object Lifecycle Policy.
A container can have a maximum of one Object Lifecycle Policy.
The rules can be viewed, configured and managed in the container’s south
pane **Object Lifecycle Rules** tab.

An Object Lifecycle Rule defines object retention on the basis of a
specific date or number of days since object creation.
A single rule can be configured to apply across all objects in a container,
or can be limited to objects according to a specific prefix such as folder
or filename prefixes, or even filename prefixes within a specified folder
tree.
Each rule can be enabled or disabled.

#### Managing Object Lifecycle Policy Rules

A container’s Object Lifecycle Policy is configured and maintained in the
set of rules in the container’s south pane **Object Lifecycle Rules** tab.
For examples of managing Object Lifecycle Policy Rules using the AWS S3 API
CLI, see [Object Lifecycle Policy configuration examples](object-storage-clients.md#ngos-object-lifecycle-policy-asw-s3api-examples).

#### Creating or Editing an Object Lifecycle Rule

Both the **Add** and the **Edit** functions invoke the same
**Object Lifecycle Rule** modal, for creating a new rule or editing an
existing rule, respectively.

1. In the **Console** pane, select the container.
2. In the south pane, click the **Object Lifecycle Rules** tab.
3. In the **Object Lifecycle Rules** tab’s toolbox menu:
   * To create a new rule, click **Add**:
   * To edit an existing rule, select the rule and click **Edit**.
4. In the **Object Lifecycle Rule** modal that opens, enter or edit the
   following fields:
   1. **Rule name**: A unique freetext string describing or identifying
      the rule.
   2. **Status**: Select **Enabled** (default) or **Disabled**.
   3. **Object name prefix**: Enter a filter to limit the rule to
      matching objects, or leave it empty to apply the rule across all
      objects in the container.

      For example:
      * `2023-06-`: All objects that have names beginning with
        `2023-06-`.
      * `/log/2023/abc`: All objects that have names beginning with
        `abc`, in the `/log/2023` folder.
   4. At least one of the following options must be configured:
      * **Expire current version of objects**: Configure the rule to
        expire matching objects, either a number of **Days** after
        object creation, or at 00:00 on a specified **Date**.
        * Mandatory in a non-versioned container:

          If the container is not versioned, there is no possibility to
          deselect the **Expire current version of objects** option.
        * Optional in a [Versioned Container](#ngos-versioned-container):
          * Unchecked by default.
          * If **Expire current version of objects** is selected, the
            **Delete expired object delete markers** option cannot be
            selected.
      * **Permanently delete noncurrent versions of objects**
        ([Versioned Container](#ngos-versioned-container) only):
        * Unchecked by default.
        * Option to apply the rule to permanently delete
          versions of matching objects that are not current.
      * **Delete expired object delete markers**
        ([Versioned Container](#ngos-versioned-container) only):
        * Unchecked by default.
        * Option to apply the rule to delete expired delete markers of
          matching objects.
        * If **Delete expired object delete markers** is selected, the
          **Expire current version of objects** option cannot be
          selected.
   5. To save the rule:
      * For a new rule, click **Create**.
      * For an existing rule, click **Update**.

#### Enabling or Disabling an Object Lifecycle Rule

Every Object Lifecycle Rule is created with its **Status** configured as
either **Enabled** or **Disabled**.

It is possible to switch the rule’s **Status** at any time,
from **Enabled** to **Disabled**, or vice versa.

To switch the rule’s **Status**:

1. In the **Console** pane, select the container.
2. In the south pane, click the **Object Lifecycle Rules** tab.
3. In the **Object Lifecycle Rules** tab’s toolbox menu, click
   **Enable/Disable**.
4. The **Confirm Status Change** modal displays.

   A note displays, informing that it could take some time to update the
   Object Lifecycle Policy’s configuration.

   Click **Yes** to confirm changing the selected rule’s **Status**.

#### Deleting an Object Lifecycle Rule

To delete an Object Lifecycle Rule:

1. In the **Console** pane, select the container.
2. In the south pane, click the **Object Lifecycle Rules** tab.
3. In the **Object Lifecycle Rules** tab’s toolbox menu, click **Delete**.
4. The **Confirm Deletion** modal displays.

   A note displays, informing that it could take some time to update the
   Object Lifecycle Policy’s configuration.

   Click **Yes** to confirm deleting the selected rule.

<a id="console-container-replication-tab"></a>

### Replication tab

Containers that are marked with the replication decorator (cloud with an
up-arrow) also have a **Replication** tab in the container’s lower Details
Pane.

The container’s **Replication** tab displays the container’s Replication
Job properties:

| Parameter                       | Description                                                                                                                                                                                                                                                                                                                                     |
|---------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Job Name                        | The display name of the Replication Job.                                                                                                                                                                                                                                                                                                        |
| Status                          | The current status of the job. Possible values:<br/><br/>* **enabled**<br/><br/>Actively syncing changes from source to target.<br/><br/>* **pausing/paused**<br/><br/>Administrator suspended replication activity.<br/><br/>* **failed**<br/><br/>Check the logs for causes such as connectivity issues,<br/>insufficient capacity at target. |
| Replication Target              | The name of the Replication Target.                                                                                                                                                                                                                                                                                                             |
| Destination Container           | The name of the container in the destination Object Storage where<br/>this job creates and syncs the replica.                                                                                                                                                                                                                                   |
| Propagate Object Deletion       | Mark to delete objects from the target when deleted at source.                                                                                                                                                                                                                                                                                  |
| Propagate Object Delete Markers | When propagated, the DeleteMarker is replicated to the target.<br/>Deleting an object in a versioned container yields a new 0-byte<br/>version of the same object with a DeleteMarker tombstone.<br/>The DeleteMarker version lists the object as deleted,<br/>however, all previous versions are retained.                                     |
| Destination Account ID          | The UUID of the destination Object Storage account.                                                                                                                                                                                                                                                                                             |
| Destination Account             | The name of the destination Object Storage account.                                                                                                                                                                                                                                                                                             |
| Filter                          | * None: All objects from the source container are replicated to<br/>  the target.<br/>* A value indicates that replication occurs only for objects with<br/>  filenames that begin with a prefix matching the specified<br/>  filter value.                                                                                                     |

## Large objects support

Zadara’s Object Storage has a 5GB limit on the size of a single uploaded
object. However, leveraging segmentation a single object size is unlimited.
Segments of the larger object are uploaded and
a special manifest file is created that, when downloaded, sends all the
segments concatenated as a single object. This also offers much greater
upload speed with the possibility of parallel uploads of the segments.

Dynamic Large Object (DLO) is supported out-of-the-box.

The majority of object storage clients support multi-part upload and the
allows the user to set the segment size.

### Failed upload handling

In case the multipart upload doesn’t complete, the NextGen Object Storage will not
assemble the object parts and will not create any object. The parts will remain
stored in the Object Storage for a period of 15 days, this until the Object
Storage segment tracker will cleanup automatically the orphan parts. In this
case aborted/failed uploads incomplete parts will be considered as part of
the account used capacity.
