Elastic StackのSSL、TLS、HTTPS設定

### 目的

この記事では、Elastic Stack内のコンポーネント間でTLS、HTTPクライアント通信を暗号化する手順を纏めます。

### １．Elasticsearchの設定手順

まずは、操作しやすいように環境変数を設定します。これは必須ではないです。

```bash:環境変数を設定
##　bashrcを編集
vim ~/.bashrc

##　以下を追記
ES_HOME=/usr/share/elasticsearch
ES_PATH_CONF=/etc/elasticsearch

##　bashrcを反映
. ~/.bashrc
```
Elasticsearchのホームディレクトリ配下で、証明書類を更新します。

```bash:CAとサーバー証明書を生成
cd $ES_HOME
bin/elasticsearch-certutil cert ca --pem
```

certificate-bundle.zipが生成されるので解凍します。


```bash:CAとサーバ証明書を解凍
unzip certificate-bundle.zip -d
```

証明書類を/etc/elasticsearch/certs配下に配置します。


```bash:証明書類を格納
#certsディレクトリをElasticsearchを作成
cd $ES_PATH_CONF
mkdir certs
pwd
/etc/elasticsearch/certs

#/etc/elasticsearch/certs配下に配置
ca.crt  instance.crt  instance.key
```

elasticsearch.ymlを編集します。

```bash:elasticsearch.yml
xpack.security.enabled: true
xpack.security.http.ssl.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.http.ssl.key: certs/instance.key
xpack.security.http.ssl.certificate: certs/instance.crt
xpack.security.http.ssl.certificate_authorities: certs/ca.crt
xpack.security.transport.ssl.key: certs/instance.key
xpack.security.transport.ssl.certificate: certs/instance.crt
xpack.security.transport.ssl.certificate_authorities: certs/ca.crt
xpack.security.http.ssl.verification_mode: certificate

```

内蔵のユーザーパスワードを設定します。

```bash:内臓パスワードを設定（すべてpasswordで設定します）
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
```


あとはリスタートすればOkです。一応、HTTPS経由で_cat/nodes APIにアクセスできるかどうかも以下コマンドで確認できます。

```bash:HTTPS経由でのアクセス確認
 curl -k --cacert /tmp/cert_blog/certs/ca/ca.crt -u elastic 'https://localhost:9200/_cat/nodes?v'
Enter host password for user 'elastic':
ip           heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
X.X.X.X           53          97  26    2.90    2.40     2.33 dilmrt    *      master
```




### ２．Kibanaの設定手順



まずは、操作しやすいように環境変数を設定します。これは必須ではないです。

```bash:環境変数を設定
##　bashrcを編集
vim ~/.bashrc

##　以下を追記
KIBANA_HOME=/usr/share/kibana
KIBANA_PATH_CONFIG=/etc/kibana

##　bashrcを反映
. ~/.bashrc
```

証明書類を/etc/kibana/config/certs配下に配置します。
***Elasticsearchで生成した証明書***と同じものを配置します。

```bash:証明書類を格納
#certsディレクトリをElasticsearchを作成
cd $KIBANA_PATH_CONFIG
mkdir -p /etc/kibana/config/certs
pwd
/etc/kibana/config/certs

#//etc/kibana/config/certs配下に配置
ca.crt  instance.crt  instance.key
```

kibna.ymlを編集します。

```bash:kibna.yml
xpack.security.enabled: true
## httpsになっていることに注意です。
elasticsearch.hosts: ["https://node1.elastic.test.com:9200"]
elasticsearch.username: "kibana"
elasticsearch.password: "password"
server.ssl.certificate: /etc/kibana/config/certs/instance.crt
server.ssl.key: /etc/kibana/config/certs/instance.key
elasticsearch.ssl.certificateAuthorities: [ "/etc/kibana/config/certs/ca.crt" ]
## 今回のやり方だとfalseにしないとエラーがでます。
elasticsearch.ssl.verificationMode: none
```

あとはリスタートすればOkです。

### ３．Logstashの設定手順

証明書類を/etc/logstash/config/certs配下に配置します。
***Elasticsearchで生成した証明書***と同じものを配置します。


```bash:証明書類を格納
pwd
/etc/logstash/config/certs
ls -ll
total 12
-rw-r--r-- 1 root root 1200 Mar 23 02:47 ca.crt
-rw-r--r-- 1 root root 1147 Mar 23 02:47 instance.crt
-rw-r--r-- 1 root root 1675 Mar 23 02:47 instance.key
```

logstash.ymlを編集します。

```bash:logstash.yml
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: password
## httpsになっていることに注意です。
xpack.monitoring.elasticsearch.hosts: [ 'https://node1.elastic.test.com:9200' ]
xpack.monitoring.elasticsearch.ssl.certificate_authority: "/etc/logstash/config/certs/ca.crt"
xpack.monitoring.elasticsearch.ssl.verification_mode: none

```

あとはリスタートすればOkです。confでElasticsearch Output Pluginを使用する場合は以下のようにHTTPSでアクセスするための設定を入れます。

```bash:aaa
output{
    elasticsearch {
　　　 ## httpsになっていることに注意です。
      hosts => ["https://node1.elastic.test.com:9200"]
      user => "elastic"
      password => "password"
      ssl => true
　　　 ## 今回のやり方だとfalseにしないとエラーがでます。
      ssl_certificate_verification => false
      cacert => "/etc/logstash/config/certs/ca.crt"

    }
｝
```

### 参考URL
[Elastic社技術ブログ](https://www.elastic.co/jp/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash#prepare-logstash)