本文主要是介绍logstash-keystore保存Elasticsearch或其他密码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考:https://www.phpmianshi.com/?id=249
背景
在配置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
修改一条数据,测试一下,大功告成,这样我们就可以安全的设置一些敏感的密码等信息了
这篇关于logstash-keystore保存Elasticsearch或其他密码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!