17.3 保护Admin服务器

17.3 保护Admin服务器

正如我们在第16章所讨论的那样,Actuator端点对外暴露的信息并不能随便消费。它们包含的信息暴露了应用的详情,这些信息只有应用程序的管理员才能查看。另外,还有一些端点允许对应用进行变更,它们就更不应该对所有人开放了。

正如安全性对于Actuator来说非常重要一样,它对Admin服务器同样重要。除此之外,如果Actuator端点需要认证,那么Admin需要知道凭证信息才能访问这些端点。接下来,我们看一下如何为Admin服务器添加一些安全性。首先,从认证开始。

17.3.1 为Admin服务器启用登录功能

默认情况下,Admin服务器是不安全的,所以为其添加安全性功能是一种好的做法。因为Admin服务器就是一个Spring Boot应用,所以我们可以使用SpringSecurity来保护它。这一点与其他的Spring Boot应用完全类似。就像使用SpringSecurity保护其他的应用一样,我们可以自由选择最适合需求的安全模式。

按照最小的要求,我们需要添加Spring Boot security starter到Admin服务器的构建文件中,既可以在Initializr中选中Security复选框,也可以添加如下的<dependency>到项目的pom.xml文件中:

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

然后,为了避免观察Admin服务器的日志才能获取随机生成的密码,我们可以将简单的管理员用户名和密码配置在application.yml中:

1
2
3
4
5
spring:
security:
user:
name: admin
password: 53cr3t

现在,当在浏览器中加载Admin服务器的时候,我们会看到Spring Security默认的登录表单,提示我们输入用户名和密码。按照这里的配置片段,输入“admin”和“53cr3t”就可以登录了。当然,这是一个极其基本的安全配置。我推荐你参考第4章了解配置Spring Security的各种方式,为Admin服务器提供更丰富的安全模式。

17.3.2 为Actuator启用认证

在16.4节中,我们讨论了如何使用HTTP Basic认证保护Actuator端点。按照这种方式,我们会将不知道Actuator端点用户名和密码的用户拒之门外。也就意味着Admin服务器不能消费Actuator端点了,除非提供用户名和密码。但是,Admin如何得到凭证信息呢?

Admin服务器的客户端应用可以通过直接向Admin服务器注册自身或被Eureka发现的方式提供凭证信息给Admin服务器。如果应用是直接向Admin服务器注册自身,那么可以在注册时发送凭证信息。我们需要配置几个属性启用该功能。

spring.boot.admin.client.instance.metadata.user.name和spring.boot.admin.client.instance. metadata.user.password属性指定了Admin服务器访问应用的Actuator端点时可以使用的凭证信息。application.yml中如下的代码片段展示了如何设置这些属性:

1
2
3
4
5
6
7
8
9
spring:
boot:
admin:
client:
url: http://localhost:9090
instance:
metadata:
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}

用户名和密码必须要设置在所有向Admin服务器注册的应用中。这里给定的值必须要匹配Actuator端点HTTP Basic认证头信息所需的用户名和密码。在本例中,它们设置成了admin和password,也就是访问Actuator端点所配置的凭证信息。

如果应用是由Admin服务器通过Eureka发现的,那么我们需要设置eureka.instance.metadata-map.user.name和eureka.instance.metadata-map.user.password:

1
2
3
4
5
eureka:
instance:
metadata-map:
user.name: admin
user.password: password

当应用使用Eureka注册的时候,凭证信息将会包含到Eureka注册记录的元数据中。当Admin服务器发现应用时,会和应用的其他详情一起从Eureka获取它的凭证信息。