您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“基于SpringBoot應用監控Actuator安全隱患及解決的方法”,內容詳細,步驟清晰,細節處理妥當,希望這篇“基于SpringBoot應用監控Actuator安全隱患及解決的方法”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
微服務作為一項在云中部署應用和服務的新技術是當下比較熱門話題,而微服務的特點決定了功能模塊的部署是分布式的,運行在不同的機器上相互通過服務調用進行交互,業務流會經過多個微服務的處理和傳遞,在這種框架下,微服務的監控顯得尤為重要。
而Actuator正是Spring Boot提供的對應用系統的監控和管理的集成功能,可以查看應用配置的詳細信息,例如自動化配置信息、創建的Spring beans信息、系統環境變量的配置信息以及Web請求的詳細信息等。
如果使用不當或者一些不經意的疏忽,可能造成信息泄露等嚴重的安全隱患。
Actuator應用監控使用只需要添加spring-boot-starter-actuator依賴即可,如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
可以在application.properties中指定actuator的訪問端口、訪問路徑等信息:
# 訪問示例:http://localhost:9595/monitor management: endpoints: web: # actuator的訪問路徑,替換默認/actuator base-path: /monitor # 設置是否暴露端點 默認只有health和info可見 exposure: # include: env # 方式1: 暴露端點env,配置多個以,隔開 include: "*" # 方式2: 包括所有端點,注意需要添加引號 # 排除端點 exclude: shutdown server: port: 9595 #新開監控端口,不和應用用同一個端口 endpoint: health: show-details: always # 顯示db、redis、rabbti連接情況等 shutdown: enabled: true #默認情況下,除shutdown以外的所有端點均已啟用。手動開啟
此時,運行示例,訪問/monitor/即可查看所有端點信息,再訪問/monitor/env即可查看該應用全部環境屬性,如圖:
Endpoints 是 Actuator 的核心部分,它用來監視應用程序及交互,spring-boot-actuator中已經內置了非常多的Endpoints(health、info、beans、httptrace、shutdown等等),同時也允許我們擴展自己的端點。
Endpoints 分成兩類:原生端點和用戶自定義端點;自定義端點主要是指擴展性,用戶可以根據自己的實際應用,定義一些比較關心的指標,在運行期進行監控。
原生端點是在應用程序里提供的眾多 restful api 接口,通過它們可以監控應用程序運行時的內部狀況。原生端點又可以分成三類:
應用配置類:可以查看應用在運行期間的靜態信息:例如自動配置信息、加載的spring bean信息、yml文件配置信息、環境信息、請求映射信息;
度量指標類:主要是運行期間的動態信息,例如堆棧、請求連、一些健康指標、metrics信息等;
操作控制類:主要是指shutdown,用戶可以發送一個請求將應用的監控功能關閉。
Actuator 默認提供了以下接口,具體如下表所示:
ID | 描述 | 默認啟用 | 默認公開 |
---|---|---|---|
auditevents | 公開當前應用程序的審計事件信息 | Yes | No |
beans | 顯示應用程序中所有Spring bean的完整列表 | Yes | No |
conditions | 顯示在配置和自動配置類上評估的條件以及它們是否匹配的原因 | Yes | No |
configprops | 顯示所有@ConfigurationProperties對照的列表 | Yes | No |
env | 從Spring的ConfigurableEnvironment中公開屬性 | Yes | No |
flyway | 顯示已應用的任何Flyway數據庫遷移 | Yes | No |
health | 顯示應用程序健康信息 | Yes | Yes |
httptrace | 顯示HTTP跟蹤信息(默認情況下,最后100個HTTP請求-響應交互) | Yes | No |
info | 顯示任意應用程序信息 | Yes | Yes |
loggers | 顯示和修改應用程序中記錄器的配置 | Yes | No |
liquibase | 顯示已應用的任何Liquibase數據庫遷移 | Yes | No |
metrics | 顯示當前應用程序的“指標”信息 | Yes | No |
mappings | 顯示所有@RequestMapping路徑對照的列表 | Yes | No |
scheduledtasks | 顯示應用程序中調度的任務 | Yes | No |
sessions | 允許從Spring Session支持的會話存儲中檢索和刪除用戶會話 | Yes | No |
shutdown | 讓應用程序優雅地關閉 | No | No |
threaddump | 執行線程轉儲 | Yes | No |
如果上述請求接口不做任何安全限制,安全隱患顯而易見。實際上Spring Boot也提供了安全限制功能。比如要禁用/env接口,則可設置如下:
endpoint: env: enabled: false
另外也可以引入spring-boot-starter-security依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
在application.properties中開啟security功能,配置訪問權限驗證,這時再訪問actuator功能時就會彈出登錄窗口,需要輸入賬號密碼驗證后才允許訪問。
spring: security: user: password: 123456 name: jaler
為了只對actuator功能做權限驗證,其他應用接口不做認證,我們可以重新定制下SpringSecurity
package com.jaler.common.common.config; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @Configuration @EnableWebSecurity public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired Environment env; @Override protected void configure(HttpSecurity security) throws Exception { String contextPath = env.getProperty("management.endpoints.web.base-path"); if(StringUtils.isEmpty(contextPath)) { contextPath = ""; } security.csrf().disable(); security.authorizeRequests() .antMatchers("/**"+contextPath+"/**") .authenticated() .anyRequest() .permitAll() .and() .httpBasic(); } }
再次訪問http://localhost:9595/monitor,此時需要進行權限驗證,如下圖:
1.只開放某些無敏感信息的端點。
2.打開安全限制并進行身份驗證,訪問Actuator接口時需要登錄。
3.Actuator訪問接口使用獨立端口,并配置不對外網開放。
讀到這里,這篇“基于SpringBoot應用監控Actuator安全隱患及解決的方法”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。