1. 首页 > ElasticSearch教程 > 正文

ElasticSearch教程FG029-ElasticSearch安全认证与权限实战

内容简介:本文档风哥主要介绍ElasticSearch安全认证与权限管理的概念、实现方法以及最佳实践,包括启用安全功能、配置认证、配置授权、安全监控与审计等内容。通过学习本文,您将掌握如何构建一个安全的ElasticSearch集群。风哥教程参考ElasticSearch官方文档Security部分。

Part01-基础概念与理论知识

1.1 安全认证概述

安全认证是指保护ElasticSearch集群免受未授权访问的措施。在生产环境中,安全认证是必不可少的,它可以:

  • 防止未授权用户访问集群
  • 保护敏感数据
  • 防止恶意操作
  • 满足合规要求

1.2 安全功能组件

ElasticSearch的安全功能组件包括:

  • 认证(Authentication):验证用户身份
  • 授权(Authorization):控制用户对资源的访问权限
  • 加密(Encryption):保护数据传输和存储
  • 审计(Audit):记录安全相关事件

1.3 权限模型

ElasticSearch的权限模型基于角色(Role)和用户(User):

  • 角色(Role):定义一组权限
  • 用户(User):被分配一个或多个角色
  • 权限(Permission):对特定资源的操作许可
  • 资源(Resource):如索引、集群等

Part02-生产环境规划与建议

2.1 安全架构设计

安全架构设计建议:

  • 网络隔离:将ElasticSearch集群部署在专用网络中
  • 加密传输:启用TLS/SSL加密
  • 认证机制:使用内置认证或集成外部认证系统
  • 授权策略:基于最小权限原则配置授权
  • 审计日志:启用审计日志,记录安全事件

2.2 认证方式选择

认证方式选择建议:

  • 内置用户认证:适用于小型集群
  • LDAP认证:适用于企业内部系统
  • SAML认证:适用于SSO环境
  • PKI认证:适用于需要强认证的环境

2.3 权限规划

权限规划建议:

  • 管理员角色:拥有所有权限
  • 开发人员角色:拥有开发相关权限
  • 只读角色:只能查询数据
  • 监控角色:只能查看监控信息
  • 自定义角色:根据业务需求创建

Part03-生产环境项目实施方案

3.1 启用安全功能

启用安全功能:

# 编辑elasticsearch.yml
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml

# 添加以下配置
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-stack-ca.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-stack-ca.p12

# 生成证书
/es/app/elasticsearch-8.10.0/bin/elasticsearch-certutil cert -out config/certs/elastic-stack-ca.p12 -pass “”

# 重启ElasticSearch
systemctl restart elasticsearch

# 设置内置用户密码
/es/app/elasticsearch-8.10.0/bin/elasticsearch-setup-passwords auto

3.2 配置认证

配置认证:

# 创建用户
curl -X POST “http://192.168.1.10:9200/_security/user/fgedu” -H “Content-Type: application/json” -u elastic:password -d ‘{
“password”: “fgedu123”,
“roles”: [“superuser”]
}’

# 创建自定义角色
curl -X POST “http://192.168.1.10:9200/_security/role/fgedu_role” -H “Content-Type: application/json” -u elastic:password -d ‘{
“cluster”: [“monitor”],
“indices”: [
{
“names”: [“fgedu-*”],
“privileges”: [“read”, “write”, “create_index”]
}
]
}’

# 创建用户并分配角色
curl -X POST “http://192.168.1.10:9200/_security/user/fgedu_user” -H “Content-Type: application/json” -u elastic:password -d ‘{
“password”: “fgedu123”,
“roles”: [“fgedu_role”]
}’

3.3 配置授权

配置授权:

# 查看角色
curl -X GET “http://192.168.1.10:9200/_security/role/fgedu_role” -u elastic:password

# 更新角色
curl -X PUT “http://192.168.1.10:9200/_security/role/fgedu_role” -H “Content-Type: application/json” -u elastic:password -d ‘{
“cluster”: [“monitor”],
“indices”: [
{
“names”: [“fgedu-*”],
“privileges”: [“read”, “write”, “create_index”, “delete_index”]
}
]
}’

# 查看用户
curl -X GET “http://192.168.1.10:9200/_security/user/fgedu_user” -u elastic:password

3.4 安全监控与审计

安全监控与审计:

# 启用审计日志
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml

# 添加以下配置
xpack.security.audit.enabled: true
xpack.security.audit.logfile.events.exclude: [“authentication_success”]

# 重启ElasticSearch
systemctl restart elasticsearch

# 查看审计日志
tail -f /es/app/elasticsearch-8.10.0/logs/fgedu-cluster_audit.log

Part04-生产案例与实战讲解

4.1 启用安全功能实战

启用安全功能:

# 1. 编辑elasticsearch.yml
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml

# 添加以下配置
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-stack-ca.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-stack-ca.p12

# 2. 创建证书目录
mkdir -p /es/app/elasticsearch-8.10.0/config/certs

