La corrección está integrada en el TP (Ver los recuadros verdes)
Lo que vas a aprender en este TP
- Escribir una política ISM
- Restaurar un snapshot
- Limitar los permisos
Introducción #
Lo que vas a aprender en esta sección
- Escribir una política ISM
- Restaurar un snapshot
- Limitar los permisos
Contexto. Antes de producción, debes demostrar que los índices se gestionan solos, que un borrado accidental se repara y que un lector no puede romper nada.
Requisitos: la primera práctica · Duración estimada: 50 min
Una maqueta lista para operar.Puesta en marcha #
Pasos guiados, con su corrección.
1. Escribir la política
¿Por qué? Sin ISM, los índices crecen hasta llenar el disco.
Crea una política: rollover, solo lectura a los 7 días y borrado a los 30. El umbral de 2 documentos sirve solo para observar el rollover.Ver la corrección
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. Provocar el rollover
¿Por qué? El rollover necesita un alias de escritura y el ajuste
Crea la plantilla y el primer índice, y escribe dos documentos. Tras dos o tres minutos debe aparecer un índicerollover_alias.cycle-000002.Ver la corrección
# 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. Guardar y restaurar
¿Por qué? Una réplica no protege de un borrado.
Anota el número de documentos, crea el repositorio, haz un snapshot, borralogs-app-000001y restáuralo: el contador debe recuperar su valor.Ver la corrección
curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' https://localhost:9200/logs-app-000001/_count 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. Crear un rol de solo lectura
¿Por qué? El mínimo privilegio se demuestra con un rechazo.
Crea el usuario, el rol y su asociación. Comprueba que la lectura devuelve 200 y el borrado 403.Ver la corrección
curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT https://localhost:9200/_plugins/_security/api/internalusers/lecteur \ -d '{"password":"Bleu!Ocean-Marin-92","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:Bleu!Ocean-Marin-92' -o /dev/null -w '%{http_code}\n' https://localhost:9200/logs-app-000001/_search curl -sk -u 'lecteur:Bleu!Ocean-Marin-92' -o /dev/null -w '%{http_code}\n' -X DELETE https://localhost:9200/logs-app-000001
Nivel de dificultad : ●●●○○ (3/5)
Mi seguimiento
Inicia sesión para seguir tu progreso y tomar notas. Iniciar sesión
Artículos recomendados
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 ...
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...
OpenSearch : concepts, architecture et différences avec Elasticsearch
Comprendre OpenSearch : origine du projet, licence, différences avec Elasticsearch, index, shards...
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 Dashboards, alertes et observabilité
Explorer ses données dans OpenSearch Dashboards, créer des moniteurs d'alerte et découvrir Trace ...
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...
Installer OpenSearch et OpenSearch Dashboards
Installer OpenSearch avec Docker Compose ou l'archive : mot de passe initial, vm.max_map_count, c...
Alimenter OpenSearch : pipelines d'ingestion et Data Prepper
Transformer les données avec les pipelines d'ingestion, collecter avec Data Prepper, recevoir l'O...