기술 가이드

Rocky Linux 9에 OpenSearch 및 OpenSearch Dashboards 설치하고 TLS로 보호하기

7 min read 검색엔진 업데이트됨 30 Sep 2025
Rocky Linux 9에서 OpenSearch 설치·보안 가이드
Rocky Linux 9에서 OpenSearch 설치·보안 가이드

OpenSearch 로고와 대시보드 초기 화면 예시

중요: 예제의 IP(192.168.5.25), 호스트명(node-rock1)과 CN 값은 반드시 실제 환경에 맞게 변경하세요.

주요 용어 한 줄 정의

  • OpenSearch: Elasticsearch에서 포크된 오픈소스 검색 및 분석 엔진입니다.
  • OpenSearch Dashboards: Kibana에서 포크된 시각화 도구입니다.
  • TLS 인증서: 노드 간과 클라이언트 통신을 암호화하는 인증서입니다.

목차

  • 사전 요구사항
  • 시스템 준비(호스트명, SWAP, vm.max_map_count)
  • OpenSearch 설치(RPM 레포지토리 추가 → 설치 → 서비스 시작)
  • OpenSearch 기본 구성(jvm 옵션, discovery, network)
  • TLS 인증서 생성(루트 CA, admin, node)
  • 인증서 적용 및 opensearch.yml 설정 자동화 스크립트
  • 관리자 사용자 설정 및 securityadmin 적용
  • OpenSearch Dashboards 설치 및 구성
  • 대시보드 접속 검증(포트, 로그인, Dev Tools)
  • 운영 체크리스트, 문제 해결, 롤백, 보안 권장 사항
  • 결정 트리, 테스트 케이스, 1줄 용어집

사전 요구사항

  • Rocky Linux 9 서버(권장 메모리 ≥ 4GB; 예제는 8GB).
  • 비루트 사용자로 sudo 권한 보유.
  • SELinux가 permissive 모드로 실행됨.
  • 방화벽(firewalld) 접근 제어를 할 수 있는 권한.

중요: 프로덕션 환경에서는 8GB 이상 RAM, 최소 2 CPU 코어, 충분한 디스크 I/O 성능을 권장합니다.

시스템 준비

다음은 설치 전 반드시 수행해야 할 초기 설정입니다. 호스트명 및 FQDN 설정, SWAP 비활성화, vm.max_map_count 값 증가를 포함합니다.

  1. 호스트명 및 /etc/hosts 업데이트
sudo hostnamectl set-hostname node-rock1
echo '192.168.5.25  node-rock1.hwdomain.lan  node-rock1' >> /etc/hosts

변경 후 로그아웃 후 다시 로그인하거나 다음으로 FQDN 확인:

sudo hostname -f

설정된 FQDN 확인 스크린샷

  1. SWAP 비활성화(퍼포먼스 향상)
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo swapoff -a

SWAP 상태 확인:

free -m

SWAP 비활성화 예시 출력

  1. vm.max_map_count 증가(필수값)
sudo bash -c 'echo "vm.max_map_count=262144" >> /etc/sysctl.conf'
sudo sysctl -p

값 확인:

cat /proc/sys/vm/max_map_count

vm.max_map_count 설정 스크린샷

노트: vm.max_map_count는 OpenSearch/Elasticsearch가 사용하는 가상 메모리 맵 수와 관련이 있습니다. 권장 값은 262144입니다.

OpenSearch 설치

OpenSearch는 여러 방식으로 설치할 수 있지만, RHEL 계열에서는 공식 RPM 레포지토리를 이용한 설치가 편리합니다.

  1. 레포지토리 추가 및 확인
sudo curl -SL https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/opensearch-2.x.repo -o /etc/yum.repos.d/opensearch-2.x.repo
sudo dnf repolist

성공하면 ‘OpenSearch 2.x’ 레포가 보입니다.

레포지토리 확인 출력

  1. 패키지 정보 확인(선택)
sudo dnf info opensearch
  1. 설치
sudo dnf install opensearch

설치 도중 GPG 키 추가를 묻는 메시지가 나오면 y를 입력합니다.

opensearch 설치 화면

  1. systemd 데몬 재로드 및 서비스 시작/활성화
sudo systemctl daemon-reload
sudo systemctl start opensearch
sudo systemctl enable opensearch
sudo systemctl status opensearch

서비스가 active(running) 상태인지 확인하세요.

서비스 상태 확인

OpenSearch 기본 구성

기본 구성 파일들은 /etc/opensearch에 있습니다. 단일 노드 형태로 테스트/소규모 환경을 구성하려면 discovery.type을 single-node로 설정해야 합니다.

  1. opensearch.yml 편집
