Частично хранение данных объекта в весеннем хранилище

Я просматривал документацию Vault и до сих пор не уверен, правильно ли понимаю, какой подход выбрать для решения моей проблемы.

Представьте, что у вас есть объект под названием Example. Он имеет несколько полей, таких как имя, созданный и т. Д., И среди этих полей есть конфиденциальные, такие как пароль, секретный_ключ.

@Entity
@Table(name = "example")
public class Example { 
  private String name;
  private Date created;

  ...

  @Convert(converter = SomeConverter.class)
  private String password;
  @Convert(converter = SomeConverter.class)
  private String secretKey;
}

Этот объект хранится в базе данных SQL (например, PostgreSQL). Теперь моя цель — защитить пароль (отсюда и класс преобразователя), но остальные данные — нет.

Можно ли хранить данные объектов в БД, сохраняя при этом конфиденциальные данные в Vault (в любом хранилище за ним)? Поэтому, когда я буду загружать сущность, обе сущности будут загружаться из БД и конфиденциальные данные из Vault.

Или будет правильным (и единственно жизнеспособным) подходом просто использовать конвертер шифрования/дешифрования из Vault и хранить его в той же базе данных? И ограничьте это аутентификацией с помощью Vault.

Я просто сбит с толку, если Vault вообще должен использоваться только для статических секретов в этом случае.


person TilenA    schedule 05.05.2020    source источник
comment
Итак, в основном, что вы можете сделать, это: 1. Хранить все в Vault или 2. Только необходимые вещи, а затем вы можете перейти к VaultRepository: docs.spring.io/spring-vault/docs/2.2.2.RELEASE/reference/html/ или 3. не храните никакую информацию в хранилище, а храните всю информацию в другом хранилище и используйте службу шифрования транзита хранилища: learn.hashicorp.com/vault/encryption-as-a-service/eaas-transit Но на самом деле все зависит от варианта использования.   -  person daniel.eichten    schedule 05.05.2020
comment
Разве Vault Repository не позволяет вам выполнять эти операции со всем классом, а не только с частью объекта?   -  person TilenA    schedule 06.05.2020
comment
Допустим, моя цель — переместить конфиденциальные данные существующих сущностей/классов (которые уже шифруются с помощью @Convert, но не по лучшим стандартам — ключ находится в исходном коде) в более безопасное место (хранилище) или зашифровать их с помощью убежище. Может быть, достаточно будет использовать EaaS? Поскольку, насколько я понимаю, Vault лучше использовать для секретов (таких как ключи), а не для целых объектов, не все данные в сущностях являются конфиденциальными.   -  person TilenA    schedule 06.05.2020
comment
В этом случае я бы использовал EaS из Vault с использованием VaultTemplate и сохранил зашифрованный и незашифрованный атрибут в классической базе данных.   -  person daniel.eichten    schedule 06.05.2020


Ответы (2)


Я бы сказал, это зависит от вас/бизнеса.

Вы можете хранить весь объект (объект) в хранилище или только строку.

Посмотрите, поможет ли это: https://www.baeldung.com/spring-vault

person Atul Kumar    schedule 05.05.2020
comment
Но в том-то и дело, что в большинстве примеров показано сохранение всего объекта, но мне интересно, могу ли я хранить только его части? Или это возможно только с шифрованием/дешифрованием и все. - person TilenA; 05.05.2020

Не храните все в хранилище как секрет, вы можете хранить пароль, но я не думаю, что это рекомендуется для обычного пользователя (в вашем случае сущность кажется пользователем приложения). Используйте их секретный механизм транзита, зашифруйте данные и сохраните их в любой БД, вы можете получить доступ к БД с аутентификацией хранилища.

Если вы хотите сохранить пароль в секретном движке, вы можете это сделать, но вам понадобится класс обслуживания, который будет извлекать пароль из хранилища перед выполнением какой-либо операции.

person Ravenloup    schedule 06.05.2020