安全性
Elastic Stack Serverless
如果您的集群上启用了安全性,Elasticsearch SQL 会与之集成。在这种情况下,Elasticsearch SQL 同时支持传输层的安全性(通过加密使用者和服务器之间的通信)和身份验证(用于访问层)。
如果使用加密传输,需要在 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 中的身份验证支持有两种类型:
- 用户名/密码
- 通过
user
和password
属性设置这些。 - PKI/X.509
- 使用 X.509 证书对 Elasticsearch SQL 进行身份验证,以连接到 Elasticsearch。为此,需要设置
keystore
,其中包含适当用户(在 Elasticsearch 中配置)的私钥和证书,以及truststore
,其中包含用于对 Elasticsearch 集群中的 SSL/TLS 证书进行签名的 CA 证书。 也就是说,应该设置密钥以对 Elasticsearch SQL 进行身份验证,并验证它是正确的密钥。 为此,应设置ssl.keystore.location
和ssl.truststore.location
属性以指示要使用的keystore
和truststore
。 建议通过密码保护这些,在这种情况下,需要ssl.keystore.pass
和ssl.truststore.pass
属性。
在服务器上,需要向用户添加一些权限,以便他们可以运行 SQL。 要运行 SQL,用户至少需要 read
和 indices: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 查询 test
和 bort
索引。 将以下内容添加到 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"]