secret引擎
一些机密引擎只是存储和读取数据——就像是加密存储数据的 Redis/Memcached 那样。另一些机密引擎会连接到其他服务并按需生成动态凭证。还有一些机密引擎提供加密即服务、totp 生成、证书等等。
机密引擎在 Vault 中被挂载在“路径”上启用。当一个请求发送到 Vault,路由器会负责将所有符合路径前缀的请求发送到该路径上挂载的机密引擎里。通过这样的机制,每一个机密引擎都可以定义属于它自己的路径和属性。对于用户来说,机密引擎的行为就像是虚拟文件系统,提供了增删改查功能。
机密引擎生命周期
大多数秘密引擎可以通过命令行工具或 API 启用、禁用、调整和移动。过去版本的 Vault 中将这些称为“挂载点”(mounts),但该术语已被过度使用。
- 启用 —— 给定路径上启用秘密引擎。除了少数例外之外,机密引擎可以同时在多个路径上启用。每个机密引擎都按照路径隔离。默认情况下,它们在其“类型”名对应路径上启用(例如,aws 启用在 aws/ 路径上)
-禁用 —— 禁用一个现存的机密引擎。当一个机密引擎被禁用时,它的所有机密都会被吊销(如果这些机密支持吊销的话),并且在物理存储层中该引擎存储的所有数据都会被删除
-移动 —— 将一个现存机密引擎移动到一个新路径上。该过程会吊销引擎的所有机密,因为这些机密租约都已经在创建时与特定路径相绑定了。已存储的该引擎相关的配置信息会被移动到新路径上。
- 调整 —— 调整该引擎的全局配置,例如 TTL
vault集成了很多云厂商很多secret engine,具体参考官方文档即可。
https://developer.hashicorp.com/vault/docs/secrets/
这里重点介绍下database secret engine。
database secret引擎
https://lonegunmanb.github.io/essential-vault/6.机密引擎/6.Database.html
https://developer.hashicorp.com/vault/docs/secrets/databases
囊括了基本上常用的集中数据库(mysql pg mssql oracle es等)
数据库机密引擎根据配置的角色动态生成数据库凭据。它通过插件接口与许多不同的数据库协同工作。有许多内置的数据库类型,以及一个用于运行自定义数据库类型以实现可扩展性的公开框架。这意味着需要访问数据库的服务不再需要使用硬编码的凭据:它们可以从 Vault 请求凭据,并使用 Vault 的租约机制来更轻松地轮换密钥。这些被称为“动态角色”或“动态机密”。
由于每个服务都使用与众不同的凭据访问数据库,因此当发现有问题的数据访问时,审计会变得更加容易。我们可以通过 SQL 用户名跟踪到服务的特定实例。
Vault 使用内建的吊销系统来确保用户的凭据在租约到期后的合理时间内失效。
简单点讲,就是给vault里面预置了一个高权限的数据库账号,然后外部系统先访问vault,vault会返回一个临时数据库账号密码返回给外部系统,另外在临时账号的ttl到期时候vault会去数据库销毁临时账号。
静态角色
数据库机密引擎支持“静态角色”的概念,即 Vault 角色与数据库中的用户名的一对一映射。数据库用户的当前密码由 Vault 在可配置的时间段内存储和自动轮换。这与动态机密不同,动态机密的每次请求凭据都会生成唯一的用户名和密码对。当为角色请求凭据时,Vault 会返回已配置数据库用户的当前密码,允许任何拥有适当 Vault 策略的人访问数据库中的用户帐户。
目前并不是所有数据库类型都支持静态角色(基本上常用的rdbms都支持了),具体可以参考官方文档
关于database secret engine,内容比较多,会把MSSQL和MySQL的单独拆2篇来写,PG和MongoDB等其它的都差不多,看官方文档即可。