Как управлять конфиденциальными данными в Кафке + Авро - PullRequest
0 голосов
/ 27 июня 2019

У меня есть набор микросервисов, взаимодействующих через события на Кафке. Иногда случается, что у меня есть конфиденциальные данные, отправленные брокеру (например, пароль пользователя при создании пользователя). Мне было интересно, как зашифровать / расшифровать эти данные, используя некоторые метаданные, присоединенные к схеме 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 и применении этой логики до нормальной сериализации:

  1. Определить, является ли определенное поле чувствительным
  2. Шифровать его значение

Как вы думаете, этот подход может иметь смысл? Пожалуйста, поделитесь своими предложениями.

...