# 3. 生成证书
/es/app/elasticsearch-8.10.0/bin/elasticsearch-certutil cert -out config/certs/elastic-stack-ca.p12 -pass “”

# 4. 重启ElasticSearch
systemctl restart elasticsearch

# 5. 设置内置用户密码
/es/app/elasticsearch-8.10.0/bin/elasticsearch-setup-passwords auto

执行后输出:

Changed password for user apm_system
PASSWORD apm_system = XXXXXXXXXXXXX

Changed password for user kibana_system
PASSWORD kibana_system = XXXXXXXXXXXXX

Changed password for user kibana
PASSWORD kibana = XXXXXXXXXXXXX

Changed password for user logstash_system
PASSWORD logstash_system = XXXXXXXXXXXXX

Changed password for user beats_system
PASSWORD beats_system = XXXXXXXXXXXXX

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = XXXXXXXXXXXXX

Changed password for user elastic
PASSWORD elastic = XXXXXXXXXXXXX

4.2 用户与角色管理实战

管理用户与角色:

# 1. 创建自定义角色
curl -X POST “http://192.168.1.10:9200/_security/role/fgedu_admin” -H “Content-Type: application/json” -u elastic:password -d ‘{
“cluster”: [“all”],
“indices”: [
{
“names”: [“*”],
“privileges”: [“all”]
}
]
}’

# 2. 创建用户并分配角色
curl -X POST “http://192.168.1.10:9200/_security/user/fgedu_admin” -H “Content-Type: application/json” -u elastic:password -d ‘{
“password”: “fgedu123”,
“roles”: [“fgedu_admin”]
}’

# 3. 创建只读角色
curl -X POST “http://192.168.1.10:9200/_security/role/fgedu_readonly” -H “Content-Type: application/json” -u elastic:password -d ‘{
“cluster”: [“monitor”],
“indices”: [
{
“names”: [“fgedu-*”],
“privileges”: [“read”]
}
]
}’

# 4. 创建只读用户
curl -X POST “http://192.168.1.10:9200/_security/user/fgedu_readonly” -H “Content-Type: application/json” -u elastic:password -d ‘{
“password”: “fgedu123”,
“roles”: [“fgedu_readonly”]
}’

# 5. 查看用户列表
curl -X GET “http://192.168.1.10:9200/_security/user” -u elastic:password

4.3 权限配置实战

配置权限:

# 1. 测试管理员权限
curl -X GET “http://192.168.1.10:9200/_cluster/health” -u fgedu_admin:fgedu123

# 2. 测试只读权限
curl -X GET “http://192.168.1.10:9200/fgedu-products/_search” -u fgedu_readonly:fgedu123

# 3. 测试写入权限(应该失败)
curl -X POST “http://192.168.1.10:9200/fgedu-products/_doc” -H “Content-Type: application/json” -u fgedu_readonly:fgedu123 -d ‘{
“name”: “Test Product”
}’

4.4 安全监控与审计实战

配置安全监控与审计:

# 1. 启用审计日志
vi /es/app/elasticsearch-8.10.0/config/elasticsearch.yml

# 添加以下配置
xpack.security.audit.enabled: true
xpack.security.audit.logfile.events.exclude: [“authentication_success”]

# 2. 重启ElasticSearch
systemctl restart elasticsearch

# 3. 查看审计日志
tail -f /es/app/elasticsearch-8.10.0/logs/fgedu-cluster_audit.log

# 4. 测试认证失败
curl -X GET “http://192.168.1.10:9200/_cluster/health” -u fgedu_admin:wrongpassword

# 5. 查看审计日志中的认证失败记录
grep “authentication_failed” /es/app/elasticsearch-8.10.0/logs/fgedu-cluster_audit.log

Part05-风哥经验总结与分享

5.1 安全认证最佳实践

  • 启用安全功能:在生产环境中必须启用安全功能
  • 使用强密码:为所有用户设置强密码
  • 基于最小权限原则:为用户分配最小必要的权限
  • 定期更新密码:定期更换用户密码
  • 启用审计日志:记录安全相关事件
  • 使用TLS/SSL:加密传输数据
  • 定期备份:备份安全配置和用户数据

5.2 常见问题与解决方案

  • 认证失败:检查用户名和密码是否正确
  • 权限不足:检查用户角色和权限配置
  • SSL证书错误:检查证书配置和有效期
  • 审计日志过大:调整审计日志配置,排除不必要的事件
  • 性能下降:优化安全配置,减少认证开销

5.3 性能优化建议

  • 缓存认证信息:启用认证缓存,减少认证开销
  • 优化SSL配置:使用合适的SSL算法和密钥长度
  • 限制审计日志:只记录必要的安全事件
  • 使用连接池:减少认证次数
  • 定期清理审计日志:防止审计日志过大

更多视频教程www.fgedu.net.cn

学习交流加群风哥微信: itpux-com

学习交流加群风哥QQ113257174

风哥提示:安全认证是ElasticSearch生产环境中的重要组成部分,必须认真配置和管理

更多学习教程公众号风哥教程itpux_com

from ElasticSearch视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息