概述

Vault 是一个秘密管理、加密即服务和特权访问管理的工具。业界用的比较多的 KMS 解决方案。

用于加解密 secret, 比如API密钥、密码、证书等等。Vault为任何秘密提供了一个统一的界面,同时提供严格的访问控制和记录详细的审计日志。

支持特性

  • 安全秘钥存储: 任意的 key/value 秘钥可以存储在 Vault 中。Vault 会在将这些秘钥写入持久性存储之前对其进行加密,因此获得对原始存储的访问权限并不足以访问你的秘钥。Vault可以写入磁盘、Consul 等。
  • 动态加密: Vault 可以为一些系统按需生成秘钥,如 AWS 或 SQL 数据库。例如,当一个应用需要访问 S3 bucket 时,它会向 Vault 请求凭证,Vault 按需生成一个具有有效权限的 AWS 密钥对。创建动态秘钥后,Vault 还会在租约到期后自动撤销秘钥。
  • 数据加密: Vault 可以在不存储数据的情况下对数据进行加密和解密。可以定义加密参数,开发人员可以将加密数据存储在 SQL 等位置,而不必自己设计加密方法。
  • 秘钥租赁和更新: Vault 中的所有秘钥都有一个与之相关的租约。在租约结束时,Vault 将自动撤销该秘钥。客户端能够通过内置的续约 API 来续约。
  • 秘钥回收: Vault 内置了对秘钥撤销的支持。Vault 不仅可以撤销单一的秘钥,还可以撤销一棵秘钥树,例如由特定用户读取的所有秘钥,或特定类型的所有秘钥。撤销有助于密钥滚动以及在发生入侵时锁定系统。

部署 Vault

依赖 Golang 环境

  1. 下载 Vault:

    1
    
    git clone git@github.com:hashicorp/vault.git
    
  2. 要编译 Vault 的开发版本,请运行 makemake dev 编译后会把 Vault 二进制文件放在 bin$GOPATH/bin文件夹:

    1
    2
    3
    
    $ make dev
    ...
    $ bin/vault
    
  3. 要编译带有用户界面的 Vault 开发版,运行 make static-dist dev-ui。编译后会把 Vault 二进制文件放在 bin$GOPATH/bin 文件夹:

    1
    2
    3
    
    $ make static-dist dev-ui
    ...
    $ bin/vault
    
  4. 要运行测试,输入 make test注意:这需要安装 Docker

    1
    2
    
    $ make test
    ...
    
  5. 如果正在开发一个特定的包,通过指定 TEST 变量来运行该包的测试。 比如下面的例子,只运行vault包的测试:

    1
    2
    
    make test TEST=./vault
    ...
    

Vault 操作命令

  1. vault operator init: 连接并初始化 Vault。

    • 可能出错:

      1
      
      Error initializing: Put https://127.0.0.1:8200/v1/sys/init: dial tcp 127.0.0.1:8200: connect: connection refused.
      

      解决办法:

      1
      
      export VAULT_ADDR='http://127.0.0.1:8200' # config Vault client to connect with dev server.
      
  2. vault status : 查看 Vault 的状态。

  3. vault kv put secret/hello foo=world : The secret prefix is where arbitary secrets can be read and written.

  4. vault kv get secret/hello : Getting a Secret.

  5. vault kv delete secret/hello : Deleting a Secret.

  6. vault secrets enable -path-kv kv : Enable a Secrets Engine.

  7. vault secrets list : List all enabled Secrtes Engines.

  8. vault list kv : LIst key in kv Engine.

  9. vault secrets disable kv/ : Disable a Secrets Engine.

分类

  • 基本命令:
    • read
    • write
    • delete
    • list
    • login
    • server
    • status
    • unwrap
  • 其他:
    • audit
    • auth
    • lease
    • operator
    • path-help
    • policy
    • secrets
    • ssh
    • token

dev 模式下启动一个 Vault Server:

1
Vault server -dev  # 本地拉起vault的话 设置 VAULT_ADDR 变量,  export VAULT_ADDR='http://127.0.0.1:8200'

通过 CLI 和 HTTP API 来调用 Vault

文档