侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 352 篇文章
  • 累计创建 135 个标签
  • 累计收到 10 条评论

目 录CONTENT

文章目录

ES教程22-ElasticSearch密码设置

孔子说JAVA
2022-10-27 / 0 评论 / 0 点赞 / 50 阅读 / 7,098 字 / 正在检测是否收录...
广告 广告

ES 6.8之前添加用户密码验证需要安装x-pack插件,在6.8之后版本自带一个叫 xpack 的安全功能,启用即开启了xpack的功能、模式、并且传输启用ssl,可以直接设置。ES默认安装时,Elasticsearch会开启并监听9200端口,但是对于该端口并没有访问控制,恶意用户可以在未授权的情况下通过浏览器访问 ip:9200/_nodes/stats 等链接获得系统信息、以及存储的敏感数据等。所以生产环境我们都会设置密码。

1、ES密码设置

1.1 安装x-pack

ES 6.8之前添加用户密码验证需要安装x-pack插件,6.8之后的版本则不需要执行这一步。

在es的安装目录中,执行下述命令即可安装x-pack插件:

./bin/elasticsearch-plugin install x-pack

在安装x-pack后,es的bin目录中会产生一个x-pack目录。

1.2 修改es配置

修改config目录下面的elasticsearch.yml文件,添加如下代码到文件末,开启x-pack验证,重启es。

xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true

1.3 设置密码

进入es的bin目录,进行密码设置。执行命令如下:

# interactive 手动设置密码
./elasticsearch-setup-passwords interactive

# auto 自动生成密码
./elasticsearch-setup-passwords auto

先输入 y 确认修改密码, 然后根据提示输入每个账号的密码即可。该命令会为elastic、kibana、logstash_system、beats_system同时设置密码,需要手动输入。(参数interactive 手动设置, auto 为自动生成密码 )

Enter password for [elastic]: 
Reenter password for [elastic]: 
Enter password for [kibana]: 
Reenter password for [kibana]: 
Enter password for [logstash_system]: 
Reenter password for [logstash_system]: 
Enter password for [beats_system]: 
Reenter password for [beats_system]: 
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [elastic]

image-1666749391010

1.4 测试

不使用用户名密码访问:curl 172.20.10.6:9200,返回信息状态为401,无权限操作。

使用用户名密码访问:curl 172.20.10.6:9200 -u elastic:espass,访问状态为成功

1.5 修改用户密码

curl -H "Content-Type:application/json" -XPOST -u elastic 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "123456" }'

2、ES-HEAD和Kibana使用密码

对ES做了密码设置后,访问ES-HEAD时,就需要加上用户名密码进行访问:

http://172.19.82.206:9100/?auth_user=elastic&auth_password=123456

对kibana的设置是修改kibana的配置文件,添加访问es的用户名密码。在kibana.yml中添加:

elasticsearch.username: "elastic"
elasticsearch.password: "123456"

重启Kibana

kibana 使用ps -ef|grep kibana是查不到进程的,因为其实运行在node里面。但是我们也不能关闭所有node里面的软件,所以我们需要查询kibana监听端口5601的进程。使用下面命令关闭kibana:

[esadmin@****** elasticsearch-7.2.0-a]$ netstat -tunlp|grep 5601
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      16177/bin/../node/b 

[root@****** elasticsearch-7.2.0-a]# kill -9 16177

然后重启Kibana:

nohup ./kibana &

