본문으로 건너뛰기

exemONE 보안 설정

1. 개요

exemONE은 로그인 접근 제어, 비밀번호 정책, 내부 DB 비밀번호 암호화, HTTPS/SSL 설정, 세션 보안 등 다양한 보안 설정 기능을 제공합니다.

보안 기능 분류:

분류기능설정 위치
접근 제어로그인 IP 제어Setting > Management > Security > Login IP Control
접근 제어로그인 실패 이력Setting > Management > Security > Login Fail History
비밀번호 정책Password PolicySetting > Management > Security > Password Policy
암호화RepoDB 비밀번호 암호화서버 설정 파일 + crypto-cli 명령어
TLS/HTTPSGateway HTTPS 설정서버 설정 파일 (gateway.yml)
TLS/SSLPostgreSQL SSL 설정DB 타겟 설정 (pg_hba.conf)
TLSWebhook TLS 설정서버 설정 파일 (docker-compose.yml / .env)
세션 보안세션 제거 설정서버 설정 파일 (application.yml)

적용 버전 전제 조건:

기능적용 버전
로그인 IP 접근 제어Front v3.0.503.1.1 이상, API v3.0.503.1.4 이상
세션 제거 설정Front v3.0.412.8.3 이상, API v3.0.412.8.0 이상
Webhook TLSexemone-alerter v3.0.412.7.0 이상
PostgreSQL SSL 및 암호화412(LTS) 및 504.15 버전 / PG 13 및 17 버전 확인

2. 접근 제어 (Login IP Control)

2-1. 개요

메뉴 경로: Setting > Management > Security > Login IP Control

exemONE 접근 허용 IP를 설정하여 사용자별 로그인 허용 IP를 관리합니다. 등록된 IP에 대해서만 로그인이 허용됩니다.


2-2. 로그인 IP 접근 설정 방법

Step 1. 접근 허용 IP 등록

Setting > Management > Security > Login IP Control에서 [IP 추가] 를 선택하여 접근 허용 IP를 추가합니다.

  • 하나의 계정이 여러 정책에 포함될 수 있으며, 하나의 정책이라도 허용 IP 조건이 맞으면 접속이 가능합니다.

  • IP 등록은 단일 IPCIDR 형식 으로 등록 가능합니다.
  • 혼합 입력 및 중복 등록 가능합니다. (예: CIDR가 단일 IP를 포함하는 경우)

Step 2. 사용자에 IP 접근 목록 등록

Setting > Account > User > 사용자 추가 또는 편집에서 IP 접근 제어 대상 계정에 IP 접근 목록을 등록합니다.

  • IP 접근 목록에서 Active된 목록만 표시됩니다.

Step 3. IP 접근 차단 확인

허용된 IP가 아닌 IP로 로그인 시 접근 차단을 확인할 수 있습니다.


2-3. 로그인 실패 이력 (Login Fail History)

메뉴 경로: Setting > Management > Security > Login Fail History

시스템에 접근 실패한 사용자 IP 목록을 확인할 수 있는 화면입니다.

순번항목설명
1Fail History시스템에 접근 실패 이력 목록을 보여줍니다.
2새로고침 아이콘클릭 시 새로고침된 시각 정보로 변경되고 목록이 갱신됩니다.
3Search목록을 검색할 수 있습니다.
4Login Date로그인 접속한 일자
4User ID사용자 ID
4IP사용자가 접근한 IP 주소
4Description설명란
4Log접속 이력 로그

3. 비밀번호 정책 (Password Policy)

메뉴 경로: Setting > Management > Security > Password Policy

관리자가 비밀번호 정책을 관리할 수 있는 화면입니다.

순번항목설명
1Minimum Password Length숫자 입력 제한 10~64
2Upper Case Letters1개 이상의 영어 대문자 포함
3Lower Case Letters1개 이상의 영어 소문자 포함
4Special Characters1개 이상의 특수문자 포함
5Numbers1개 이상의 숫자 포함
6Consecutive Characters연속된 문자와 숫자 4자리 이상 포함 금지
7Repeated Characters동일한 문자와 숫자 4자리 이상 포함 금지
8Predictable CharactersID와 이메일 등 유추하기 쉬운 계정 정보 포함 금지
9Excluded Keyword제외 키워드를 설정한 경우 비밀번호 설정에서 해당 키워드의 입력이 제한됩니다.

