租约、续约以及吊销
对于每个动态机密和 service
类型登录令牌,Vault 都会创建一个租约(lease):包含持续时间、是否可续约等信息的元数据。 Vault 承诺数据在给定的持续时间(Duration)或生存时间 (TTL) 内有效。一旦租约到期,Vault 可以自动吊销数据,过期后机密的使用者无法再确定它是否还是有效(因为吊销机密是一个异步操作,无法预测 Vault 将在何时执行吊销操作)。
这带来一个明显的收益:机密的使用者需要定期与 Vault 通信以续约(如果允许的话),或是请求一个新的机密。这使得 Vault 审计日志更有价值,也使密钥滚动更新变得更加容易。
Vault 中的所有动态机密都需要有租约。即使数据旨在永久有效,也需要租约以强制使用者定期续约。
除了续约,租约也可以吊销。当租约被吊销时,它会立即使该机密无效并阻止任何新的的续订。例如,使用 AWS 机密引擎,一旦租约被吊销,访问密钥就会从 AWS 中删除,这使得访问密钥从那时起变得无效。
吊销可以通过 API 手动进行,也可以通过执行 vault lease revoke
命令进行,也可以由 Vault 自动进行。当租约到期时,Vault 会自动吊销该租约。当令牌被吊销时,Vault 将吊销使用该令牌创建的所有租约。
需要注意的是,Key/Value 机密引擎是不关联租约的,虽然它有时也会返回一个租约期限。
租约 ID
使用比如 vault read
命令读取动态机密时,Vault 总是会返回一个 lease_id
。这个 ID 可以被用在 vault lease renew
以及 vault lease revoke
这样的命令上来管理机密的租约。
租约期限与续约
与租约 ID 一起返回的有租约期限。租约期限是生存时间值(Time To Live):租约有效的时间(以秒为单位)。机密的使用者必须在那个时间来临前更新租约。
在续订租约时,用户可以请求他们希望租约保持的有效时长,称为 increment
。这不是从当前 TTL 结束时间开始计算的增量,而是从当前时间开始计算的增量。例如,vault lease renew -increment=3600 my-lease-id
命令会将租约的 TTL 调整为 1 小时(3600 秒)。从当前时间开始计算新 TTL 而不是从目前的 TTL 结束时间开始算可以在用户决定减少有效期时简化计算工作,从而使这些凭证更快到期并更快清理资源。
客户端请求的增量完全是建议性的,负责管理机密的后端可以选择完全忽略它。对于大多数机密,后端会尽最大努力尊重用户设定的增量,但通常会对其进行限制以确保机密经常更新。
因此,应仔细检查续约操作的返回值,以确定新租约有效期是多少。
根据前缀的吊销
除了吊销单个机密之外,具有适当访问控制的操作员可以根据租约 ID 前缀撤销多个机密。
租约 ID 的结构是有规律的,它们的前缀始终是请求机密的路径。这使您可以吊销一组机密树。例如,要吊销所有 AWS 访问密钥,您可以执行 vault lease revoke -prefix aws/
。有关吊销命令的更多信息,请查看命令行篇章中的吊销租约命令的文档。
如果特定系统发生入侵事件,该功能将非常有用:特定路径中所有机密都可以快速轻松地吊销。