名字空间锁和解锁
Vault 默认解锁了所有的 API,这时 Vault 可以响应所有 API/CLI 请求。
Vault 管理员可以锁定特定命名空间的 API。在这种状态下,Vault 会阻止在锁定命名空间(或锁定命名空间的后代)中,除选定的少数 API 端点之外的所有端点的响应。做出响应的端点(豁免路径)与 Vault 无需身份验证的路径大致相同。它们主要用于检查各种系统的状态(例如,sys/health
),或用于解锁 API。
当锁定特定命名空间的 API 时,它也锁定了该命名空间的所有子空间。如果锁定时某个子空间已被锁定,则该锁将被保留,但在解锁该子空间之前必须先解锁父空间。
为什么?
在发生意外事件时,锁定对 Vault 的访问是一种重要的安全机制。
例如使用 HashiCorp 托管的 Vault 服务时,锁定访问 API 提供了与封印 Vault 类似的功能,但不需要 Vault 管理员请求托管服务商来执行封印/解封操作。
此功能对于各种多租户 Vault 部署架构也很有价值。我们可以对组织中特定部分成员访问 Vault 进行限制,而不会影响企业中其他部门。如果在子组织 A 中检测到意外行为,管理员可以禁用子组织 A 下任何实体对 Vault 的访问权限,而不禁用子组织 B 的访问权限。一旦确定并解决了原因,就可以解锁子组织 A 的 API 访问。
锁定
可以用 vault namespace lock
命令(或是调用 API)锁定当前名字空间下的 API。可以提供子路径作为可选项锁定该名字空间下的一个子路径。
执行锁定后会返回一个解锁密钥,可以使用该密钥来解锁该名字空间下的 API。为了将来可以解锁,需要妥善保存该密钥。
当名字空间下的 API 被锁定后,所有子路径都会被锁定。如果一个经过认证的客户端尝试访问一个被锁定的名字空间,会返回一个错误并告知被锁定的名字空间。
解锁
可以用 vault namespace unlock
命令(或是调用 API)解锁当前名字空间下的 API。可以提供子路径作为可选项解锁该名字空间下的一个子路径。
一般来说,解锁 API 需要提供锁定名字空间时返回的解锁密钥。
如果没有解锁密钥,也可以使用 Root 令牌,这时不需要提供解锁密钥。
当 API 解锁后,默认情况下所有子路径都会被解锁。如果某个子路径之前被单独锁定了,那么它仍将保持锁定状态。
API 锁定的响应
如果一个请求被发送到一个被锁定的名字空间,比如 nsA
,Vault 会响应 HTTP 503: Service Unavailable,伴随如下错误信息:
API access to this namespace has been locked by an administrator - "nsA" must be unlocked to gain access.
相似的,如果请求被发送到 nsA
的子路径下时会返回相同的错误。
Vault 复制遇上锁定会发生什么?
API 锁定状态会被复制到整个集群中。