Использование Spring Cloud Vault для защиты паролей и т. д. в приложениях Spring Boot?

Я сделал несколько поисков, чтобы защитить все конфиденциальные данные в application.properties, и, наконец, решил использовать Spring Cloud Vault от HashiCorp.

Насколько я вижу, я могу хранить все секреты и т. д. в виде пар ключ-значение в этом механизме. Однако я не мог быть уверен и понять следующие моменты. Не могли бы вы помочь мне, пожалуйста?

  1. Сохраняя все конфиденциальные данные в Vault, я думаю, нам нужно предоставить токен в приложении Spring Boot для доступа к этим данным. Итак, для производственной среды предположим, что я отправляю приложение клиенту, должны ли они предоставлять этот токен через переменные среды? Или есть другие безопасные альтернативы?

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

@seenukarthi, у вас есть идеи по этому вопросу, помимо форматирования маркеров?

jonathan 04.04.2023 13:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
131
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Токены хранилища следует вводить как переменные среды. Если у вас есть такая платформа, как k8 или OpenShift, сам токен Vault может храниться как секрет.

Springboot загружает секреты из Vault при запуске.

Вот фрагмент нашего файла шаблона DeploymentConfig:

kind: DeploymentConfig
spec:
  strategy:
    spec:
      containers:   
        - name: {{ .Release.Name }}
          env:
            - name: VAULT_API
              valueFrom:
                secretKeyRef:
                  name: global-secrets
                  key: vaultapi
            - name: VAULT_TOKEN
              valueFrom:
                secretKeyRef:
                  name: global-secrets
                  key: vaulttoken

Большое спасибо за помощь. Затем, если мы не используем k8 или OpenShift, то мы должны передавать токены для Vault через переменные среды как для dev, так и для prod, верно?

jonathan 04.04.2023 14:21

С другой стороны, ссылка кажется полезной, но ее дата старая (24 июня 2016 г.), и мне интересно, есть ли обновленная версия этой оригинальной статьи. Есть идеи?

jonathan 04.04.2023 14:22

кстати, нельзя голосовать. проголосуйте, пожалуйста, за вопрос?

jonathan 04.04.2023 15:07

Да, разные токены хранилища (и, возможно) для каждой среды. Статья может быть старой, но она все еще работает сегодня в моем хранилище, весне, среде k8.

John Williams 04.04.2023 15:12

*и, возможно, URL-адреса для каждой среды

John Williams 04.04.2023 15:20

Замечательно... Проголосовал и отмечен как ответ.

jonathan 04.04.2023 15:30

На самом деле я ищу правильный пример, который использует Docker с правильной конфигурацией, но, к сожалению, не смог найти. Есть ли у вас какие-либо идеи относительно правильного примера, кроме того, которым вы поделились выше?

jonathan 04.04.2023 15:30

Я добавил фрагмент шаблона постоянного тока, который мы используем для получения токена хранилища и т. д. из секретов.

John Williams 05.04.2023 10:48

Большое спасибо. Мне интересно, как мне защитить токен, который используется для доступа к хранилищу. Обычно я использую его в файле .env, но при отправке приложения в производственном режиме клиенту, должен ли я заставить их обновить токен и продолжить (токен в файле .env будет использоваться ботом в Docker compose и в приложении ). Обычно я игнорирую файл .env, по этой причине я не понимаю, как мне действовать дальше?

jonathan 05.04.2023 10:54

Поместите токен хранилища в хранилище секретов управления кластером (k8 или OpenShift), а не в .env. Следовательно, valueFrom.secretKeyRef.name=global-secrets и valueFrom.secretKeyRef.key=vaulttoken

John Williams 05.04.2023 11:14

Хорошо, наконец, вы изменили мое мнение на правильный путь. Но IU не уверена, какую из них легче интегрировать. Итак, для простого приложения для изучения Spring Cloud Vault, какое из них я должен предпочесть для хранения токена хранилища? к8 или опеншифт?

jonathan 05.04.2023 12:19

У меня есть план изучить k8, тогда не лучше ли для этих целей использовать k8 вместо OpenShift?

jonathan 05.04.2023 12:24

k8 используется более широко. OpenShift — это тонкий слой поверх k8.

John Williams 05.04.2023 13:38

Тогда мне обязательно стоит выучить k8 и хранить в нем свой токен при использовании хранилища. Спасибо.

jonathan 05.04.2023 15:17

Другие вопросы по теме