此时访问kibana(http://localhost:5601)会提示需要输入账号密码。注意此时需要输入的是elasticsearch的用户密码。

image-1666751218202

3、es集群密码配置

es集群设置密码时,在开启x-pack验证后,重启es时可能会报错:

[2]: Transport SSL must be enabled if security is enabled on a [basic] license. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security by setting [xpack.security.enabled] to [false]

这是因为传输网络层用于集群中节点之间的内部通信。启用安全功能后,必须使用TLS来确保节点之间的通信已加密。为节点间通讯配置安全策略需要两个步骤:

  • 生成节点间安全策略使用的证书

  • 修改各个节点的安全配置

3.1 创建ca授权证书

进入bin目录输入以下命令:

bin/elasticsearch-certutil ca

整个创建过程是这样的。在输入命令后控制台会输出此命令的信息描述,然后你需要先执行{①}的操作然后执行{②}的操作

This tool assists you in the generation of X.509 certificates and certificate
signing requests for use with SSL/TLS in the Elastic stack.
 
The 'ca' mode generates a new 'certificate authority'
This will create a new X.509 certificate and private key that can be used
to sign certificate when running in 'cert' mode.
 
Use the 'ca-dn' option if you wish to configure the 'distinguished name'
of the certificate authority
 
By default the 'ca' mode produces a single PKCS#12 output file which holds:
    * The CA certificate
    * The CA's private key
If you elect to generate PEM format certificates (the -pem option), then the output will
be a zip file containing individual files for the CA certificate and private key
Please enter the desired output file [elastic-stack-ca.p12]:  {①}
Enter password for elastic-stack-ca.p12 : {②}

①:此位置设置文档输出地址和名称。默认名称为elastic-stack-ca.p12。这个文件是PKCS#12密钥存储库,它包含您的CA的公共证书和用于为每个节点签署证书的私有密钥。

②:此位置设置证书的密码。计划将来向集群添加更多的节点,请记住其密码。

授权证书已生成:

image-1666750687994

3.2 集群节点证书

为Elasticsearch集群中的节点生成证书,使用下面的名称生成集群使用的生成节点证书。elastic-stack-ca.p12为上一步生成CA证书。

bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

整个创建过程是这样的,类似之前的内容,在输入命令后控制台会输出此命令的信息描述,然后你需要先执行{①}的操作然后执行{②}的操作,最后执行{③}的操作

[root@******* elasticsearch-7.2.0-a]# bin/elasticsearch-certutil cert --ca /usr/local/es-cluster/elastic-stack-ca.p12
This tool assists you in the generation of X.509 certificates and certificate
signing requests for use with SSL/TLS in the Elastic stack.
 
The 'cert' mode generates X.509 certificate and private keys.
    * By default, this generates a single certificate and key for use
       on a single instance.
    * The '-multiple' option will prompt you to enter details for multiple
       instances and will generate a certificate and key for each one
    * The '-in' option allows for the certificate generation to be automated by describing
       the details of each instance in a YAML file
 
    * An instance is any piece of the Elastic Stack that requires a SSL certificate.
      Depending on your configuration, Elasticsearch, Logstash, Kibana, and Beats
      may all require a certificate and private key.
    * The minimum required value for each instance is a name. This can simply be the
      hostname, which will be used as the Common Name of the certificate. A full
      distinguished name may also be used.
    * A filename value may be required for each instance. This is necessary when the
      name would result in an invalid file or directory name. The name provided here
      is used as the directory name (within the zip) and the prefix for the key and
      certificate files. The filename is required if you are prompted and the name
      is not displayed in the prompt.
    * IP addresses and DNS names are optional. Multiple values can be specified as a
      comma separated string. If no IP addresses or DNS names are provided, you may
      disable hostname verification in your SSL configuration.
 
    * All certificates generated by this tool will be signed by a certificate authority (CA).
    * The tool can automatically generate a new CA for you, or you can provide your own with the
         -ca or -ca-cert command line options.
 
By default the 'cert' mode produces a single PKCS#12 output file which holds:
    * The instance certificate
    * The private key for the instance certificate
    * The CA certificate
 
If you specify any of the following options:
    * -pem (PEM formatted output)
    * -keep-ca-key (retain generated CA key)
    * -multiple (generate multiple certificates)
    * -in (generate certificates from an input file)
then the output will be be a zip file containing individual certificate/key files
 
Enter password for CA (/usr/local/es-cluster/elastic-stack-ca.p12) : ①
Please enter the desired output file [elastic-certificates.p12]: ②
Enter password for elastic-certificates.p12 : ③

① : 此位置需要输入elastic-stack-ca.p12 CA授权证书的密码。

② : 此位置为需要输出证书位置。

③ : 此位置为证书的密码。使用空密码可以直接回车结束。

默认情况下,elasticsearch-certutil生成的证书中没有主机名信息。这意味着可以为集群中的任意节点使用此证书,但是必须关闭主机名验证。

3.3 修改节点配置

修改每个节点的elasticsearch.yml配置,将elastic-certificates.p12文件(只需要此文件)复制到每个节点上的Elasticsearch配置目录中的一个目录中。例:config/新建certs目录下。然后修改每个节点的elasticsearch.yml配置。添加下面的参数。

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  

xpack.security.transport.ssl.verification_mode

如果在elasticsearch-certutil cert命令中使用—dns或—ip选项,并且希望启用严格的主机名检查,此参数需要设置为full。而之前的例子证书中并没有输入ip以及dns等信息,所以我们没有使用严格的主机检查。

3.4 配置内置用户的密码

这个时候重启集群后,如果elastic用户没有密码,则使用默认的引导密码。引导密码是一个临时密码,它允许您运行设置所有内置用户密码的工具。

  • 内置用户:默认用户名为:elastic,只能修改密码不能设置账户

我们需要为所有的内置用户设置密码。设置密码使用以下命令:

bin/elasticsearch-setup-passwords interactive
用户名 作用
elastic 超级用户
kibana 用于负责Kibana连接Elasticsearch
logstash_system Logstash将监控信息存储在Elasticsearch中时使用
beats_system Beats在Elasticsearch中存储监视信息时使用
apm_system APM服务器在Elasticsearch中存储监视信息时使用
remote_monitoring_user Metricbeat用户在Elasticsearch中收集和存储监视信息时使用

注:为elastic用户设置密码后,引导密码将不再有效。并且再次执行elasticsearch-setup-passwords命令会抛出异常

0

评论区