Die Absicherung Ihrer OpenSearch-Umgebung ist von fundamentaler Bedeutung für den sicheren Betrieb Ihrer Anwendungen. In diesem Kapitel lernen Sie, wie Sie OpenSearch effektiv absichern können. Wir beginnen mit den grundlegenden Konzepten und arbeiten uns zu fortgeschrittenen Sicherheitsmaßnahmen vor.
Bevor wir uns mit den technischen Details befassen, ist es wichtig, die grundlegenden Sicherheitskonzepte in OpenSearch zu verstehen. Die Sicherheitsarchitektur basiert auf mehreren Säulen:
Stellen Sie sich diese Säulen wie verschiedene Verteidigungslinien vor, die zusammenarbeiten, um Ihre Daten zu schützen.
Die erste Verteidigungslinie ist die Verschlüsselung der Kommunikation. Hierfür verwenden wir TLS. Lassen Sie uns Schritt für Schritt durch die Einrichtung gehen:
# config/opensearch.yml
plugins.security.ssl.transport.pemcert_filepath: certs/node.pem
plugins.security.ssl.transport.pemkey_filepath: certs/node-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: certs/root-ca.pem
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: certs/node.pem
plugins.security.ssl.http.pemkey_filepath: certs/node-key.pem
plugins.security.ssl.http.pemtrustedcas_filepath: certs/root-ca.pemFür die Zertifikatserstellung können Sie das mitgelieferte Skript verwenden:
./plugins/opensearch-security/tools/cert-generator.sh
Dieser Befehl erstellt ein komplettes Set von Zertifikaten:
Die Benutzerverwaltung in OpenSearch folgt dem Prinzip der geringsten Privilegien. Das bedeutet, dass Benutzer nur die Rechte erhalten, die sie für ihre Arbeit benötigen.
Benutzer können über die REST-API oder über Konfigurationsdateien erstellt werden:
PUT _plugins/_security/api/internalusers/analyst
{
"password": "secure-password123",
"attributes": {
"department": "Analytics"
},
"backend_roles": ["analyst_role"]
}
Die Attribute ermöglichen es uns, zusätzliche Metadaten mit dem Benutzer zu verknüpfen, die wir später für die Zugriffskontrolle verwenden können.
Rollen definieren die eigentlichen Berechtigungen:
PUT _plugins/_security/api/roles/analyst_role
{
"cluster_permissions": [
"cluster:monitor/main",
"cluster:monitor/health"
],
"index_permissions": [{
"index_patterns": ["logs-*"],
"allowed_actions": [
"read",
"search"
],
"field_level_security": {
"grant": ["timestamp", "message", "level"],
"except": ["sensitive_data"]
}
}]
}
Diese Rolle ermöglicht:
Das Role Mapping verbindet Benutzer mit ihren Rollen:
PUT _plugins/_security/api/rolesmapping/analyst_role
{
"backend_roles": ["analyst"],
"hosts": [],
"users": ["analyst1", "analyst2"]
}
Multi-Tenancy ermöglicht die sichere Trennung von Daten verschiedener Mandanten:
# opensearch_dashboards.yml
opensearch_security.multitenancy.enabled: true
opensearch_security.multitenancy.tenants.preferred: ["Private", "Global"]
opensearch_security.multitenancy.enable_global: trueEin praktisches Beispiel für die Tenant-Konfiguration:
PUT _plugins/_security/api/roles/company_role
{
"tenant_permissions": [{
"tenant_patterns": ["company_${user.attributes.company_id}"],
"allowed_actions": ["kibana_all_write"]
}]
}
Audit Logging ist essentiell für die Nachverfolgbarkeit von Aktivitäten:
# config/opensearch.yml
plugins.security.audit.type: internal_opensearch
plugins.security.audit.config.disabled_rest_categories: NONE
plugins.security.audit.config.disabled_transport_categories: NONE
plugins.security.audit.config.routes:
- route_name: "COMPLIANCE_ROUTE"
indices: ["audit-*"]
exclude_sensitive_headers: falseEin spezielles Mapping für Audit-Logs:
PUT audit-logs-2024
{
"mappings": {
"properties": {
"timestamp": { "type": "date" },
"actor": {
"properties": {
"name": { "type": "keyword" },
"roles": { "type": "keyword" }
}
},
"action": { "type": "keyword" },
"indices": { "type": "keyword" },
"request": { "type": "object", "enabled": false },
"response": { "type": "object", "enabled": false }
}
}
}
Zugriffskontrolle basierend auf IP-Adressen:
plugins.security.http.ipfilter:
- name: "Allow internal network"
type: allow
networks: ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]Integration mit externen Authentifizierungssystemen:
plugins.security.authc.backends.ldap:
type: ldap
order: 1
config:
enable_ssl: true
host: "ldap.example.com"
port: 636
bind_dn: "cn=admin,dc=example,dc=com"
password: "admin-password"
userbase: "ou=people,dc=example,dc=com"
usersearch: "(uid={0})"Implementierung eigener Authentifizierungsmechanismen:
public class CustomAuthenticator extends HTTPJwtAuthenticator {
@Override
public AuthCredentials extractCredentials(final RestRequest request) {
// Eigene Authentifizierungslogik implementieren
String token = request.header("Authorization");
// Token validieren und Berechtigungen extrahieren
return new AuthCredentials("user", new String[]{"role1", "role2"});
}
}Zertifikatsverwaltung
Passwort-Policies
PUT _plugins/_security/api/securityconfig
{
"password_policy": {
"minimum_length": 12,
"require_numbers": true,
"require_lowercase": true,
"require_uppercase": true,
"require_symbols": true
}
}Monitoring und Alerting
PUT _plugins/_alerting/monitors/security_monitor
{
"type": "monitor",
"name": "Security Events Monitor",
"enabled": true,
"schedule": {
"period": {
"interval": 5,
"unit": "MINUTES"
}
},
"inputs": [{
"search": {
"indices": ["audit-*"],
"query": {
"bool": {
"must": [{
"range": {
"timestamp": {
"gte": "now-5m"
}
}
}],
"should": [{
"term": {
"action": "FAILED_LOGIN"
}
}]
}
}
}
}],
"triggers": [{
"name": "Security Alert",
"severity": "High",
"condition": {
"script": {
"source": "ctx.results[0].hits.total.value > 5"
}
}
}]
}Hier sind einige häufige Probleme und ihre Lösungen:
TLS-Probleme
# Zertifikate überprüfen
openssl x509 -in node.pem -text -noout
# TLS-Verbindung testen
openssl s_client -connect localhost:9200Authentifizierungsfehler
# Benutzerrechte überprüfen
GET _plugins/_security/api/user/admin
# Rolleneinstellungen anzeigen
GET _plugins/_security/api/roles/admin_roleAudit-Log-Probleme
# Audit-Logs überprüfen
GET audit-*/_search
{
"query": {
"bool": {
"must": [
{ "term": { "action": "FAILED_LOGIN" }},
{ "range": { "timestamp": { "gte": "now-1h" }}}
]
}
}
}Die Sicherheit Ihrer OpenSearch-Umgebung ist ein kontinuierlicher Prozess, der regelmäßige Überprüfungen und Anpassungen erfordert. Mit den in diesem Kapitel vorgestellten Konzepten und Werkzeugen können Sie eine robuste Sicherheitsarchitektur aufbauen und aufrechterhalten.