Sichere Kommunikation auf HashiCorp Nomad mit Consul Connect


Bicycle

Sicherung der Kommunikation auf HashiCorp Nomad-Payloads mit HashiCorp Consul Connect

In modernen cloudnativen Umgebungen ist Sicherheit von größter Bedeutung. Eine der zentralen Herausforderungen besteht darin, die Kommunikation zwischen Microservices zu sichern. Egal, ob Sie eine monolithische Anwendung oder eine Reihe von Microservices auf HashiCorp Nomad betreiben, die Sicherung der Kommunikation zwischen Diensten ist entscheidend, um unbefugten Zugriff zu verhindern und die Datensicherheit zu gewährleisten. Hier kommt HashiCorp Consul Connect ins Spiel, eine leistungsstarke Service-Mesh-Lösung, mit der Sie die Kommunikation zwischen Diensten sichern können, ohne Ihren Anwendungscode ändern zu müssen.

In diesem Blogbeitrag werden wir erläutern, wie Sie die Kommunikation Ihrer Workloads auf HashiCorp Nomad mit HashiCorp Consul Connect absichern können und warum dies ein wesentlicher Bestandteil Ihrer Service-Mesh-Strategie ist.

Was ist HashiCorp Consul Connect?

Consul Connect ist Teil des Consul-Service-Mesh von HashiCorp und bietet eine sichere Service-zu-Service-Kommunikation in Ihrer Infrastruktur. Dies wird durch die Aktivierung von gegenseitigem Transport Layer Security (mTLS) zwischen Diensten erreicht. Jeder Dienst erhält eine eigene Identität, und Consul erzwingt, dass nur vertrauenswürdige Dienste miteinander kommunizieren dürfen. Durch die Verwendung von Connect wird die Kommunikation zwischen Diensten authentifiziert und verschlüsselt, sodass die Netzwerksicherheit auch in feindlichen oder kompromittierten Umgebungen gewahrt bleibt.

Hauptmerkmale von Consul Connect:

  • mTLS (Mutual TLS): Stellt sicher, dass die gesamte Kommunikation zwischen Diensten verschlüsselt ist und sowohl der Client als auch der Server die Identität des jeweils anderen überprüfen.
  • Service-Identität: Jeder in Consul registrierte Dienst hat eine eindeutige Identität, die für eine fein abgestimmte Zugriffskontrolle verwendet werden kann.
  • Autorisierungsrichtlinien: Sie können Richtlinien definieren, die steuern, welche Dienste kommunizieren dürfen, was eine zusätzliche Sicherheitsebene bietet.
  • Automatische Zertifikatsrotation: Consul verwaltet den Lebenszyklus von Zertifikaten und sorgt dafür, dass Zertifikate automatisch erneuert und rotiert werden, um den betrieblichen Aufwand zu minimieren.

Warum Consul Connect für Nomad?

Nomad ist ein hochskalierbarer, flexibler Orchestrator zur Bereitstellung und Verwaltung von Anwendungen. Während Nomad Workloads effizient plant und ausführt, fehlen ihm jedoch native Netzwerksicherheitsfunktionen wie die verschlüsselte Kommunikation zwischen Diensten. Hier kommt Consul Connect ins Spiel. Durch die Integration von Nomad mit Consul Connect können Sie Zero-Trust-Sicherheit für Ihre Workloads hinzufügen und eine sichere Kommunikation zwischen Microservices gewährleisten, auch in komplexen Multi-Cloud- oder Hybridumgebungen.

Einige wichtige Gründe für die Integration von Consul Connect mit Nomad:

  • Nahtlose Integration: Nomad bietet eine integrierte Unterstützung für Consul Connect, sodass Sie Ihre Anwendungen mit minimaler Konfiguration sichern können.
  • Vereinfachtes Netzwerk: Consul Connect abstrahiert komplexe Netzwerkkonfigurationen, indem Sidecars verwendet werden, die verschlüsselte Verbindungen automatisch verwalten.
  • Verbesserte Sicherheit: Alle Kommunikationen zwischen Diensten sind verschlüsselt und authentifiziert, wodurch das Risiko von Man-in-the-Middle-Angriffen verringert wird.

Einrichten von Consul Connect mit Nomad

Voraussetzungen:

Wir folgen dem Beispiel, das wir mit der Sicherung von Geheimnissen in HashiCorp Nomad-Payloads unter Verwendung von HashiCorp Vault begonnen haben. Wenn Sie es noch nicht gelesen haben, finden Sie es hier.

