安全保存对象编辑

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 实例之间同步此配置。

在某些时候,您可能希望完全处置旧的加密密钥。确保没有使用这些加密密钥加密的保存对象。您可以使用 轮换加密密钥 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"