1. TLS et certificats #
Chiffrer tout.
Certificats #
bin/elasticsearch-certutil ca --pem --out ca.zip
bin/elasticsearch-certutil cert --pem --ca-cert ca/ca.crt --ca-key ca/ca.key --in instances.yml --out certs.zip# elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.key: certs/es01/es01.key
xpack.security.transport.ssl.certificate: certs/es01/es01.crt
xpack.security.transport.ssl.certificate_authorities: certs/ca/ca.crt
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.key: certs/es01/es01.key
xpack.security.http.ssl.certificate: certs/es01/es01.crtBonne Pratique : Suivez la date d'expiration des certificats (GET _ssl/certificates) et renouvelez-les par une procédure écrite et testée : un certificat de transport expiré coupe le cluster.2. Clés d'API et privilèges fins #
Le moindre privilège.
Exemples #
POST _security/api_key
{ "name": "ingest-nginx", "expiration": "90d",
"role_descriptors": { "writer": { "indices": [ { "names": [ "logs-nginx-*" ], "privileges": [ "create_doc", "auto_configure" ] } ] } } }
PUT _security/role/support-eu
{ "indices": [ { "names": [ "orders-*" ],
"privileges": [ "read" ],
"field_security": { "grant": [ "*" ], "except": [ "customer.email", "card.*" ] },
"query": { "term": { "region": "eu" } } } ] }- Une clé d'API par application, avec expiration et privilèges limités ; rotation planifiée (
POST _security/api_key/_invalidate). - Field-level security : masquer des champs ; document-level security : restreindre les documents par requête.
- Audit :
xpack.security.audit.enabled: truejournalise authentifications, refus et changements de rôles.
À savoir : Certaines fonctionnalités dépendent de la version et du niveau de licence (Basic, Platinum, Enterprise) : vérifiez-les dans la documentation et la page des abonnements Elastic avant de les utiliser en production.
