安装 Vault

Vault 的安装参考官网文档, 用操作系统常用的软件包管理工具,比如 mac 的 brew, ubuntu/debian 的 apt-get, redhat/centos 的 yum 来安装即可. 安装完后 vault 命令可以使用.

如 mac 下面安装:

  • $ brew tap hashicorp/tap
  • $ brew install hashicorp/tap/vault

参考: https://learn.hashicorp.com/tutorials/vault/getting-started-install?in=vault/getting-started

开发环境下部署 Vault

开发环境使用比较简单, 直接一个命令使用开发模式启动服务即可, vault server -dev 启动的时候, 会往控制台输出一个解密用的 key, 以及一个 Root token. key 和 token 可以直接使用.

$ vault server -dev

参考: https://learn.hashicorp.com/tutorials/vault/getting-started-dev-server?in=vault/getting-started

生产环境下部署 Vault

开发环境部署的安全级别不适合用在生产环境, 开发模式部署 key 和 root token 直接输出到控制台,存储使用的内存存储.

那么生产环境下如何部署呢? 参考: https://learn.hashicorp.com/tutorials/vault/getting-started-deploy?in=vault/getting-started

安装 Vault & 初始化

在控制台, 设置 VAULT_ADDR 变量:

export VAULT_ADDR='http://127.0.0.1:8200'

执行 vault operator init 命令来初始化 Vault:

vault operator init > key.txt

初始化的时候是密封的状态。 初始化默认使用5个密钥。需要使用至少3个密钥解封 vault。 初始化的配置有 -key-shares , -key-threshold 两个参数控制.

解密 vault & 设置 token

vault operator unseal \
$(grep 'Key 1:' key.txt | awk '{print $NF}')

vault operator unseal \
$(grep 'Key 2:' key.txt | awk '{print $NF}')

vault operator unseal \
$(grep 'Key 3:' key.txt | awk '{print $NF}') 

使用初始的 Root Token 登陆

vault login $(grep 'Initial Root Token:' key.txt | awk '{print $NF}')

启用监听日志

vault audit enable file file_path=/var/log/vault-audit.log

生成 root token

通常不应该使用 root token。 在必要的情况下,这样生成 root token: 先生成一个一次性的密码 和 bounce:

vault operator generate-root -init > init-output.txt

使用 3 个 key, 执行3次 generate-root 来生成 root token

vault operator generate-root \
    -nonce=$(grep 'Nonce' init-output.txt | awk '{print $NF}') \
    $(grep 'Key 1:' key.txt | awk '{print $NF}')
    
vault operator generate-root \
    -nonce=$(grep 'Nonce' init-output.txt | awk '{print $NF}') \
    $(grep 'Key 2:' key.txt | awk '{print $NF}') 

第 3 次执行 generate-root 生成 encoded token:

vault operator generate-root -format=json \
    -nonce=$(grep 'Nonce' init-output.txt | awk '{print $NF}') \
    $(grep 'Key 3:' key.txt | awk '{print $NF}') \
    | jq -r ".encoded_root_token" > encoded_root.txt 

解密 root token

vault operator generate-root -decode=$(cat encoded_root.txt) \
     -otp=$(grep 'OTP' init-output.txt | awk '{print $NF}') > root_token.txt

使用 Root token 登陆:

vault login $(cat root_token.txt)

在需要的时候重新生成密钥

初始化重新生成 key 的操作:

vault operator rekey -init -key-shares=3 -key-threshold=2 \
    -format=json | jq -r ".nonce" > nonce.txt

重新生成 key:

vault operator rekey -nonce=$(cat nonce.txt) \
    $(grep 'Key 1:' key.txt | awk '{print $NF}')
    
vault operator rekey -nonce=$(cat nonce.txt) \
    $(grep 'Key 2:' key.txt | awk '{print $NF}')    

vault operator rekey -nonce=$(cat nonce.txt) \
    $(grep 'Key 3:' key.txt | awk '{print $NF}') > new.key.txt