Elasticsearch 安全与权限管理 是生产环境的基石。随着数据敏感性提升,必须通过 身份认证、授权、加密 等手段保障集群安全。
本文将为你提供一份 全面、可落地的 Elasticsearch 安全与权限详解,涵盖 X-Pack 安全模块、用户认证、RBAC 权限控制等核心内容。
一、启用 X-Pack 安全模块(免费基础版)
Elasticsearch 从 6.8 / 7.1 开始,X-Pack 安全功能的基础版免费,包含:
- 用户认证(Authentication)
- 角色授权(Authorization)
- TLS 加密(Transport & HTTP)
- 审计日志(Audit Logging)
✅ 启用安全功能
在 elasticsearch.yml 中启用:
xpack.security.enabled: true
⚠️ 首次启用后,系统会自动生成
elastic用户的临时密码,需立即修改。
🔐 重置 elastic 用户密码
bin/elasticsearch-reset-password -u elastic
或通过 API:
POST /_security/user/elastic/_password
{
"password": "NewStrongPass123!"
}
二、配置用户认证(Authentication)
支持多种认证方式,适用于不同企业环境。
1. 内置用户(Native Realm)
默认用户存储在 .security-7 索引中。
创建用户示例:
POST /_security/user/analytics_reader
{
"password": "ReadPass456!",
"roles": [ "kibana_reader", "viewer" ],
"full_name": "Analytics Team Read-Only"
}
适用于小团队或静态用户。
2. LDAP / Active Directory 集成(推荐企业使用)
将 Elasticsearch 与企业 AD/LDAP 集成,实现统一身份管理。
配置示例(elasticsearch.yml):
xpack:
security:
authc:
realms:
ldap:
order: 0
url: "ldap://ad.company.com:389"
bind_dn: "cn=es-bind,ou=service-accounts,dc=company,dc=com"
user_search:
base_dn: "ou=users,dc=company,dc=com"
filter: "(sAMAccountName={username})"
group_search:
base_dn: "ou=groups,dc=company,dc=com"
启用后:
- 用户使用 AD 账号登录 Kibana;
- 无需在 ES 中单独创建用户;
- 支持组映射到角色。
3. SAML / OpenID Connect(单点登录)
适用于与 Okta、Azure AD、Keycloak 等 SSO 系统集成。
配置流程:
- 在 IdP(身份提供者)注册 ES 为 SP(服务提供者);
- 配置
samlrealm; - 映射 IdP 的
groups到 ES 角色。
适用于多租户、SaaS 平台。
三、基于角色的访问控制(RBAC)
Elasticsearch 使用 角色(Role) + 用户(User) 实现细粒度权限控制。
1. 内置角色(推荐组合使用)
| 角色 | 权限 |
|---|---|
superuser | 全部权限(慎用) |
monitor | 只读集群状态 |
viewer | 读取数据、搜索 |
kibana_admin | 管理 Kibana |
ingest_admin | 管理 ingest pipeline |
machine_learning_user | 使用 ML 功能 |
2. 自定义角色(精细控制)
示例:商品搜索专用角色
PUT /_security/role/product_search_role
{
"indices": [
{
"names": [ "products-*" ],
"privileges": [ "read", "view_index_metadata" ],
"field_security": {
"grant": [ "title", "price", "category" ],
"except": [ "cost_price" ] // 敏感字段屏蔽
},
"query": "{\"term\": {\"status\": \"published\"}}" // 查询过滤
}
]
}
✅ 实现 字段级安全(Field-Level Security) 和 文档级安全(DLS)
3. 角色映射(Role Mapping)
将 LDAP/AD 组映射到 ES 角色。
示例:将 AD 组映射为 viewer 角色
PUT /_security/role_mapping/analytics_team
{
"roles": [ "viewer" ],
"rules": {
"field": { "dn": "cn=analytics-team,ou=groups,dc=company,dc=com" }
},
"enabled": true
}
用户属于该 AD 组时,自动获得
viewer权限。
四、API Key 管理(推荐用于应用)
比用户名密码更安全,适合程序调用。
1. 创建 API Key
POST /_security/api_key
{
"name": "app-search-key",
"role_descriptors": {
"search_role": {
"cluster": [],
"indices": [
{
"names": [ "products-*" ],
"privileges": [ "read", "view_index_metadata" ]
}
]
}
}
}
返回:
{
"id": "123abc",
"name": "app-search-key",
"api_key": "xyz789"
}
2. 使用 API Key 调用
GET /products-2024/_search
Authorization: ApiKey MTA0OkRmVDRabWdzV2ZaQzVZSGx3WAP
3. 管理 API Key
- 过期时间(TTL)
- 撤销(Revoke)
- 审计日志
五、TLS 加密(Encryption in Transit)
防止网络窃听,所有节点间和客户端通信应加密。
1. HTTP 层加密(客户端 → ES)
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.key: /path/to/http.key
xpack.security.http.ssl.certificate: /path/to/http.crt
2. Transport 层加密(节点间通信)
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.key: /path/to/transport.key
xpack.security.transport.ssl.certificate: /path/to/transport.crt
xpack.security.transport.ssl.certificate_authorities: [ "/path/to/ca.crt" ]
✅ 使用 CA 签发证书,避免自签名风险。
六、审计日志(Audit Logging)
记录所有安全相关事件,用于合规与故障排查。
启用审计日志
xpack.security.audit.enabled: true
xpack.security.audit.logfile.events.include: [
"access_denied",
"access_granted",
"authentication_failed",
"connection_denied"
]
审计日志示例:
[2024-06-01T10:00:00,123][AUDIT] authentication_failed
origin.type=http, origin.address=203.0.113.45:54321
principal=unknown_user
realm=ldap1
建议将审计日志发送到独立 SIEM 系统(如 Splunk、ELK)。
七、最佳实践 checklist ✅
| 项目 | 建议 |
|---|---|
启用 xpack.security.enabled | ✅ |
| 配置 TLS 加密(HTTP + Transport) | ✅ |
创建最小权限用户,禁用 elastic | ✅ |
| 使用 API Key 替代密码 | ✅ |
| 配置角色实现 DLS/FLS | ✅ |
| 审计日志开启并集中收集 | ✅ |
| 禁用公网访问,使用防火墙 | ✅ |
| 关闭动态脚本或启用沙箱 | ✅ |
| 定期轮换凭证 | ✅ |
八、扩展建议
| 场景 | 建议方案 |
|---|---|
| 云环境(AWS/Aliyun) | 使用 VPC、安全组、IAM 角色 |
| 合规要求(等保、GDPR) | 启用审计、加密、访问控制 |
| 多租户隔离 | 使用 Index Pattern + Role + Space |
| 自动化安全加固 | 使用 Ansible/Terraform 部署安全配置 |
1039

被折叠的 条评论
为什么被折叠?



