title: logstash对敏感信息加密使用 #标题tags: logstash #标签
date: 2020-05-31
categories: elastic stack # 分类

在6.8以上的版本,默认免费版的es集群也支持了TLS加密访问,但是呢,如果logstash想要将数据写入到es中,那么无可避免的要在配置文件中写入es集群的用户名及密码,那么怎么来保证这些敏感信息不会泄露呢?
相信大多数人在为es集群配置了TLS加密后,logstash都是这样来指定output的,如下:

  1. output {
  2. elasticsearch {
  3. hosts => ["http://es1:9200", "http://es2:9200","http://es3:9200"]
  4. index => "secure-%{+YYYY.MM.dd}"
  5. user => "elastic"
  6. password => "lkmg76aI8B99OW59avft"
  7. }
  8. }

嗯,没错,就是这样,user和password就这样写在了配置文件中,按照正常套路,es肯定不会这么low的,那么正确的配置应该是怎样呢?接着往下看。

创建keystore

  1. ./bin/logstash-keystore create # 创建keystore
  2. WARNING: The keystore password is not set. Please set the environment variable `LOGSTASH_KEYSTORE_PASS`. Failure to do so will result in reduced security. Continue without password protection on the keystore? [y/N] y
  3. Created Logstash keystore at /root/logstash-7.6.2/config/logstash.keystore
  4. $ ll config/logstash.keystore # 确认密钥库文件已存在
  5. # 如果启动用户不是root,那么请修改为正确的权限
  6. -rw-r--r-- 1 root root 970 5 31 14:25 config/logstash.keystore

添加要加密的key

  1. $ ./bin/logstash-keystore add LOGSTASH_USER # 添加名为LOGSTASH_USER的变量(变量名为自定义)
  2. Enter value for LOGSTASH_USER: # 这里写入我们es集群的用户名
  3. Added 'logstash_user' to the Logstash keystore.
  4. $ ./bin/logstash-keystore add LOGSTASH_PWD # 再添加一个key值,用于保存对应的密码
  5. Enter value for LOGSTASH_PWD: # 输入上面用户对应的密码
  6. Added 'logstash_pwd' to the Logstash keystore.
  7. $ cat config/logstash.keystore # 不要试图这样去查看这个文件,除了一坨乱码以外,你什么都看不到

配置文件中使用加密后的信息

经过上述配置,我们就可以在配置文件中这样使用加密后的用户名密码了,如下:

  1. output {
  2. # stdout { codec => rubydebug }
  3. elasticsearch {
  4. hosts => ["http://es1:9200", "http://es2:9200","http://es3:9200"]
  5. index => "logstash-nginx-%{+yyyy.MM.dd}"
  6. user => "${LOGSTASH_USER}" # 就和shell中使用变量一样来使用就ok了
  7. password => "${LOGSTASH_PWD}"
  8. }
  9. }

logstash-keystore的其它命令

  1. ./bin/logstash-keystore list #查看添加了哪些变量key
  2. ./bin/logstash-keystore remove MYSQL_PWD #删除变量key