sudo nano /etc/opensearch/opensearch.yml

아래 항목을 추가 또는 수정합니다 (예제 IP 사용):

# Bind OpenSearch to the correct network interface. Use 0.0.0.0
# to include all available interfaces or specify an IP address
# assigned to a specific interface.
network.host: 192.168.5.25

discovery.type: single-node

# Re-enable security plugin
plugins.security.disabled: false

저장 후 종료합니다.

opensearch.yml 설정 예시

  1. JVM 힙 설정(jvm.options)
sudo nano /etc/opensearch/jvm.options

서버 메모리에 따라 최소 및 최대 힙을 설정합니다(예: 2GB):

-Xms2g
-Xmx2g

설정 후 OpenSearch 재시작:

sudo systemctl restart opensearch

포트 확인:

ss -tulpn

기본 REST 포트는 9200입니다.

TLS 인증서로 OpenSearch 보호하기

이 섹션은 자체 서명 루트 CA를 만들고, 관리자(admin)용 인증서와 노드용 인증서를 생성하여 노드 간 통신과 REST 계층을 TLS로 보호하는 방법을 안내합니다.

Important: 프로덕션 환경에서는 내부 PKI 또는 공인 CA 사용을 권장합니다. 자체 서명 CA는 테스트 또는 내부 전용 환경에 적합합니다.

기본 인증서 제거(기존 데모 구성 제거)

rm -f /opt/opensearch/{esnode-key.pem,esnode.pem,kirk-key.pem,kirk.pem,root-ca.pem}
sudo nano /etc/opensearch/opensearch.yml

opensearch.yml의 데모 보안 설정을 주석 처리하세요.

데모 인증서 삭제 스크린샷

인증서 저장 디렉터리 생성

mkdir -p /etc/opensearch/certs; cd /etc/opensearch/certs

루트 CA 생성

  1. 개인 키 생성
openssl genrsa -out root-ca-key.pem 2048
  1. 자체 서명 루트 인증서 생성(예: 유효기간 730일)
openssl req -new -x509 -sha256 -key root-ca-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=ROOT" -out root-ca.pem -days 730

출력: root-ca-key.pem, root-ca.pem

관리자(admin) 인증서 생성

  1. 개인 키 생성
openssl genrsa -out admin-key-temp.pem 2048
  1. PKCS#8 형식으로 변환(Java 호환성 때문에)
openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem
  1. CSR 생성(관리자 인증서는 호스트 바인딩이 필요 없음)
openssl req -new -key admin-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=A" -out admin.csr
  1. 루트 CA로 서명
openssl x509 -req -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem -days 730

출력: admin-key.pem, admin.pem

노드 인증서 생성(예: node-rock1)

  1. 개인 키 생성
openssl genrsa -out node-rock1-key-temp.pem 2048
  1. PKCS#8 변환
openssl pkcs8 -inform PEM -outform PEM -in node-rock1-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out node-rock1-key.pem
  1. CSR 생성(여기서는 CN을 FQDN으로 설정)
openssl req -new -key node-rock1-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=node-rock1.hwdomain.lan" -out node-rock1.csr
  1. SAN 확장 파일 생성(호스트명 또는 IP 포함)
echo 'subjectAltName=DNS:node-rock1.hwdomain.lan' > node-rock1.ext

IP를 사용할 경우 예: subjectAltName=IP:192.168.5.25

  1. 루트 CA로 서명
openssl x509 -req -in node-rock1.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node-rock1.pem -days 730 -extfile node-rock1.ext

출력: node-rock1.pem, node-rock1-key.pem

임시 파일 제거 및 시스템 신뢰 저장소에 CA 추가

rm *temp.pem *csr *ext
openssl x509 -outform der -in root-ca.pem -out root-ca.crt
sudo cp root-ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

권한 및 소유권 설정

