У меня есть набор микросервисов, взаимодействующих через события на Кафке. Иногда случается, что у меня есть конфиденциальные данные, отправленные брокеру (например, пароль пользователя при создании пользователя). Мне было интересно, как зашифровать / расшифровать эти данные, используя некоторые метаданные, присоединенные к схеме Avro. Я обнаружил, что любое дополнительное поле, добавленное к схеме, может быть прочитано через Avro API (например, com.example.kafka.Object.SCHEMA$.getField("password").getProp("sensitive")
). Пример схемы может быть:
{
"type": "record",
"name": "Object",
"namespace": "com.example.kafka",
"fields": [
{
"name": "password",
"type": "string",
"sensitive": true,
"doc": "A sensitive data"
}]
}
Я думал о расширении io.confluent.kafka.streams.serdes.avro.SpecificAvroSerializer
и применении этой логики до нормальной сериализации:
- Определить, является ли определенное поле чувствительным
- Шифровать его значение
Как вы думаете, этот подход может иметь смысл? Пожалуйста, поделитесь своими предложениями.