La correction est intégrée au TP (Voir les encadrés de couleur vert)
Ce que vous allez apprendre dans ce TP
- Écrire une politique ISM
- Restaurer un snapshot
- Limiter les droits
Introduction #
Ce que vous allez apprendre dans cette section
- Écrire une politique ISM
- Restaurer un snapshot
- Limiter les droits
Contexte. Avant la production, vous devez prouver que les index se gèrent seuls, qu'une suppression accidentelle se répare et qu'un lecteur ne peut rien casser.
Prérequis : le premier TP · Durée estimée : 50 min
Une maquette prête à être exploitée.Mise en place #
Étapes guidées, avec leur correction.
1. Écrire la politique
Pourquoi ? Sans ISM, les index grossissent jusqu'à remplir le disque.
Créez une politique : rollover, lecture seule à 7 jours, suppression à 30 jours. Le seuil de 2 documents sert uniquement à observer le rollover.Voir la correction
curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT https://localhost:9200/_plugins/_ism/policies/cycle_logs -d '{ "policy": { "description": "Rollover, lecture seule puis suppression", "default_state": "chaud", "states": [ {"name": "chaud", "actions": [{"rollover": {"min_doc_count": 2}}], "transitions": [{"state_name": "tiede", "conditions": {"min_index_age": "7d"}}]}, {"name": "tiede", "actions": [{"read_only": {}}, {"force_merge": {"max_num_segments": 1}}], "transitions": [{"state_name": "supprime", "conditions": {"min_index_age": "30d"}}]}, {"name": "supprime", "actions": [{"delete": {}}], "transitions": []} ], "ism_template": [{"index_patterns": ["cycle-*"], "priority": 100}] } }'2. Déclencher le rollover
Pourquoi ? Le rollover a besoin d'un alias d'écriture et du réglage
Créez le modèle et le premier index, puis écrivez deux documents. Après deux à trois minutes, un indexrollover_alias.cycle-000002doit apparaître.Voir la correction
# Modèle : l'alias de rollover que la politique doit utiliser curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT https://localhost:9200/_index_template/cycle -d '{ "index_patterns": ["cycle-*"], "template": {"settings": { "number_of_shards": 1, "number_of_replicas": 0, "plugins.index_state_management.rollover_alias": "cycle" }} }' # Premier index, avec l'alias d'écriture curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT https://localhost:9200/cycle-000001 -d '{"aliases":{"cycle":{"is_write_index":true}}}' # Pour le TP seulement : vérifier les politiques toutes les minutes (5 par défaut) curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT https://localhost:9200/_cluster/settings \ -d '{"persistent":{"plugins.index_state_management.job_interval":1}}' # Écrire deux documents via l'alias for i in 1 2; do curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X POST 'https://localhost:9200/cycle/_doc?refresh=true' -d "{\"n\":$i}" donecurl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' https://localhost:9200/_plugins/_ism/explain/cycle-000001 curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' 'https://localhost:9200/_cat/indices/cycle-*?v'3. Sauvegarder et restaurer
Pourquoi ? Une réplique ne protège pas d'une suppression.
Créez le dépôt, faites un snapshot, supprimezlogs-app-000001et restaurez-le : le compteur doit revenir à 3.Voir la correction
curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT https://localhost:9200/_snapshot/sauvegardes -d '{ "type": "fs", "settings": {"location": "/usr/share/opensearch/data/snapshots"} }' curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT 'https://localhost:9200/_snapshot/sauvegardes/snap1?wait_for_completion=true' \ -d '{"indices":"logs-app-*"}' # Perdre un index, puis le restaurer curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X DELETE https://localhost:9200/logs-app-000001 curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X POST 'https://localhost:9200/_snapshot/sauvegardes/snap1/_restore?wait_for_completion=true' \ -d '{"indices":"logs-app-000001"}' curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' https://localhost:9200/logs-app-000001/_count4. Créer un rôle en lecture seule
Pourquoi ? Le moindre privilège se prouve par un refus.
Créez l'utilisateur, le rôle et leur association. Vérifiez que la lecture renvoie 200 et la suppression 403.Voir la correction
curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT https://localhost:9200/_plugins/_security/api/internalusers/lecteur \ -d '{"password":"L3cteur!Passw0rd-26","backend_roles":[]}' curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT https://localhost:9200/_plugins/_security/api/roles/lecture_logs -d '{ "cluster_permissions": ["cluster_composite_ops_ro"], "index_permissions": [{"index_patterns": ["logs-app-*"], "allowed_actions": ["read"]}] }' curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT https://localhost:9200/_plugins/_security/api/rolesmapping/lecture_logs \ -d '{"users":["lecteur"]}' # Lecture : 200. Suppression : 403. curl -sk -u 'lecteur:L3cteur!Passw0rd-26' -o /dev/null -w '%{http_code}\n' https://localhost:9200/logs-app-000001/_search curl -sk -u 'lecteur:L3cteur!Passw0rd-26' -o /dev/null -w '%{http_code}\n' -X DELETE https://localhost:9200/logs-app-000001
Niveau de difficulté : ●●●○○ (3/5)
Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
Articles recommandés
OpenSearch en production : ISM, sauvegardes, sécurité et bonnes pratiques
Automatiser le cycle de vie avec ISM, sauvegarder par snapshots, gérer les rôles et dimensionner ...
Bonnes pratiques Elasticsearch : mappings, shards, cycle de vie et exploitation
Bonnes pratiques Elasticsearch : dimensionnement des shards, mappings explicites, templates, ILM,...
Index Lifecycle Management (ILM) : data tiers, rollover et rétention
Automatiser le cycle de vie des index avec ILM : data tiers hot, warm, cold et frozen, rollover p...
Snapshot Lifecycle Management : sauvegardes automatisées, restauration et reprise après sinistre
Protéger les données Elasticsearch : dépôts de snapshots (S3, GCS, Azure, système de fichiers), p...
Data streams et templates Elasticsearch : component templates, index templates et séries temporelles
Gérer les données horodatées avec les data streams : index templates et component templates, conv...
Kibana : rôle, installation et premiers pas
Ce qu'est Kibana dans la suite Elastic, comment l'installer avec Elasticsearch (start-local, Dock...
Microsoft Entra ID, RBAC et Azure Policy : identités, droits et gouvernance
Gérer identités et accès sur Azure : Microsoft Entra ID (utilisateurs, groupes, MFA, accès condit...
Indexer et chercher dans OpenSearch : mapping, DSL, PPL et SQL
Déclarer un modèle d'index, indexer avec bulk, chercher avec le Query DSL, agréger et interroger ...
OpenSearch : concepts, architecture et différences avec Elasticsearch
Comprendre OpenSearch : origine du projet, licence, différences avec Elasticsearch, index, shards...