Руководство по повышению безопасности

Конечные точки Spring Boot Actuator предоставляют конфиденциальную информацию о нашем приложении, такую ​​как Bean-компоненты, измерения и т. д. Поэтому крайне важно добавить безопасность для ограничения доступа.

Хотя Actuator предоставляет множество конечных точек из коробки, иногда может быть полезно настроить свою собственную. Например, если мы хотим получить информацию, относящуюся к нашему приложению.

Точно так же мы можем захотеть добавить метрики Prometheus для мониторинга функций, не включенных в решения по умолчанию. Например, подсчет количества посещений URL-адреса, одновременных запросов и т. д.

К концу этого урока вы будете знать, как:

  • Защитите конечные точки Spring Boot с помощью Spring Security.
  • Создайте пользовательские конечные точки Spring Boot Actuator.
  • Регистрируйте метрики и просматривайте их в Prometheus и Grafana.

Это руководство связано с моей предыдущей статьей о мониторинге приложения Spring Boot. Если вы хотите узнать, как настроить Prometheus и Grafana для мониторинга вашего приложения, ознакомьтесь с ним. Но не волнуйтесь, вы все еще можете следить за этой статьей, потому что сейчас мы сосредоточимся на других темах.

Давайте начнем!

Добавьте Spring Security в проект

Я повторно использую исходный код предыдущей демонстрации и улучшаю его.

Чтобы включить безопасность, нам нужно добавить модуль spring-boot-starter-security в наши зависимости:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>

В первом проекте мы включили метрику здоровья, доступную на http://localhost:8080/actuator/health, и показали подробности всем:

Мы можем ограничить доступ к подробной информации, изменив эту строку в нашем файле application.yml:

management.endpoint.health.show-details=WHEN_AUTHORIZED

Если пользователь не авторизован, он увидит только следующие данные:

Добавить учетные данные безопасности

Допустим, мы хотим разрешить доступ только для администраторов. Добавьте эти строки в application.yml, чтобы определить пользователя:

security:
  user:
    name: user
    password: password
    roles: admin

Обратите внимание, что без этих строк Spring Boot автоматически сгенерирует пароль и распечатает его в консоли приложения при запуске. Роль не является обязательной.

Протестируйте конфигурацию безопасности

  1. Нажмите на конечную точку http://localhost:8080/actuator/health.
  2. Вы должны увидеть всплывающее окно с запросом учетных данных. Введите данные из файла YAML. Вы должны снова увидеть информацию о состоянии здоровья.
  3. Измените роль в application.yml на любую другую, кроме admin.
  4. Перезапустите приложение и снова нажмите на вышеуказанный URL-адрес.
  5. Вы должны видеть только основную информацию без деталей.

Добавить базовую аутентификацию

Мы можем настроить базовую аутентификацию с помощью Spring Boot. Для этого создайте такой класс конфигурации:

Мы разрешили конечную точку метрик только пользователям-администраторам.

Если мы вызовем URL-адрес и попытаемся войти в систему с другой ролью, мы увидим сообщение об ошибке:

There was an unexpected error (type=Forbidden, status=403).

Добавить пользовательскую конечную точку актуатора

Чтобы добавить пользовательскую конечную точку, просто добавьте аннотацию @Endpoint к классу. Вот простой пример:

Spring Boot поддерживает операции чтения, записи и удаления, соответствующие запросам HTTP GET, POST и DELETE .

В этом примере мы используем аннотацию @ReadOperation.

Давайте включим конечную точку в application.yml:

include: [ "health","prometheus", "metrics", "customEndpoint" ]

Перезапустите приложение и попробуйте получить доступ к новой конечной точке, нажав http://localhost:8080/actuator/customEndpoint.

Не удивляйтесь, если увидите эту ошибку:

There was an unexpected error (type=Bad Request, status=400).

Причина в том, что мы не добавили параметр запроса в URL. Правильный запрос должен быть http://localhost:8080/actuator/customEndpoint?id=1.

Результат вернет фрукт kiwi, потому что он соответствует номеру 1 в нашем fruitsMap.

Защитите конечную точку

Теперь давайте защитим пользовательскую конечную точку. Для этого нам просто нужно добавить его в наш класс SecurityConfiguration.java:

Вот и все! Добавлять и защищать пользовательские конечные точки в Spring Boot очень просто!

Добавьте метрики Prometheus

Обзор типов метрик

Во-первых, давайте взглянем на поддерживаемые метрики:

  • Counter — используется для измерения событий, которые увеличиваются. Например, количество посещений URL.
  • Gauges — используется для измерения значений, которые могут увеличиваться и уменьшаться. Например, использование памяти, температура и т. д.
  • Histogram — используется для измерения продолжительности запроса и размера ответа. Данные разбиты на настраиваемые сегменты. Гистограммы отображают количество наблюдений с сегментированием и расчет квантилей на стороне сервера с использованием функции histogram_quantile().
  • Summary — используется для отслеживания распределения значений в процентилях. Это похоже на метрику гистограммы. Он использует функцию φ-квантиля на стороне клиента и напрямую предоставляет расчеты.

Создать метрику счетчика

Давайте создадим пользовательскую метрику Counter, чтобы увидеть, сколько раз кто-то посещал URL-адрес из нашего приложения.

Я буду использовать customEndpoint для простоты. Вот код:

Вот обзор кода:

  • Мы добавили переменную Counter.
  • Мы увеличиваем счетчик, когда кто-то посещает customEndpoint.
  • Мы зарегистрировали метрику в файле MeterRegistry.

Протестируйте и соскребите метрику счетчика

  1. Посетите http://localhost:8080/actuator/customEndpoint?id=1 два раза.
  2. Откройте Prometheus и найдите новую метрику.
  3. Вы должны увидеть аналогичный результат:

Конечно, вы также можете визуализировать новую метрику в Grafana. Это должно выглядеть так:

Если вам интересно, как подключить Grafana к Prometheus, ознакомьтесь с инструкциями в моем предыдущем руководстве.

Вы можете использовать аналогичную логику для регистрации других показателей. Тип зависит от вашего варианта использования. Ознакомьтесь с официальной документацией для получения дополнительных примеров и вариантов использования.

Заключение

В этом руководстве вы узнали, как создавать пользовательские конечные точки Spring Boot Actuator и защищать их с помощью Spring Security. Теперь вы также знаете, как добавлять собственные метрики для Prometheus и просматривать их с помощью PromQL или Grafana.

Вы можете найти полный исходный код для этой демонстрации в разделе «Ссылки» ниже.

Если вы хотите изучить первую часть этого руководства, вы можете найти ее здесь:



«Как контролировать приложение Spring Boot с помощью Prometheus и Grafana
Пошаговое руководство по настройке мониторинга для лучшего программирования приложения Spring Boot. паб"



Спасибо за чтение и удачного кодирования!

Рекомендации