Object Lock (inmutabilidad WORM)
Fija objetos como inmutables con un modelo WORM por objeto: define retención, elige entre modo Gobierno o Cumplimiento y protege tus datos frente a borrados accidentales o ransomware.
Object Lock aplica inmutabilidad WORM (Write Once, Read Many: escribir una vez, leer muchas) a nivel de objeto. Cuando una versión de un objeto tiene una retención activa, OtterStorage impide borrarla o sobrescribirla hasta que expire la fecha de retención, incluso para el propietario del bucket. Es la base técnica para backups anti-ransomware y para cumplimiento normativo. Toda la API es compatible con S3 y funciona con aws s3api u otros clientes.
Cómo funciona
Object Lock se apoya en el versionado: la retención se fija sobre cada versión de objeto, no sobre la clave. Por eso el versionado es obligatorio y se activa automáticamente al habilitar Object Lock. Mientras una versión esté bajo retención:
- No se puede borrar esa versión (
DeleteObjectVersionqueda denegado). - No se puede modificar su contenido: una nueva escritura crea otra versión, pero la protegida permanece intacta.
- No se puede acortar ni eliminar la fecha de retención (salvo en modo Gobierno con el permiso adecuado, ver más abajo).
Las lecturas funcionan con normalidad. Como en OtterStorage no cobramos por peticiones ni por borrados, conservar muchas versiones inmutables no añade coste por operación: solo pagas el almacenamiento que ocupan.
Paso 1: crear el bucket con Object Lock
Object Lock solo puede habilitarse al crear el bucket. Usa --object-lock-enabled-for-bucket, que además activa el versionado de forma automática:
aws s3api create-bucket \
--bucket mi-bucket-worm \
--object-lock-enabled-for-bucket \
--endpoint-url https://s3.otterstorage.io \
--region eu-mad
Puedes comprobar que está activo con:
aws s3api get-object-lock-configuration \
--bucket mi-bucket-worm \
--endpoint-url https://s3.otterstorage.io
Si necesitas refrescar la sintaxis de aws s3api y la configuración del perfil, revisa la guía de AWS CLI.
Modos de retención: Gobierno y Cumplimiento
Cada retención se aplica en uno de dos modos. La diferencia está en quién puede levantar o acortar la protección antes de que expire.
GOVERNANCE (Gobierno)
Protege el objeto frente a borrados o cambios accidentales, pero un usuario con el permiso s3:BypassGovernanceRetention puede levantar o acortar la retención. Es el modo recomendado para protegerte de errores y de la mayoría de ataques, manteniendo una vía de escape controlada para administradores. Para saltarte la retención hay que enviar la cabecera x-amz-bypass-governance-retention, que en la CLI se expresa con --bypass-governance-retention.
COMPLIANCE (Cumplimiento)
Inmutabilidad estricta: nadie puede borrar la versión ni acortar la fecha de retención antes de que expire, ni siquiera el propietario de la cuenta ni el administrador. La fecha solo puede extenderse, nunca reducirse. Es el modo para requisitos normativos exigentes (por ejemplo, conservación legal de registros financieros). Úsalo con cuidado: una retención en COMPLIANCE no se puede deshacer.
Paso 2: aplicar retención a un objeto
Puedes fijar la retención al subir el objeto con put-object, indicando el modo y la fecha hasta la que el objeto debe permanecer inmutable. La fecha va en formato ISO 8601 (UTC):
aws s3api put-object \
--bucket mi-bucket-worm \
--key backups/2026-06-11.tar.gz \
--body 2026-06-11.tar.gz \
--object-lock-mode GOVERNANCE \
--object-lock-retain-until-date 2027-06-11T00:00:00Z \
--endpoint-url https://s3.otterstorage.io
Si el objeto ya existe, aplica o cambia la retención sobre una versión concreta con put-object-retention:
aws s3api put-object-retention \
--bucket mi-bucket-worm \
--key backups/2026-06-11.tar.gz \
--retention '{"Mode":"COMPLIANCE","RetainUntilDate":"2027-06-11T00:00:00Z"}' \
--endpoint-url https://s3.otterstorage.io
Para consultar la retención vigente de un objeto:
aws s3api get-object-retention \
--bucket mi-bucket-worm \
--key backups/2026-06-11.tar.gz \
--endpoint-url https://s3.otterstorage.io
Acortar una retención en modo GOVERNANCE requiere el bypass explícito:
aws s3api put-object-retention \
--bucket mi-bucket-worm \
--key backups/2026-06-11.tar.gz \
--retention '{"Mode":"GOVERNANCE","RetainUntilDate":"2026-07-01T00:00:00Z"}' \
--bypass-governance-retention \
--endpoint-url https://s3.otterstorage.io
En modo COMPLIANCE este bypass no existe: el comando anterior fallaría si la nueva fecha es anterior a la actual.
Paso 3: retención por defecto del bucket
En lugar de fijar la retención objeto a objeto, puedes definir una retención por defecto que se aplique automáticamente a cada objeto nuevo del bucket. Se configura con put-object-lock-configuration indicando Days o Years (uno de los dos, no ambos):
aws s3api put-object-lock-configuration \
--bucket mi-bucket-worm \
--object-lock-configuration '{
"ObjectLockEnabled": "Enabled",
"Rule": {
"DefaultRetention": {
"Mode": "GOVERNANCE",
"Days": 30
}
}
}' \
--endpoint-url https://s3.otterstorage.io
Para una retención por defecto de varios años en modo Cumplimiento:
aws s3api put-object-lock-configuration \
--bucket mi-bucket-worm \
--object-lock-configuration '{
"ObjectLockEnabled": "Enabled",
"Rule": {
"DefaultRetention": {
"Mode": "COMPLIANCE",
"Years": 7
}
}
}' \
--endpoint-url https://s3.otterstorage.io
La retención por defecto se calcula desde el momento en que se sube cada objeto. Una retención fijada explícitamente en el put-object tiene prioridad sobre la del bucket. Cambiar la regla por defecto solo afecta a los objetos que se suban después: no reescribe la retención de los que ya existen.
Legal hold de objeto vs. Legal Hold de OtterStorage
Hay dos conceptos con nombre parecido que conviene no confundir:
- Legal hold de objeto (S3): es una marca por objeto del propio Object Lock, independiente de la fecha de retención. Mientras está
ON, la versión es inmutable aunque no tenga retención o aunque esta haya expirado; se quita poniéndola enOFF. Es granular y no tiene fecha de caducidad. - Legal Hold de OtterStorage (por bucket): es un interruptor a nivel de bucket completo, reversible, que se gobierna desde la consola y congela todo el contenido y la configuración del bucket de una sola vez. Está pensado para auditorías y litigios. Lo describimos en detalle en la página de Legal Hold.
El legal hold de objeto se gestiona también por API. Para activarlo sobre una versión:
aws s3api put-object-legal-hold \
--bucket mi-bucket-worm \
--key backups/2026-06-11.tar.gz \
--legal-hold '{"Status":"ON"}' \
--endpoint-url https://s3.otterstorage.io
Y para retirarlo:
aws s3api put-object-legal-hold \
--bucket mi-bucket-worm \
--key backups/2026-06-11.tar.gz \
--legal-hold '{"Status":"OFF"}' \
--endpoint-url https://s3.otterstorage.io
En resumen: usa el legal hold de objeto cuando necesites congelar versiones concretas sin una fecha definida; usa el Legal Hold de OtterStorage por bucket cuando quieras congelar el bucket entero de forma reversible desde la consola.
Casos de uso
Backups anti-ransomware
Configura una retención por defecto en modo GOVERNANCE sobre el bucket de copias. Aunque un atacante comprometa tus credenciales, no podrá borrar ni sobrescribir los backups inmutables dentro de su periodo de retención: a lo sumo subiría nuevas versiones, pero las protegidas seguirían disponibles para restaurar. Si quieres una garantía aún más fuerte y aceptas que la protección sea irreversible, usa COMPLIANCE. Como no cobramos por peticiones ni por borrados, mantener un historial profundo de versiones inmutables no penaliza tu factura por operaciones.
Cumplimiento normativo
Para registros que la ley obliga a conservar durante un plazo fijo (por ejemplo, documentación fiscal o financiera), aplica una retención por defecto en modo COMPLIANCE con los Years exigidos. Ningún usuario, ni siquiera el administrador, podrá eliminar esos objetos antes de que expire el plazo, lo que te da una prueba sólida de inmutabilidad ante auditores.
Buenas prácticas
- Planifica antes de crear: Object Lock solo se habilita al crear el bucket. Decídelo de antemano para los datos que requieran inmutabilidad.
- Empieza por GOVERNANCE: protege frente a errores y ataques manteniendo una vía de administración. Reserva COMPLIANCE para requisitos legales estrictos, ya que no se puede revertir.
- Limita el bypass: concede
s3:BypassGovernanceRetentionsolo a las identidades imprescindibles. - Combínalo con el ciclo de vida: tras expirar la retención puedes automatizar el borrado o la transición de versiones antiguas. Consulta la guía de ciclo de vida.
- Usa UTC en las fechas: indica
RetainUntilDateen formato ISO 8601 conZpara evitar ambigüedades de zona horaria.
Para más detalles sobre buckets, claves de acceso y el resto de funciones, consulta la documentación.
¿Listo para probarlo?
Crea tu cuenta y obtén tus claves en minutos.