Logstash连接HTTPS访问集群

Logstash连接HTTPS访问集群

一、写入数据到ES

Logstash 的安装根目录下,创建一个如下的配置文件:
logstash.conf

input {
  generator {
    message => "liuxg"
    count => 1
  }
}
 
output {
    stdout {
        codec => rubydebug
    }
 
    elasticsearch {
        hosts => ["https://localhost:9200"]
        index => "data-%{+YYYY.MM.dd}"
        user => "elastic"
        password => "ndktp2Xr2h_*Q6EZfq4t"
        ssl_certificate_verification => true
        truststore => "/Users/liuxg/elastic/elasticsearch-8.4.1/config/certs/http.p12"
        truststore_password => "buSYG3l-R0mdN6pggG76VA"
    }
}

在上面的第一个部分,使用 generator 来生成一个 message。我们在 output 里定义两个输出,一个是 stdout,而另外一个是 elasticsearch output。查阅官方文档,并对它做如上的配置。需要指出的是:

  • hosts:这个是 Elasticsearch 集群的终端地址。你需要根据自己的配置进行修改
  • index:这个在 Elasticsearch 中创建的索引的名称
  • user:这个是在 Elasticsearch 中创建的用户。此处使用的是超级用户 elastic,尽管这个在生产环境中是不必要的。
  • password:这个是上面的 user 用户对应的密码
  • ssl_certificate_verification:当为 true 时,启动 SSL 检验
  • truststore:这个是 Elasticsearch 的证书所在的地址
  • truststore_password:这个是 truststore 的密码

可以根据如下的方式来得到这个密码:

$ pwd
/Users/liuxg/elastic/elasticsearch-8.4.1
$ ./bin/elasticsearch-keystore list
keystore.seed
xpack.security.http.ssl.keystore.secure_password
xpack.security.transport.ssl.keystore.secure_password
xpack.security.transport.ssl.truststore.secure_password
$ ./bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password
buSYG3l-R0mdN6pggG76VA

在上面的最后一个命令中它显示了 keystore 的密码。

$ pwd
/Users/liuxg/elastic/elasticsearch-8.4.1
$ ./bin/elasticsearch-keystore list
keystore.seed
xpack.security.http.ssl.keystore.secure_password
xpack.security.transport.ssl.keystore.secure_password
xpack.security.transport.ssl.truststore.secure_password
$ ./bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password
buSYG3l-R0mdN6pggG76VA
$ ls config/certs/
http.p12      http_ca.crt   transport.p12

在 Logstash 的安装目录下使用如下的方式来进行运行:

./bin/logstash -f logstash.conf

在上面,使用了 http.p12 证书来进行这样的操作。可以使用如下的命令来查看这个证书:

$ pwd
/Users/liuxg/elastic/elasticsearch-8.4.1
$ ./bin/elasticsearch-keystore list
keystore.seed
xpack.security.http.ssl.keystore.secure_password
xpack.security.transport.ssl.keystore.secure_password
xpack.security.transport.ssl.truststore.secure_password
$ ./bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password
Jn1YI7FMSNaiAXjUsdp4Mw
$ cd config/certs/
$ keytool -keystore http.p12 -list
Enter keystore password:  
Keystore type: PKCS12
Keystore provider: SUN
 
Your keystore contains 2 entries
 
http, Sep 26, 2022, PrivateKeyEntry, 
Certificate fingerprint (SHA-256): 97:D0:50:B0:31:73:42:67:D1:00:7C:71:F2:4D:D4:9E:AC:73:99:39:AC:E8:34:EB:DA:2F:0B:5E:F6:65:D3:CD
http_ca, Sep 26, 2022, PrivateKeyEntry, 
Certificate fingerprint (SHA-256): B4:8C:3E:33:FE:E5:AA:42:CF:1F:36:AC:94:D2:47:B2:3E:A3:B1:27:52:67:C5:6F:7B:CB:FF:9F:30:47:56:99


从上面的输出中,可以看出来,在 http.p12 中有两个 entry,其中一个是私钥。考虑到并不便于发送这个给客户端。我们可以使用如下的方法来创建 truststore:

keytool -import -file http_ca.crt -keystore truststore.p12 -storepass password -noprompt -storetype pkcs12

如上所示,它在当前的目录下创建一个叫做 truststore.p12 的文件。它的密码是 password。我们可以使用如下的命令来查看这个 truststore 的内容:

keytool -keystore truststore.p12 -list

如下:

$ pwd
/Users/liuxg/elastic/elasticsearch-8.4.1/config/certs
$ ls
http.p12      http_ca.crt   transport.p12
$ keytool -import -file http_ca.crt -keystore truststore.p12 -storepass password -noprompt -storetype pkcs12
Certificate was added to keystore
$ ls 
http.p12       http_ca.crt    transport.p12  truststore.p12
$ keytool -keystore truststore.p12 -list
Enter keystore password:  
Keystore type: PKCS12
Keystore provider: SUN
 
Your keystore contains 1 entry
 
mykey, Sep 30, 2022, trustedCertEntry, 
Certificate fingerprint (SHA-256): B4:8C:3E:33:FE:E5:AA:42:CF:1F:36:AC:94:D2:47:B2:3E:A3:B1:27:52:67:C5:6F:7B:CB:FF:9F:30:47:56:99


如上所示,我们可以看到在生成的 truststore.p12 中只有一个项目。它的别名叫做 mykey。
根据上面所生成的 truststore.p12 及其访问密码 password,我们可以修改上面的 elasticsearch 配置如下:

elasticsearch {
    hosts => ["https://localhost:9200"]
    index => "data-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "ndktp2Xr2h_*Q6EZfq4t"
    ssl_certificate_verification => true
    truststore => "/Users/liuxg/elastic/elasticsearch-8.4.1/config/certs/truststore.p12"
    truststore_password => "password"
}

再次重新运行之前的命令即可。

二、运用 API key 来进行连接

也可以试验 API Key 来连接到 Elasticsearch。首先,创建一个 API Key:




这样就创建了一个 API key。点击上面右边的文档小图标,并拷贝 APK key。这个 key 将在下面的配置中使用。
接着创建如下的一个 Logstash 的配置文件:
logstash.conf

nput {
  generator {
    message => "liuxg"
    count => 1
  }
}
 
output {
    stdout {
      codec => rubydebug
    }
 
    elasticsearch {
      hosts => ["https://localhost:9200"]
      index => "data-%{+YYYY.MM.dd}"
      ssl => true
      ilm_enabled => true
      ssl_certificate_verification => false
      api_key => "GMl1S4QBW_e6QIS4FQXK:KtC_17NAQt6Ef_7xuqzUCA"
    }
}

把上面的文件保存于 Logstash 安装的根目录下,并使用如下的命令来进行运行:

./bin/logstash -f logstash.conf 

评论

暂无

添加新评论