본문 바로가기

Monitoring Tools/ELK Stack

[kibana] elasticsearch cluster에 kibana 붙이기

반응형

구축하기 전에


이전 글에 이어 ES cluster에 kibana를 붙이고 xpack.security에 관한 설정도 같이 진행해 보려고 한다.

관련글은 아래 링크를 참조 하도록 한다.

 

설치 환경은 아래와 같다.

  • OS : CentOS Stream release 8
  • Kernel : 4.18.0-553.6.1.el8.x86_64
  • kibana : 8.14.3

최종 3개의 elasticsearch(이하 ES) node로 cluster를 구성하고 1개의 node로 logstash, kibana를 구성할 예정이다.

  • ES node :
    • test-ES01 : 172.16.10.111
      • node name : es-node01
    • test-ES02 : 172.16.10.112
      • node name : es-node02
    • test-ES03 : 172.16.10.113
      • node name : es-node03
  • kibana, logstash :
    • test-ES04 : 172.16.10.114
      • node name : es-kibana01, es-logstash01
test-ES01은 host의 hostname이며 es-node01은 ES 의 node name 이다

 

 

 

본격적인 구축


hosts 파일 등록

경로 : /etc/hosts

172.16.10.111   test-ES01
172.16.10.112   test-ES02
172.16.10.113   test-ES03
172.16.10.114   test-ES04

 

 

yum repository 추가

elasticsearch GPG KEY import

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

 

repogitory 추가

아래 경로에 설정을 추가한다.

경로 : /etc/yum.repos.d/elasticsearch.repo

[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

 

Kibana 설치

yum(dnf)를 이용하여 패키지 설치로 진행한다.

yum install kibana-8.14.3

 

 

xpack.security 인증서

test-ES02 를 구축하면서 만들어 두었던 인증서를 kibana에 가져다 사용하려고 한다.

kibana에 적용할 인증서는 아래와 같이 크게 세가지로 구분된다.

  • CA 인증서
  • ES cluster와의 통신에 사용할 인증서 : http Rest API를 위해 적용하였던 http.p12를 사용한다.
  • client와의 통신에 사용할 인증서 : instances.yml로 es-kibana01 node용으로 생성 했던 es-kibana01.p12를 사용한다.
instances.yml 관련 글 참조 : https://ploz.tistory.com/entry/elasticsearch-814x-%EC%84%A4%EC%B9%98CentOS#%EC%9D%B8%EC%A6%9D%EC%84%9C-%EC%83%9D%EC%84%B1

인증서의 패스워드가 사용되므로 분실하지 않도록 유의하여야한다. 분실 했을 경우 인증서를 재생성하여야 하며 모든 node를 대상으로 재배포가 이루어 져야 하는 번거로운 과정을 다시 거쳐야 한다.

 

CA, http.p12 인증서 가져오기

현재 ES cluster 모든 node에 동일한 CA, http.p12 인증서를 사용하고 있으므로 아무 node에서 인증서를 가져온다.

경로 : /etc/kibana/certs/

scp elastic-stack-ca.p12 http.p12 test-ES04:/etc/kibana/certs/

 

es-kibana01.p12 인증서 가져오기

test-ES02에서 instances.yml을 이용하여 silent mode로 생성했던 es-kibana01.p12 를 가져온다.

경로 : /etc/kibana/certs/

scp -r test-ES02:/usr/share/elasticsearch/es-kibana01/es-kibana01.p12 /etc/kibana/certs/

 

 

Kibana 사용자 계정 설정

ES에서 사용하는 elastic 처럼 kibana에서 사용하는 계정은 kibana_system 이다.

ES cluster에서 사용자를 확인 할 수 있다.

curl -k -u elastic:[패스워드] -XGET 'https://127.0.0.1:9200/_security/user?pretty'

kibana_system 사용자는 kibana에서 kibana_system으로 대체 되었다.

{
  "elastic" : {
    "username" : "elastic",
    "roles" : [
      "superuser"
    ],
    "full_name" : null,
    "email" : null,
    "metadata" : {
      "_reserved" : true
    },
    "enabled" : true
  },
  "kibana" : {
    "username" : "kibana",
    "roles" : [
      "kibana_system"
    ],
    "full_name" : null,
    "email" : null,
    "metadata" : {
      "_deprecated_reason" : "Please use the [kibana_system] user instead.",
      "_deprecated" : true,
      "_reserved" : true
    },
    "enabled" : true
  },
  "kibana_system" : {
    "username" : "kibana_system",
    "roles" : [
      "kibana_system"
    ],
    "full_name" : null,
    "email" : null,
    "metadata" : {
      "_reserved" : true
    },
    "enabled" : true
  },
  "logstash_system" : {
    "username" : "logstash_system",
    "roles" : [
      "logstash_system"
    ],
    "full_name" : null,
    "email" : null,
    "metadata" : {
      "_reserved" : true
    },
    "enabled" : true
  },
...
}

 

ES cluster에서 elasticsearch-reset-password를 이용하여 kibana_system 사용자 패스워드를 재설정 한다. (test-ES02에서 진행했다.)

bin/elasticsearch-reset-password -u kibana_system

발급받은 패스워드를 분실하지 않도록 유의한다.

This tool will reset the password of the [kibana_system] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]y

