如何在AWS Elastic Beanstalk上限制/actuator路径仅管理员可访问
方案1:直接通过Spring Security原生配置实现(最快捷,无需调整EB平台配置)
- 首先引入Spring Security依赖,Maven项目
pom.xml添加配置:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
Gradle项目build.gradle添加配置:
implementation 'org.springframework.boot:spring-boot-starter-security'
- 编写安全配置类,专门拦截
/actuator路径,示例代码如下:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity public class ActuatorSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth // 仅ADMIN角色可访问actuator所有路径 .requestMatchers("/actuator/**").hasRole("ADMIN") // 其余业务路径放行规则可根据自身需求调整 .anyRequest().permitAll() ) // 启用基础认证,也可替换为表单登录、JWT认证等其他方式 .httpBasic(); return http.build(); } // 内存身份源示例,生产环境可对接数据库、LDAP等身份存储 @Bean public UserDetailsService userDetailsService() { UserDetails admin = User.withUsername("自定义管理员账号") .password(passwordEncoder().encode("自定义管理员密码")) .roles("ADMIN") .build(); return new InMemoryUserDetailsManager(admin); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
- 可在配置文件中额外收紧actuator暴露规则,
application.yml示例:
management: endpoints: web: exposure: include: health,info,metrics # 按需暴露必要端点,不要全开 endpoint: health: show-details: when-authorized # 仅授权用户可查看健康检查详情
注意:生产环境不要硬编码管理员账号密码,可通过EB环境变量注入,代码中用
${ADMIN_USER}、${ADMIN_PWD}取值即可。
方案2:结合EB单实例Nginx配置做IP白名单限制(适合管理员IP固定的场景)
单实例EB默认内置Nginx做反向代理,无需改应用代码即可实现路径拦截:
- 在项目根目录新建
.platform/nginx/conf.d/目录 - 新增
actuator_protection.conf配置文件,内容如下:
location /actuator { # 按实际需求添加管理员公网IP/IP段,多个规则多行添加即可 allow 123.123.123.123; allow 10.0.0.0/24; # 禁止所有其他IP访问 deny all; # 转发请求到后端SpringBoot服务,端口按实际配置调整,EB默认是5000 proxy_pass http://localhost:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
- 将整个
.platform目录和SpringBoot部署包放在同级目录,打包后重新部署到EB即可生效。
该方案无需修改应用代码,但管理员IP不固定时维护成本较高,可按需选择。
内容的提问来源于stack exchange,提问作者moetez92
相关产品推荐
相关产品推荐

