安全性

edit

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

SSL/TLS 配置

edit

在加密传输的情况下,需要在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

认证

edit

Elasticsearch SQL 中的身份验证支持分为两种类型:

Username/Password
通过userpassword属性设置这些。
PKI/X.509
使用X.509证书来验证Elasticsearch SQL到Elasticsearch的身份。为此,需要设置包含私钥和证书的keystore到适当的用户(在Elasticsearch中配置),以及包含用于签署Elasticsearch集群中SSL/TLS证书的CA证书的truststore。也就是说,应该设置密钥来验证Elasticsearch SQL,并验证它是正确的。为此,应该将ssl.keystore.locationssl.truststore.location属性设置为指示要使用的keystoretruststore。建议通过密码来保护这些,在这种情况下,需要ssl.keystore.passssl.truststore.pass属性。

权限(服务器端)

edit

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

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

使用角色管理API添加权限
edit

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

POST /_security/role/cli_or_drivers_minimal
{
  "cluster": ["cluster:monitor/main"],
  "indices": [
    {
      "names": ["test"],
      "privileges": ["read", "indices:admin/get"]
    }
  ]
}
roles.yml 添加权限
edit

此示例配置了一个角色,该角色可以在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"]