集群身份认证与用户鉴权

数据安全性的级别需求

  • 身份认证:鉴定用户是否合法
  • 用户鉴权:指定用户可以访问哪个索引
  • 传输加密
  • 日志审计

    免费的方案

  • 设置 Nginx 反向代理

  • 安装免费的 Security 插件
  • X-Pack 的 Basic 版

    • 从 Elasticsearch 6.8 和 7.0 开始,Security 纳入 x-pack 的 Basic 版本中,免费使用一些基本功能。

      Authentication 身份认证

  • 认证体系的几种类型

    • 提供用户名和密码
    • 提供密钥或 Kerberos 票据
  • Realms:X-Pack 中的认证服务

    • 内置 Realms(免费):File / Native (用户名密码保存在 Elasticsearch)
    • 外部 Realms(收费):LDAP / Active Directory / PKI / SAML / Kerberos

      使用 Security API 创建用户

      1. POST /_security/user/jacknich
      2. {
      3. "pasword": "&#duzy3ut",
      4. "roles": ["admin", "other_role1"],
      5. "full_name": "Jack Nicholson",
      6. "email": "jacknich@example.com",
      7. "metadata": {
      8. "intelligence": 7
      9. }
      10. }

      开启并配置 X-Pack 的认证与鉴权

  • 修改配置文件,打开认证与授权

  • 创建默认的用户和分组
  • 当集群开启身份验证后,配置 Kibana

    1. xpack.security.enabled: true
    2. xpack.security.transport.ssl.enabled: true
    1. /bin/elasticsearch-setup-passwords interactive
  • elastic

  • apm_system
  • kibana
  • logstash_system
  • beats_system
  • remote_monitoring_user

    1. elasticsearch.username: "kibana"
    2. elasticsearch.password: "123456"

    使用 elastic 登陆 kibana
    image.png
    创建角色
    image.png
    image.png
    image.png
    创建用户
    image.png

    集群内部安全通信

    加密数据可以避免数据抓包而导致敏感信息泄露,Elastcsearch 通过身份验证,避免 Impostor Node(冒名顶替者节点)。
    X-Pack中通过为节点创建证书保证集群内部安全:TLS协议要求 Trusted Certificate Authority(CA)签发的 X.509 的证书。证书认证的不同级别:

  • Certificate:节点加入需要使用相同的 CA 签发的证书。

  • Full Verification:节点加入集群需要相同 CA 签发的证书,还需要验证 Host name 或 IP 地址。
  • No Verification:任何节点都可以加入,开发环境中用于诊断目的。

    创建CA证书

    1. /elasticsearch/bin/elasticsearch-certutil ca
    创建的证书会持久化保存在 elasticsearch 目录下。elastic-stack-ca.p12
    image.png
  1. /elasticsearch/bin/elasticsearch-certutil cert --ca /elasticsearch/elastic-stack-ca.p12

证书签发后会在 elasticsearch 目录下再生成文件 elastic-certificates.p12
image.png

  1. mkdir /elasticsearch/config/certs
  2. chown -R es /elasticsearch/config/certs
  3. chgrp -R es /elasticsearch/config/certs
  1. cp /elasticsearch/elastic-certificates.p12 /elasticsearch/config/certs/

设置集群内部安全通信

  1. xpack.security.transport.ssl.enabled: true
  2. xpack.security.transport.ssl.verification_mode: certificate
  3. xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
  4. xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12

集群外部安全通信

配置 Elasticsearch HTTPS

  1. xpack.security.http.ssl.enabled: true
  2. xpack.security.http.ssl.verification_mode: certificate
  3. xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12

配置 Kibana 连接 ES HTTPS

  1. mkdir /kibana/config/certs
  2. chown -R es /elasticsearch/config/certs
  3. chgrp -R es /elasticsearch/config/certs
  1. openssl pkcs12 -in /elasticsearch/elastic-stack-ca.p12 -cacerts -nokeys -out /kibana/config/certs/elastic-ca.pem
  1. elasticsearch.hosts: ["https://<your_es_host>:9200"]
  2. elasticsearch.ssl.certificateAuthorities: [ "/kibana/config/certs/elastic-ca.pem" ]
  3. elasticsearch.ssl.verificationMode: certificate

配置 Kibana HTTPS

  1. /elasticsearch/bin/elasticsearch-certutil ca --pem
  2. unzip /elasticsearch/elastic-stack-ca.zip -d /kibana/config/certs/
  3. mv /kibana/config/certs/ca/* /kibana/config/certs/
  4. rm -rf /kibana/config/certs/ca
  1. server.ssl.enabled: true
  2. server.ssl.certificate: /kibana/config/certs/ca.crt
  3. server.ssl.key: /kibana/config/certs/ca.key