一周以来,我一直在为PoC目的探索HashiCorp保险库。我正在尝试设计一个非常简单的系统,其中应用程序使用 role_id 和 secret_id 登录到保管库,该文件具有终身有效期并要求一次性使用数据库凭证。我已成功将数据库与Vault集成在一起,并在传递了策略生成的令牌后,为目标用户创建了新的凭据(用户名和密码)。
现在,我也已经成功为应用程序生成了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进行硬编码。