logstash的配置文件conf經常會涉及敏感信息,比如ES,mysql的賬戶密碼等,以下使用logstash導入mysql為例子,加密隱藏mysql的密碼。
在向keystore中添加key及其secret值之后,你可以在配置敏感設置時使用key代替secret值。
引用key的語法與環境變量的語法相同:${KEY},KEY是key的名稱。
例如,假設keystore包含一個名為ES_PWD的key,其值為yourelasticsearchpassword:
在配置文件中使用:output { elasticsearch {...password => "${ES_PWD}" } } }
在logstash.yml中使用:xpack.management.elasticsearch.password: ${ES_PWD}
注意,Logstash keystore與Elasticsearch keystore不同,雖然Elasticsearch keystore允許你按名稱存儲elasticsearch.yml值,但是Logstash keystore允許你指定可在Logstash配置中引用的任意名稱。
當前不支持從pipelines.yml或命令行(-e)引用keystore數據。
從集中式管道管理引用keystore數據需要每個Logstash部署都有keystore的本地副本。
當Logstash解析設置(Logstash.yml)或配置(/etc/logstash/conf.d/*.conf)時,它會在解析環境變量之前解析keystore中的key。
keystore密碼
你可以通過在名為LOGSTASH_KEYSTORE_PASS的環境變量中存儲密碼來保護對Logstash keystore的訪問,如果在設置此變量后創建Logstash keystore,它將受到密碼保護。這意味着環境變量需要被正在運行的Logstash實例訪問,這個環境變量還必須為需要發出keystore命令(添加、列表、刪除等)的任何用戶正確設置。
建議使用keystore密碼,但這是可選的,即使你沒有設置密碼,數據也會被加密。但是,強烈建議配置keystore密碼並對任何可能包含環境變量值的文件授予限制性權限,如果你選擇不設置密碼,那么你可以跳過本節的其余部分。
set +o history
export LOGSTASH_KEYSTORE_PASS=mypassword
set -o history
bin/logstash-keystore create
這個設置要求運行Logstash的用戶定義環境變量LOGSTASH_KEYSTORE_PASS=mypassword,如果沒有定義環境變量,Logstash就無法訪問keystore。
當你從RPM或DEB包安裝中運行Logstash時,環境變量來自/etc/sysconfig/logstash。
你可能需要創建/etc/sysconfig/logstash,這個文件應該由具有600權限的root用戶擁有,/etc/sysconfig/logstash的格式應該是ENVIRONMENT_VARIABLE=VALUE,每行一個條目。
keystore位置
keystore必須位於Logstash的path.settings目錄,這是包含logstash.yml文件的同一個目錄。在對keystore執行任何操作時,建議為keystore命令設置path.settings,例如,在RPM/DEB安裝上創建keystore :
set +o history
export LOGSTASH_KEYSTORE_PASS=mypassword
set -o history
sudo -E /usr/share/logstash/bin/logstash-keystore --path.settings /etc/logstash create
如果path.settings沒有指向與logstash.yml相同的目錄,你將看到一個警告。
創建keystore
要創建keystore,請使用create:
bin/logstash-keystore create
在path.settings配置設置中定義的目錄中創建密鑰存儲庫。
建議在創建keystore時設置keystore密碼。
添加key
要存儲敏感值,比如Elasticsearch的身份驗證憑證,可以使用add命令:
bin/logstash-keystore add ES_PWD
當提示時,為key輸入一個值。
key列表
要列出在keystore中定義的key,請使用:
bin/logstash-keystore list
移除key
要從keystore中移除key,請使用:
bin/logstash-keystore remove ES_PWD
先創建keystore,可以不設置keystore密碼,直接選擇y
bin/logstash-keystore create
conf目錄下會出現logstash.keystore
創建你要加密的變量key,例如這里添加mysql的密碼變量 MYSQL_PWD
bin/logstash-keystore add MYSQL_PWD
然后輸入要添加的密碼即可
logstash-keystore的其它命令
bin/logstash-keystore list #查看添加了哪些變量key
bin/logstash-keystore remove MYSQL_PWD #刪除變量key
bin/logstash-keystore -h #查看幫助
使用這些已經加密的變量key
output
{
jdbc
{
driver_jar_path => "/home/logstash-6.5.4/vendor/jar/jdbc/mysql-connector-java-5.1.47-bin.jar"
driver_class => "com.mysql.jdbc.Driver"
connection_string => "jdbc:mysql://10.43.212.46:3306/logstash?user=root&password=${MYSQL_PWD}"
statement => [ "INSERT INTO test (name,age) VALUES(?,?)", "name","age"]
}
}
匯總
logstash的配置文件中保存的有es,mysql等等的連接使用的明文密碼,可以通過設置變量的方式來代替,確保安全。另外,設置變量這個操作也可以通過設置一個密碼來進行,也就是說,只有驗證的這個密碼通過后才能設置需要使用的這些變量信息
設置這個訪問變量的密碼
set +o history
export LOGSTASH_KEYSTORE_PASS=mypassword
set -o history
設置變量
./bin/logstash-keystore create
./bin/logstash-keystore add ES_USER
./bin/logstash-keystore add ES_PWD
使用這些變量
# 格式:${變量名}
...
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
user => "${ES_USER}"
password => "${ES_PWD}"
}
}
其他操作
# 添加變量
bin/logstash-keystore add ES_PWD
# 查看變量列表
bin/logstash-keystore list
# 移除變量
bin/logstash-keystore remove ES_PWD
