基于SpringBoot應(yīng)用監(jiān)控Actuator安全隱患及解決的方法

本文小編為大家詳細介紹“基于SpringBoot應(yīng)用監(jiān)控Actuator安全隱患及解決的方法”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“基于SpringBoot應(yīng)用監(jiān)控Actuator安全隱患及解決的方法”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

公司主營業(yè)務(wù):網(wǎng)站制作、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出薌城免費做網(wǎng)站回饋大家。

概述

微服務(wù)作為一項在云中部署應(yīng)用和服務(wù)的新技術(shù)是當下比較熱門話題,而微服務(wù)的特點決定了功能模塊的部署是分布式的,運行在不同的機器上相互通過服務(wù)調(diào)用進行交互,業(yè)務(wù)流會經(jīng)過多個微服務(wù)的處理和傳遞,在這種框架下,微服務(wù)的監(jiān)控顯得尤為重要。

而Actuator正是Spring Boot提供的對應(yīng)用系統(tǒng)的監(jiān)控和管理的集成功能,可以查看應(yīng)用配置的詳細信息,例如自動化配置信息、創(chuàng)建的Spring beans信息、系統(tǒng)環(huán)境變量的配置信息以及Web請求的詳細信息等。

如果使用不當或者一些不經(jīng)意的疏忽,可能造成信息泄露等嚴重的安全隱患。

Actuator使用

Actuator應(yīng)用監(jiān)控使用只需要添加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
      # 設(shè)置是否暴露端點 默認只有health和info可見
      exposure:
        # include: env   # 方式1: 暴露端點env,配置多個以,隔開
        include: "*"     # 方式2: 包括所有端點,注意需要添加引號
        # 排除端點
        exclude: shutdown
  server:
    port: 9595  #新開監(jiān)控端口,不和應(yīng)用用同一個端口
  endpoint:
    health:
      show-details: always # 顯示db、redis、rabbti連接情況等
    shutdown:
      enabled: true  #默認情況下,除shutdown以外的所有端點均已啟用。手動開啟

此時,運行示例,訪問/monitor/即可查看所有端點信息,再訪問/monitor/env即可查看該應(yīng)用全部環(huán)境屬性,如圖:

基于SpringBoot應(yīng)用監(jiān)控Actuator安全隱患及解決的方法

基于SpringBoot應(yīng)用監(jiān)控Actuator安全隱患及解決的方法

Endpoints(端點)介紹

Endpoints 是 Actuator 的核心部分,它用來監(jiān)視應(yīng)用程序及交互,spring-boot-actuator中已經(jīng)內(nèi)置了非常多的Endpoints(health、info、beans、httptrace、shutdown等等),同時也允許我們擴展自己的端點。

Endpoints 分成兩類:原生端點和用戶自定義端點;自定義端點主要是指擴展性,用戶可以根據(jù)自己的實際應(yīng)用,定義一些比較關(guān)心的指標,在運行期進行監(jiān)控。

原生端點是在應(yīng)用程序里提供的眾多 restful api 接口,通過它們可以監(jiān)控應(yīng)用程序運行時的內(nèi)部狀況。原生端點又可以分成三類:

  • 應(yīng)用配置類:可以查看應(yīng)用在運行期間的靜態(tài)信息:例如自動配置信息、加載的spring bean信息、yml文件配置信息、環(huán)境信息、請求映射信息;

  • 度量指標類:主要是運行期間的動態(tài)信息,例如堆棧、請求連、一些健康指標、metrics信息等;

  • 操作控制類:主要是指shutdown,用戶可以發(fā)送一個請求將應(yīng)用的監(jiān)控功能關(guān)閉。

Actuator 默認提供了以下接口,具體如下表所示:

ID

描述

默認啟用

默認公開

auditevents公開當前應(yīng)用程序的審計事件信息YesNo
beans顯示應(yīng)用程序中所有Spring bean的完整列表YesNo
conditions顯示在配置和自動配置類上評估的條件以及它們是否匹配的原因YesNo
configprops顯示所有@ConfigurationProperties對照的列表YesNo
env從Spring的ConfigurableEnvironment中公開屬性YesNo
flyway顯示已應(yīng)用的任何Flyway數(shù)據(jù)庫遷移YesNo
health顯示應(yīng)用程序健康信息YesYes
httptrace顯示HTTP跟蹤信息(默認情況下,最后100個HTTP請求-響應(yīng)交互)YesNo
info顯示任意應(yīng)用程序信息YesYes
loggers顯示和修改應(yīng)用程序中記錄器的配置YesNo
liquibase顯示已應(yīng)用的任何Liquibase數(shù)據(jù)庫遷移YesNo
metrics顯示當前應(yīng)用程序的“指標”信息YesNo
mappings顯示所有@RequestMapping路徑對照的列表YesNo
scheduledtasks顯示應(yīng)用程序中調(diào)度的任務(wù)YesNo
sessions允許從Spring Session支持的會話存儲中檢索和刪除用戶會話YesNo
shutdown讓應(yīng)用程序優(yōu)雅地關(guān)閉NoNo
threaddump執(zhí)行線程轉(zhuǎn)儲YesNo

安全措施

如果上述請求接口不做任何安全限制,安全隱患顯而易見。實際上Spring Boot也提供了安全限制功能。比如要禁用/env接口,則可設(shè)置如下:

endpoint:
 env:
    enabled: false

另外也可以引入spring-boot-starter-security依賴

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

在application.properties中開啟security功能,配置訪問權(quán)限驗證,這時再訪問actuator功能時就會彈出登錄窗口,需要輸入賬號密碼驗證后才允許訪問。

spring:
 security:
    user:
      password: 123456
      name: jaler

為了只對actuator功能做權(quán)限驗證,其他應(yīng)用接口不做認證,我們可以重新定制下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,此時需要進行權(quán)限驗證,如下圖:

基于SpringBoot應(yīng)用監(jiān)控Actuator安全隱患及解決的方法

安全建議

1.只開放某些無敏感信息的端點。

2.打開安全限制并進行身份驗證,訪問Actuator接口時需要登錄。

3.Actuator訪問接口使用獨立端口,并配置不對外網(wǎng)開放。

讀到這里,這篇“基于SpringBoot應(yīng)用監(jiān)控Actuator安全隱患及解決的方法”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當前題目:基于SpringBoot應(yīng)用監(jiān)控Actuator安全隱患及解決的方法
文章地址:http://www.muchs.cn/article14/jiohge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、ChatGPT、微信公眾號、網(wǎng)站內(nèi)鏈、網(wǎng)站收錄電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)