HashiCorp Vault
是一个机密管理工具。与 Git 相比,Vault 的核心功能是以本机方式来处理机密信息的。所以对于配置机密信息来说,使用 Vault 作为 Config Server 的后端存储,是一种更好的选择。注意,Vault 服务器是一个功能强大,且非常健壮的机密管理服务器。本章没有足够的空间来详细讨论所有功能,只涉及在开发模式下简单使用 Vault 服务器。在将 Vault 投入生产环境之前,我强烈建议您通过阅读 Vault 文档,以了解 Vault 的详细信息 https://www.vaultproject.io/docs。
VAULT_ADDR
环境变量,如前面的代码段中第二个命令所展示的那样,以修改配置。vault status
命令验证前两个命令是否按预期工作了。您应该收到一个列表,其中包含大约六个属性,描述 Vault 服务器的配置,以及 Vault 是否被封存。(Valulte 不应在开发模式下被封存。)secrets
的后端存储,这样就和 Config Server 兼容了:spring.data.MongoDB.password
,保存到 Vault 而不是 Git 中。使用 vault 命令,可以像下面这样操作:secret/
标识 Vault 后端(在本例中是名为“secret”的后端)spring.data.mongodb.username
,这样做会导致原来的 spring.data.mongodb.password
信息丢失。您必须将它们同时写入:application.yml
文件中,可以这样做:spring.profiles.active
中去除 Git,只设置为 vault。spring.cloud.config.server.vault.*
属性允许您覆盖 Config Server 使用 Vault 的默认值。在这里告诉 Config Server, Vault 的 API 地址为 https://vault.tacocloud.com:8200。X-Vault-Token
请求头。这不是在 Config Server 中配置该令牌,而是 Config Server 的客户端,在向 Config Server 发送请求时,要在请求头中包含 X-Config-token
。然后 Config Server 会使用这个令牌,对 Vault 发出请求,同样将令牌放在请求头 X-Config-Token
中。X-Config-Token
:X-Config-Token
应该会得到很好的结果,包括 Vault 中的机密令牌。此处给出的令牌是您在开发模式下启动 Vault 服务器时指定的根令牌。它可以是任何在 Vault 服务器中创建的,未过期且已授予该权限访问 Vault 机密的令牌。spring.cloud.config.token
属性告诉 Config Server 客户端,它向 Config Server 发出请求时所使用的令牌值。此属性必须在应用程序的本地配置中设置(不存储在 Config Server 的 Git 或 Vault 后端),以便 Config Server 可以将其值传递到 Vault。application
路径的机密会服务于所有应用程序,无论其名称如何。如果只需要对某些应用程序使用机密令牌,可将路径的 application
部分替换为具体的应用程序名称。例如,以下 Vault 写入命令将写入只特定服务于 ingredient-service
应用程序的机密。(名称由 spring.application.name
指定):production
的应用程序。