본문 바로가기

공부방/Elasticsearch

elasticsearch - TLS 적용

보안 기능을 활성화 하자

elasticsearch.yaml 파일 설정 추가

xpack.security.enabled: true

 

노드간의 통신 보안

https://www.elastic.co/guide/en/elasticsearch/reference/7.11/encrypting-internode.html

 

공개키 생성

./bin/elasticsearch-certutil ca
// 공개키 패스워드 설정하라는 창이 뜸, 비밀번호를 입력한다
votmdnjem

 

Certification 생성

elasticsearch는 certification 만들 수 있는 certutil을 제공

https://www.elastic.co/guide/en/elasticsearch/reference/7.11/encrypting-communications-certificates.html

mkdir config/certs
./bin/elasticsearch-certutil cert \
--ca elastic-stack-ca.p12 \
--dns elastic-1,elastic-2,elastic-3 \
--ip 10.178.0.2,10.178.0.3,10.178.0.4 \
--out config/certs/es-cluster.p12

--ca 공개키 지정
--dns 도메인 이름
--ip 내부 ip

 

tranport layer security 설정

elasticsearch.yaml 파일에 tranport layer security 설정을 진행한다.

// 상대 경로로 지정하면 elastic/config 폴더를 기본으로 잡아준다.
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
spack.security.transport.ssl.keystore.path: certs/es-cluster.p12
spack.security.transport.ssl.truststore.path: certs/es-cluster.p12

 

공개키 패스워드 저장

공개키 패스워드를 저장해놓아야 한다

패스워드를 저장할 공간인 keystore를 생성하고 저장해보자.

 

keystore 생성

./bin/elasticsearch-keystore create

 

아래 명령어를 통해 keystore에 패스워드 추가

bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
공개키 비밀번호 입력

// 저장된 것 확인
bin/elasticsearch-keystore list

bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
공개키 비밀번호 입력

 

나머지 서버에도 동일하게 적용

es-cluster.p12 파일을 2번서버, 3번서버에도 넣어준다.

// 인증서를 이용하여 1번서버의 es-cluster.p12를 가져옴
scp -i ~/.ssh/es-rsa kimjmin@34.64.237.42:/home/kimjmin/es-711/config/certs/es-cluster.p12

// 2번서버와 3번서버에 es-cluster.p12 파일을 넣어준다.
scp -i ~/.ssh/es-rsa ./es-cluster.p12 kimjmin@34.64.137.113:/home/kimjmin/es-711/config/certs/es-cluster.p12
scp -i ~/.ssh/es-rsa ./es-cluster.p12 kimjmin@34.64.167.194:/home/kimjmin/es-711/config/certs/es-cluster.p12

 

keystore에 공개키 비밀번호 2번서버, 3번 서버에도 넣어준다.

// keystore 존재하는지 확인
bin/elasticsearch-keystore list

bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
공개키 비밀번호 입력

bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
공개키 비밀번호 입력

 

transport layer도 모두 설정해준다.

// 상대 경로로 지정하면 elastic/config 폴더를 기본으로 잡아준다.
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
spack.security.transport.ssl.keystore.path: certs/es-cluster.p12
spack.security.transport.ssl.truststore.path: certs/es-cluster.p12

 

테스트

이제부터는 elasticsearch에 명령할 때 id와 passwd를 넣어줘야 한다.

id와 passwd는 두가지의 방법으로 생성할 수 있다.

 

elasticsearch-setup-passwords util 사용

 - cluster안에서 저장이 됨

 - 클러스터 내에 있는 모든 노드에서 사용 가능

elasticsearch-users util 사용

 - 노드안에 파일로 저장이 됨

 - 생성한 노드 안에서만 사용이 가능

 

 

 

 

// 옵션 확인
bin/elasticsearch-setup-passwords -h

// auto 옵션
// 패스워드를 자동으로 마늗ㄹ어준다.

// interactive
// 내가 하나 하나 유저를 설정해 줘야한다.

// 
bin/elasticsearch-setup-passwords auto
// 패스워드가 나옴

 

비밀번호를 생성했다면 이후에는 패스워드를 같이 넣어줘야 명령어를 실행할 수 있다.

 

localhost:9200 -u elastic:패스워드

curl localhost:9200 -u elastic
// 패스워드를 물어봄

 

패스워드를 잊어버렸다면,

1. data 폴더를 지우고 다시 패스워드를 생성해야한다.

2. 사용자를 새로 생성해서 사용하는 방법이 있다. (elastic superuser 계정은 공유하지 않는 것이 좋다)

 

// 사용자 생성, 비밀번호 입력 (비밀번호를 "password"로 생성)
bin/elasticsearch-users user add kimjmin -p password -r superuser

// 이후 사용자와 password를 이용하여 명령어를 사용할 수 있다.
curl localhost:9200 -u kimjimin:password

// 아래 파일에서 사용자 정보를 확인할 수 있다.
config/users
config/users_roles

 

결과

 

2개의 방화벽 설정을 진행함

1. 외부 client와 9200번 포트로 통신할 수 있도록 node-1 번에만 적용해놓음

2. 9200, 9300번을 서로 열어서 방화벽 안에있는 instance끼리는 통신할 수 있도록 함 (TLS 표시 되어있는 부분)

 

'공부방 > Elasticsearch' 카테고리의 다른 글

pm2를 이용한 데몬 실행  (0) 2023.05.09
Kibana  (0) 2023.05.09
elasticsearch 기본 설정 및 cluster 구성  (0) 2023.05.08
ghj  (0) 2023.05.03
Prometheus + Grafana  (0) 2023.05.02