Dieses Praxisbeispiel demonstriert die Implementierung einer Logstash-Datenpipeline für den Import von CSV-Daten in OpenSearch/Elasticsearch unter Berücksichtigung von Sicherheitsaspekten.
Für eine sichere Verbindung muss zunächst das Serverzertifikat abgerufen werden:
echo | openssl s_client -connect [server]:[port] -servername [server] 2>/dev/null | \
openssl x509 -outform PEM > ca.crt
Für die sichere Authentifizierung wird ein API-Key mit spezifischen Berechtigungen erstellt:
POST /_security/api_key
{
"name": "logstash_write_key",
"role_descriptors": {
"logstash_writer": {
"cluster": ["monitor", "manage_ilm"],
"index": [
{
"names": ["csv-data*"],
"privileges": ["create", "create_index", "write", "index"]
}
]
}
}
}
Die Antwort enthält die notwendigen Credentials:
Die Logstash-Pipeline wird in drei Hauptkomponenten strukturiert:
# Input-Konfiguration für CSV-Verarbeitung
input {
file {
path => "/usr/share/logstash/pipeline/data.csv"
start_position => "beginning"
sincedb_path => "/dev/null" # Deaktiviert State-Tracking
}
}
# Filter für Datenverarbeitung
filter {
csv {
separator => ","
skip_header => "true"
columns => ["id", "name", "age", "email"]
}
mutate {
convert => {
"id" => "integer"
"age" => "integer"
}
}
}
# Output-Konfiguration mit Sicherheitseinstellungen
output {
elasticsearch {
hosts => ["https://[server]:[port]"]
index => "csv-data"
api_key => "[id]:[api_key]"
ssl => true
ssl_certificate_verification => true
cacert => "/path/to/ca.crt"
}
# Debug-Output
stdout { codec => rubydebug }
}Diese Konfiguration umfasst:
logstash -f pipeline.conf
docker run --rm -it -e XPACK_MONITORING_ENABLED=false -v ~/elastic/pipeline/:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:8.17.0
GET /csv-data/_search
{
"query": {
"match_all": {}
},
"size": 1
}
Bei der Implementation sind folgende Sicherheitsaspekte zu beachten:
Diese praktische Implementation zeigt die Integration von Sicherheitsaspekten in eine Logstash-Pipeline und kann als Vorlage für ähnliche Datenimport-Szenarien dienen.