4. 비밀번호 암호화 (Password Encryption)

exemONE RepoDB(Clickhouse, PostgreSQL) 및 모니터링 대상 비밀번호의 암호화/복호화 방법입니다.

도구 경로: {EXEMONE_HOME}/scripts/crypto-cli (도커 설치 기준)


4-1. CASE 1. RepoDB 비밀번호 암호화

보안 정책에 따라 설정 파일의 비밀번호를 암호화된 형태로 관리해야 하는 경우 적용합니다.

Step 1. 암호화 실행

# {EXEMONE_HOME}/scripts 폴더 이동 후 실행
./crypto-cli encrypt --plaintext {평문}

출력된 암호화 값을 복사합니다.

Step 2. 각 모듈 설정 파일에 암호화된 값 적용

파일 경로항목
{EXEMONE_HOME}/containers/exemone-api/configs/application.ymlpassword 항목 변경
{EXEMONE_HOME}/containers/exemone-core/configs/core.yamlpassword 항목 변경
{EXEMONE_HOME}/containers/exemone-alerter/configs/alerter.yamlpassword 항목 변경

Step 3. 서비스 재구동

# 도커 설치 환경
./scripts/restart api
./scripts/restart core
./scripts/restart alerter

4-2. CASE 2. 모니터링 대상 비밀번호 복호화

데이터로 저장된 모니터링 대상 비밀번호(예: xm_instance에 저장된 타겟 DB 비밀번호) 확인이 필요한 경우 사용합니다.

# {EXEMONE_HOME}/scripts 폴더 이동 후 실행
./crypto-cli decrypt --ciphertext {암호화 텍스트}

주의: 암호화 파일은 외부 유출하지 않는 것을 원칙으로 합니다.


5. HTTPS / TLS 설정

5-1. Gateway HTTPS 설정

설정 파일 경로: {EXEMONE_HOME}/containers/exemone-gateway/configs/gateway.yml

Gateway 서비스에서 직접 HTTPS(TLS)를 설정하는 방법입니다.

Step 1. docker-compose.yml 수정 — gateway에 볼륨 및 포트 추가

# {EXEMONE_HOME}/docker-compose.yml
gateway:
volumes:
- $EXEMONE_HOME/certs:/home/exemone/certs # 추가
ports:
- 8443:8080 # 앞쪽 포트를 8443으로 수정

Step 2. gateway.yml에 인증서 설정 추가

# {EXEMONE_HOME}/containers/exemone-gateway/configs/gateway.yml
gateway:
cert-file: /home/exemone/certs/server.crt # 추가
key-file: /home/exemone/certs/server.key # 추가

Step 3. gateway 재시작

./scripts/restart.sh gateway

5-2. PostgreSQL SSL 설정 (모니터링 대상 DB 연결)

메뉴 경로: Setting > Database > Custom Configuration

PostgreSQL 모니터링 대상에 SSL 연결 시 클라이언트 SSL 모드를 설정합니다.

SSL Mode설명인증서 파일 필요 여부
requireSSL 암호화 사용. 서버 인증서의 CA 검증 없음불필요
verify-carequire + 서버 인증서가 신뢰할 수 있는 CA에 의해 발급되었는지 확인서버의 공개키 파일 필요
verify-fullverify-ca + 인증서의 호스트 이름 일치 여부도 확인서버의 공개키 파일 필요

5-3. PostgreSQL RepoDB SSL 및 암호화 적용 (보안취약점 점검 대응)

적용 대상: exemONE 내부 RepoDB (PostgreSQL)

적용 환경: 412(LTS) 및 504.15 버전 / PG 13 및 17 버전

참고: SSL 적용 없이 암호화만 적용하는 경우 Step 1~2 (SSL 관련 설정)를 건너뛰고 Step 3부터 진행합니다.

Step 1. postgresql.conf 파일 수정

# SSL 관련 설정 주석 제거
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'

# 암호화 방식 지정
password_encryption = 'scram-sha-256'

Step 2. SSL 자체 인증서 생성

# SSL 인증서 생성
openssl req -new -x509 -days 365 -nodes -text \
-out server.crt \
-keyout server.key \
-subj "/CN=exemone"

