9. Elasticsearch 安全


文档摘要

Elasticsearch 安全 Elasticsearch 安全 9.1 身份验证和授权 身份验证和授权是安全的基础。Elasticsearch 提供了多种身份验证机制,并使用基于角色的访问控制 (RBAC) 进行授权。 9.1.1 用户管理 Elasticsearch 允许您创建和管理用户。您可以使用 工具或 API 来执行此操作。 使用 工具: 使用 API: 9.1.2 角色管理 角色定义了用户可以执行的操作。您可以创建自定义角色,并将其分配给用户。 创建角色: 这个角色允许用户读取和写入以 "myindex" 开头的索引,并监控集群。 分配角色给用户: 在创建或更新用户时,指定 字段: 9.1.

9. Elasticsearch 安全

9. Elasticsearch 安全

9.1 身份验证和授权

身份验证和授权是安全的基础。Elasticsearch 提供了多种身份验证机制,并使用基于角色的访问控制 (RBAC) 进行授权。

9.1.1 用户管理

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 }

9.1.2 角色管理

角色定义了用户可以执行的操作。您可以创建自定义角色,并将其分配给用户。

创建角色:

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" ] }

9.1.3 身份验证机制

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"

9.1.4 图示

9.2 传输层加密 (TLS)

TLS 加密 Elasticsearch 节点之间的通信,防止数据在传输过程中被窃听。

配置 TLS:

  1. 生成证书: 可以使用 elasticsearch-certutil 工具生成证书。

    ./bin/elasticsearch-certutil cert --name my-node --dns my-node.example.com,localhost --ip 127.0.0.1
  2. 配置 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

9.3 HTTP 层加密 (TLS)

TLS 加密客户端和 Elasticsearch 之间的 HTTP 通信。

配置 HTTP TLS:

  1. 生成证书: 可以使用 elasticsearch-certutil 工具生成证书。

  2. 配置 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 强制客户端提供证书进行身份验证。

9.4 审计日志

审计日志记录 Elasticsearch 中的安全相关事件,例如身份验证尝试、授权决策和索引修改。

启用审计日志:

elasticsearch.yml 中配置审计日志:

xpack.security.audit.enabled: true xpack.security.audit.outputs: [ file ] xpack.security.audit.logfile.path: /path/to/audit.log

审计日志可以帮助您检测和调查安全事件。

9.5 字段和文档级别安全性

Elasticsearch 允许您控制用户对特定字段或文档的访问权限。

9.5.1 字段级别安全性

使用字段级别安全性,您可以限制用户访问索引中的某些字段。

创建包含字段安全性的角色:

PUT /_security/role/my_field_role { "indices" : [ { "names" : [ "my_index" ], "privileges" : [ "read" ], "field_security" : { "grant" : [ "field1", "field2" ] } } ] }

这个角色允许用户读取 my_index 索引,但只能访问 field1field2 字段。

9.5.2 文档级别安全性

使用文档级别安全性,您可以根据文档的内容限制用户访问文档。

创建包含文档安全性的角色:

使用查询定义允许访问的文档:

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} 是一个特殊的变量,它会被替换为当前用户的用户名。

9.6 IP 过滤

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.1010.0.0.0/16 网络的连接。

9.7 其他安全建议

  • 保持 Elasticsearch 更新: 定期更新 Elasticsearch 以修复安全漏洞。

  • 使用强密码: 为所有用户使用强密码。

  • 限制对 Elasticsearch 节点的物理访问: 防止未经授权的物理访问。

  • 监控 Elasticsearch 日志: 定期监控 Elasticsearch 日志以检测安全事件。

  • 禁用不需要的功能: 禁用不需要的插件和功能以减少攻击面。

  • 配置防火墙: 使用防火墙限制对 Elasticsearch 端口的访问。

9.8 总结

Elasticsearch 提供了多种安全特性,可以帮助您保护您的数据。通过配置身份验证、授权、TLS 加密、审计日志、字段和文档级别安全性以及 IP 过滤,您可以显著提高 Elasticsearch 集群的安全性。 定期审查您的安全配置,并根据需要进行调整,以确保您的数据始终受到保护。


发布者: 作者: 转发
评论区 (0)
U