ES安全认证

最早我们在用ES5.X版本的时候,XPack是独立于Es的,并且安全认证与权限认证是收费的,所以我们使用了Search Guard.

现在ES6.8和7.1以上版本已经自动继承了xpack组件并且基础的安全认证功能免费,更细力度的权限控制需要购买商业版本。

参考链接: Configure security for the Elastic Stack | Elasticsearch Guide [7.13] | Elastic

1.Minimal Security

基础安全认证,适用于单节点ES agent.

安全配置:

1. Enable xpack security并开启ssl transport认证

在elasticsearch.yml中添加如下配置:

xpack.security.enabled: true

xpack.security.transport.ssl.enabled: true 

discovery.type: single-node

2. 给ES内置的一系列用户创建密码:

1. 启动ES: ./bin/elasticsearch -d

2. 设置密码(auto or interactive): ./bin/elasticsearch-setup-passwords interactive //自动会打印出一大堆随机生成的密码, 我们这里选择的是手动:

eg:  Enter password for [elastic]: 123546 Reenter password for [elastic]: 123456 Changed password for user [elastic]

3. 重启ES,访问 http://hostname://9200时弹出登录框代表设置成功,使用刚刚设置的elastic账户和密码登陆。


3. 配置kibana连接ES

1. 添加ES认证用户名到kibana.yml文件中: 

    elasticsearch.username: "kibana_system"

2. 将kibana_system的密码添加到kibana的keystore:

../bin/kibana-keystore create

Created Kibana keystore in /elk/kibana/kibana-7.13.2-linux-x86_64/config/kibana.keystore

../bin/kibana-keystore add elasticsearch.password

Enter value for elasticsearch.password: ******

3.登陆http://hostname:5601

出现如下界面,则设置成功,使用elastic超级账户可以登陆进行权限管理。

ES配置:

节点信息: master & data 节点

node.name: node1

cluster.name: es-7.13.2

network.host: yourhostname

http.port: 9200

transport.port: 9300

node.master: true

node.data: true

node.ingest: false

discovery.seed_hosts: ["hostname:9300"]

xpack.security.enabled: true

xpack.security.transport.ssl.enabled: true //enable xpack security并开启ssl transport认证

discovery.type: single-node

Basic Security

适用于多节点集群

1. 生成证书

    1.创建证书授权

    ./bin/elasticsearch-certutil ca        es目录下会生成 elastic-stack-ca.p12 证书文件

    2.生成证书和私钥

     bin/elasticsearch-certutil cert--ca elastic-stack-ca.p12 es目录下会生成 elastic-certificates.p12 证书文件

    3.把elastic-certificates.p12 copy到每个ES节点的config目录下

    4.添加如下配置到ES yml里:

       xpack.security.transport.ssl.verification_mode: certificate

        xpack.security.transport.ssl.client_authentication: required

        xpack.security.transport.ssl.keystore.path: elastic-certificates.p12

        xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

2. 重启ES 和KIBANA

ES集群配置:

NODE1:

node.name: node1

cluster.name: es-7.13.2

network.host: yourhostname

http.port: 9200

transport.port: 9300

node.master: true

node.data: true

node.ingest: false

cluster.initial_master_nodes: ["node1"]

discovery.seed_hosts: ["xxxx:9300","xxxx:9400"]

xpack.security.enabled: true

xpack.security.transport.ssl.enabled: true

xpack.security.transport.ssl.verification_mode: certificate

xpack.security.transport.ssl.client_authentication: required

xpack.security.transport.ssl.keystore.path: elastic-certificates.p12

xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

NODE2:

node.name: node2

cluster.name: es-7.13.2

network.host: yourhostname

http.port: 9200

transport.port: 9400

node.master: false

node.data: true

node.ingest: false

cluster.initial_master_nodes: ["node1"]

discovery.seed_hosts: ["xxxx:9300","xxxx:9400"]

xpack.security.enabled: true