# server.key 권한 변경
chmod 600 server.key

Step 3. pg_hba.conf 파일 수정

host, trust 값을 hostssl, scram-sha-256 으로 변경합니다.

  • SSL을 적용하지 않는 경우 host로 설정합니다.

Step 4. PostgreSQL 재기동

./scripts/restart.sh postgresql

Step 5. postgres 패스워드 재설정

기존 trust, md5 등의 방식으로 설정된 경우 동일한 패스워드로 다시 설정이 필요합니다.

# pg 컨테이너 접속 (도커 설치 환경)
docker exec -it exemone-postgresql /bin/bash

# 패스워드 입력 후 DB 접속
psql -U postgres --password

# 패스워드 재설정 적용
ALTER USER postgres WITH PASSWORD 'onepass';

Step 6. 적용 확인

# exemone-postgresql 로그 확인
docker logs -f exemone-postgresql
오류 로그원인 및 조치
[FATAL] ~ no encryptionpostgres 암호 방식이 변경된 방식(scram-sha-256)으로 적용되지 않은 경우. "postgres 패스워드 재설정"을 진행합니다.

5-4. Webhook TLS 설정

지원 버전: exemone-alerter v3.0.412.7.0 이상

TLS를 적용하여 Webhook 알림을 전송할 수 있도록 옵션을 설정합니다.

도커 설치 환경

파일 경로: ${EXEMONE_HOME}/docker-compose.yml

alerter:
environment:
EXEMONE_WEBHOOK_NOTIFIER_INSECURE_SKIP_VERIFY: true
# alerter 재구동
${EXEMONE_HOME}/scripts/restart.sh alerter

바이너리 설치 환경

파일 경로: ${EXEMONE_HOME}/services/exemone-alerter/.env

EXEMONE_WEBHOOK_NOTIFIER_INSECURE_SKIP_VERIFY=true
# alerter 재구동
${EXEMONE_HOME}/onectl restart alerter

관련 이슈: 해당 설정이 되지 않은 경우, alerter에서 아래 오류가 발생될 수 있습니다.

webhook notification failed. err:1 out of 1 requests failed: Post "고객사URL": context deadline exceeded

6. 세션 보안 설정

메뉴 경로 (설정 파일): {EXEMONE_HOME}/containers/exemone-api/configs/application.yml

적용 버전: Front v3.0.412.8.3 이상 / API v3.0.412.8.0 이상

로그인 및 개인정보 변경 시 세션이 아닌 서버에서 발행하는 별도의 키를 사용하도록 변경하여 세션 사용을 원천적으로 제거하는 기능입니다.

Step 1. api 설정 파일에서 rsa-cache 처리 옵션 true로 변경 후 재기동

# {EXEMONE_HOME}/containers/exemone-api/configs/application.yml
xm:
rsa-cache: true

Step 2. 기존 JSESSIONID 쿠키 삭제

기존에 사용하던 JSESSIONID가 남아 있으면 쿠키에 계속 붙게 되어, 브라우저 개발자 도구에서 쿠키 삭제가 필요합니다. (우클릭 > Delete)


7. 주의사항 / 참고

항목내용
IP 접근 제어 버전Front v3.0.503.1.1, API v3.0.503.1.4 이상에서만 지원
암호화 파일 외부 유출 금지복호화 키 파일은 외부로 유출하지 않는 것을 원칙으로 합니다.
PostgreSQL SSL 적용 시 패스워드 재설정SSL 및 scram-sha-256 적용 후 기존 패스워드를 동일한 값으로 재설정해야 합니다.
Webhook TLS 미설정 시 오류context deadline exceeded 오류 발생 시 INSECURE_SKIP_VERIFY 옵션 설정 필요
Gateway HTTPS 설정 시 별도 https 모듈 제거기존 별도 https 컨테이너를 사용 중이었다면 제거 후 gateway로 일원화합니다.
세션 제거 설정 적용 버전Front v3.0.412.8.3, API v3.0.412.8.0 이상에서만 지원
PostgreSQL SSL 테스트 환경412(LTS) 및 504.15 버전 / PG 13 및 17 버전에서 확인된 설정 방법입니다.

참고 문서: