Elasticsearch 安全与权限管理 详解

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 系统集成。

配置流程:
  1. 在 IdP(身份提供者)注册 ES 为 SP(服务提供者);
  2. 配置 saml realm;
  3. 映射 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 部署安全配置
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值