Actuator 端点暴露是什么
Spring Boot Actuator 为应用提供运维端点:健康检查、指标、环境变量、线程栈、堆内存快照等。默认只开少量端点,但一旦把 exposure.include 调成通配,env 会回显配置项(可能含数据库口令与第三方密钥),heapdump 能导出完整堆快照(可能含内存中的明文凭据),beans、mappings、configprops 也会给出内部结构。这些端点通常随业务端口一起暴露,容易被误当作内部接口放任不管。
基本信息
| 适用框架 | Spring Boot 2.x 及以上(端点路径为 /actuator/*) |
|---|---|
| 高风险端点 | env、heapdump、threaddump、beans、configprops、mappings |
| 默认暴露 | 仅 health 等少量端点(视版本与配置) |
| 常用收敛 | 限制 include 列表、管理端口独立、叠加认证 |
典型使用场景
- 生产发布前核对暴露端点清单,确认没有通配放开
- 把管理端点迁到独立端口,再从网络层限制只有监控网段可达
- 对接 K8s 探针时只暴露 health,避免为探针方便放开全部端点
- 排查是否已被读取:检索访问日志中 /actuator/env 与 /actuator/heapdump 的请求
- 用 Spring Security 对 /actuator/** 加角色限制,而非仅靠端口隐蔽
- 排查管理端口是否被反向代理一并转发到公网域名下
- 历史遗留端点在版本升级后重新出现时,用自动化核对脚本对比暴露清单
安全配置示例(application-prod.yml)
安全配置示例(application-prod.yml)
management:
endpoints:
web:
exposure:
include: health,info # 只列必要端点,不要用 "*"
endpoint:
health:
show-details: never # 不对外返回组件明细
env:
enabled: false # 显式关闭高危端点
heapdump:
enabled: false
server:
port: 9090 # 管理端口与业务端口分离
security:
enabled: true # 配合 Spring Security 限制访问暴露面自查
暴露面自查
curl -s -o /dev/null -w '%{http_code}\n' https://app.example.com/actuator/env
curl -s -o /dev/null -w '%{http_code}\n' https://app.example.com/actuator/heapdump
# 期望未认证返回 401/403;返回 200 说明端点对匿名可读
# 检索历史访问:grep -E '/actuator/(env|heapdump|threaddump)' access.log | wc -l暴露清单建议做成持续核对:把 /actuator 各端点的响应码写入例行巡检脚本,配置变更后能立刻发现由 403 变为 200 的回退。
heapdump 端点能导出完整堆内存快照,其中可能包含数据源口令、第三方密钥与会话令牌;即便端口只在内网,也不应随意开放。
端点路径与开关随 Spring Boot 版本变化,升级后要重新核对配置项名称是否仍然生效,避免旧配置静默失效。