spring-boot - 当 Hashicorp 保险库被密封时,令牌身份验证不起作用
问题描述
我正在开发一个示例应用程序,我想在其中连接到 Hashicorp 保险库以获取数据库凭据。下面是我的应用程序的 bootstrap.yml。
spring:
application:
name: phonebook
cloud:
config:
uri: http://localhost:8888/
vault:
uri: http://localhost:8200
authentication: token
token: s.5bXvCP90f4GlQMKrupuQwH7C
profiles:
active:
- local,test
解封保管库服务器时,应用程序会正确构建。Maven 正确地从 Vault 中获取数据库用户名。当我在密封保管库后运行构建时,由于以下错误,构建失败。
org.springframework.vault.VaultException: Status 503 Service Unavailable [secret/application]: error performing token check: Vault is sealed; nested exception is org.springframework.web.client.HttpServerErrorException$ServiceUnavailable: 503 Service Unavailable: [{"errors":["error performing token check: Vault is sealed"]}
我该如何解决这个问题?我希望 maven 在构建过程中获取数据库用户名和密码,即使它是密封的,保险库也不会出现任何问题。
解决方案
Vault 的好处在于它不是简单的静态存储,在环境发生任何变化时,你都需要执行一些操作才能拥有一个稳定可用的系统。
建议:创建一个用于自动化流程的脚本。
例子。我有一个多服务系统,我的一些服务使用 Vault 来获取配置。
初始化.sh:
#!/bin/bash
export VAULT_ADDR="http://localhost:8200"
vault operator unseal <token1>
vault operator unseal <token2>
vault operator unseal <token3>
vault login <main token>
vault secrets enable -path=<path>/ -description="secrets for My projects" kv
vault auth enable approle
vault policy write application-policy-dev ./application-policy-DEV.hcl
应用程序.sh:
#!/bin/bash
export VAULT_ADDR="http://localhost:8200"
vault login <main token>
vault delete <secret>/<app_path>
vault delete sys/policy/<app>-policy
vault delete auth/approle/role/<app>-role
vault kv put <secret>/<app_path> - < <(yq m ./application.yaml)
vault policy write <app>-policy ./<app>-policy.hcl
vault write auth/approle/role/<app>-role token_policies="application-policy"
role_id=$(vault read auth/approle/role/<app>-role/role-id -format="json" | jq -r '.data.role_id')
secret_id=$(vault write auth/approle/role/<app>-role/secret-id -format="json" | jq -r '.data.secret_id')
token=$(vault write auth/approle/login role_id="${role_id}" secret_id=${secret_id} -format="json" | jq -r '.auth.client_token')
echo 'Token:' ${token}
其中<app>
- 您的应用程序的名称,application.yaml
- 带有配置的<app>-policy.hcl
文件, - 带有策略的文件
当然,所有这些文件都不应该公开,仅用于 Vault 管理。
在环境或 Vault 期间终止时发生任何变化,只需运行init.sh
. 用于获取应用程序运行的令牌application.sh
。此外,如果您需要更改配置参数,请将其更改为application.yaml
、运行application.sh
并使用结果令牌。
脚本结果(对于我的一项服务):
Key Value
--- -----
token *****
token_accessor *****
token_duration ∞
token_renewable false
token_policies ["root"]
identity_policies []
policies ["root"]
Success! Data deleted (if it existed) at: <secret>/<app>
Success! Data deleted (if it existed) at: sys/policy/<app>-policy
Success! Data deleted (if it existed) at: auth/approle/role/<app>-role
Success! Data written to: <secret>/<app>
Success! Uploaded policy: <app>-policy
Success! Data written to: auth/approle/role/<app>-role
Token: s.dn2o5b7tvxHLMWint1DvxPRJ
Process finished with exit code 0
推荐阅读
- jenkins - Jenkins Slave Shows as Offline
- javascript - 为什么我收到 TypeError: Cannot read property 'now' of undefined
- sql - JOIN table and show row with closest upcoming date
- vim - 当我在 vim 中按 enter 换行时,它会破坏行的缩进
- git - git checkout 命令无法按预期工作
- php - 是否可以在没有证书或密钥的情况下使用 php 通过 ssl 连接到远程 mysql 数据库?
- elasticsearch - 具有未知数据类型的 Elasticsearch 术语聚合
- regex - 正则表达式查找包含单词的句子中的所有内容
- android - 如何正确使用android数据绑定
- php - Slim PHP 框架控制器目录