保护保存的对象

编辑

Kibana 将实体(如仪表板、可视化、警报、操作和高级设置)存储为保存的对象,这些对象保存在专用的内部 Elasticsearch 索引中。如果此类对象包含敏感信息,例如 PagerDuty 集成密钥或警报操作使用的电子邮件服务器凭据,Kibana 会对其进行加密,并确保不会意外泄漏或被篡改。

加密敏感信息意味着,拥有 Kibana 内部索引访问权限的恶意方,如果不知道加密密钥,就无法提取该信息。

示例 kibana.yml

xpack.encryptedSavedObjects:
  encryptionKey: "min-32-byte-long-strong-encryption-key"

如果您未指定加密密钥,Kibana 可能会禁用依赖于加密保存对象的功能。

有关生成加密密钥的帮助,请参阅 kibana-encryption-keys 脚本。

加密密钥轮换

编辑

许多策略和最佳实践规定,应定期轮换加密密钥,以减少使用一个密钥加密的内容量,从而限制密钥泄露时可能造成的潜在损害。Kibana 允许您在需要时轮换加密密钥。

当您更改加密密钥时,请务必保留旧密钥一段时间。虽然 Kibana 仅使用新的加密密钥来加密所有新的和更新的数据,但它仍然可能需要旧密钥来解密使用旧密钥加密的数据。可以有多个仅用于解密的旧密钥。Kibana 不会自动使用新的加密密钥重新加密现有的保存对象。重新加密仅在您更新现有对象或使用 轮换加密密钥 API 时发生。

如果您使用密钥轮换功能,您的 kibana.yml 可能如下所示

xpack.encryptedSavedObjects:
  encryptionKey: "min-32-byte-long-NEW-encryption-key" 
  keyRotation:
    decryptionOnlyKeys: ["min-32-byte-long-OLD#1-encryption-key", "min-32-byte-long-OLD#2-encryption-key"] 

Kibana 将用于加密所有新的或更新的保存对象的加密密钥。这被称为主加密密钥。

如果使用主加密密钥无法解密,Kibana 将尝试使用此列表中的加密密钥来解密现有的保存对象。这些密钥被称为仅解密或辅助加密密钥。

如果连接到同一 Elasticsearch 集群的多个 Kibana 实例使用不同的加密密钥,您也可以利用此功能。在这种情况下,您可能会混合使用使用不同密钥加密的保存对象,并且每个 Kibana 实例只能处理对象的特定子集。要解决此问题,您必须为 xpack.encryptedSavedObjects.encryptionKey 选择单个主加密密钥,将所有其他加密密钥移至 xpack.encryptedSavedObjects.keyRotation.decryptionOnlyKeys,并在所有 Kibana 实例之间同步此配置。

在某个时候,您可能希望完全处置旧的加密密钥。请确保没有 Kibana 使用这些加密密钥加密的保存对象。您可以使用 轮换加密密钥 API 来确定哪些现有保存的对象需要仅解密密钥,并使用主密钥重新加密它们。

Docker 配置

编辑

也可以使用 Docker 环境变量 配置加密密钥。

Docker 环境变量示例

XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY="min-32-byte-long-NEW-encryption-key"
XPACK_ENCRYPTEDSAVEDOBJECTS_KEYROTATION_DECRYPTIONONLYKEYS[0]="min-32-byte-long-OLD#1-encryption-key"
XPACK_ENCRYPTEDSAVEDOBJECTS_KEYROTATION_DECRYPTIONONLYKEYS[1]="min-32-byte-long-OLD#2-encryption-key"