Интеграция приложения с хранилищем HashiCorp

#hashicorp-vault

#hashicorp-хранилище

Вопрос:

Я изучал хранилище HashiCorp для целей PoC в течение недели. Я пытаюсь разработать очень простую систему, в которой приложение входит в хранилище, используя role_id и secret_id, которые действительны в течение всего срока действия и запрашивают уникальные учетные данные базы данных для одноразового использования. Я успешно интегрировал базу данных с хранилищем, и после передачи токена, сгенерированного политикой, для предполагаемого пользователя создаются новые учетные данные (имя пользователя и пароль).

Теперь я также успешно сгенерировал role_id и secrete_id для приложения, и когда я передаю эту команду из среды хранилища, я получаю токен для генерации учетных данных.

 / # vault write auth/approle/login role_id="9805c2d7-db84-f17f-843a-440e5a797254" secret_id="1cebcd60-5de5-b0a7-f43c-3df69ae274a4"

Key                     Value
---                     -----
token                   s.fMjSkiloNdkNcRPGQfjmzjGN
token_accessor          orQymBllwi81KEXvpKn6cELq
token_duration          1h
token_renewable         true
token_policies          ["apps" "default"]
identity_policies       []
policies                ["apps" "default"]
token_meta_role_name    app-login
  

После чего следующая команда генерирует уникальные учетные данные:

 / # VAULT_TOKEN=s.fMjSkiloNdkNcRPGQfjmzjGN vault read database/creds/readonly
Key                Value
---                -----
lease_id           database/creds/readonly/FD71umy2l3Vd02iIc6ACtumz
lease_duration     1h
lease_renewable    true
password           A1a-KFjVbJQ9DsUwYQ6r
username           v-approle-readonly-mhQ73CzTWBTgVptBmZbh-1600158851
  

После чего я запечатал хранилище:

 Vault operator seal
  

Но теперь, когда я пытаюсь передать role_id и secret_id, используя предыдущую команду для генерации токена, это показывает, что хранилище запечатано:

 / # vault write auth/approle/login role_id="9805c2d7-db84-f17f-843a-440e5a797254" secret_id="1cebcd60-5de5-b0a7-f43c-3df69ae274a4"
Error writing data to auth/approle/login: Error making API request.

URL: PUT http://127.0.0.1:8200/v1/auth/approle/login
Code: 503. Errors:

* error performing token check: Vault is sealed
  

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

Все предложения по моей проблеме приветствуются.

Важное примечание: я не использую какой-либо оркестратор или инструмент управления конфигурацией. Вариант использования довольно прост. Я хочу жестко запрограммировать role_id и secret_id в коде приложения.

Комментарии:

1. запечатывание хранилища — это операция на уровне оператора, а не приложения. Я рекомендую вам ознакомиться с концептуальными документами по герметизации .

2. @Marc, я прошел через то же самое. Мой вопрос в том, может ли приложение взаимодействовать с запечатанным хранилищем. Если да, то каким образом?

3. Это невозможно, оператору сначала нужно его распечатать.

4. @Mac, хорошо, теперь я понял. Но, сэр, у меня есть сомнения, что если распечатывание хранилища является основным требованием для любого приложения для взаимодействия с vault, то не сводит ли это на нет всю цель размещения секрета в vault? Я имею в виду, насколько я понимаю, когда хранилище запечатано, данные внутри зашифрованы. Теперь мой вопрос в том, если оно оставлено в незапечатанном положении, не уязвимы ли данные?

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