目前springBoot是微服务不可缺少的一个框架,目前在很多企业的项目中已经广泛使用了,我们今天就说说Actuator 在springBoot中的使用,以及踩过的一个安全性坑。
Actuator正是SpringBoot提供的对应用系统的监控功能的是一个服务,我们的系统注册了Actuator服务,就可以查看应用的相关配置信息,系统的配置信息,应用的接口请求信息以及我们的服务使用的内存等信息,这个配置非常简单易用,但是如果配置不当,就会造成信息泄露等严重的安全隐患。
要是用Actuator,我们先创建一个SpringBoot Admin的一个监控服务,结构如下:
SpringBootAdminApplication 内容:
package com.xx.app.admin;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableAdminServer
public class SpringBootAdminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminApplication.class, args);
}
}
pom.xml内容如下:需要这2个核心的包
application.properties中配置一下服务运行端口:
server.port=8878
server.servlet.context-path=/spring
监控服务就创建好了,使用maven编译打包,编译一个jar包,上传到服务器上启动运行, nohup java -jar xxx.jar &
然后我们其他的业务微服务就可以接入到上面的监控服务。
在我们的业务微服中加入下面包:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在业务微服务的application.properties中配置我们的监控服务:
spring.application.name=integral-web #监控服务地址 spring.boot.admin.client.url=http://ip:8878/spring management.endpoints.web.exposure.include=*
在浏览器中访问http://ip:8878/spring/env 查看系统环境变量的配置信息
访问 http://ip:8878/spring/trace
可查看所有Web请求的详细信息,包括请求方法、路径、时间戳以及请求和响应的头信息甚至cookie信息:
安全措施
如果上述请求接口不做任何安全限制,安全隐患显而易见。实际上Spring Boot也提供了安全限制功能。
比如要禁用/env接口,则可设置如下:
endpoints.env.enabled= false
如果只想打开一两个接口,那就先禁用全部接口,然后启用需要的接口:
endpoints.enabled = false endpoints.metrics.enabled = true
另外也可以引入spring-boot-starter-security依赖,这是最常见的做法,要让我们所有的请求都要经过授权访问
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
在application.properties中指定actuator的端口以及开启security功能,配置访问权限验证,这时再访问actuator功能时就会弹出登录窗口,需要输入账号密码验证后才允许访问。
management.port=8099 management.security.enabled=true security.user.name=admin security.user.password=admin123
安全建议
在使用Actuator时,不正确的配置或者疏忽,就会造成严重的信息泄露等安全隐患。
所以在提交在代码安全审计时,如果采用的是springboot架构并且使用了actuator,就一定要对安全依赖和配置进行检查。
安全的做法可以加入security,打开安全限制并进行身份验证。
最好做法就是设置单独的Actuator管理端口并配置不对外网开放,这样安全性问题就不会暴露在公网