加载中

安全

如果集群中启用了安全性,Elasticsearch SQL 可以与安全性集成。在这种情况下,Elasticsearch SQL 既支持传输层的安全性(通过加密消费者与服务器之间的通信),又支持身份验证(用于访问层)。

对于加密传输,需要在 Elasticsearch SQL 中启用 SSL/TLS 支持,以便与 Elasticsearch 正常建立通信。这可以通过将 ssl 属性设置为 true 或在 URL 中使用 https 前缀来实现。
根据您的 SSL 配置(证书是否由 CA 签名、它们是 JVM 级别的全局配置还是仅针对某个应用程序的本地配置),可能需要设置 keystore 和/或 truststore,也就是存储凭据keystore——通常存储私钥和证书)以及如何验证它们(truststore——通常存储来自第三方(也称为 CA——证书颁发机构)的证书)的地方。
通常情况下(再次注意,您的环境可能会有很大差异),如果 Elasticsearch SQL 的 SSL 设置尚未在 JVM 级别完成,那么如果 Elasticsearch SQL 安全性需要客户端身份验证(PKI - 公钥基础设施),就需要设置 keystore;如果启用了 SSL,则需要设置 truststore

Elasticsearch SQL 中的身份验证支持分为以下三种类型

用户名/密码
通过 userpassword 属性进行设置。
API 密钥
通过设置 apiKey 属性使用 API 密钥进行身份验证。可以使用 Create API key API 创建 API 密钥。应以编码形式提供 API 密钥(Create API key API 返回的 encoded 值)。这是用户名/密码身份验证的替代方案,不能与用户名/密码身份验证同时使用。对于 CLI,请使用 --apikey 命令行选项。
PKI/X.509
使用 X.509 证书向 Elasticsearch 进行 Elasticsearch SQL 的身份验证。为此,需要设置包含私钥和证书的 keystore 以对应适当的用户(在 Elasticsearch 中配置),并使用包含用于签署 Elasticsearch 集群中 SSL/TLS 证书的 CA 证书的 truststore。也就是说,应该设置密钥来验证 Elasticsearch SQL,并验证其是否正确。为此,应当设置 ssl.keystore.locationssl.truststore.location 属性以指定要使用的 keystoretruststore。建议使用密码保护这些内容,在这种情况下,需要提供 ssl.keystore.passssl.truststore.pass 属性。

在服务器上,需要向用户添加一些权限,以便他们能够运行 SQL。要运行 SQL,用户至少需要 readindices:admin/get 权限,而 API 的某些部分则需要 cluster:monitor/main

您可以通过创建角色并将该角色分配给用户来添加权限。可以使用 Kibana、API 调用roles.yml 配置文件来创建角色。使用 Kibana 或角色管理 API 是定义角色的首选方法。如果要定义无需更改的角色,基于文件的角色管理非常有用。您不能使用角色管理 API 来查看或编辑在 roles.yml 中定义的角色。

此示例配置了一个角色,该角色可以在 JDBC 中运行 SQL 查询 test 索引

				POST /_security/role/cli_or_drivers_minimal
					{
  "cluster": ["cluster:monitor/main"],
  "indices": [
    {
      "names": ["test"],
      "privileges": ["read", "indices:admin/get"]
    }
  ]
}
		

此示例配置了一个角色,该角色可以在 JDBC 中运行 SQL 查询 testbort 索引。将以下内容添加到 roles.yml

cli_or_drivers_minimal:
  cluster:
    - "cluster:monitor/main"
  indices:
    - names: test
      privileges: [read, "indices:admin/get"]
    - names: bort
      privileges: [read, "indices:admin/get"]
		
© . 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.