机密引擎(Secrets Engines)
机密引擎是存储、生成或加密数据的组件。 机密引擎非常灵活可扩展,功能强大。 向机密引擎发送一些数据,它们会对这些数据执行一些操作,然后返回一个结果。
一些机密引擎只是存储和读取数据——就像是加密存储数据的 Redis/Memcached 那样。另一些机密引擎会连接到其他服务并按需生成动态凭证。还有一些机密引擎提供加密即服务、totp 生成、证书等等。
机密引擎在 Vault 中被挂载在“路径”上启用。当一个请求发送到 Vault,路由器会负责将所有符合路径前缀的请求发送到该路径上挂载的机密引擎里。通过这样的机制,每一个机密引擎都可以定义属于它自己的路径和属性。对于用户来说,机密引擎的行为就像是虚拟文件系统,提供了增删改查功能。
机密引擎生命周期
大多数秘密引擎可以通过命令行工具或 API 启用、禁用、调整和移动。过去版本的 Vault 中将这些称为“挂载点”(mounts),但该术语已被过度使用。
- 启用 —— 给定路径上启用秘密引擎。除了少数例外之外,机密引擎可以同时在多个路径上启用。每个机密引擎都按照路径隔离。默认情况下,它们在其“类型”名对应路径上启用(例如,
aws
启用在aws/
路径上) - 禁用 —— 禁用一个现存的机密引擎。当一个机密引擎被禁用时,它的所有机密都会被吊销(如果这些机密支持吊销的话),并且在物理存储层中该引擎存储的所有数据都会被删除
- 移动 —— 将一个现存机密引擎移动到一个新路径上。该过程会吊销引擎的所有机密,因为这些机密租约都已经在创建时与特定路径相绑定了。已存储的该引擎相关的配置信息会被移动到新路径上。
- 调整 —— 调整该引擎的全局配置,例如 TTL
机密引擎启用之后,就可以在启用路径上通过 API 直接与其交互。使用 vault path-help
确定它响应的路径。
请注意,Vault 中的挂载点不能相互冲突。这有两个广泛的含义。第一个是要挂载的路径不能以一个现存挂载点路径为前缀。第二个是要挂载的路径本身不能是某个现存挂载点路径的前缀。例如,挂载 foo/bar
和 foo/baz
可以和平共处,而 foo
和 foo/baz
不能
屏障视图
机密引擎只能透过一个包含屏障的视图访问配置的 Vault 物理存储。这很像是 chroot。
启用秘密引擎时,会生成一个随机 UUID,这将成为该引擎的数据根。每当该引擎写入物理存储层时,它的写入路径都会以该 UUID 文件夹为前缀。由于 Vault 存储层不支持相对访问(例如 ../
),这使得启用的机密引擎无法访问其他引擎的数据。
这是 Vault 中的一项重要安全功能 - 即使是恶意的引擎也无法访问来自任何其他引擎的数据。