Dell EMC ECS supported WORM (write-once-read-many) based retention from ECS 2.X. However, to gain more compatibility with more applications, ECS support the object lock feature from 3.6.2 version which is compatible with the capabilities of Amazon S3 object lock.
Dell EMC ECS object lock protects object versions from accidental or malicious deletion such as a ransomware attack. It does this by allowing object versions to enter a Write Once Read Many (WORM) state where access is restricted based on attributes set on the object version.
Object lock is designed to meet compliance requirements such as SEC 17a4(f), FINRA Rule 4511(c), and CFTC Rule 17.
Object lock overview
Object lock prevents object version deletion during a user-defined retention period. Immutable S3 objects are protected using object- or bucket-level configuration of WORM and retention attributes. The retention policy is defined using the S3 API or bucket-level defaults. Objects are locked for the duration of the retention period, and legal hold scenarios are also supported.
There are two lock types for object lock:
- Retention period — Specifies a fixed period of time during which an object version remains locked. During this period, your object version is WORM-protected and can’t be overwritten or deleted.
- Legal hold — Provides the same protection as a retention period, but it has no expiration date. Instead, a legal hold remains in place until you explicitly remove it. legal holds are independent from retention periods.
There are two mode for the retention period:
- Governance mode — users can’t overwrite or delete an object version or alter its lock settings unless they have special permissions. With governance mode, you protect objects against being deleted by most users, but you can still grant some users permission to alter the retention settings or delete the object if necessary. You can also use governance mode to test retention-period settings before creating a compliance-mode retention period.
- Compliance mode — a protected object version can’t be overwritten or deleted by any user, including the root user in your account. When an object is locked in compliance mode, its retention mode can’t be changed, and its retention period can’t be shortened. Compliance mode helps ensure that an object version can’t be overwritten or deleted for the duration of the retention period.
Object lock and lifecycle
Objects under lock are protected from lifecycle deletions.
Lifecycle logic is made difficult due to variety of behavior of different locks. From lifecycle point of view there are locks without a date, locks with date that can be extended, and locks with date that can be decreased.
- For compliance mode, the retain until date can’t be decreased, but can be increased:
- For governance mode, the lock date can increase, decrease, or get removed.
- For legal hold, the lock is indefinite.
Some key points for the S3 object lock with ECS
- Object lock requires FS (File System) disabled on bucket in ECS 3.6.2 version.
- Object lock requires ADO (Access During Outage) disabled on bucket in ECS 3.6.2 version.
- Object lock is only supported by S3 API, not UI workflows in ECS 3.6.2 version.
- Object lock only works with IAM, not legacy accounts.
- Object lock works only in versioned buckets.
- Enabling locking on the bucket automatically makes it versioned.
- Once bucket locking is enabled, it is not possible to disable object lock or suspend versioning for the bucket.
- A bucket has default configuration include a retention mode (governance or compliance) and also a retention period (which is days or years).
- Object locks apply to individual object versions only.
- Different versions of a single object can have different retention modes and periods.
- Lock prevents an object from being deleted or overwritten. Overwritten does not mean that new versions can’t be created (new version can be created with their own lock settings).
- Object can still be deleted; it will create a delete marker and the version still exists and is locked.
- Compliance mode is stricter, locks can’t be removed, decreased, or downgraded to governance mode.
- Governance mode is less strict, it can be removed, bypassed, elevated to compliance mode.
- Object can still be deleted, but the version still exists and is locked.
- Updating an object version’s metadata, as occurs when you place or alter an object lock, doesn’t overwrite the object version or reset its Last-Modified timestamp.
- Retention period can be placed on an object explicitly, or implicitly through a bucket default setting.
- Placing a default retention setting on a bucket doesn’t place any retention settings on objects that already exist in the bucket.
- Changing a bucket’s default retention period doesn’t change the existing retention period for any objects in that bucket.
- object lock and traditional bucket/object ECS retention can co-exist.
ECS object lock condition keys
Access control using IAM policies is an important part of the object lock functionality. The s3:BypassGovernanceRetention permission is important since it is required to delete a WORM-protected object in Governance mode. IAM policy conditions have been defined below to allow you to limit what retention period and legal hold can be specified in objects.
Condition Key | Description |
s3:object-lock-legal-hold | Enables enforcement of the specified object legal hold status |
s3:object-lock-mode | Enables enforcement of the specified object retention mode |
s3:object-lock-retain-until-date | Enables enforcement of a specific retain-until-date |
s3:object-lock-remaining-retention-days | Enables enforcement of an object relative to the remaining retention days |
ECS object lock API examples
This section lists s3curl examples of object Lock APIs. Put and Get object lock APIs can be used with and without versionId parameter. If no versionId parameter is used, then the action applies to the latest version.
Operation | API request examples |
Create lock-enabled bucket | s3curl.pl –id=ecsflex –createBucket — http://${s3ip}/mybucket
-H “x-amz-bucket-object-lock-enabled: true” |
Enable object lock on existing bucket | s3curl.pl –id=ecsflex — http://${s3ip}/my-bucket?enable-objectlock
-X PUT |
Get bucket default lock configuration | s3curl.pl –id=ecsflex — http://${s3ip}/my-bucket?object-lock |
Put bucket default lock
configuration |
s3curl.pl –id=ecsflex — http://${s3ip}/my-bucket?object-lock
-X PUT \ -d “<ObjectLockConfiguration><ObjectLockEnabled>Enabled</ ObjectLockEnabled> <Rule><DefaultRetention><Mode>GOVERNANCE</Mode><Days>1</Days></ DefaultRetention></Rule></ObjectLockConfiguration>” |
Get legal hold | s3curl.pl –id=ecsflex — http://${s3ip}/my-bucket/obj?legal-hold |
Put legal hold on create | s3curl.pl –id=ecsflex –put=/root/100b.file — http://${s3ip}/
my-bucket/obj -H “x-amz-object-lock-legal-hold: ON” |
Put legal hold on existing object | s3curl.pl –id=ecsflex — http://${s3ip}/my-bucket/obj?legalhold
-X PUT -d “<LegalHold><Status>OFF</Status></LegalHold>” |
Get retention | s3curl.pl –id=ecsflex — http://${s3ip}/my-bucket/obj?retention |
Put retention on create | s3curl.pl –id=ecsflex –put=/root/100b.file — http://${s3ip}/
my-bucket/obj -H “x-amz-object-lock-mode: GOVERNANCE” -H “x-amz-object-lock-retain-until-date: 2030-01-01T00:00:00.000Z” |
Put retention on existing object | s3curl.pl –id=ecsflex — http://${s3ip}/my-bucket/obj?
retention -X PUT -d “<Retention><Mode>GOVERNANCE</ Mode><RetainUntilDate>2030-01-01T00:00:00.000Z</ RetainUntilDate></Retention>” |
Put retention on existing
object (with bypass) |
s3curl.pl –id=ecsflex — http://${s3ip}/my-bucket/obj?
retention -X PUT -d “<Retention><Mode>GOVERNANCE</ Mode><RetainUntilDate>2030-01-01T00:00:00.000Z</ RetainUntilDate></Retention>” -H “x-amz-bypass-governance-retention: true” |