코딩마을방범대
[ELK] Docker로 ELK 스택 구축 시 실행 때마다 자동으로 사용자 설정하기 본문
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
'💡 백엔드 > ELK' 카테고리의 다른 글
[ELK] 다른 서버에 구축되어 있는 ELK와 연결하기 (0) | 2024.11.12 |
---|---|
[ELK] Docker를 통해 구축한 ELK 의 데이터를 스냅샷으로 저장하기 (0) | 2024.11.06 |
[ELK] ELK에서 Logstash.conf 파일의 filter, input, output 블록 (0) | 2024.11.04 |
[ELK] ELK 역할 부여 및 권한 관리하는 방법 (0) | 2024.10.31 |
[ELK] ELK를 이용한 MySQL 로그 연동 방법 (0) | 2024.10.21 |