sudo chown -R opensearch:opensearch /etc/opensearch/certs
sudo chmod 0700 /etc/opensearch/certs
sudo chmod 0600 /etc/opensearch/certs/*.pem
sudo chmod 0600 /etc/opensearch/certs/*.crt
ls -l /etc/opensearch/certs

인증서 목록 스크린샷

OpenSearch에 TLS 설정 추가

인증서 준비가 끝나면 opensearch.yml에 TLS 관련 설정을 추가합니다. 예제를 자동화하는 add.sh 스크립트를 사용합니다.

nano add.sh

파일 내용:

#! /bin/bash

# Before running this script, make sure to replace the CN in the
# node's distinguished name with a real DNS A record.

echo "plugins.security.ssl.transport.pemcert_filepath: /etc/opensearch/certs/node-rock1.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.transport.pemkey_filepath: /etc/opensearch/certs/node-rock1-key.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/opensearch/certs/root-ca.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.enabled: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.pemcert_filepath: /etc/opensearch/certs/node-rock1.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.pemkey_filepath: /etc/opensearch/certs/node-rock1-key.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.pemtrustedcas_filepath: /etc/opensearch/certs/root-ca.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.allow_default_init_securityindex: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.authcz.admin_dn:" | sudo tee -a /etc/opensearch/opensearch.yml
echo "  - 'CN=A,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.nodes_dn:" | sudo tee -a /etc/opensearch/opensearch.yml
echo "  - 'CN=node-rock1.hwdomain.lan,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.audit.type: internal_opensearch" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.enable_snapshot_restore_privilege: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.check_snapshot_restore_write_privileges: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.restapi.roles_enabled: [\"all_access\", \"security_rest_api_access\"]" | sudo tee -a /etc/opensearch/opensearch.yml

스크립트 실행:

chmod +x add.sh
./add.sh

적용 후 opensearch.yml을 확인하여 TLS 설정이 추가되었는지 확인하세요.

TLS 설정 추가 스크린샷

설정 적용을 위해 OpenSearch 재시작:

sudo systemctl restart opensearch

관리자 사용자 및 내부 사용자 설정

OpenSearch Security 플러그인을 사용해 내부 사용자(internal_users.yml)를 설정합니다.

  1. 해시 생성

관리자와 대시보드용 사용자의 암호 해시를 생성합니다. security/tools 디렉터리에서 hash.sh를 사용합니다.

cd /usr/share/opensearch/plugins/opensearch-security/tools
OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk ./hash.sh

명령은 대화형으로 비밀번호를 받아 bcrypt 형식 같은 해시를 출력합니다. 해시값을 복사해 둡니다.

비밀번호 해시 생성 스크린샷

  1. internal_users.yml 편집
sudo nano /etc/opensearch/opensearch-security/internal_users.yml

기본 사용자를 삭제하고 예제와 같이 admin 및 kibanaserver 사용자를 추가합니다(해시값은 실제로 생성한 값으로 교체):

admin:
  hash: "$2y$12$BnfqwqWRi7DkyuPgLa8.3.kLzdpIY11jFpSXTAOKOMCVj/i20k9oW"
  reserved: true
  backend_roles:
  - "admin"
  description: "Admin user"

kibanaserver:
  hash: "$2y$12$kYjgPjPzIp9oTghNdWIHcuUalE99RqSYtTCh6AiNuS5wmeEaWnbzK"
  reserved: true
  description: "Demo OpenSearch Dashboards user"

저장 후 OpenSearch 재시작:

sudo systemctl restart opensearch
  1. securityadmin.sh 실행으로 설정 적용
cd /usr/share/opensearch/plugins/opensearch-security/tools
OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk ./securityadmin.sh -h 192.168.5.25 -p 9200 -cd /etc/opensearch/opensearch-security/ -cacert /etc/opensearch/certs/root-ca.pem -cert /etc/opensearch/certs/admin.pem -key /etc/opensearch/certs/admin-key.pem -icl -nhnv

스크립트가 성공하면 internal_users.yml의 변경 내용이 클러스터에 적용됩니다.

securityadmin 적용 스크린샷

  1. 사용자 검증
curl https://node-rock1:9200 -u admin:password -k
curl https://node-rock1:9200 -u kibanaserver:kibanapass -k

성공하면 OpenSearch 인스턴스의 응답을 받을 수 있습니다.

admin 사용자 검증

kibanaserver 사용자 검증

OpenSearch Dashboards 설치

OpenSearch Dashboards 패키지 설치 전 레거시 SHA1 검증 문제로 인해 crypto 정책을 LEGACY로 변경해야 합니다.

sudo update-crypto-policies --set LEGACY

레포지토리 추가 및 설치

sudo curl -SL https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.x/opensearch-dashboards-2.x.repo -o /etc/yum.repos.d/opensearch-dashboards-2.x.repo
sudo dnf repolist
sudo dnf install opensearch-dashboards

설치 시 GPG 키 수락을 묻는다면 y로 응답하세요.

서비스 시작/활성화:

sudo systemctl start opensearch-dashboards
sudo systemctl enable opensearch-dashboards
sudo systemctl status opensearch-dashboards

opensearch-dashboards 설치 스크린샷

OpenSearch Dashboards 구성

Dashboards의 설정 파일은 /etc/opensearch-dashboards/opensearch-dashboard.yml 입니다.

sudo nano /etc/opensearch-dashboards/opensearch-dashboard.yml

서버 바인딩 및 포트 설정(예: 192.168.5.25:5601):

server.port: 5601
server.host: "192.168.5.25"

OpenSearch 연결 항목:

opensearch.hosts: [https://192.168.5.25:9200]
opensearch.ssl.verificationMode: none
opensearch.username: kibanaserver
opensearch.password: kibanapass

저장 후 Dashboards 재시작:

sudo systemctl restart opensearch-dashboards

Dashboards 구성 스크린샷

주의: opensearch.ssl.verificationMode: none는 테스트 용도입니다. 프로덕션에서는 CA를 신뢰시키고 검증 모드를 strict로 사용하세요.

Dashboards 접속 및 검증

  1. 방화벽 포트 개방(5601)
sudo firewall-cmd --add-port=5601/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

firewalld 설정 스크린샷

  1. 웹 브라우저에서 접속: http://192.168.5.25:5601

kibanaserver 계정으로 로그인합니다.

로그인 화면 예시

  1. Dev Tools에서 GET / 실행하여 OpenSearch 응답 확인

Dev Tools 테스트

응답 코드 200 OK가 나오면 정상 연결입니다.

운영 전 체크리스트(롤아웃 전 필수)

  • 호스트명 및 FQDN이 DNS에 등록되어 있고 /etc/hosts와 일치하는지 확인
  • SELinux 모드와 방화벽 규칙 검토
  • 루트 CA와 노드 인증서가 올바르게 서명되었는지 확인
  • 인증서 권한(opensearch:opensearch, 0700/0600) 확인
  • internal_users.yml에 실제 해시가 반영되었는지 확인
  • securityadmin.sh 실행 로그에서 오류가 없는지 확인
  • JVM 힙 설정이 시스템 메모리에 적절한지 확인
  • 스냅샷/백업 정책 검토(롤백 대비)

테스트 케이스 및 수용 기준

  • OpenSearch 서비스가 systemd에서 active(running) 상태여야 한다.
  • 9200 포트에서 TLS로 연결 시 admin 사용자로 / 응답이 200을 반환해야 한다.
  • OpenSearch Dashboards가 5601 포트에서 접근 가능하고, kibanaserver로 로그인 가능해야 한다.
  • securityadmin.sh 적용 후 internal_users와 roles, roles_mapping이 클러스터에 반영되어야 한다.

테스트 예시:

  1. 관리자 인증 확인
    curl https://192.168.5.25:9200 -u admin:<비밀번호> -k
  2. Dashboards에서 Dev Tools GET /

수용 기준: HTTP 200 및 cluster_name, version 등의 필드 존재.

롤백 및 인시던트 런북(간단)

사고 상황에서 빠르게 되돌리는 기본 절차입니다.

  1. 서비스 중단 완화
  • OpenSearch에 쓰기를 차단합니다(애플리케이션 설정 변경).
  • 읽기 전용으로 전환 가능한 경우 전환합니다.
  1. 최근 변경 되돌리기
  • opensearch.yml에 방금 추가한 TLS/설정 라인을 주석 처리하거나 백업에서 복원합니다.
  • internal_users.yml 수정 전 백업이 있다면 복원합니다.
  1. 서비스 재시작

    sudo systemctl restart opensearch
  2. 클라이언트 접근성 확인

  • curl로 / 확인, Dashboards 접근 확인
  1. 원인 분석 및 재적용
  • securityadmin 로그, syslog, opensearch 로그(/var/log/opensearch/) 검토

중요: 운영 중인 클러스터에서는 무중단 롤백이 어렵습니다. 변경 전 항상 백업/스냅샷을 권장합니다.

문제 해결: 자주 발생하는 오류와 대처법

  • OpenSearch가 부팅 실패 후 bootstrap check 실패
    • 해결: discovery.type: single-node 설정 또는 필요한 시스템 설정(mlockall, max_map_count 등) 확인
  • securityadmin.sh 연결 실패
    • 해결: TLS 경로(root-ca.pem, admin.pem 등)가 올바른지 확인, 포트(9200)와 IP가 맞는지 확인
  • Dashboards가 OpenSearch에 연결하지 못함
    • 해결: Dashboards 설정(opensearch.hosts, 인증정보, SSL 검증 모드) 확인
  • 인증서 CN/SAN 불일치
    • 해결: node 인증서의 subjectAltName에 FQDN 또는 IP가 포함되어야 함

보안 강화 권장 사항

  • 인증서 관리는 내부 PKI 또는 공인 CA로 전환.
  • opensearch.ssl.verificationMode를 none 대신 full로 설정.
  • TLS 키 교체와 만료 정책을 문서화.
  • audit 로그 전송을 중앙 로깅으로 구성.
  • 관리자 계정은 최소화하고 RBAC으로 세분화된 권한 적용.

성능 및 운영 권장치(휴리스틱)

  • JVM 힙: 전체 메모리의 절반을 넘지 않도록 설정(최대 32GB 미만 권장).
  • 디스크: 온-디스크 I/O에 영향이 큰 워크로드는 NVMe 권장.
  • 인덱스 샤드: 너무 많은 샤드는 성능 저하 원인. 샤드 수는 데이터량과 검색 패턴에 맞춰 설계.
  • 모니터링: CPU, GC, 디스크 I/O, 네트워크, GC pause 시간 수집.

대안 배포 방식 및 비교

  • Docker: 개발/테스트 빠름, 프로덕션은 스토리지와 네트워킹 고려 필요.
  • Kubernetes: 자동화된 스케일/복구 장점. StatefulSet, PersistentVolume, PodDisruptionBudget 필요.
  • Tarball: 커스터마이즈가 쉬움. 패키지 관리가 수동.

결정 요약: 단일 노드/테스트는 RPM 또는 tarball, 프로덕션 분산 환경은 Kubernetes 권장.

마이그레이션 팁(Elasticsearch → OpenSearch)

  • 인덱스 포맷 호환성 점검.
  • 기존 플러그인 지원 여부 확인.
  • 사용자와 역할 매핑을 OpenSearch Security로 마이그레이션 테스트.

의사결정 흐름(간단 Mermaid)

flowchart TD
  A[목표: OpenSearch 배포?] --> B{단일 서버?
  }
  B -- 예 --> C[RPM 설치, 단일 노드, TLS 설정]
  B -- 아니오 --> D{컨테이너화?
  }
  D -- 예 --> E[Kubernetes 배포, StatefulSet 사용]
  D -- 아니오 --> F[VM 또는 베어메탈: tarball 또는 RPM + 자동화]
  C --> G[운영: 모니터링·백업·보안 설정]
  E --> G
  F --> G

역할별 체크리스트

  • 관리자
    • 루트 CA 발급 정책 수립
    • 보안 프로파일과 접근 통제 설계
  • 운영자
    • 서비스 모니터링 및 업그레이드 계획
    • 백업·스냅샷 정책 실행
  • 개발자
    • 인덱스 설계(매핑, 샤드) 및 쿼리 최적화

1줄 용어집

  • FQDN: 완전한 도메인 이름(예: node-rock1.hwdomain.lan).
  • SAN: Subject Alternative Name(인증서에 포함되는 추가 호스트/IP).

호환성 및 마이그레이션 메모

  • OpenSearch 2.x 계열은 Elasticsearch의 일부 버전에서 포크되었습니다. 플러그인 호환성을 사전에 검증하세요.

요약

  • 이 가이드는 Rocky Linux 9 시스템 준비, OpenSearch와 Dashboards 설치, TLS 인증서 생성 및 적용, OpenSearch Security를 통한 사용자·권한 적용까지 전 과정을 다룹니다.
  • 테스트 환경에서 모든 설정을 충분히 검증한 뒤 프로덕션으로 롤아웃하세요.

추가 자료: OpenSearch 공식 문서를 참고하여 고급 클러스터 구성, 스냅샷·복구, 모니터링을 확장하세요.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

RAID1 하드드라이브 교체 및 재동기화 테스트
시스템 관리

RAID1 하드드라이브 교체 및 재동기화 테스트

NVIDIA·Intel GPU 오류 코드 43 빠른 해결법
하드웨어 문제

NVIDIA·Intel GPU 오류 코드 43 빠른 해결법

iPhone·iPad 터치스크린 비활성화 방법
Mobile

iPhone·iPad 터치스크린 비활성화 방법

Rocky Linux 9에서 OpenSearch 설치·보안 가이드
검색엔진

Rocky Linux 9에서 OpenSearch 설치·보안 가이드

iOS 26 Liquid Glass 투명 모드 끄는 방법
가이드

iOS 26 Liquid Glass 투명 모드 끄는 방법

Windows 10에서 새 폴더를 만들 수 없을 때 해결 방법
Windows 문제

Windows 10에서 새 폴더를 만들 수 없을 때 해결 방법