Введение
Apache Kafka поддерживает различные протоколы безопасности и процессы аутентификации, чтобы обеспечить, что только авторизованные сотрудники и приложения могут подключиться к кластеру. В стандартной конфигурации Kafka разрешает доступ всем, но не включает проверки безопасности. Хотя это полезно для изучения и разработки, в production развертываниях необходимо должным образом обеспечить безопасность перед экспонированием в внешний мир. Кроме того, такие среды должны мониториться для обеспечения гладкой работы и предотвращения возможных сбоев.
В этом руководстве вы усилите безопасность вашей установки Kafka, настроив шифрование трафика TLS и аутентификацию SASL для обеспечения стандартного процесса входа с именем пользователя и паролем. Вы узнаете, как настроить предоставленные скрипты производителя и потребителя для подключения к защищенному кластеру. Затем вы узнаете, как экспортировать метрики Kafka и визуализировать их в Grafana. Вы также узнаете, как доступиться к узлам и темам вашего кластера через удобный веб-интерфейс, предоставляемый AKHQ.
Требования
Для завершения этого руководства вам потребуется:
- Капля с минимумом 4 ГБ оперативной памяти и 2 процессорами. В случае с сервером Ubuntu следуйте инструкциям Начальная настройка сервера для настройки.
- Apache Kafka установлен и настроен на вашей капле. Для получения инструкций по настройке следуйте руководству Введение в Kafka. Вам нужно выполнить только Шаг 1 и Шаг 2.
- Понимание того, как Java обрабатывает ключи и сертификаты. Для получения дополнительной информации посетите руководство Основы Java Keytool: Работа с хранилищами ключей Java.
- Grafana установлен на вашем сервере или локальном компьютере. Пожалуйста, посетите руководство Как установить и защитить Grafana на Ubuntu для получения инструкций. Вам нужно выполнить только первые четыре шага.
- Полностью зарегистрированное доменное имя направлено на вашу каплю. В этом руководстве будет использоваться
ваш_домен
и будет ссылаться на тот же доменное имя, что и требование для Grafana. Вы можете купить доменное имя на Namecheap, получить его бесплатно на Freenom или использовать регистратора доменных имен по вашему выбору.
Шаг 1 – Конфигурация безопасных протоколов Kafka
В стандартной конфигурации Kafka всем разрешено соединяться с ней без проверки происхождения запроса. Это意味着 ваш кластер доступен для всех по умолчанию.尽管这对于测试来说是好的,因为它减少了本地计算机和私人安装的维护负担,但是生产环境和面向公众的 Kafka 安装必须启用安全特性,以防止未授权的访问。
В этом шаге вы настроите ваш Kafka-broker, чтобы использовать шифрование TLS для трафика между брокером и потребителями. Также вы настроите SASL как фреймворк аутентификации для проверки данных учетных записей при подключении к кластеру.
Генерация сертификата TLS и хранений
Чтобы создать сертификаты и ключи, необходимые для установки TLS, вы будете использовать скрипт из репозитория Confluent Platform Security Tools. Сначала клонируйте его в ваш домашний каталог, выполнив следующую команду:
Перейдите к нему:
Скрипт, который вы будете использовать, называется kafka-generate-ssl-automatic.sh
, и требует, чтобы вы предоставили свою страну, штат, организацию и город в виде переменных окружения. Эти параметры используются для создания сертификатов, но их содержимое не имеет значения. Вам также потребуется предоставить пароль, который будет использован для защиты созданного Java хранилища доверия и ключей.
Выполните следующие команды для настройки требуемых переменных окружения, заменив ваш_пароль_tls
на желаемое значение:
Обратите внимание, что PASSWORD
должен быть не короче шести символов.
Дайте скрипту права на выполнение, выполнив:
Затем выполните его для создания необходимых файлов:
Появится много вывода. После завершения перечислите файлы в каталоге:
Вывод должен быть похожим на это:
Вы увидите, что сертификат, хранилище доверия и хранилище ключей были успешно созданы.
Конфигурация Kafka для TLS и SASL
Теперь, когда у вас есть необходимые файлы для включения шифрования TLS, вы настроите Kafka для их использования и аутентификации пользователей с помощью SASL.
Вы будете изменять файл server.properties
в каталоге config/kraft
в установленном каталоге. Вы установили его в каталоге kafka
в вашем домашнем каталоге как часть предварительных требований. Перейдите к нему, выполнив:
Откройте основной конфигурационный файл для редактирования:
nano config/kraft/server.properties
Найдите следующие строки:
Измените их так, что они будут выглядеть так, как показано ниже, заменив PLAINTEXT
на BROKER
:
Потом найдите строку listener.security.protocol.map
:
Сопоставите BROKER
с SASL_SSL
, добавив определение значению:
Здесь вы добавили определение для псевдонима BROKER
, который вы использовали в слушателях, и сопоставили его с SASL_SSL
, что указывает на использование как SSL (более раннее название TLS), так и SASL.
Далее перейдите к концу файла и добавьте следующие строки:
Сначала вы определяете местоположения и пароли для сгенерированных хранилищ доверия и ключей. Вы устанавливаете параметр ssl.client.auth
равным required
, указывая Kafka не разрешать соединения, которые не предоставляют действительный сертификат TLS. Затем вы устанавливаете механизм SASL равным PLAIN
, что его включает. PLAIN
отличается от PLAINTEXT
тем, что требует использования шифрованного соединения, и оба опираются на комбинацию учетных данных имени пользователя и пароля.
Наконец, вы устанавливаете класс аутентификатора StandardAuthorizer
, который проверяет учетные данные по конфигурационному файлу, который вы создадите в ближайшее время. Затем вы устанавливаете параметр allow.everyone.if.no.acl.found
равным false
, ограничивая доступ для соединений с неподходящими учетными данными. Вы также указываете пользователя admin
как суперпользователя, поскольку должен быть хотя бы один для выполнения административных задач в кластере.
Не забудьте заменить your_tls_password
на пароль, который вы передали в скрипт в предыдущем разделе, затем сохраните и закройте файл.
Теперь, когда вы настроили Kafka, вам нужно создать файл, который определяет допустимые учетные данные для подключения. Kafka поддерживает Java Authentication and Authorization Service (JAAS), фреймворк для реализации рабочих процессов аутентификации, и принимает определения учетных данных в формате JAAS.
Вы сохраните их в файле с именем kafka-server-jaas.conf
в каталоге config/kraft
. Создайте и откройте его для редактирования, выполнив следующую команду:
Добавьте следующие строки:
Затем username
и password
определяют основные учетные данные, используемые для общения между узлами кластера при наличии нескольких узлов. строка user_admin
определяет пользователя с именем admin
и паролем admin
, который может подключиться к брокеру снаружи. Сохраните и закройте файл, когда вы этого сделаете.
Kafka должен знать о файле kafka-server-jaas.conf
, поскольку он дополняет основную конфигурацию. вам нужно будет изменить конфигурацию сервиса kafka
systemd и передать ссылку на него. Выполните следующую команду, чтобы открыть сервис для редактирования:
При использовании опции --full
вы получите доступ к полному содержимому сервиса. найдите строку ExecStart
:
Добавьте следующую строку выше нее, чтобы она выглядела так:
С этим вы устанавливаете параметр java.security.auth.login.config
в конфиге на путь к файлу JAAS конфигурации, отделяя его от основного конфига Kafka. После завершения сохраните и закройте файл. Загрузите определение службы, запустив:
затем перезапустите Kafka:
Теперь вы настроили одновременно TLS-encryption и SASL-аутентификацию для установки Kafka, и вам потребуется leanb чтобы узнать, как соединиться с помощью предоставленных консольных скриптов.
Step 2 – Connecting To a Secured Cluster
В этом шаге вы leanedb, как соединиться с защищенным кластером Kafka с использованием файлов JAAS конфигурации с помощью предоставленных консольных скриптов.
Предоставленные скрипты для манипуляции топиками и процессами отправки и получения сообщений также используют Java внутренне, и поэтому принимают JAAS-конфигурацию, описывающую места хранения доверия и ключевых магазинов, а также данные SASL.
Вы сохраните эту конфигурацию в файле с именем client-jaas.conf
в вашем домашнем каталоге. Создайте и откройте его для редактирования:
Добавьте следующие строки:
Так же, как и ранее, вы устанавливаете протокол на SASL_SSL
и предоставляете пути и пароль для ключевых и доверенных хранилищ, которые вы создали. Затем вы устанавливаете механизм SASL на PLAIN
и предоставляете учетные данные пользователя admin
. Явно очищаете параметр ssl.endpoint.identification.algorithm
, чтобы предотвратить проблемы с подключением, т.к. исходные скрипты устанавливают имя хоста машины, на которой они запущены, как endpoint сертификата, что может быть неверно.
замените your_tls_password
на правильное значение, затем сохраните и закройте файл.
Для передачи этого файла скриптам вы можете использовать параметр --command-config
. Попробуйте создать новую тему в кластере следующим закономерным образом:
Команда должна выполняться успешно:
Для проверки того, была ли она создана, запустите следующую команду:
Выходные данные покажут, что присутствует тема new_topic
:
В этом разделе вы настроили вашу установку Kafka, чтобы использовать TLS-encryption для трафика и SASL для аутентификации с помощью комбинаций имён пользователя и паролей. Теперь вы leanr, как экспортировать различные метрики Kafka через JMX с использованием Prometheus.
Шаг 3 – Мониторинг метрик JMX Kafka с использованием Prometheus
В этом разделе вы будете использовать Prometheus для сбора метрик Kafka и их доступности для запросов в Grafana. Это требует настройки JMX экспортера для Kafka и подключения его к Prometheus.
[Java Management Extensions (JMX) — это фреймворк для приложений Java, который позволяет разработчикам собирать общие и пользовательские метрики о работе приложения во время выполнения в стандартизированном формате. Так как Kafka написан на Java, он поддерживает протокол JMX и открывает свои пользовательские метрики через него, такие как статус тем и брокеров.
Конфигурация Kafka и Prometheus
Перед началом работы вам нужно установить Prometheus. На машинах с Ubuntu вы можете использовать apt
. Обновите его репозитории, выполнив:
Затем установите Prometheus:
Для других платформ следуйте инструкциям по установке на официальном сайте.
После установки вам потребуется добавить библиотеку JMX экспортера для Prometheus к вашему установленному Kafka. Перейдите на страницу релизов и выберите последний релиз с javaagent
в названии. В момент написания статьи самый последний доступный релиз был 0.20.0
. Используйте следующий команду, чтобы скачать его в директорию libs/
, где установлен Kafka:
Теперь библиотека JMX экспортера будет использоваться Kafka.
Перед активацией экспортера вам нужно определить, какие метрики он будет отправлять в Prometheus, и вы сохраните эту конфигурацию в файле с именем jmx-exporter.yml
в директории config/
установки Kafka. Проект JMX экспортера предоставляет соответствующую default конфигурацию, поэтому вы можете выполнить следующую команду, чтобы сохранить ее как jmx-exporter.yml
в config/
вашего Kafka установки:
Далее, чтобы активировать экспортер, вам нужно будет модифицировать системную службу Kafka systemd. Вам нужно будет изменить переменную среды KAFKA_OPTS
, чтобы включить экспортер и его конфигурацию. Вы можете выполнить следующую команду, чтобы редактировать службу:
Измените строку Environment
так:
В этом месте вы используете аргумент -javaagent
, чтобы инициализировать JMX экспортер с его конфигурацией.
По завершении работы сохраните и закройте файл, а затем запустите Kafka следующим образом:
После минуты проверите, запущен ли JMX экспортер, проверив, используется ли порт 7075
:
Эта строка показывает, что порт 7075
используется процессом Java, запущенным службой Kafka, что относится к экспортеру JMX.
Теперь вы настроите Prometheus для мониторинга экспортированных метрик JMX. Основной файл конфигурации находится по пути /etc/prometheus/prometheus.yml
, откройте его для редактирования:
Найдите следующие строки:
Под scrape_configs
, который указывает, какие конечные точки должен контролировать Prometheus, добавьте новый раздел для сбора метрик Kafka:
El trabajo kafka
tiene un solo objetivo, que apunta al punto final del exporter JMX.
Recuerde reemplazar your_domain
con su nombre de dominio, a continuación, guardar y cerrar el archivo. Luego, reinicie Prometheus ejecutando:
En su navegador, navegue a la puerto 9090
de su dominio. Accederá a la interfaz de usuario de Prometheus. En Status, haga clic en Targets para listar los trabajos:
Observe que Prometheus ha aceptado el trabajo kafka
y ha comenzado a extraer sus métricas. Ahora aprenderá cómo acceder a ellas en Grafana.
Запрос метрик в Grafana
В рамках предварительных требований вы установили Grafana на вашем Droplet и сделали её доступной по адресу ваш_домен
. Перейдите к ней в вашем браузере и в боковой панели под Соединения нажмите на Добавить новое соединение, затем введите Prometheus в поле поиска.
Нажмите на Prometheus, затем на кнопку Добавить новый источник данных в правом верхнем углу. Вам будет предложено заполнить адрес экземпляра Prometheus:
Введите http://ваш_имя_домена:9090
, заменив на ваше действительное имя домена, затем прокрутите вниз и нажмите Сохранить и проверить. Вы должны получить сообщение об успешной операции:
Соединение с Prometheus добавлено в Grafana. Нажмите на Обзор в боковой панели, и вам будет предложено выбрать метрику. Вы можете ввести kafka_
, чтобы вывести все метрики, связанные с кластером, как показано:
Например, выберите метрику kafka_log_log_size
, которая показывает, какой размер имеет внутренний журнал на диске для каждого раздела, затем нажмите Выполнить запрос в правом верхнем углу. Вы увидите размеры в результате времени для каждой из доступных тем:
В этом шаге вы установили экспорт метрик JMX, которые Kafka обеспечивает, и настроили Prometheus, чтобы он их считывал. Затем вы подключились к нему из Grafana и выполнили запрос на метрики Kafka. Теперь вы leaned о том, как управлять кластером Kafka с помощью веб-интерфейса.
Шаг 4 – Управление кластерами Kafka с помощью AKHQ
В этом шаге вы leaned о том, как настроить и использовать AKHQ, веб-приложение для управления кластерами Kafka. Оно позволяет вам списывать и манипулировать топиками, разделами, группами потребителей и параметрами конфигурации, а также отправлять и принимать сообщения из топиков из одного места.
Вы сохраните экспорт и его конфигурацию в каталоге с именем akhq
. Создайте его в вашем домашнем каталоге, выполнив следующую команду:
Перейдите к нему:
В вашем браузере посетите страницу официальных выпусков и скопируйте ссылку на JAR-файл последнего выпуска. В момент написания этого текста, последняя версия была 0.24.0
. Запустите следующую команду, чтобы скачать ее в ваш домашний каталог:
Теперь вы скачали AKHQ и готовы определить его конфигурацию для подключения к вашему кластеру. Вы сохраните ее в файле с именем akhq-config.yml
. Создайте и откройте его для редактирования, выполнив следующую команду:
Добавьте следующие строки:
Это базовая конфигурация AKHQ, указавшая один кластер на localhost:9092
с сопутствующими SASL и TLS параметрами. Simultaneous support for multiple clusters is also possible because you can define as many connections as you want. Это делает AKHQ гибкой для управления Kafka. When you’re done, save and close the file.
Next, you’ll need to define a systemd
service for running AKHQ in the background. systemd
services can be started, stopped, and restarted consistently.
You’ll store the service configuration in a file named code-server.service
, in the /lib/systemd/system
directory, where systemd stores its services. Create it using your text editor:
Add the following lines:
You first specify the service’s description. Then, in the [Service]
section, you define the type of the service (simple
means that the command should simply execute) and provide the command that will be run. You also specify that the user it runs as is kafka
and that the service should be automatically restarted if it exits.
The [Install]
section orders systemd to start this service when you can log in to your server. Save and close the file when you’re done.
Load the service configuration by running:
Start the AKHQ service by running the following command:
Then, check that it’s started correctly by observing its status:
The output should look like this:
AKHQ сейчас работает в фоновом режиме. По умолчанию он доступен на порту 8080
. В вашем браузере перейдите к вашему домену с этим портом, чтобы получить доступ. Вы увидите вид по умолчанию, показывающий список тем:
Вы можете дважды щелкнуть по строке рядом с темой в таблице, чтобы получить к ней доступ и увидеть детальный вид:
AKHQ позволяет вам видеть сообщения в теме, а также партиции, группы потребителей и их конфигурацию. Вы также можете очистить или скопировать тему с помощью кнопок в правом нижнем углу.
Поскольку тема new_topic
пуста, нажмите кнопку Отправить в тему, которая откроет интерфейс для выбора параметров нового сообщения:
AKHQ автоматически заполнит для вас имя темы. В поле Значение введите Hello World!
, затем нажмите Отправить. Сообщение будет отправлено в Kafka, и вы увидите его на вкладке Данные:
Поскольку содержимое сообщения может быть очень большим, AKHQ показывает только первую строку. Чтобы просмотреть полное сообщение, нажмите на затемненную область после строки, чтобы открыть её.
В левой боковой панели вы также можете просмотреть список брокеров в кластере, нажав на Узлы. Сейчас кластер состоит из только одного узла:
Двойное нажатие на узел откроет его конфигурацию, позволяя вам изменить любые настройки удаленно:
После внесения изменений вы можете применить их, нажав кнопку Обновить конфиги в правом нижнем углу. Так же вы можете просмотреть и изменить конфигурацию любой из тем, доступившись к ним и переключившись на вкладку Конфиги
В этом разделе вы настроили AKHQ, веб-приложение, предоставляющее удобный интерфейс для управления и мониторинга узлов и тем Kafka удаленно. Оно позволяет производить и потреблять сообщения в темах, а также обновлять параметры конфигурации как тем, так и узлов на лету.
Заключение
В этом руководстве вы защитили вашу установку Kafka, настроив TLS для шифрования и SASL для аутентификации пользователей. Вы также настроили экспорт метрик с использованием Prometheus и визуализировали их в Grafana. Затем вы научились использовать AKHQ, веб-приложение для управления кластерами Kafka.
Автор выбрал Apache Software Foundation для получения пожертвования в рамках программы Write for DOnations.
Source:
https://www.digitalocean.com/community/developer-center/how-to-secure-and-monitor-kafka