64 Praxisbeispiel: CSV-Import mit Authentifizierung

Dieses Praxisbeispiel demonstriert die Implementierung einer Logstash-Datenpipeline für den Import von CSV-Daten in OpenSearch/Elasticsearch unter Berücksichtigung von Sicherheitsaspekten.

64.1 Implementierungsablauf

64.1.1 Schritt 1: Vorbereitung der SSL-Umgebung

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

64.1.2 Schritt 2: API-Key-Generierung

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:

64.1.3 Schritt 3: Pipeline-Konfiguration

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:

64.1.4 Schritt 4: Deployment und Monitoring

64.1.4.1 Pipeline starten:

logstash -f pipeline.conf

64.1.4.2 Pipeline in Docker starten:

docker run --rm -it -e XPACK_MONITORING_ENABLED=false -v ~/elastic/pipeline/:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:8.17.0

64.1.4.3 Verifikation der Daten:

GET /csv-data/_search
{
  "query": {
    "match_all": {}
  },
  "size": 1
}

64.2 Sicherheitsaspekte

Bei der Implementation sind folgende Sicherheitsaspekte zu beachten:

  1. SSL-Zertifikatsprüfung
  2. API-Key-Management
  3. Monitoring

64.3 Best Practices für die Implementation

  1. Datenvalidierung
  2. Error Handling
  3. Performance-Optimierung

Diese praktische Implementation zeigt die Integration von Sicherheitsaspekten in eine Logstash-Pipeline und kann als Vorlage für ähnliche Datenimport-Szenarien dienen.