xpack.security.transport.ssl.enabled: true

xpack.security.transport.ssl.verification_mode: certificate

xpack.security.transport.ssl.client_authentication: required

xpack.security.transport.ssl.keystore.path: elastic-certificates.p12

xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

Basic Security Plus Https

如果我们想进一步给ES添加HTTPS认证,我们可以做如下步骤:

1. 生成HTTP证书

./bin/elasticsearch-certutil http

When asked if you want to generate a CSR? n.

When asked if you want to use an existing CA?  y.

Enter the path to your CA.  the absolute path of ca

Enter the password for your CA. input if you have

Enter an expiration value for your certificate. 5y

When asked if you want to generate one certificate per node y.

Each certificate will have its own private key, and will be issued for a specific hostname or IP address: your hostname,it's support *.

When prompted, enter the name of the first node in your cluster. Use the same node name that you used when generating node certificates.

Enter all hostnames used to connect to your first node. These hostnames will be added as DNS names in the Subject Alternative Name (SAN) field in your certificate.

List every hostname and variant used to connect to your cluster over HTTPS.

Enter the IP addresses that clients can use to connect to your node.

Repeat these steps for each additional node in your cluster. add note2, note3......

2. 添加 ssl http 配置

第一步会生成 elasticsearch-ssl-http.zip文件在ES目录下,其包含elasticsearch和kibana两个文件夹,es文件夹下又会包括所有节点的文件夹。

1. 将ES/Nodex 下的 http.p12 文件 copy到各个节点的config目录下

2.如果给每个节点生成证书时设置了密码需要添加到keystore

    ./bin/elasticsearch-keystoreaddxpack.security.http.ssl.keystore.secure_password

3. 添加如下配置到es yml文件:

    xpack.security.http.ssl.enabled: true

    xpack.security.http.ssl.keystore.path: "http.p12"

3. 重启ES 输入 https://hostname:9200 登陆认证

3. 配置Kibana

    1.将elasticsearch-ssl-http.zip中kibana目录中的elasticsearch-ca.pem copy到kibana/config目录

    2.添加配置到kibana.yml

        elasticsearch.hosts: ["https:hostname:9200"]

        elasticsearch.ssl.verificationMode: none //因为es那边设置了host ip之类的认证,所以设置为none,不然kibana无法访问es,es log中会报如下错误:http client did not trust this server's certificate

        elasticsearch.ssl.certificateAuthorities: [ "config/elasticsearch-ca.pem" ]

     3. 重启kibana

集群配置

NODE1:

node.name: node1

cluster.name: es-7.13.2

network.host: youhostname

http.port: 9200

transport.port: 9300

node.master: true

node.data: true

node.ingest: false

cluster.initial_master_nodes: ["node1"]

discovery.seed_hosts: ["xxxx:9300","xxxx:9400"]

xpack.security.enabled: true

xpack.security.transport.ssl.enabled: true

xpack.security.transport.ssl.verification_mode: certificate

xpack.security.transport.ssl.client_authentication: required

xpack.security.transport.ssl.keystore.path: elastic-certificates.p12

xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

xpack.security.http.ssl.enabled: true

xpack.security.http.ssl.keystore.path: "http.p12"

NODE2

node.name: node2

cluster.name: es-7.13.2

network.host: 172.17.0.13

http.port: 9200

transport.port: 9400

node.master: false

node.data: true

node.ingest: false

cluster.initial_master_nodes: ["node1"]

discovery.seed_hosts: ["xxxx:9300","xxxx:9400"]

xpack.security.enabled: true

xpack.security.transport.ssl.enabled: true

xpack.security.transport.ssl.verification_mode: certificate

xpack.security.transport.ssl.client_authentication: required

xpack.security.transport.ssl.keystore.path: elastic-certificates.p12

xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

xpack.security.http.ssl.enabled: true

xpack.security.http.ssl.keystore.path: "http.p12"

你可能感兴趣的:(ES安全认证)