Schritt 1: Aktivieren von Consul Connect in Consul und Nomad

Um Consul Connect zu verwenden, müssen Sie Consul Connect in Ihrem Consul-Cluster config.json aktivieren, indem Sie den folgenden Abschnitt hinzufügen:

1{
2  "connect": {
3    "enabled": true
4  }
5}

Anschließend müssen Sie sicherstellen, dass Nomad in Consul integriert ist. Fügen Sie in Ihrer Nomad-Serverkonfigurationsdatei (nomad.hcl) den folgenden Abschnitt hinzu, um die Consul-Integration zu aktivieren:

1consul {
2  address = "127.0.0.1:8500"  # Adresse des Consul-Agenten
3  client_auto_join = true     # Automatische Verbindung von Consul-Clients zum Service-Mesh
4  token = "<CONSUL_ACL_TOKEN>" # Optional: ACL-Token für sichere Consul-Kommunikation
5}

Schritt 2: Konfigurieren des Dienstes zur Verwendung von Connect - MySQL-Datenbank

Wenn Sie einen Job in Nomad definieren, können Sie Consul Connect für jede Aufgabe aktivieren, indem Sie einen connect-Block hinzufügen. Hier ist ein Beispiel für eine Job-Definition mit aktiviertem Consul Connect:

 1job "mysql-server" {
 2  datacenters = ["dc1"]
 3  type        = "service"
 4  namespace   = "demo"
 5
 6  group "mysql-server" {
 7    count = 1
 8
 9    service {
10      name = "mysql-server"
11      port = "db"
12      connect {
13        sidecar_service {}
14      }
15    }
16
17    restart {
18      attempts = 10
19      interval = "5m"
20      delay    = "25s"
21      mode     = "delay"
22    }
23
24    task "mysql-server" {
25      driver = "docker"
26      env = {
27        "MYSQL_ROOT_PASSWORD" = "super-duper-password"
28      }
29      config {
30        image = "mysql:9"
31        ports = ["db"]
32      }
33      resources {
34        cpu    = 500
35        memory = 500
36      }
37    }
38    network {
39      mode = "bridge"
40      port "db" {
41        static = 3306
42        to     = 3306
43      }
44    }
45  }
46}

Unser Datenbankdienst ist jetzt über Consul Connect verfügbar, und alle Kommunikationen werden verschlüsselt und authentifiziert. Dies geschieht durch einen Sidecar-Proxy, der automatisch in die Task-Gruppe injiziert wird. Innerhalb des Sidecar-Proxys werden die notwendigen Zertifikate verwaltet, und die Verbindung zur Datenbank wird hergestellt.

Schritt 3: Konfigurieren des Dienstes zur Verwendung von Connect - dynamic-app-Service

 1job "dynamic-app" {
 2  datacenters = ["dc1"]
 3  type        = "service"
 4  namespace   = "demo"
 5
 6  group "dynamic-app" {
 7    count = 1
 8
 9    restart {
10      attempts = 10
11      interval = "5m"
12      delay    = "25s"
13      mode     = "delay"
14    }
15
16    network {
17      mode = "bridge"
18      port "dynamic-app" {
19         to = 8080
20      }
21    }
22
23    vault {
24      policies      = ["nomad-dynamic-app"]
25      change_mode   = "signal"
26      change_signal = "SIGINT"
27    }
28
29    service {
30      name = "dynamic-app"
31      port = "dynamic-app"
32
33      connect {
34        sidecar_service {
35          proxy {
36            upstreams {
37              destination_name = "mysql-server"
38              local_bind_port  = 3306
39            }
40          }
41        }
42      }
43      check {
44        type     = "http"
45        name     = "health"
46        method   = "GET"
47        interval = "10s"
48        timeout  = "2s"
49        path     = "/health"
50      }
51    }
52
53    task "dynamic-app" {
54      driver = "docker"
55      config {
56        image = "docker.io/mabunixda/dynamic-vault-app"
57        volumes = [
58          "local/config.ini:/usr/src/app/config/config.ini"
59        ]
60        ports = [ "dynamic-app"]
61      }
62
63      template {
64        destination = "local/config.ini"
65        data        = <<EOF
66    [DEFAULT]
67    LogLevel = DEBUG
68    Port = 8080
69    [DATABASE]
70    Address = 127.0.0.1
71    Port = 3306
72
73    Database = my_app
74    {{ with secret "dynamic-app/db/creds/app" }}
75    User = {{ .Data.username }}
76    Password = {{ .Data.password }}
77    {{ end }}
78
79    [VAULT]
80    Enabled = True
81    InjectToken = True
82    Namespace =
83    Address = {{ env "VAULT_ADDR" }}
84    KeyPath = dynamic-app/transit
85    KeyName = app
86EOF
87      }
88      resources {
89        cpu    = 256
90        memory = 256
91      }
92    }
93  }
94}

