Quick Start
此部分说明如何开始使用 Vault 和 Spring Cloud Vault。
Prerequisites
若要开始使用 Vault 和本指南,你需要一个提供下列内容的类似于 NIX 的操作系统:
-
wget
,openssl
andunzip
-
至少需要 Java 8 和一个配置正确的
JAVA_HOME
环境变量
本指南从 Spring Cloud Vault 的角度解释了 Vault 设置以进行集成测试。你可以在 Vault 项目网站上找到入门指南:[role="bare"][role="bare"]https://learn.hashicorp.com/vault |
安装 Vault
$ wget https://releases.hashicorp.com/vault/${vault_version}/vault_${vault_version}_${platform}.zip
$ unzip vault_${vault_version}_${platform}.zip
通过下载并运行 |
Create SSL certificates for Vault
接下来,你需要生成一组证书:
-
Root CA
-
Vault 证书(解密密钥
work/ca/private/localhost.decrypted.key.pem
和证书work/ca/certs/localhost.cert.pem
)
务必将根证书导入符合 Java 的信任库。
最简单的实现方法是使用 OpenSSL。
|
Start Vault server
接下来,创建配置文件,如下所示:
backend "inmem" {
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_cert_file = "work/ca/certs/localhost.cert.pem"
tls_key_file = "work/ca/private/localhost.decrypted.key.pem"
}
disable_mlock = true
可以在 |
$ vault server -config=vault.conf
Vault 开始监听使用 inmem
存储和 https
的 0.0.0.0:8200
。Vault 在启动时处于密封状态,并且未初始化。
如果您想运行测试,请让 Vault 保持未初始化状态。测试将初始化 Vault 并创建一个根令牌 |
如果你想在应用程序中使用 Vault 或者试用它,则需要先初始化它。
$ export VAULT_ADDR="https://localhost:8200"
$ export VAULT_SKIP_VERIFY=true # Don't do this for production
$ vault operator init
您应看到类似内容:
Key 1: 7149c6a2e16b8833f6eb1e76df03e47f6113a3288b3093faf5033d44f0e70fe701
Key 2: 901c534c7988c18c20435a85213c683bdcf0efcd82e38e2893779f152978c18c02
Key 3: 03ff3948575b1165a20c20ee7c3e6edf04f4cdbe0e82dbff5be49c63f98bc03a03
Key 4: 216ae5cc3ddaf93ceb8e1d15bb9fc3176653f5b738f5f3d1ee00cd7dccbe926e04
Key 5: b2898fc8130929d569c1677ee69dc5f3be57d7c4b494a6062693ce0b1c4d93d805
Initial Root Token: 19aefa97-cccc-bbbb-aaaa-225940e63d76
Vault initialized with 5 keys and a key threshold of 3. Please
securely distribute the above keys. When the Vault is re-sealed,
restarted, or stopped, you must provide at least 3 of these keys
to unseal it again.
Vault does not store the master key. Without at least 3 keys,
your Vault will remain permanently sealed.
Vault 将初始化并返回一组 unsealing 密钥和根令牌。选择 3 个密钥和 unseal Vault。将 Vault 令牌存储在 VAULT_TOKEN
环境变量中。
$ vault operator unseal (Key 1)
$ vault operator unseal (Key 2)
$ vault operator unseal (Key 3)
$ export VAULT_TOKEN=(Root token)
# Required to run Spring Cloud Vault tests after manual initialization
$ vault token create -id="00000000-0000-0000-0000-000000000000" -policy="root"
Spring Cloud Vault 访问不同的资源。默认情况下,启用秘密后端,它通过 JSON 端点访问秘密配置设置。
HTTP 服务具有以下形式的资源:
/secret/{application}/{profile} /secret/{application} /secret/{defaultContext}/{profile} /secret/{defaultContext}
其中“应用程序”注入为 SpringApplication
中的 spring.application.name
(即在常规 Spring Boot 应用程序中通常为“应用程序”),"profile" 是活动配置文件(或以逗号分隔的属性列表)。从 Vault 检索的属性将“原样”使用,而不进一步添加属性名称的前缀。
Client Side Usage
要在应用程序中使用这些功能,只需将其构建为依赖于 spring-cloud-vault-config
的 Spring Boot 应用程序(例如,请参见测试用例)。示例 Maven 配置:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${springBootVersion}</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-vault-config</artifactId>
<version>{project-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- repositories also needed for snapshots and milestones -->
然后,您可以创建一个标准 Spring Boot 应用程序,例如这个简单的 HTTP 服务器:
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
当其运行时,如果默认本地 Vault 服务器在端口 8200
上运行,它将从该服务器选取外部配置。若要修改启动行为,可以使用 application.properties
更改 Vault 服务器的位置,例如
spring.cloud.vault:
host: localhost
port: 8200
scheme: https
uri: https://localhost:8200
connection-timeout: 5000
read-timeout: 15000
spring.config.import: vault://
-
host
设置 Vault 主机的主机名,主机名将用于 SSL 证书验证 -
port
设置 Vault 端口 -
scheme
将模式设置为http
将使用普通 HTTP,支持的模式包括http
和https
-
uri
使用 URI 配置 Vault 端点,优先于主机/端口/模式配置 -
connection-timeout
设置连接超时(毫秒) -
read-timeout
设置读取超时(毫秒) -
spring.config.import
使用所有已启用的秘密后端(默认启用键值)将 Vault 挂载为PropertySource
启用进一步的集成需要额外的依赖项和配置。根据您设置 Vault 的方式,您可能需要额外的配置,例如 SSL 和 authentication。
如果应用程序导入 spring-boot-starter-actuator
项目,Vault 服务器的状态将通过 /health
端点获得。
Vault 健康指示器可以通过属性 management.health.vault.enabled
启用或禁用(默认为 true
)。
在 Spring Cloud Vault 3.0 和 Spring Boot 2.4 中,属性源的引导上下文初始化 ( |
Authentication
Vault 需要一个 authentication mechanism 到 authorize client requests。
Spring Cloud Vault 支持多个 authentication mechanisms来使用 Vault 对应用程序进行身份验证。
要快速启动,请使用 Vault initialization 打印的根令牌。
spring.cloud.vault:
token: 19aefa97-cccc-bbbb-aaaa-225940e63d76
spring.config.import: vault://
认真考虑您的安全需求。如果想快速启动 Vault,静态令牌身份验证很好,但静态令牌没有任何进一步的保护。任何意外披露给未授权方都允许使用关联的令牌角色使用 Vault。