Password for the [kibana_system] user successfully reset.
New value: ****************************

 

 

Kibana Configuration

경로 : /etc/kibana/kibana.yml

server.port: 5601
server.host: "0.0.0.0"
server.name: "es-kibana01"

# client 통신용. 인증서 패스워드를 입력한다.
server.ssl.enabled: true
server.ssl.keystore.path: /etc/kibana/certs/es-kibana01.p12
server.ssl.keystore.password: [패스워드]
server.ssl.truststore.path: /etc/kibana/certs/es-kibana01.p12
server.ssl.truststore.password: [패스워드]

# ES cluster 모든 node를 입력한다.
elasticsearch.hosts: ["https://test-ES01:9200","https://test-ES02:9200","https://test-ES03:9200"]

# ES Cluster 사용자 계정
elasticsearch.username: "kibana_system"
elasticsearch.password: "[패스워드]"

# CA 인증서 경로
elasticsearch.ssl.certificateAuthorities: [ "/etc/kibana/certs/elastic-stack-ca.p12" ]

# ES cluster 통신용. 인증서 패스워드를 입력한다.
elasticsearch.ssl.keystore.path: /etc/kibana/certs/http.p12 
elasticsearch.ssl.keystore.password: [패스워드]
elasticsearch.ssl.truststore.path: /etc/kibana/certs/http.p12
elasticsearch.ssl.truststore.password: [패스워드]
elasticsearch.ssl.verificationMode: certificate

logging:
  appenders:
    file:
      type: file
      fileName: /var/log/kibana/kibana.log
      layout:
        type: json
  root:
    appenders:
      - default
      - file

# Kibana Stack Monitoring 활성화
xpack.monitoring.enabled: true

 

xpack security를 사용하지 않으려면 관련설정을 아래와 같이 설정한다.

elasticsearch.ssl.verificationMode: none

server.port: 5601
server.host: "0.0.0.0"
server.name: "es-kibana01"

elasticsearch.hosts: ["https://test-ES01:9200","https://test-ES02:9200","https://test-ES03:9200"]

elasticsearch.username: "kibana_system"
elasticsearch.password: "[패스워드]"

elasticsearch.ssl.verificationMode: none

logging:
  appenders:
    file:
      type: file
      fileName: /var/log/kibana/kibana.log
      layout:
        type: json
  root:
    appenders:
      - default
      - file

 

 

Kibana를 시작한다.

systemctl start kibana

 

 

 

에러 해결


permission denied

아래 로그와 같이 인증서 access permission denied 가 나는 경우가 있다.

...
Reason: EACCES: permission denied, open '/etc/kibana/certs/elastic-stack-ca.p12'\nError: EACCES: permission denied, open '/etc/kibana/certs/elastic-stack-ca.p12
...

 

권한을 아래와 같이 그룹에 read 권한을 주었다.

chmod g+r elastic-stack-ca.p12

확인

ll /etc/kibana/certs/
total 12
-rw-r----- 1 root kibana 2672 Jul 24 15:08 elastic-stack-ca.p12
-rw-r--r-- 1 root kibana 3634 Jul 24 15:19 es-kibana01.p12
-rw-r--r-- 1 root kibana 3668 Jul 24 15:08 http.p12

 

 

인증서 패스워드

인증서 패스워드가 틀려 발생하는 로그

...
"message":"Reason: PKCS#12 MAC could not be verified. Invalid password?\nError: PKCS#12 MAC could not be verified. Invalid password?\n    at Object.p12.pkcs12FromAsn1
...
반응형