Startseite » Blog DE » Spring Boot Actuator richtig nutzen – Ein praktischer Guide 

Spring Boot Actuator richtig nutzen – Ein praktischer Guide 

Spring Boot Actuator ist eines dieser Features, das Entwickler entweder lieben oder ignorieren – bis sie es wirklich brauchen. Dabei bietet es wertvolle Einblicke in den Zustand einer Anwendung und hilft bei der Überwachung und Fehlersuche. In diesem Artikel schauen wir uns an, wie man Spring Boot Actuator sinnvoll nutzt, welche Endpunkte wichtig sind und wie man es in der Praxis optimal konfiguriert. 

What is Spring Boot Actuator

1. Was ist Spring Boot Actuator?

Spring Boot Actuator ist ein Modul von Spring Boot, das eine Reihe von Produktions- und Monitoring-Funktionen für eine Anwendung bereitstellt. Es ermöglicht das Sammeln von Metriken, Gesundheitsprüfungen und detaillierte Einblicke in die Laufzeitumgebung. 

Warum ist Actuator nützlich?

  • Ermöglicht Health Checks, um festzustellen, ob die Anwendung noch ordnungsgemäß funktioniert. 
  • Bietet Metriken, um Performance- und Nutzungsstatistiken zu überwachen. 
  • Unterstützt Tracing und Logging, um Fehler besser zu analysieren. 
  • Integriert sich mit Prometheus, Grafana und anderen Monitoring-Tools. 
Activate Spring Boot Actuator

2. Actuator in Spring Boot aktivieren

Um Actuator in einer Spring Boot-Anwendung zu nutzen, muss lediglich die Abhängigkeit in der pom.xml hinzugefügt werden: 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-actuator</artifactId> 
</dependency>

Alternativ für Gradle: 

implementation 'org.springframework.boot:spring-boot-starter-actuator' 

Nach einem Neustart der Anwendung sind die Actuator-Endpunkte verfügbar. 

3. Wichtige Actuator-Endpunkte

Spring Boot Actuator bietet eine Vielzahl an Endpunkten, die über HTTP erreichbar sind. Hier sind die wichtigsten: 

Endpoint 

Beschreibung 

/actuator/health 

Zeigt den Gesundheitsstatus der Anwendung an. 

/actuator/info 

Zeigt allgemeine Informationen zur Anwendung. 

/actuator/metrics 

Stellt verschiedene Metriken bereit. 

/actuator/loggers 

Ermöglicht das Ändern der Log-Level zur Laufzeit. 

/actuator/env 

Zeigt die aktuell geladenen Umgebungsvariablen. 

/actuator/beans 

Listet alle Beans im Spring Context auf. 

Beispiel: Gesundheitsprüfung

Standardmäßig liefert /actuator/health eine einfache Statusmeldung: 

{ 
  "status": "UP" 
}

Mit zusätzlichen Abhängigkeiten (z. B. Datenbankverbindung) wird der Output detaillierter: 

{ 
  "status": "UP", 
  "components": { 
    "db": { "status": "UP", "details": { "database": "MySQL", "version": "8.0.29" } }, 
    "diskSpace": { "status": "UP", "details": { "total": 500107862016, "free": 314573959168 } } 
  } 
}
Configure Spring Boot Actuator Endpoints

4. Actuator Endpunkte konfigurieren

Standardmäßig sind nur wenige Endpunkte öffentlich zugänglich. Um mehr freizuschalten, muss die application.properties oder application.yml angepasst werden. 

Endpunkte explizit aktivieren

management.endpoints.web.exposure.include=health,info,metrics,loggers 

Alternativ, um alle Endpunkte zu aktivieren: 

management.endpoints.web.exposure.include=*

Achtung: Das sollte nur in Entwicklungsumgebungen geschehen, da sensible Daten enthalten sein könnten. 

Spring Boot Actuator Security

5. Sicherheit für Actuator-Endpunkte

Da Actuator detaillierte Einblicke in die Anwendung gibt, sollte der Zugriff abgesichert werden. Spring Security kann verwendet werden, um Endpunkte mit einer Authentifizierung zu versehen. 

Basic Auth für Actuator aktivieren

In der application.properties: 

spring.security.user.name=admin 
spring.security.user.password=geheimespasswort 

Jetzt sind die Actuator-Endpunkte nur noch mit diesen Zugangsdaten erreichbar. 

Alternativ kann Spring Security mit rollenbasierter Zugriffskontrolle konfiguriert werden: 

@Bean 
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { 
    return http 
        .authorizeHttpRequests(auth -> auth 
            .requestMatchers("/actuator/**").hasRole("ADMIN") 
            .anyRequest().authenticated()) 
        .httpBasic(withDefaults()) 
        .build(); 
}
Integrate Monitoring with actuator

6. Actuator in Monitoring-Systeme integrieren

Spring Boot Actuator kann einfach in Monitoring-Systeme wie Prometheus und Grafana integriert werden. 

Micrometer und Prometheus nutzen

Spring Boot verwendet Micrometer, um Metriken bereitzustellen. Die Prometheus-Integration kann mit folgender Abhängigkeit aktiviert werden: 

<dependency> 
    <groupId>io.micrometer</groupId> 
    <artifactId>micrometer-registry-prometheus</artifactId> 
