Docker를 이용한 Elasticsearch 7.x+ 보안 설정 및 Elasticsearch-head 연동 가이드

Elasticsearch 설치 및 배포

1. Elasticsearch 이미지 다운로드

# Docker Hub에서 Elasticsearch 버전 확인
docker search elasticsearch

# 특정 버전의 Elasticsearch 이미지 다운로드
docker pull docker.io/library/elasticsearch:7.17.0

2. Elasticsearch 컨테이너 실행

# Elasticsearch 컨테이너 생성 및 실행
docker run -td --name elasticsearch_node -p 9200:9200 -p 9300:9300 \
-e JAVA_OPTS="-Xms64m -Xmx128m" \
-e "discovery.type=single-node" \
elasticsearch:7.17.0

3. Elasticsearch 설정 파일 수정

# 컨테이너 내 설정 파일을 호스트 시스템으로 복사
docker cp elasticsearch_node:/usr/share/elasticsearch/config/elasticsearch.yml ./custom_es_config.yml
# 설정 파일 편집
vi custom_es_config.yml

수정할 설정 내용:

cluster.name: "secure-es-cluster"
network.host: 0.0.0.0

# 외부 접속 허용
http.host: 0.0.0.0

# CORS 설정 (elasticsearch-head와의 연동을 위해)
http.cors.enabled: true
http.cors.allow-origin: "*"

# 인증 헤더 허용
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

# 보안 기능 활성화
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
# 수정된 설정 파일을 컨테이너에 적용
docker cp ./custom_es_config.yml elasticsearch_node:/usr/share/elasticsearch/config/elasticsearch.yml

# Elasticsearch 서비스 재시작
docker restart elasticsearch_node

4. 사용자 비밀번호 설정

# 컨테이너 내부로 진입
docker exec -it elasticsearch_node bash

# 기본 사용자 비밀번호 설정 (elastic, apm_system, kibana 등)
bin/elasticsearch-setup-passwords auto

Elasticsearch-head 도구 설치 및 설정

1. Elasticsearch-head 이미지 다운로드

# Elasticsearch-head 이미지 다운로드
docker pull mobz/elasticsearch-head:5

2. Elasticsearch-head 컨테이너 실행

# Elasticsearch-head 컨테이너 실행
docker run --name es_head_proxy -p 9100:9100 -d mobz/elasticsearch-head:5

3. 설정 파일 수정

elasticsearch-head는 기본적으로 application/x-www-form-urlencoded 방식을 사용하며, 이 방식은 인덱스 생성 시 오류를 발생시킬 수 있습니다.

# elasticsearch-head 컨테이너 내 vendor.js 파일 수정
# 파일을 호스트 시스템으로 복사
docker cp es_head_proxy:/usr/src/app/_site/vendor.js ./modified_vendor.js

# 6886, 7574행 수정 (Content-Type 변경)
sed -i 's/application\/x-www-form-urlencoded/application\/json;charset=UTF-8/g' modified_vendor.js

# 수정된 파일을 컨테이너로 복사
docker cp ./modified_vendor.js es_head_proxy:/usr/src/app/_site/vendor.js

# 컨테이너 재시작
docker restart es_head_proxy

4. 연동 확인

비밀번호 미설정 시 접속 주소: http://localhost:9100

비밀번호 설정 시 접속 주소: http://localhost:9100/?auth_user=elastic&auth_password=설정한비밀번호

태그: docker elasticsearch 보안 설정 데이터 검색 시각화 도구

6월 23일 18:02에 게시됨