保护Admin服务器
正如在第15章中讨论的那样,Actuator 端点对外暴露的信息并不能随便消费。它们包含的信息暴露了应用的详情,只有应用程序的管理员才能查看这些信息。另外,还有一些端点允许对应用进行变更,这些端点就更不应该对所有人开放了。
正如安全性对于Actuator非常重要,它对Admin服务器同样重要。除此之外,如果Actuator端点需要认证,那么Admin需要知道凭证信息来访问这些端点。接下来,我们看一下如何提高Admin服务器的安全性,从认证开始。
为Admin服务器启用登录功能
默认情况下,Admin服务器是不安全的,所以为其添加可以提高安全性的功能是一种好的做法。Admin服务器是一个Spring Boot应用,所以我们可以使用Spring Security来保护它。这与其他的Spring Boot应用完全类似。就像使用Spring Security保护其他的应用一样,我们可以自由选择最适合需求的安全模式。
按照最小的要求,我们需要添加Spring Boot security starter到Admin服务器的构建文件中。我们既可以在Initializr中选中Security复选框,也可以添加如下的<dependency>到项目的pom.xml文件中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
然后,为了避免必须观察Admin服务器的日志才能获取随机生成的密码的情况,我们可以将简单的管理员用户名和密码配置在application.yml中:
spring:
security:
user:
name: admin
password: 53cr3t
现在,在浏览器中加载Admin服务器时,我们会看到Spring Security默认的登录表单,提示我们输入用户名和密码。按照这里的配置片段,输入“admin”和“53cr3t”就可以登录了。
默认情况下,Spring Security会在Spring Boot Admin服务器上启用CSRF,这将阻止客户端应用程序向Admin服务器注册。因此,我们需要更改一点安全配置来禁用CSRF:
package tacos.admin;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.reactive
.EnableWebFluxSecurity;
import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.web.server.SecurityWebFilterChain;
@EnableWebFluxSecurity
public class SecurityConfig {
@Bean
public SecurityWebFilterChain filterChain(ServerHttpSecurity http) throws
Exception {
return http
.csrf()
.disable()
.build();
}
}
当然,这是一个很基本的安全配置。我推荐你参考第4章了解配置Spring Security的各种方式,为Admin服务器提供更丰富的安全模式。
为Actuator启用认证
15.4节讨论了如何使用HTTP Basic认证保护Actuator端点。按照这种方式,我们会将不知道Actuator端点用户名和密码的用户拒于门外。这也意味着Admin服务器不能消费Actuator端点,除非提供用户名和密码。但是,Admin如何得到凭证信息呢?
如果应用是直接向Admin服务器注册的,那么可以在注册的时候提供凭证信息给Admin服务器。我们需要配置几个属性以启用该功能。
spring.boot.admin.client.username和spring.boot.admin.client.password属性指定了Admin服务器访问应用的Actuator端点时可以使用的凭证信息。如下的application.yml代码片段展示了如何设置这些属性:
spring:
boot:
admin:
client:
url: http://localhost:9090
username: admin
password: 53cr3t
用户名和密码必须设置在所有向Admin服务器注册的应用中。这里给定的值必须要匹配Actuator端点HTTP Basic认证头信息所需的用户名和密码。在本例中,它们分别设置为admin和53cr3t,也就是为访问Actuator端点而配置的凭证信息。