보안 기능을 활성화 하자
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을 제공
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 |