Spring Boot Actuator: защита конечных точек HTTP

Вы должны позаботиться о защите конечных точек HTTP так же, как и любого другого конфиденциального URL. Если Spring Security присутствует, конечные точки защищены по умолчанию с использованием стратегии согласования содержимого Spring Security. Если вы хотите настроить пользовательскую безопасность для конечных точек HTTP, например, разрешить доступ к ним только пользователям с определенной ролью, Spring Boot предоставляет несколько удобных объектов RequestMatcher, которые можно использовать в сочетании с Spring Security.

Типичная конфигурация Spring Security может выглядеть примерно так:

@Configuration(proxyBeanMethods = false)
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests((requests) ->
                requests.anyRequest().hasRole("ENDPOINT_ADMIN"));
        http.httpBasic();
    }

}

Предыдущий пример использует EndpointRequest.toAnyEndpoint() для сопоставления запроса с любой конечной точкой, а затем гарантирует, что все имеют роль ENDPOINT_ADMIN. Несколько других методов сопоставления также доступны в EndpointRequest.

Если вы развертываете приложения за брандмауэром, вы можете предпочесть, чтобы все ваши конечные точки actuator были доступны без аутентификации. Вы можете сделать это, изменив свойство management.endpoints.web.exposure.include следующим образом:
application.properties

management.endpoints.web.exposure.include=*

Кроме того, если Spring Security присутствует, вам необходимо добавить пользовательскую конфигурацию безопасности, которая разрешает неаутентифицированный доступ к конечным точкам, как показано в следующем примере:

@Configuration(proxyBeanMethods = false)
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests((requests) ->
            requests.anyRequest().permitAll());
    }

}


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки