加载中

保护您的设置安全

某些设置属于敏感信息,仅依赖文件系统权限来保护其值是不够的。针对此用例,Elasticsearch 和 Kibana 提供了安全密钥库(secure keystores),用于存储密码、API 密钥和令牌等敏感配置值。

安全设置通常被称为密钥库设置(keystore settings),因为它们必须添加至特定产品的密钥库中,而不是标准的 elasticsearch.ymlkibana.yml 文件中。与常规设置不同,它们在静态时(at rest)会受到加密保护,并且无法通过常规的配置文件或环境变量进行读取或修改。

必须根据部署类型使用特定的工具或方法来处理密钥库设置。下表总结了在不同部署模型中如何支持和管理 Elasticsearch 和 Kibana 密钥库

部署类型 Elasticsearch 密钥库配置 Kibana 密钥库配置
Elastic Cloud Serverless 不可用 不可用
Elastic Cloud Hosted Cloud UI 不可用
Elastic Cloud Enterprise Cloud UI 或 API 不可用
Kubernetes 上的 Elastic Cloud (ECK) Kubernetes 密钥(secrets) Kubernetes 密钥(secrets)
自管理 使用 elasticsearch-keystore 进行手动配置 使用 kibana-keystore 进行手动配置

本节介绍如何根据部署模型在各个密钥库中配置和管理安全设置

提示

Elasticsearch 密钥库具有一些需要注意的重要特征和限制

  • 仅允许特定设置:密钥库仅接受在 Elasticsearch 配置参考中标记为 secure(安全)的设置。将不受支持的设置添加至密钥库会导致 reload_secure_settings API 中的验证失败,并可能阻止 Elasticsearch 启动。
  • 安全设置是强制性的:标记为安全的设置必须添加至密钥库中。它们不能放在 elasticsearch.yml 中,也不能通过环境变量进行设置。这与支持所有设置的 Kibana 密钥库不同。
  • 更改需要重启:大多数安全设置仅在重启节点后才会生效。不过,有些设置被标记为 reloadable(可重新加载),并且可以使用 reload_secure_settings API 在无需重启的情况下进行更新。有关更多信息,请参阅 可重新加载的设置
  • 密钥库是按节点划分的:集群中的每个节点都有自己的密钥库文件。安全设置必须在每个节点上单独指定,且在整个集群中必须具有相同的值。诸如 ECH、ECE 和 ECK 等编排部署在配置安全设置时会自动处理这一点。
提示

要检查某个设置是否可以添加至密钥库并支持在无需重启的情况下重新加载,请在 Elasticsearch 配置参考中查找 SecureReloadable 限定符。

例如,您可以在 安全设置文档中搜索 secure_bind_password,以查看这些限定符在上下文中的显示方式。

以下说明涵盖了如何为每种部署类型管理 Elasticsearch 密钥库设置。

您可以在 Elastic Cloud 控制台或 ECE Cloud UI 中部署页面的 Security > Elasticsearch keystore 部分管理 Elasticsearch 安全设置。

如果某项功能既需要标准的 elasticsearch.yml 设置,又需要安全设置,请先配置安全设置。更新标准设置可能会触发集群滚动重启,如果所需的安全设置尚未就绪,节点可能会启动失败。相比之下,添加安全设置不会触发重启。

注意

Elastic Cloud Enterprise 还支持通过其 RESTful API 管理部署的 Elasticsearch 密钥库。有关示例,请参阅 通过 ECE API 配置 Elasticsearch 密钥库

您可以将以下三种输入格式用于安全设置的值

  • 单个字符串:将机密值关联到设置。
  • 多个字符串:一组键值对,每个键值对作为设置值的一部分存储。
  • JSON 块/文件:包含多个键值对的结构化 JSON 对象,通常用于更复杂的机密(如服务账号凭据)。

将设置和机密值添加至密钥库。

  1. 登录 Elastic Cloud 控制台ECE Cloud UI

  2. 找到您的部署并选择 Manage(管理)。

    Deployments(部署)页面上,您可以通过名称、ID 缩小部署范围,或者从其他几个筛选器中进行选择。若要自定义视图,请结合使用筛选器,或者将格式从网格更改为列表。

  3. 从部署菜单中,选择 Security(安全)。

  4. 找到 Elasticsearch keystore 并选择 Add settings(添加设置)。

  5. Create setting(创建设置)窗口中,选择机密 Type(类型)。

  6. 配置设置,然后选择 Save(保存)。

    重要提示

    对不可重新加载设置的所有修改仅在重启 Elasticsearch 后生效。可重新加载的密钥库更改在发出 reload_secure_settings API 请求后生效。将不受支持的设置添加至密钥库会导致 Elasticsearch 启动失败。

当您的安全设置不再需要时,请从密钥库中将其删除。

  1. 登录 Elastic Cloud 控制台ECE Cloud UI

  2. 找到您的部署并选择 Manage(管理)。

    Deployments(部署)页面上,您可以通过名称、ID 缩小部署范围,或者从其他几个筛选器中进行选择。若要自定义视图,请结合使用筛选器,或者将格式从网格更改为列表。

  3. 从部署菜单中,选择 Security(安全)。

  4. Existing keystores(现有密钥库)列表中,使用要删除的设置旁边的删除图标。

  5. Confirm to delete(确认删除)窗口中,选择 Confirm(确认)。

在 ECK 中,operator 通过依赖 Kubernetes 密钥简化了安全设置的配置。

有关详细信息和示例,请参阅 在 ECK 上配置安全设置

在自托管部署中,您需要负责在每个节点上单独配置和维护 Elasticsearch 密钥库。

