Мы пытаемся отправить журналы с помощью Filebeat в AWS MSK (Provisioned), используя доступную конфигурацию kafka. Мы используем аутентификацию mTLS с настройкой Root CA и Intermediate CA с Vault. Промежуточный ЦС доступен в AWS PCA, который назначен кластеру AWS MSK, который, в свою очередь, выдает сертификаты брокерам на AWS MSK.
Мы можем выполнить аутентификацию mTLS с помощью клиента Kafka с настройкой администратора (клиент Kafka с необходимыми сертификатами), однако filebeat kafka не может выполнить рукопожатие SSL. Все сертификаты, предоставленные в рукопожатии, действительны.
Изображение докера Filebeat: docker.elastic.co/beats/filebeat:8.5.1
Наша конфигурация Filebeat выглядит так
файлбит.yaml
---
filebeat.shutdown_timeout: 0
fields_under_root: false
logging.level: debug
.
.
.
output.kafka:
hosts: 'XXXXMSK_BOOTSTRAP_HOSTSXXXX'
ssl.enabled: true
ssl.verification_mode: 'certificate'
ssl.certificate: /path/to/obained-cert.crt'
ssl.key: /path/to/obained-key.pki.key'
ssl.authorities: [/path/to/root/int/ca/combined-file/msk_ca_chain.pem']
topic: 'XXXXKAFKA_TOPICXXXX'
codec.format:
string: '{"timestamp": "%{[@timestamp]}", "message": %{[message]}, "host": %{[host]}}'
close_inactive: 10m
required_acks: 1
partition.round_robin:
reachable_only: false
keep-alive: 30000ms
полученный-cert.crt
-----BEGIN CERTIFICATE-----
MIIXXXXX
#Obtained Cert#
-----END CERTIFICATE-----
полученный ключ.pki.key
-----BEGIN RSA PRIVATE KEY-----
MIIXXXXX
#Obtained private key#
-----END RSA PRIVATE KEY-----
msk_ca_chain.pem
-----BEGIN CERTIFICATE-----
MIIXXXXX
#Intermediate CA Cert#
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIXXXXX
#Root CA Cert#
-----END CERTIFICATE-----
Ошибка в журнале Filebeat:
{"log.level":"error","@timestamp":"2023-01-06T10:59:48.701Z","log.logger":"kafka","log.origin":{"file.name":"kafka/client.go","file.line":337},"message":"Kafka (topic=XXXXKAFKA_TOPICXXXX): kafka: client has run out of available brokers to talk to (Is your cluster reachable?)","service.name":"filebeat","ecs.version":"1.6.0"}
Ошибка на AWS Cloudwatch для брокеров:
[2023-01-06 12:48:07,716] INFO [SocketServer listenerType=ZK_BROKER, nodeId=3] Failed authentication with /INTERNAL_IP (SSL handshake failed) (org.apache.kafka.common.network.Selector)
[2023-01-06 12:48:08,004] INFO [SocketServer listenerType=ZK_BROKER, nodeId=2] Failed authentication with /INTERNAL_IP (SSL handshake failed) (org.apache.kafka.common.network.Selector)
[2023-01-06 12:48:08,016] INFO [SocketServer listenerType=ZK_BROKER, nodeId=1] Failed authentication with /INTERNAL_IP (SSL handshake failed) (org.apache.kafka.common.network.Selector)
Я включил журналы отладки в Filebeat, но не вижу никакой информации о том, почему не удалось установить связь SSL.
Можем ли мы каким-либо образом увидеть какие-либо журналы отладки на стороне Filebeat Kafka или AWS MSK Broker, чтобы определить, почему происходит сбой рукопожатия SSL? Также приветствуются любые указатели на возможные проблемы в конфигурации filebeat.yaml.
Заранее спасибо!!!
Извините за ответ на мой собственный вопрос. Я решил эту проблему сейчас, добавив сертификат промежуточного ЦС к сертификату, полученному корневым ЦС, а затем указав только корневой ЦС в разделе полномочий.
Изменения, которые я сделал:
/path/to/obained-cert.crt
добавлен промежуточный сертификат CA для параметра ssl.certificate
ssl.authorities
т.е. ['/path/to/root/ca/msk_root_ca.pem']
Это сделало свое дело!!
Итак, если у вас есть промежуточный ЦС в PKI, всегда добавляйте его к полученному сертификату, чтобы выполнить рукопожатие SSL.
Надеюсь, это поможет другим.