코딩마을방범대

[ELK] Docker로 ELK 스택 구축 시 실행 때마다 자동으로 사용자 설정하기 본문

💡 백엔드/ELK

[ELK] Docker로 ELK 스택 구축 시 실행 때마다 자동으로 사용자 설정하기

신짱구 5세 2024. 11. 4. 15:22
728x90

 

 

 

 

도커를 통해 ELK 구축하기

ELK란 아래 포스트를 통해 개념을 확인할 수 있다. ELK 스택(Elasticsearch, Kibana, Beats, Logstash) 개념 정리ELK 스택Elasticsearch, Logstash, Kibana의 세 가지 인기 있는 프로젝트로 구성된 스택을 의미

sweet-rain-kim.tistory.com

 

Docker로 ELK 구축 시 재구동 시 사용자를 다시 등록해줘야 하는 번거로움이 있다.

사용자 등록 후 이미지로 저장해놓으면 매번 사용자를 등록하지 않아도 바로 사용이 가능하다.

아래 단계는 위 포스트처럼 Docker-compose를 통해 ELK를 이미 구축해 놓았다는 가정 하에 진행한다. 

 

방법은 두가지가 있다.

첫 번째는 사용자 등록 스크립트 파일을 이용해 초기에 강제 명령어 주입을 진행하는 것이다.

두 번째는 수동으로 사용자를 추가한 후 해당 컨테이너를 이미지화하여 사용하는 것이다.

 

보안 상 두 번째 방법을 권고한다.

 

 

 

 

 


 

 

 

 

 

 

 

1. 사용자 등록 스크립트 사용하기

 

1. 사용자 등록 스크립트 작성

 

사용자 등록 스크립트를 미리 작성해 놓은 후 ELK 구동 시 사용자 등록이 자동으로 진행되게 하는 방법이다.

파일명은 setup-users.sh 등으로 저장하면 되는데, 주황색 부분만 수정해 주면 된다.

(빨간색 비밀번호는 elastic 계정으로 설정되어있는 비밀번호를 입력해주면 된다.)

#!/bin/bash

# Kibana 사용자 비밀번호 등록
echo "Creating user 'kibana_system'..."
curl -X POST "http://localhost:9200/_security/user/kibana_system/_password" -H 'Content-Type: application/json' -d '{
  "password": "새로운_비밀번호"
}' -u elastic:비밀번호

# 특정 사용자 추가
echo "Adding a new user 'new_user'..."
curl -X POST "http://localhost:9200/_security/user/new_user" -H 'Content-Type: application/json' -d '{
  "password": "사용자_비밀번호",
  "roles": [ "role1", "role2" ],
  "full_name": "사용자 전체 이름",
  "email": "사용자 이메일"
}' -u elastic:비밀번호

 

 


 

2. Dockerfile 수정

 

elasticsearch 폴더 내에 있는 Dockerfile을 편집기로 열어준다.

폴더 경로와 elasticsearch 버전은 구축 환경에 맞게 수정해 주면 된다.

FROM docker.elastic.co/elasticsearch/elasticsearch:7.17.0

# 사용자 등록 스크립트를 복사
COPY setup-users.sh /usr/local/bin/setup-users.sh
RUN chmod +x /usr/local/bin/setup-users.sh

# 컨테이너 시작 시 사용자 등록 스크립트 실행
CMD ["/usr/local/bin/setup-users.sh"]

 

 


 

3. 컨테이너 실행

docker-compose build --no-cache && docker-compose up -d
docker-compose.yml 파일에 보면 아래와 같이 설정되어 있다.
이 단계에서 파일 내의 elasticsearch 서비 - build 섹션을 통해 Dcokerfile을 빌드하게 된다.
따라서 해당 Dockerfile을 별도로 빌드해 줄 필요가 없다.

 

 


 

 

 

위와 같이 스크립트를 직접 작성할 경우 파일 내에 비밀번호가 포함되기 때문에 보안 상의 위험이 있다.

따라서 아래와 같이 직접 비밀번호를 추가한 후 이미지로 빌드하여 사용하는 것을 권장한다.

 

 

 

 


 

 

 

 

 

 

 

2. 이미지 파일로 저장하여 사용하기

 

1. 사용자 등록

 ELK 스택이 실행되어있다는 가정 하에 사용자 등록을 진행해준다.

elastic:비밀번호에 있는 비밀번호는 elastic 계정의 초기 비밀번호로 설정한 값을 입력해주면된다.

 

우선 kibana 사이트를 이용하기 위해선 kibana_system 계정 설정이 필요하다.

curl -X POST "http://localhost:9200/_security/user/kibana_system/_password" -H 'Content-Type: application/json' -d'
{
  "password" : "설정할 비밀번호"
}
' -u elastic:비밀번호

 

위와 같이 설정해준 뒤에는 추가하고 싶은 사용자를 추가해주면 된다.

api의 new_user 부분은 생성하고싶은 유저명을 입력해주면 되고, 내부 값들도 설정하고 싶은 값들을 입력해주면 된다.

curl -X POST "http://localhost:9200/_security/user/new_user" -H 'Content-Type: application/json' -d '{
  "password": "사용자_비밀번호",
  "roles": [ "role1", "role2" ],
  "full_name": "사용자 전체 이름",
  "email": "사용자 이메일"
}' -u elastic:비밀번호

 


 

2. Docker 이미지 저장

docker ps 를 통해 실행 중인 컨테이너의 ID 값을 확인한다.

이후 commit을 통해 실행 중인 컨테이너를 이미지로 저장한다.

docker ps

docker commit <컨테이너_ID> <설정할 이미지명>




 

3. Docker 이미지 저장 파일로 내보내기

2번에서 생성한 이미지를 tar 파일로 저장한다.

docker save -o <설정할 파일명>.tar <2번에서 설정한 이미지명>




 

4. Docker 이미지 로드 및 세팅

나중에 새로 생성한 이미지를 사용할 수 있도록 로드한다.

(만약 다른 서버에서 사용하는 경우 해당 파일을 미리 load 시켜놓는다.)

docker load -i <파일명>.tar

 

위 명령어를 통해 이미지 파일을 로드한 경우 이제 docker-compose.yml 에서 세팅하여 사용이 가능하다.

아래는 docker-compose.yml 파일이다.

새로 생성한 이미지 파일을 사용하게 변경해주면 된다.

# 변경 전
services:
  elasticsearch:
    build:
      context: elasticsearch/

# 변경 후
services:
  elasticsearch:
    image: my-elasticsearch-image

 

 

 

 

 

728x90