Elasticsearch 安全 Elasticsearch 安全 9.1 身份验证和授权 身份验证和授权是安全的基础。Elasticsearch 提供了多种身份验证机制,并使用基于角色的访问控制 (RBAC) 进行授权。 9.1.1 用户管理 Elasticsearch 允许您创建和管理用户。您可以使用 工具或 API 来执行此操作。 使用 工具: 使用 API: 9.1.2 角色管理 角色定义了用户可以执行的操作。您可以创建自定义角色,并将其分配给用户。 创建角色: 这个角色允许用户读取和写入以 "myindex" 开头的索引,并监控集群。 分配角色给用户: 在创建或更新用户时,指定 字段: 9.1.
身份验证和授权是安全的基础。Elasticsearch 提供了多种身份验证机制,并使用基于角色的访问控制 (RBAC) 进行授权。
Elasticsearch 允许您创建和管理用户。您可以使用 elasticsearch-users 工具或 API 来执行此操作。
使用 elasticsearch-users 工具:
# 创建用户 ./bin/elasticsearch-users useradd my_user -p my_password -r superuser # 修改用户密码 ./bin/elasticsearch-users passwd my_user
使用 API:
PUT /_security/user/my_user { "password" : "my_password", "roles" : [ "superuser" ], "full_name" : "My User", "email" : "my_user@example.com", "enabled" : true }
角色定义了用户可以执行的操作。您可以创建自定义角色,并将其分配给用户。
创建角色:
PUT /_security/role/my_role { "indices" : [ { "names" : [ "my_index*" ], "privileges" : [ "read", "write" ] } ], "cluster" : [ "monitor" ] }
这个角色允许用户读取和写入以 "my_index" 开头的索引,并监控集群。
分配角色给用户:
在创建或更新用户时,指定 roles 字段:
PUT /_security/user/my_user { "password" : "my_password", "roles" : [ "my_role" ] }
Elasticsearch 支持多种身份验证机制,包括:
内置身份验证: 使用用户名和密码。
LDAP/Active Directory: 与现有的目录服务集成。
Kerberos: 使用 Kerberos 票证进行身份验证。
SAML: 使用 SAML 断言进行身份验证。
PKI: 使用客户端证书进行身份验证。
配置内置身份验证:
这是默认配置,您只需要创建用户并分配角色即可。
配置 LDAP 身份验证:
需要在 elasticsearch.yml 中配置 LDAP 设置:
xpack.security.authc.realms.ldap.ldap1: order: 1 url: "ldap://my_ldap_server:389" user_dn: "ou=users,dc=example,dc=com" group_search.base_dn: "ou=groups,dc=example,dc=com" user_search.base_dn: "ou=users,dc=example,dc=com"
TLS 加密 Elasticsearch 节点之间的通信,防止数据在传输过程中被窃听。
配置 TLS:
生成证书: 可以使用 elasticsearch-certutil 工具生成证书。
./bin/elasticsearch-certutil cert --name my-node --dns my-node.example.com,localhost --ip 127.0.0.1
配置 elasticsearch.yml:
xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: /path/to/my-node.p12 xpack.security.transport.ssl.truststore.path: /path/to/my-node.p12 xpack.security.transport.ssl.keystore.password: your_keystore_password xpack.security.transport.ssl.truststore.password: your_truststore_password
TLS 加密客户端和 Elasticsearch 之间的 HTTP 通信。
配置 HTTP TLS:
生成证书: 可以使用 elasticsearch-certutil 工具生成证书。
配置 elasticsearch.yml:
xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: /path/to/my-node.p12 xpack.security.http.ssl.truststore.path: /path/to/my-node.p12 xpack.security.http.ssl.keystore.password: your_keystore_password xpack.security.http.ssl.truststore.password: your_truststore_password xpack.security.http.ssl.client_authentication: required
client_authentication: required 强制客户端提供证书进行身份验证。
审计日志记录 Elasticsearch 中的安全相关事件,例如身份验证尝试、授权决策和索引修改。
启用审计日志:
在 elasticsearch.yml 中配置审计日志:
xpack.security.audit.enabled: true xpack.security.audit.outputs: [ file ] xpack.security.audit.logfile.path: /path/to/audit.log
审计日志可以帮助您检测和调查安全事件。
Elasticsearch 允许您控制用户对特定字段或文档的访问权限。
使用字段级别安全性,您可以限制用户访问索引中的某些字段。
创建包含字段安全性的角色:
PUT /_security/role/my_field_role { "indices" : [ { "names" : [ "my_index" ], "privileges" : [ "read" ], "field_security" : { "grant" : [ "field1", "field2" ] } } ] }
这个角色允许用户读取 my_index 索引,但只能访问 field1 和 field2 字段。
使用文档级别安全性,您可以根据文档的内容限制用户访问文档。
创建包含文档安全性的角色:
使用查询定义允许访问的文档:
PUT /_security/role/my_document_role { "indices" : [ { "names" : [ "my_index" ], "privileges" : [ "read" ], "query" : "{ \"term\": { \"user_id\": \"${es.user.username}\" }}" } ] }
这个角色允许用户读取 my_index 索引,但只能访问 user_id 字段等于当前用户名的文档。
${es.user.username} 是一个特殊的变量,它会被替换为当前用户的用户名。
IP 过滤允许您限制对 Elasticsearch 集群的访问,只允许来自特定 IP 地址或 IP 地址范围的连接。
配置 IP 过滤:
在 elasticsearch.yml 中配置 IP 过滤:
network.host: 0.0.0.0 network.bind_host: ["192.168.1.10", "10.0.0.0/16"] network.publish_host: 192.168.1.10
这将允许来自 192.168.1.10 和 10.0.0.0/16 网络的连接。
保持 Elasticsearch 更新: 定期更新 Elasticsearch 以修复安全漏洞。
使用强密码: 为所有用户使用强密码。
限制对 Elasticsearch 节点的物理访问: 防止未经授权的物理访问。
监控 Elasticsearch 日志: 定期监控 Elasticsearch 日志以检测安全事件。
禁用不需要的功能: 禁用不需要的插件和功能以减少攻击面。
配置防火墙: 使用防火墙限制对 Elasticsearch 端口的访问。
Elasticsearch 提供了多种安全特性,可以帮助您保护您的数据。通过配置身份验证、授权、TLS 加密、审计日志、字段和文档级别安全性以及 IP 过滤,您可以显著提高 Elasticsearch 集群的安全性。 定期审查您的安全配置,并根据需要进行调整,以确保您的数据始终受到保护。