集群身份认证与用户鉴权
数据安全性的级别需求
- 身份认证:鉴定用户是否合法
- 用户鉴权:指定用户可以访问哪个索引
- 传输加密
-
免费的方案
设置 Nginx 反向代理
- 安装免费的 Security 插件
认证体系的几种类型
- 提供用户名和密码
- 提供密钥或 Kerberos 票据
Realms:X-Pack 中的认证服务
- 内置 Realms(免费):File / Native (用户名密码保存在 Elasticsearch)
- 外部 Realms(收费):LDAP / Active Directory / PKI / SAML / Kerberos
使用 Security API 创建用户
POST /_security/user/jacknich
{
"pasword": "&#duzy3ut",
"roles": ["admin", "other_role1"],
"full_name": "Jack Nicholson",
"email": "jacknich@example.com",
"metadata": {
"intelligence": 7
}
}
开启并配置 X-Pack 的认证与鉴权
修改配置文件,打开认证与授权
- 创建默认的用户和分组
当集群开启身份验证后,配置 Kibana
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
/bin/elasticsearch-setup-passwords interactive
elastic
- apm_system
- kibana
- logstash_system
- beats_system
remote_monitoring_user
elasticsearch.username: "kibana"
elasticsearch.password: "123456"
集群内部安全通信
加密数据可以避免数据抓包而导致敏感信息泄露,Elastcsearch 通过身份验证,避免 Impostor Node(冒名顶替者节点)。
X-Pack中通过为节点创建证书保证集群内部安全:TLS协议要求 Trusted Certificate Authority(CA)签发的 X.509 的证书。证书认证的不同级别:Certificate:节点加入需要使用相同的 CA 签发的证书。
- Full Verification:节点加入集群需要相同 CA 签发的证书,还需要验证 Host name 或 IP 地址。
- No Verification:任何节点都可以加入,开发环境中用于诊断目的。
创建CA证书
创建的证书会持久化保存在 elasticsearch 目录下。/elasticsearch/bin/elasticsearch-certutil ca
elastic-stack-ca.p12
/elasticsearch/bin/elasticsearch-certutil cert --ca /elasticsearch/elastic-stack-ca.p12
证书签发后会在 elasticsearch 目录下再生成文件 elastic-certificates.p12
mkdir /elasticsearch/config/certs
chown -R es /elasticsearch/config/certs
chgrp -R es /elasticsearch/config/certs
cp /elasticsearch/elastic-certificates.p12 /elasticsearch/config/certs/
设置集群内部安全通信
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
集群外部安全通信
配置 Elasticsearch HTTPS
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.verification_mode: certificate
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12
配置 Kibana 连接 ES HTTPS
mkdir /kibana/config/certs
chown -R es /elasticsearch/config/certs
chgrp -R es /elasticsearch/config/certs
openssl pkcs12 -in /elasticsearch/elastic-stack-ca.p12 -cacerts -nokeys -out /kibana/config/certs/elastic-ca.pem
elasticsearch.hosts: ["https://<your_es_host>:9200"]
elasticsearch.ssl.certificateAuthorities: [ "/kibana/config/certs/elastic-ca.pem" ]
elasticsearch.ssl.verificationMode: certificate
配置 Kibana HTTPS
/elasticsearch/bin/elasticsearch-certutil ca --pem
unzip /elasticsearch/elastic-stack-ca.zip -d /kibana/config/certs/
mv /kibana/config/certs/ca/* /kibana/config/certs/
rm -rf /kibana/config/certs/ca
server.ssl.enabled: true
server.ssl.certificate: /kibana/config/certs/ca.crt
server.ssl.key: /kibana/config/certs/ca.key