用途:Encrypted Saved Objects(ESO)用于保护 Kibana 中存储的凭据、API 密钥、PII 等敏感数据。只有确实存储敏感数据的保存对象类型才应注册为加密类型,多数类型无需加密。
主要能力:注册时通过 attributesToEncrypt 指定需加密属性,通过 attributesToIncludeInAAD 指定作为附加认证数据(AAD)的属性;ESO 服务使用 xpack.encryptedSavedObjects.encryptionKey 配置进行加密,开发环境自动配置静态密钥。加密属性默认从标准 Saved Object Client API 响应中剥离,需通过 ESO Client 的 getDecryptedAsInternalUser、createPointInTimeFinderDecryptedAsInternalUser 获取解密值。
使用方式:先在 Core 的 savedObjects.registerType 注册类型,再用 encryptedSavedObjects.registerType 注册,type 必须与 Core 名称完全一致,attributesToEncrypt 不能为空。AAD 属性应选择与加密数据关联且创建后不变的字段,排除可被用户独立修改、可选或计算字段。部分更新必须剥离加密与 AAD 属性,避免对象永久无法解密。加密或 AAD 属性变化时使用 createModelVersion 包裹模型版本,inputType 对应旧注册,outputType 对应新注册。
适用场景与限制:适用于 Kibana 插件开发中的敏感数据存储与迁移。Serverless 下新旧版本可能同时运行,不能将已有填充属性加入 AAD、不能从 AAD 移除属性、不能改变属性的加密状态,部分变更需分两次发布。加密密钥可选,插件必须检查 canEncrypt 并优雅降级或明确报错。解密值不应直接暴露在 HTTP 响应中。具体实现细节以官方开发文档为准。