SensusAgent/docs/kafka_ssl.md
Sergey Antropoff 5bfb6fea8b feat: добавлена поддержка SSL для Kafka
- Добавлены SSL поля в KafkaConfig структуру
- Реализована SSL поддержка в KafkaOutput с TLS транспортом
- Добавлена поддержка переменных окружения для SSL настроек
- Обновлен config.yaml с SSL конфигурацией
- Создан env.example с SSL переменными
- Добавлена документация по SSL в docs/kafka_ssl.md
- Обновлен README.md с ссылкой на SSL документацию

Поддерживаемые SSL параметры:
- ssl_enabled, ssl_keystore_location, ssl_keystore_password
- ssl_key_password, ssl_truststore_location, ssl_truststore_password
- ssl_client_auth, ssl_endpoint_identification_algorithm

Автор: Сергей Антропов, сайт: https://devops.org.ru
2025-09-10 11:37:04 +03:00

192 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Kafka SSL поддержка в SensusAgent
## Автор: Сергей Антропов, сайт: https://devops.org.ru
## Обзор
SensusAgent теперь поддерживает SSL/TLS подключения к Kafka для обеспечения безопасной передачи метрик. Эта функциональность позволяет использовать зашифрованные соединения между агентом и Kafka брокером.
## Конфигурация SSL
### 1. Настройка в config.yaml
```yaml
kafka:
enabled: true
brokers: ["10.99.0.90:9093"] # SSL порт
topic: "sensus.metrics"
client_id: "sensusagent"
enable_tls: false # Устаревшая настройка, используйте ssl_enabled
timeout: "5s"
# SSL настройки
ssl_enabled: true
ssl_keystore_location: "/var/ssl/private/kafka.client.keystore.jks"
ssl_keystore_password: "kafka123"
ssl_key_password: "kafka123"
ssl_truststore_location: "/var/ssl/private/kafka.client.truststore.jks"
ssl_truststore_password: "kafka123"
ssl_client_auth: "none" # none, required, requested
ssl_endpoint_identification_algorithm: "https" # https, none
```
### 2. Настройка через переменные окружения
```bash
# Основные настройки
KAFKA_BROKERS=kafka:9093
KAFKA_TOPIC=sensus.metrics
KAFKA_CLIENT_ID=sensusagent
# SSL настройки
KAFKA_SSL_ENABLED=true
KAFKA_SSL_KEYSTORE_PASSWORD=kafka123
KAFKA_SSL_KEY_PASSWORD=kafka123
KAFKA_SSL_TRUSTSTORE_PASSWORD=kafka123
KAFKA_SSL_CLIENT_AUTH=none
KAFKA_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM=https
```
## Параметры SSL конфигурации
| Параметр | Описание | Возможные значения | По умолчанию |
|----------|----------|-------------------|--------------|
| `ssl_enabled` | Включение SSL подключения | `true`, `false` | `false` |
| `ssl_keystore_location` | Путь к клиентскому keystore | Путь к файлу | `/var/ssl/private/kafka.client.keystore.jks` |
| `ssl_keystore_password` | Пароль keystore | Строка | `kafka123` |
| `ssl_key_password` | Пароль приватного ключа | Строка | `kafka123` |
| `ssl_truststore_location` | Путь к клиентскому truststore | Путь к файлу | `/var/ssl/private/kafka.client.truststore.jks` |
| `ssl_truststore_password` | Пароль truststore | Строка | `kafka123` |
| `ssl_client_auth` | Требование аутентификации клиента | `none`, `required`, `requested` | `none` |
| `ssl_endpoint_identification_algorithm` | Алгоритм идентификации endpoint | `https`, `none` | `https` |
## Docker конфигурация
### 1. В docker-compose.yml
```yaml
sensus-agent:
environment:
KAFKA_SSL_ENABLED: "true"
KAFKA_SSL_KEYSTORE_PASSWORD: "kafka123"
KAFKA_SSL_KEY_PASSWORD: "kafka123"
KAFKA_SSL_TRUSTSTORE_PASSWORD: "kafka123"
KAFKA_SSL_CLIENT_AUTH: "none"
KAFKA_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM: "https"
volumes:
- ./kafka-ssl:/var/ssl/private:ro
```
### 2. Структура SSL сертификатов
```
kafka-ssl/
├── kafka.client.keystore.jks # Клиентский keystore
├── kafka.client.truststore.jks # Клиентский truststore
├── kafka.server.keystore.jks # Серверный keystore (для брокера)
├── kafka.server.truststore.jks # Серверный truststore (для брокера)
├── ca-cert # CA сертификат
└── ca-key # CA приватный ключ
```
## Генерация SSL сертификатов
Используйте скрипт из SensusInfra для генерации сертификатов:
```bash
cd ../SensusInfra
./kafka-ssl/generate-ssl.sh
```
## Безопасность
### Рекомендации для production:
1. **Измените пароли по умолчанию** - никогда не используйте `kafka123` в production
2. **Используйте сильные пароли** - минимум 16 символов с различными типами символов
3. **Ограничьте доступ к сертификатам** - установите права доступа 600
4. **Регулярно обновляйте сертификаты** - установите напоминание о сроке действия
5. **Используйте `ssl_client_auth: "required"`** для строгой аутентификации
### Пример безопасной конфигурации:
```yaml
kafka:
ssl_enabled: true
ssl_client_auth: "required"
ssl_endpoint_identification_algorithm: "https"
ssl_keystore_password: "StrongPassword123!@#"
ssl_key_password: "StrongPassword123!@#"
ssl_truststore_password: "StrongPassword123!@#"
```
## Диагностика
### Логи SSL подключения
При включенном SSL в логах будут отображаться:
```
INFO kafka ssl enabled endpoint_identification=https client_auth=none
INFO kafka connected brokers=[kafka:9093] topic=sensus.metrics ssl_enabled=true
```
### Проверка подключения
```bash
# Проверка доступности SSL порта
telnet kafka 9093
# Проверка сертификатов
keytool -list -keystore kafka-ssl/kafka.client.keystore.jks -storepass kafka123
```
## Устранение неполадок
### Частые проблемы:
1. **"SSL handshake failed"**
- Проверьте правильность паролей
- Убедитесь, что сертификаты не истекли
- Проверьте соответствие CN в сертификате
2. **"Connection refused"**
- Убедитесь, что используете SSL порт (9093)
- Проверьте, что Kafka брокер настроен на SSL
3. **"Certificate verification failed"**
- Установите `ssl_endpoint_identification_algorithm: "none"` для тестирования
- Проверьте, что truststore содержит правильный CA сертификат
### Отладка:
```bash
# Включите debug логирование
LOG_LEVEL=debug
# Проверьте конфигурацию
docker exec sensus-agent cat /bin/agent/config.yaml
```
## Миграция с обычного подключения
1. Сгенерируйте SSL сертификаты
2. Обновите `config.yaml` или переменные окружения
3. Измените порт с 9092 на 9093
4. Установите `ssl_enabled: true`
5. Перезапустите агент
## Совместимость
- **Kafka версии**: 2.8+ (рекомендуется 3.0+)
- **Go версия**: 1.19+
- **kafka-go библиотека**: последняя версия
## Поддержка
При возникновении проблем:
1. Проверьте логи агента
2. Убедитесь в правильности конфигурации
3. Проверьте доступность Kafka брокера
4. Обратитесь к документации Kafka SSL