背景
在配置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
修改一条数据,测试一下,大功告成,这样我们就可以安全的设置一些敏感的密码等信息了
- 本文固定链接: https://www.phpmianshi.com/?id=249
- 转载请注明: admin 于 PHP面试网 发表
《本文》有 0 条评论