Stockage Objet - Cycle de vie
Vue d'ensemble de la fonctionnalité
La fonctionnalité "cycle de vie" (ou lifecycle en anglais) permet de stocker des objets de façon économe (parce que le stockage n'est pas gratuit).
Une configuration lifecycle est un ensemble de règles qui va s'appliquer automatiquement et régulièrement à un groupe d'objets dans un compartiment (ou bucket en anglais).
Chaque règle (rule en anglais) contient un filtre (filter en anglais) qui définit à quels objets elle va s'appliquer.
Une règle est activée (enabled) or désactivée (disabled).
Elle contient une ou plusieurs actions.
Un filtre contient un des éléments suivants:
- un préfixe vide (cad. aucun filtrage)
- un préfixe
- une ou plusieurs valeurs de tag
- à la fois un préfixe et une ou plusieurs valeurs de tag
- une limite supérieure ou inférieure de taille d'objet
Cas d'usage typique:
- effacement d'ancien logs
- conservation au maximum de n versions d'objet
- de façon générale, contrôler la quantité totale de stockage utilisé et donc son coût
Remarque: c'est une bonne pratique d'utiliser lifecycle quand la gestion des versions (versioning) est activée sur un compartiment (bucket).
Actions de transition
Elles définissent à quel moment les objets seront déplacés vers une autre catégorie de stockage.
ATTENTION : non supporté pour l'instant
Actions d'expiration
Elles définissent comment et à quel moment les objets seront expirés (effacés).
Les actions possibles sont:
Expiration
c.-à-d. effacer les versions courantes d'objet (y compris les marqueurs de suppression expirés en option)- après n jours (
Days
) ou après une date (Date
) - ou seulement effacer les marqueurs de suppression expirés avec
ExpiredObjectDeleteMarker
- après n jours (
NoncurrentVersionExpiration
c.-à-d. effacer les versions non courantes d'objet- après n jours (
Days
) - ou en conservant au maximum n versions non courantes (
NewerNoncurrentVersions
)
- après n jours (
AbortIncompleteMultipartUpload
c.-à-d. effacer les chargements partitionnés (multipart uploads en anglais)- après n jours (
Days
) (depuis le démarrage)
- après n jours (
Remarques:
- les actions d'expiration sont appliquées chaque jour
- donc l'effacement peut être retardé
- à partir du moment où l'expiration des objets est prévue, ils seront effacés de toute façon
- l'expiration fonctionne quel que soit l'état de la gestion des versions d'un compartiment (mais les résultats varient)
Cas d'usage avec AWS CLI
AWS CLI (Command Line Interface) est un outil à code source libre permettant de configurer et d'utiliser le stockage objet en passant des commandes dans un interface textuelle (un shell Linux ou la ligne de commande Windows).
Un guide utilisateur de l'outil est disponible sur https://docs.aws.amazon.com/cli/latest/userguide/.
Prérequis : aucun
Vous avez seulement besoin d'un bucket pour y appliquer une configuration de cycle de vie.
Effacer les versions courantes
Observons comment Expiration
affecte les versions courantes (c.-à-d. quand la metadata IsLatest
est vraie (true)).
Configuration de cycle de vie
La configuration de cycle de vie suivante (format json) est appliquée à 3 compartiments (chacun dans un état différent de gestion des versions):
{
"Rules": [
{
"Filter": {
"Prefix": ""
},
"Status": "Enabled",
"Expiration": {
"Date": "2022-11-16T14:50Z"
},
"ID": "exemple"
}
]
}
- le filtre (
Filter
) a un prefix vide afin de traiter tous les objets (d'un compartiment) - le statut (
Status
) est activé (enabled) afin de rendre effective la configuration - l'action est
Expiration
afin d'effacer les versions courantes - le critère temporel pour l'action est une
Date
afin de déclencher l'action strictement après cette date (un certain délai est à prévoir)
Un critère temporel plus utile pour l'action Expiration
est Days
.
Il permet l'expiration de la version courante après avoir atteint une certaine durée de vie (en jours).
Ceci effacerait les versions courantes âgées de plus de 5 jours:
...
"Expiration": {
"Days": 5
},
...
Compartiment avec la gestion des versions non activée
La metadata VersionId
est toujours à null (car non requise).
La metadata IsLatest
est toujours à vraie (true) (c.-à-d. que la version est courante).
Deleting an object is always permanent.
Avant
- le compartiment contient 1 seul objet
- obj1
{
"Versions": [
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj1",
"VersionId": "null",
"IsLatest": true,
"LastModified": "2022-11-16T13:53:26.669000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
}
]
}
Après
- le compartiment est vide
Compartiment avec la gestion des versions activée
Effacer un objet crée un marqueur de suppression (avec un identifiant de version non nul).
Avant
- le compartiment contient 4 objets
- obj1
- avec 1 version (un upload)
- obj2
- avec 2 versions (deux uploads successifs): une courante, l'autre non
- obj3
- avec 2 versions (un upload puis un delete): une non courante avec data et une courante avec un marqueur de suppression (delete marker) sans data
- obj4
- avec 1 version (un upload, un delete et enfin un delete de la version non courante): un marqueur de suppression sans data
- obj1
{
"Versions": [
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj1",
"VersionId": "aJsQJh1DvQwn00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T13:53:28.489000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj2",
"VersionId": "aJsQIT7B5E5x00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T13:57:23.035000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj2",
"VersionId": "aJsQIU54PjI300000000001I4j3QKItW",
"IsLatest": false,
"LastModified": "2022-11-16T13:57:15.322000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj3",
"VersionId": "aJsQIH850etN00000000001I4j3QKItW",
"IsLatest": false,
"LastModified": "2022-11-16T13:59:22.595000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
}
],
"DeleteMarkers": [
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj3",
"VersionId": "aJsQIC8K9l3p00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T14:00:11.961000+00:00"
},
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj4",
"VersionId": "aJsQIu94VtMj00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T14:01:31.680000+00:00"
}
]
}
Après
- le compartiment contient maintenant 3 objets
- obj1
- est effacé: la version courante est un marqueur de suppression
- la data ancienne est conservée en version non courante
- obj2
- est effacé: la version courante est un marqueur de suppression
- la data ancienne est conservée avec 2 versions non courantes
- obj3
- n'est pas modifié car déjà effacé
- il n'y a rien à faire car la version courante est un marqueur de suppression
- obj1
obj4, au contraire, avait un seul marqueur de suppression (aussi appelé un marqueur de suppression expiré).
Dans ce cas, le marqueur de suppression a été supprimé (comme s'il n'avait jamais existé).
{
"Versions": [
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj1",
"VersionId": "aJsQJh1DvQwn00000000001I4j3QKItW",
"IsLatest": false,
"LastModified": "2022-11-16T13:53:28.489000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj2",
"VersionId": "aJsQIT7B5E5x00000000001I4j3QKItW",
"IsLatest": false,
"LastModified": "2022-11-16T13:57:23.035000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj2",
"VersionId": "aJsQIU54PjI300000000001I4j3QKItW",
"IsLatest": false,
"LastModified": "2022-11-16T13:57:15.322000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj3",
"VersionId": "aJsQIH850etN00000000001I4j3QKItW",
"IsLatest": false,
"LastModified": "2022-11-16T13:59:22.595000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
}
],
"DeleteMarkers": [
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj1",
"VersionId": "aJsQCP6VO9dR00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T15:00:03.644000+00:00"
},
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj2",
"VersionId": "aJsQCP6TI4HR00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T15:00:03.675000+00:00"
},
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj3",
"VersionId": "aJsQIC8K9l3p00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T14:00:11.961000+00:00"
}
]
}
Compartiment avec la gestion des versions suspendue
Effacer un objet crée un marqueur de suppression (avec un identifiant de version null).
Avant
- le compartiment contient 6 objets
- les 4 premiers objets ont été créés avec la gestion des versions activée
- obj1
- avec 1 version (un upload)
- obj2
- avec 2 versions (deux uploads successifs): une courante, l'autre non
- obj3
- avec 2 versions (un upload puis un delete): une non courante avec data et une courante avec un marqueur de suppression (delete marker) sans data
- obj4
- avec 1 version (un upload, un delete et enfin un delete de la version non courante): un marqueur de suppression sans data
- obj1
- les 2 derniers objets ont été créés avec la gestion des versions suspendue (l'identifiant de version (
VersionId
) est toujours mis à null)- obj5
- avec 1 version (un upload)
- obj6
- avec 1 version (1 upload et 1 delete): un marqueur de suppression
- quand la gestion des versions est suspendue, l'effacement de la version courante est permanente
- obj5
{
"Versions": [
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj1",
"VersionId": "aJsQJgaU51mf00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T13:53:29.975000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj2",
"VersionId": "aJsQIT6kMZxd00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T13:57:24.193000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj2",
"VersionId": "aJsQIU3mnayj00000000001I4j3QKItW",
"IsLatest": false,
"LastModified": "2022-11-16T13:57:16.899000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj3",
"VersionId": "aJsQIH6pk7in00000000001I4j3QKItW",
"IsLatest": false,
"LastModified": "2022-11-16T13:59:24.102000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj5",
"VersionId": "null",
"IsLatest": true,
"LastModified": "2022-11-16T14:28:02.094000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
}
],
"DeleteMarkers": [
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj3",
"VersionId": "aJsQIC7hJCqj00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T14:00:13.281000+00:00"
},
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj4",
"VersionId": "aJsQIu7VFcnl00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T14:01:32.734000+00:00"
},
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj6",
"VersionId": "null",
"IsLatest": true,
"LastModified": "2022-11-16T14:28:55.700000+00:00"
}
]
}
Après
- le compartiment contient 6 objets
- les 4 premiers objets ont été créés avec la gestion des versions activée
- obj1
- est effacé: la version courante est un marqueur de suppression
- la data ancienne est conservée en version non courante
- obj2
- est effacé: la version courante est un marqueur de suppression
- la data ancienne est conservée avec 2 versions non courantes
- obj3
- n'est pas modifié car déjà effacé
- il n'y a rien à faire car la version courante est un marqueur de suppression
- obj4
- n'est pas modifié car déjà effacé
- puisque ce marqueur de suppression a été créé avec la gestion des versions activée, il a un identifiant de version non nul
- puisque le compartiment a maintenant la gestion des versions suspendue, il reste inchangé
- obj1
- les 2 derniers objets ont été créés avec la gestion des versions suspendue
- obj5
- est effacé: la version courante est un marqueur de suppression
- la data ancienne a été supprimée
- obj6
- n'est pas modifié car déjà effacé
- obj5
{
"Versions": [
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj1",
"VersionId": "aJsQJgaU51mf00000000001I4j3QKItW",
"IsLatest": false,
"LastModified": "2022-11-16T13:53:29.975000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj2",
"VersionId": "aJsQIT6kMZxd00000000001I4j3QKItW",
"IsLatest": false,
"LastModified": "2022-11-16T13:57:24.193000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj2",
"VersionId": "aJsQIU3mnayj00000000001I4j3QKItW",
"IsLatest": false,
"LastModified": "2022-11-16T13:57:16.899000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
},
{
"ETag": "\"2d9a3d8c5d72fc8762df6b5c98faadf9\"",
"Size": 1048576,
"StorageClass": "STANDARD",
"Key": "obj3",
"VersionId": "aJsQIH6pk7in00000000001I4j3QKItW",
"IsLatest": false,
"LastModified": "2022-11-16T13:59:24.102000+00:00",
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
}
}
],
"DeleteMarkers": [
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj1",
"VersionId": "null",
"IsLatest": true,
"LastModified": "2022-11-16T15:00:03.466000+00:00"
},
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj2",
"VersionId": "null",
"IsLatest": true,
"LastModified": "2022-11-16T15:00:03.467000+00:00"
},
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj3",
"VersionId": "aJsQIC7hJCqj00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T14:00:13.281000+00:00"
},
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj4",
"VersionId": "aJsQIu7VFcnl00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T14:01:32.734000+00:00"
},
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj5",
"VersionId": "null",
"IsLatest": true,
"LastModified": "2022-11-16T15:00:03.578000+00:00"
},
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj6",
"VersionId": "null",
"IsLatest": true,
"LastModified": "2022-11-16T14:28:55.700000+00:00"
}
]
}
Effacer les versions non courantes
Observons comment NoncurrentVersionExpiration
affecte les versions non courantes (c.-à-d. quand la metadata IsLatest
est fausse (false)).
Configuration de cycle de vie
La configuration de cycle de vie suivante (format json) est appliquée à 3 compartiments (chacun dans un état différent de gestion des versions):
{
"Rules": [
{
"Filter": {
"Prefix": ""
},
"Status": "Enabled",
"NoncurrentVersionExpiration": {
"NoncurrentDays": 1
},
"ID": "exemple"
}
]
}
- le filtre (
Filter
) a un prefix vide afin de traiter tous les objets (d'un compartiment) - le statut (
Status
) est activé (enabled) afin de rendre effective la configuration - l'action est
Expiration
afin d'effacer les versions courantes - le critère temporel pour l'action est un nombre de jours (
Days
) afin de déclencher l'action strictement après une certaine durée de vie des versions non courantes (un certain délai est à prévoir)
Compartiment avec la gestion des versions non activée
L'expiration des versions non courantes est sans objet dans ce cas.
Compartiment avec la gestion des versions activée
Avant
Voir #Après_2.
Après
- le compartiment est presque vide (seulement des marqueurs de suppression)
- obj1
- reste effacé: la version courante est un marqueur de suppression (pas de changement)
- la version non courante avec de la data a été effacée
- obj2
- reste effacé: la version courante est un marqueur de suppression (pas de changement)
- les 2 versions non courantes avec de la data ont été effacées
- obj3
- reste effacé: la version courante est un marqueur de suppression (pas de changement)
- la version non courante avec de la data a été effacée
- obj1
{
"DeleteMarkers": [
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj1",
"VersionId": "aJsQCP6VO9dR00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T15:00:03.644000+00:00"
},
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj2",
"VersionId": "aJsQCP6TI4HR00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T15:00:03.675000+00:00"
},
{
"Owner": {
"DisplayName": "ABCD1",
"ID": "fd700cede20dab8278b8680204bb19533187a4bed6d67ec06dec2d0125458e58"
},
"Key": "obj3",
"VersionId": "aJsQIC8K9l3p00000000001I4j3QKItW",
"IsLatest": true,
"LastModified": "2022-11-16T14:00:11.961000+00:00"
}
]
}
Compartiment avec la gestion des versions désactivée
ATTENTION : non supporté pour l'instant
Autres options
Effacer les uploads multipart incomplets
Un upload multipart (en plusieurs parties) est une bonne pratique pour un gros objet.
Cela permet d'améliorer le temps de transfert et de mieux récupérer en cas de problème réseau.
Parfois un upload multipart échoue sans être suivi (quelle que soit la raison).
Vous pouvez utiliser l'action AbortIncompleteMultipartUpload
pour supprimer les uploads multipart non terminés depuis un certain temps ( DaysAfterInitiation
).
Exemple (uploads multipart non terminés depuis 2 jours):
{
"Rules": [
{
"Filter": {
"Prefix": ""
},
"Status": "Enabled",
"AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 2
},
"ID": "exemple"
}
]
}
Effacer les marqueurs de suppression expirés
Quand vous utilisez l'action Expiration
avec les paramètres Days
et Date
, les marqueurs de suppression expirés et concernés sont effacés.
Pour effacer systématiquement tous les marqueurs de suppression expirés indépendamment de leur âge, vous pouvez utiliser le paramètre ExpiredObjectDeleteMarker
.
Ce paramètre doit être utilisé seul dans une règle (rule).
Exemple:
{
"Rules": [
{
"Filter": {
"Prefix": ""
},
"Status": "Enabled",
"Expiration": {
"ExpiredObjectDeleteMarker": true
},
"ID": "exemple"
}
]
}
A propos de sécurité
N'utilisez jamais une Access Key root
Avec une AK root, vous pouvez désactiver le cycle de vie, suspendre la gestion des versions et effacer les versions d'objet.
Réduisez les permissions
Pour un usage normal (PUT d'objets dans un bucket), vous devriez appliquer une policy supprimant (deny) les permissions suivantes:
- s3:PutBucketVersioning (pour empêcher la modification du versioning)
- s3:DeleteObjectVersion (pour empêcher l'effacement des versions d'objet et des marqueurs de suppression)
- s3:PutLifeCycleConfiguration (pour empêcher la modification du cycle de vie)
- s3:PutBucketLifecycle (idem mais déprécié)