安全

编辑

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

SSL/TLS 配置

编辑

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

身份验证

编辑

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

用户名/密码
通过 userpassword 属性设置。
PKI/X.509
使用 X.509 证书对 Elasticsearch SQL 进行身份验证以访问 Elasticsearch。为此,需要将包含私钥和证书的 keystore 设置到相应的用户(在 Elasticsearch 中配置),并将 truststore 设置为用于签名 Elasticsearch 集群中 SSL/TLS 证书的 CA 证书。也就是说,需要设置密钥来对 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 中定义的角色。

使用角色管理 API 添加权限
编辑

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

resp = client.security.put_role(
    name="cli_or_drivers_minimal",
    cluster=[
        "cluster:monitor/main"
    ],
    indices=[
        {
            "names": [
                "test"
            ],
            "privileges": [
                "read",
                "indices:admin/get"
            ]
        }
    ],
)
print(resp)
const response = await client.security.putRole({
  name: "cli_or_drivers_minimal",
  cluster: ["cluster:monitor/main"],
  indices: [
    {
      names: ["test"],
      privileges: ["read", "indices:admin/get"],
    },
  ],
});
console.log(response);
POST /_security/role/cli_or_drivers_minimal
{
  "cluster": ["cluster:monitor/main"],
  "indices": [
    {
      "names": ["test"],
      "privileges": ["read", "indices:admin/get"]
    }
  ]
}
roles.yml 添加权限
编辑

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