In diesem Beispiel:

  • Der Dienst dynamic-app ist so konfiguriert, dass ein Sidecar-Proxy verwendet wird, der Anfragen an den mysql-server-Dienst über Consul Connect weiterleitet.
  • Der mysql-server-Dienst hat ebenfalls einen Sidecar-Proxy, jedoch sind keine Upstreams definiert, da er nur Anfragen vom dynamic-app-Dienst entgegennimmt.

Schritt 4: Definieren von Intentions für die Dienstkommunikation

In Consul Connect definieren Intentions, welche Dienste miteinander kommunizieren dürfen. Standardmäßig können keine Dienste miteinander kommunizieren, daher müssen Sie eine Intention erstellen, um die Kommunikation zwischen Ihren Diensten zuzulassen.

Um zum Beispiel dem dynamic-app-Dienst zu erlauben, mit dem mysql-server-Dienst zu kommunizieren, können Sie den folgenden Befehl ausführen:

1consul intention create -allow dynamic-app mysql-server

Dieser Befehl erstellt eine Richtlinie, die es dem dynamic-app-Dienst ermöglicht, eine Verbindung zum mysql-server-Dienst herzustellen, während jeder andere Dienst, der versucht, auf mysql-server zuzugreifen, blockiert wird, es sei denn, er ist ausdrücklich zugelassen.

Schritt 5: Beobachten der sicheren Kommunikation

Sobald Ihr Job ausgeführt wird, übernehmen Nomad und Consul automatisch die sichere Kommunikation. Die Sidecar-Proxies für die Dienste dynamic-app und mysql-server stellen eine sichere mTLS-Verbindung her. Sie können die verschlüsselte Kommunikation überprüfen, indem Sie die Protokolle beobachten oder den Datenverkehr zwischen den Proxies untersuchen.

Zusätzlich können Sie das Consul-Benutzerinterface verwenden, um die Gesundheit und die Verbindungen zwischen Ihren Diensten zu überwachen.

Vorteile der Verwendung von Consul Connect mit Nomad

  1. End-to-End-Verschlüsselung: Alle Kommunikationen zwischen Diensten werden mit mTLS verschlüsselt, was Ihre Daten während der Übertragung schützt.
  2. Zero Trust Networking: Sie können Richtlinien erzwingen, die genau festlegen, welche Dienste miteinander kommunizieren dürfen, und so das Prinzip der minimalen Berechtigung umsetzen.
  3. Dynamisch und skalierbar: Consul Connect skaliert mit Ihrer Infrastruktur, indem es die Dienstregistrierung, -erkennung und -konnektivität dynamisch verwaltet, während Ihre Workloads wachsen.
  4. Einfache Integration: Consul Connect lässt sich nahtlos in Nomad integrieren, reduziert die Komplexität und verbessert gleichzeitig die Sicherheit.

Fazit

Die Sicherung der Kommunikation zwischen Diensten ist ein grundlegender Aspekt beim Aufbau robuster und sicherer verteilter Systeme. Durch die Nutzung von HashiCorp Consul Connect mit HashiCorp Nomad können Sie sicherstellen, dass Ihr Service-Mesh Sicherheitsbest-Practices folgt, ohne dass der Anwendungscode geändert werden muss. Die Kombination aus mTLS, Dienstidentität und Zugriffskontrollrichtlinien bietet eine robuste Sicherheit und behält gleichzeitig Flexibilität und Skalierbarkeit in Ihrer Infrastruktur bei.

Verbessern Sie noch heute Ihre Bereitstellungen, indem Sie Consul Connect integrieren, und nutzen Sie sichere, authentifizierte und verschlüsselte Kommunikation über Ihre Dienste hinweg.

Zurück Unsere Trainings entdecken

Wir sind für Sie da

Sie interessieren sich für unsere Trainings oder haben einfach eine Frage, die beantwortet werden muss? Sie können uns jederzeit kontaktieren! Wir werden unser Bestes tun, um alle Ihre Fragen zu beantworten.

Hier kontaktieren