구축하기 전에
이전 글에 이어 ES cluster에 kibana를 붙이고 xpack.security에 관한 설정도 같이 진행해 보려고 한다.
관련글은 아래 링크를 참조 하도록 한다.
- elasticsearch 단일 node에 8.14.x 설치하기(SSL 포함)
- elasticsearch cluster 구축하기
- elasticsearch cluster에 kibana 붙이기(SSL 포함)
- elasticsearch cluster에 logstash 붙이기(SSL 포함)
- elasticsearch ILM 적용을 통한 Hot-Warm-Cold 아키텍쳐 구현해 보기[1]
- elasticsearch ILM 적용을 통한 Hot-Warm-Cold 아키텍쳐 구현해 보기[2]
- elasticsearch Data Stream에 ILM 적용시켜보기
설치 환경은 아래와 같다.
- 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
- test-ES01 : 172.16.10.111
- kibana, logstash :
- test-ES04 : 172.16.10.114
- node name : es-kibana01, es-logstash01
- test-ES04 : 172.16.10.114
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
...
'Monitoring Tools > ELK Stack' 카테고리의 다른 글
[elasticsearch] ILM(Index Lifecycle Management) 적용을 통한 Hot-Warm-Cold 아키텍쳐 구현해 보기 [1] (0) | 2024.08.06 |
---|---|
[logstash] elasticsearch cluster에 logstash 붙여보기(SSL 포함) (0) | 2024.07.26 |
[elasticsearch] cluster 구축하기(8.14.x, CentOS, xpack security) (2) | 2024.07.24 |
[elasticsearch] 단일 node에 8.14.x 설치(CentOS, xpack security) (1) | 2024.07.22 |
[elasticsearch] Query DSL(Domain Specific Language) (0) | 2024.07.04 |