首页 > ELK > logstash-keystore保存Elasticsearch或其他密码
2019
08-26

logstash-keystore保存Elasticsearch或其他密码

背景

在配置Logstash时,你可能需要指定敏感设置或配置,比如密码,与依赖文件系统权限来保护这些值不同,你可以使用Logstash keystore来安全地存储用于配置设置的secret值。

在向keystore中添加key及其secret值之后,你可以在配置敏感设置时使用key代替secret值。

引用key的语法与环境变量的语法相同:${KEY}KEY是key的名称。例如:

jdbc_password => "${MYSQL_PWD}"

注意,Logstash keystore与Elasticsearch keystore不同,虽然Elasticsearch keystore允许你按名称存储elasticsearch.yml值,但是Logstash keystore允许你指定可在Logstash配置中引用的任意名称。

当前不支持从pipelines.yml或命令行(-e)引用keystore数据。


keystore密码

你可以通过在名为LOGSTASH_KEYSTORE_PASS的环境变量中存储密码来保护对Logstash keystore的访问,如果在设置此变量后创建Logstash keystore,它将受到密码保护。这意味着环境变量需要被正在运行的Logstash实例访问,这个环境变量还必须为需要发出keystore命令(添加、列表、删除等)的任何用户正确设置。

建议使用keystore密码,但这是可选的,即使你没有设置密码,数据也会被加密。但是,强烈建议配置keystore密码并对任何可能包含环境变量值的文件授予限制性权限,如果你选择不设置密码,那么你可以跳过本节的其余部分。


环境

logstash7.5.1 + supervisor


keystore位置

keystore必须位于Logstash的path.settings目录,这是包含logstash.yml文件的同一个目录。在对keystore执行任何操作时,建议为keystore命令设置path.settings


示例

这次我们logstash采用源码安装,安装目录为 /usr/local/logstash ,运行使用supervisor

#设置隐藏history记录
set +o history
#设置访问Logstash keystore的密码
export LOGSTASH_KEYSTORE_PASS=这里设置一个密码
#设置记录history
set -o history
cd /usr/local/logstash/bin
#创建
./logstash-keystore --path.settings /usr/local/logstash/config create
./logstash-keystore --path.settings /usr/local/logstash/config add MYSQL_PWD
#这里会提示我们设置密码 Enter value for MYSQL_PWD:  我们输入一个密码回车提示:Added 'mysql_pwd' to the Logstash keystore.
#查看设置过的参数
./logstash-keystore --path.settings /usr/local/logstash/config list 
#移除一个key
./logstash-keystore remove MYSQL_PWD


当你从RPM或DEB包安装中运行Logstash时,环境变量来自/etc/sysconfig/logstash

# Have to save the password for service to kick start (installed by RPM), otherwise service will fail.
echo "LOGSTASH_KEYSTORE_PASS=changeme" > /etc/sysconfig/logstash


这个设置要求运行Logstash的用户定义环境变量LOGSTASH_KEYSTORE_PASS=mypassword如果没有定义环境变量,Logstash就无法访问keystore。

你可能需要创建/etc/sysconfig/logstash,这个文件应该由具有600权限的root用户拥有,/etc/sysconfig/logstash的格式应该是ENVIRONMENT_VARIABLE=VALUE,每行一个条目。

对于其他发行版,如Docker或ZIP,请参阅运行时环境(Windows、Docker等)的文档,了解如何为运行Logstash的用户设置环境变量,确保该环境变量(以及密码)只能被该用户访问。


这时候,我们再去修改logstash同步的配置文件,把需要mysql密码的地方都改成 ${MYSQL_PWD}

jdbc_password => "${MYSQL_PWD}"

重新启动logstash

supervisorctl restart logstash

观察日志发现报错:

Found a file at /usr/local/logstash/config/logstash.keystore, but it is not a valid Logstash keystore.

原因是supervisor接管logstash的时候,没有设置环境变量  LOGSTASH_KEYSTORE_PASS,上面我们已经介绍过了,需要设置该变量才能访问logstash-keystore,我们设置下环境变量 environment

[program:logstash]
command = /usr/local/logstash/bin/logstash
directory = /usr/local/logstash/
numprocs = 1
process_name = %(program_name)s
user=root
environment=LOGSTASH_KEYSTORE_PASS=这里设置刚才设置的密码
autostart = false
autorestart = true
startsecs = 10
startretries = 10
redirect_stderr = true
stdout_logfile = /dev/null
stdout_logfile_maxbytes = 1000MB
loglevel = info


重新启动logstash

supervisorctl reload
supervisor start logstash

修改一条数据,测试一下,大功告成,这样我们就可以安全的设置一些敏感的密码等信息了

本文》有 0 条评论

留下一个回复