Elasticsearch 提供了 elasticsearch-keystore 命令行工具来协助完成此任务。它允许您列出、添加、删除和更新安全设置,如果需要,还可以使用密码保护密钥库。

有关 docker 示例,请参阅 使用 Docker 配置 Elasticsearch > 创建加密的 Elasticsearch 密钥库

重要提示

必须在每个节点上指定安全设置,并且在整个集群中必须具有相同的值,以确保行为一致。

对密钥库的更改仅在重启 Elasticsearch 后生效,但可以使用 API 刷新的 可重新加载的设置除外。

若要创建 Elasticsearch 密钥库,请使用 create 命令

bin/elasticsearch-keystore create -p
		

系统会提示您输入密钥库密码,但设置密码是可选的。如果直接按回车键而不输入密码,创建的密钥库文件将不包含密码保护。

该命令会在 elasticsearch.yml 文件旁边创建一个名为 elasticsearch.keystore 的文件。

若要列出密钥库中的设置,请使用 list 命令。

bin/elasticsearch-keystore list
		

如果 Elasticsearch 密钥库受到密码保护,系统会提示您输入密码。

可以使用 add 命令添加敏感字符串设置(例如 Cloud 插件的身份验证凭据)

bin/elasticsearch-keystore add the.setting.name.to.set
		

系统会提示您输入设置的值。如果 Elasticsearch 密钥库受到密码保护,系统还会提示您输入密码。

要从密钥库中删除设置,请使用 remove 命令

bin/elasticsearch-keystore remove the.setting.name.to.remove
		

如果 Elasticsearch 密钥库受到密码保护,系统会提示您输入密码。

有关完整的命令参考以及其他示例(例如显示存储的值或将整个文件添加为设置值),请参阅 elasticsearch-keystore 工具文档

就像 elasticsearch.yml 中的设置值一样,对密钥库内容的更改不会自动应用到正在运行的 Elasticsearch 节点。重新读取设置需要重启节点。

不过,某些安全设置在 Elasticsearch 参考文档中被标记为 Reloadable(可重新加载)。此类设置可以通过使用 reload secure settings API 在正在运行的节点上重新读取并应用。

所有安全设置的值(无论是否可重新加载)在所有节点上必须完全相同。完成所需的更改后,调用以下端点。如果您的密钥库受到密码保护,请包含 secure_settings_password 参数

				POST _nodes/reload_secure_settings
					{
  "secure_settings_password": "keystore-password"
}
		
  1. 仅当 Elasticsearch 密钥库受密码保护时才是必需的。

此 API 会在每个集群节点上解密、重新读取整个密钥库并验证所有设置,但只会应用可重新加载的安全设置。对其他设置的更改在下一次重启之前不会生效。调用返回后,重新加载即告完成,这意味着依赖于这些设置的所有内部数据结构都已更改。一切看起来就像这些设置从一开始就具有新值一样。

提示

当更改多个可重新加载的安全设置时,请在每个集群节点上修改所有这些设置,然后发出一个 reload_secure_settings 调用,而不是在每次修改后都进行重新加载。

快照仓库插件、watcher、监控以及某些身份验证域支持可重新加载的安全设置。请参考各功能的相关文档,以了解是否可以重新加载安全设置。

Kibana 通过其自己的密钥库支持安全设置,类似于 Elasticsearch 密钥库。它通过将身份验证凭据或加密密钥等敏感配置值安全地存储在 kibana.yml 之外,提供了一种保护这些值的方法。

注意

与 Elasticsearch 密钥库不同,任何有效的 Kibana 设置都可以安全地存储在密钥库中。但是,与 Elasticsearch 一样,添加无效的、不受支持的或无关的设置会导致 Kibana 启动失败。在将设置添加至密钥库之前,请务必确保该设置存在且在配置参考中格式正确。

本节提供了针对自托管部署使用 kibana-keystore 命令行工具处理 Kibana 安全设置的示例。

对于 ECK 部署,配置过程与 Elasticsearch 类似,记录在 ECK 的 Kibana 安全设置部分中。

重要提示

在以下示例中,请以运行 Kibana 的用户身份运行所有命令。

若要创建 kibana.keystore,请使用 create 命令

bin/kibana-keystore create
		

kibana.keystore 文件将创建在由环境变量 KBN_PATH_CONF 定义的 config 目录中。

若要创建受密码保护的密钥库,请使用 --password 标志。设置密码是可选的。

使用 list 命令可以获取密钥库中的设置列表

bin/kibana-keystore list
		
注意

您的输入将经过 JSON 解析,以允许对象/数组输入配置。若要强制使用字符串值,请在输入周围使用“双引号”。

可以使用 add 命令添加敏感字符串设置(例如 Elasticsearch 的身份验证凭据)

bin/kibana-keystore add the.setting.name.to.set
		

添加至密钥库后,启动此实例的 Kibana 时将自动应用这些设置。例如,如果您执行

bin/kibana-keystore add elasticsearch.username
		

系统将提示您提供 elasticsearch.username 的值。(您的输入将显示为星号。)

该工具将提示输入设置的值。若要通过标准输入(stdin)传递值,请使用 --stdin 标志

cat /file/containing/setting/value | bin/kibana-keystore add the.setting.name.to.set --stdin
		

要从密钥库中删除设置,请使用 remove 命令

bin/kibana-keystore remove the.setting.name.to.remove
		

若要显示配置的设置值,请使用 show 命令

bin/kibana-keystore show setting.key
		

若要更改密钥库的密码,请使用 passwd 命令

bin/kibana-keystore passwd
		

若要检查密钥库是否受到密码保护,请使用 has-passwd 命令。如果密钥库受到密码保护,将返回退出码 0,否则命令将失败。

bin/kibana-keystore has-passwd
		
© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.