</dependency>

Danach wird ein neuer Endpunkt verfügbar: 

http://localhost:8080/actuator/prometheus

Dieser kann von einem Prometheus-Server abgefragt und in Grafana visualisiert werden. 

Logging in Spring Boot

7. Eigene Actuator-Endpunkte erstellen

Spring Boot erlaubt das Definieren eigener Actuator-Endpunkte, falls spezielle Informationen bereitgestellt werden sollen. 

Beispiel: Custom Actuator Endpoint

@Component 
@Endpoint(id = "custom-info") 
public class CustomInfoEndpoint { 
 
    @ReadOperation 
    public Map<String, String> customInfo() { 
        return Map.of("appVersion", "1.0.0", "author", "John Doe"); 
    } 
}

Der neue Endpunkt ist dann unter /actuator/custom-info erreichbar. 

Important Actuator Endpoints

8. Gefahren durch ungeschützte Actuator-Endpunkte

Spring Boot Actuator bietet viele nützliche Funktionen für das Monitoring und die Verwaltung einer Anwendung. Doch wenn diese Endpunkte nicht richtig abgesichert sind, können sie von Angreifern ausgenutzt werden. Hier sind einige der kritischsten Endpunkte und mögliche Angriffe:

1. /env (bis Spring Boot 2.x) bzw. /actuator/configprops

  • Risiko: Zeigt Umgebungsvariablen und Konfigurationswerte an, darunter API-Keys, Passwörter und andere sensible Daten.
  • Angriff: Angreifer können diese Daten auslesen und für weitere Attacken nutzen, z. B. um sich in externe Dienste einzuloggen.

2. /heapdump

  • Risiko: Erlaubt den Download eines Speicherabbilds der Anwendung, das Session-IDs, Tokens oder Passwörter enthalten kann.
  • Angriff: Ein Angreifer kann den Dump analysieren und interne Daten oder Zugangsdaten extrahieren.

3. /loggers

  • Risiko: Erlaubt das Ändern des Log-Levels zur Laufzeit.
  • Angriff: Ein Angreifer könnte die Logs auf DEBUG oder TRACE setzen und dadurch detaillierte Anwendungsinformationen erhalten.

4. /mappings

  • Risiko: Zeigt alle registrierten API-Endpunkte der Anwendung.
  • Angriff: Durch das Scannen dieser Liste kann ein Angreifer versteckte oder unsichere Endpunkte finden und gezielt angreifen.

5. /beans

  • Risiko: Listet alle registrierten Beans und deren Abhängigkeiten auf.
  • Angriff: Gibt Angreifern wertvolle Informationen über die interne Architektur der Anwendung, was sie für Angriffe wie Dependency Injection oder Exploits nutzen können.

6. /threaddump

  • Risiko: Gibt eine Liste aller laufenden Threads der JVM zurück.
  • Angriff: Kann verwendet werden, um interne Prozesse zu analysieren oder laufende Transaktionen abzugreifen.

7. /shutdown (bis Spring Boot 2.x, standardmäßig deaktiviert)

  • Risiko: Erlaubt das Herunterfahren der Anwendung per HTTP-Anfrage.
  • Angriff: Falls aktiviert, könnte ein Angreifer einfach eine Anfrage senden und die Anwendung abschalten.

Sicherheitsmaßnahmen gegen Actuator-Angriffe

Um zu verhindern, dass Actuator-Endpunkte von Unbefugten ausgenutzt werden, sollten folgende Maßnahmen umgesetzt werden:

Endpoints nur für Administratoren zugänglich machen

  • Nutzung von Basic Auth oder OAuth2 für den Zugriff.
  • Nur bestimmten Benutzern erlauben, auf sensible Endpunkte zuzugreifen.

Endpoints auf interne Netzwerke beschränken

  • Zugriff nur über localhost oder ein VPN ermöglichen.
  • Firewall-Regeln setzen, um unbefugte Anfragen zu blockieren.

Nicht benötigte Endpoints deaktivieren

    • In der application.properties oder application.yml:
management.endpoints.web.exposure.exclude=env,heapdump,loggers,shutdown
  • Alternativ explizit nur benötigte Endpunkte freigeben:
management.endpoints.web.exposure.include=health,info

Spring Security für Actuator-Endpunkte aktivieren

  • Absicherung über Spring Security, um nur authentifizierte Benutzer zuzulassen.
  • Beispiel für eine Security-Konfiguration:
@Configuration
public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/actuator/health", "/actuator/info").permitAll()
            .antMatchers("/actuator/**").hasRole("ADMIN")
            .and()
            .httpBasic();
    }
}

Fazit

Spring Boot Actuator ist ein mächtiges Tool zur Überwachung und Analyse von Anwendungen. Durch die geschickte Konfiguration und Nutzung von Sicherheitsmaßnahmen kann es sowohl Entwicklern als auch DevOps-Teams enorme Vorteile bieten. Mit einer Integration in Monitoring-Tools wie Prometheus und Grafana lassen sich aussagekräftige Dashboards erstellen, die den Betrieb der Anwendung deutlich erleichtern. 

Nach oben scrollen
WordPress Cookie Plugin von Real Cookie Banner