[ELK] search guard를 이용한 보안 설정 (사용자 권한)


Search Guard 개요

  • ELK의 X-pack 대신 사용 권한 기능을 제공하는 Free 오픈소스
  • SSL/TLS 적용 필수 (Kibana 로그인만 보안 적용 불가능)

설치

  • Search Guard Download 사이트에서 ELK 각 모듈별 버전에 맞는 플러그인 다운로드 후 설치
    • 예시: ELK 6.2.4 버전인 경우
      • search-guard-6-6.2.4-22.3.zip
      • search-guard-kibana-plugin-6.2.4-13.zip

Elasticsearch Plugin 설치

  • Elasticsearch Plugin 설치
    • $ ./bin/elasticsearch-plugin install -b file:///data/ELK/packages/6.2.4/search-guard-6-6.2.4-22.3.zip
  • Elasticsearch Plugin 설정
    • $ cd ./plugins/search-guard-6/tools
    • $ bash ./install_demo_configuration.sh
  • Elasticsearch 실행
    • $ ./bin/elasticsearch
    • 아래와 같이 에러 발생 시 조치
      •  max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
      • max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    • 조치 사항
      • Max Open file 을 위한 설정
        • /etc/systemd/system.conf 파일의 DefaultLimitNOFILE=65536 으로 설정
        • 리부팅 필요
      • VM 을 위한 설정
        • $ sudo sysctl -w vm.max_map_count=262144
  • Elasticsearch의 plugins/search-guard-/sgconfig의 설정 반영
    • $ cd ./plugins/search-guard-6/tools
    • $ ./sgadmin_demo.sh
  • 설치 검증하기
    • https://localhost:9200에 접속 후 SSL 인증창 보이면 정상 동작

Kibana Plugin 설치

  • Kibana Plugin 설치
    • $ ./bin/kibana-plugin install file:///data/ELK/packages/6.2.4/search-guard-kibana-plugin-6.2.4-13.zip
  • kibana.yml 설정
    • elasticsearch.username: "kibanaserver"
    • elasticsearch.password: "kibanaserver"
    • elasticsearch.url: "https://localhost:9200"
    • elasticsearch.ssl.verificationMode: none

Logstash 설정 예시

  • Logstash 설정
    • output {
    •     elasticsearch {
    •         hosts => "localhost"
    •         user => admin
    •         password => admin
    •         ssl => true
    •         ssl_certificate_verification => false
    •         ...
    •     }

패스워드 변경

  • elasticsearch-6.2.4/plugins/search-guard-6/tools/hash.sh를 사용하여 패스워드 생성
    • $ sh hash.sh
      • [Password:] XXX 입력
      • $2a$12$izzerIN4R.m6nCDNuCPtWOR/6n/LBudgjPLBS1naNptyF2VuUxwfe
  • 생성된 해쉬코드를 복사하여 elasticsearch-6.2.4/plugins/search-guard-6/sgconfig/sg_internal_users.yml 파일의 패스워드 변경하고자 하는 유저의 hash 값에 수정/추가
  • tools/sgadmin_demo.sh 파일을 실행하여 변경된 사항 적용
    • $ ./sgadmin_demo.sh

keystore/truststore 변경 (Option)

  • 직접 생성하지 않고 이미 생성되어 있는 것을 사용하는 경우 인증 정보 확인
    • $ keytool -list -v -keystore kirk.jks
      • 참고: install_demo_configuration.sh를 통해 생성된 kirk.jks 파일의 패스워드는 changeit
    • 이 설정 값은 install_demo_configuration.sh 쉘스크립트를 실행하면 자동으로 추가
  • keystore/truststore 생성
    • 자바에 포함된 보안관련 어플리케이션인 keytool을 사용
    • keystore 생성 (인증서)
      • $ keytool -genkey -alias hive-key -keyalg RSA -keypass changeit -storepass changeit -keystore keystore.jks
    • 위에서 생성한 keystore.jks 인증서를 server.cer 파일로 내보냄
      • $ keytool -export -alias hive-key -storepass changeit -file server.cer -keystore keystore.jks
    • truststore 파일을 만들고 인증서를 truststore에 추가
      • $ keytool -import -v -trustcacerts -file server.cer -keystore truststore.jks -keypass changeit
    • keystore.jks와 trusstore.jks 생성 완료

Brand 이미지로 변경

  • config/kibana.yml 아래 라인 추가
    • searchguard.basicauth.login.showbrandimage: true
    • searchguard.basicauth.login.brandimage: "이미지 URL 경로"
    • searchguard.basicauth.login.title: "Brand 타이틀"
    • searchguard.basicauth.login.subtitle: "Brand sub 타이틀"

Community Edition으로 사용하기

  • Community Edition은 라이센스가 필요하지 않음
  • Enterprise Edition을 설치한 후에 Commercial feature를 disable하면 됨
    • elasticsearch.yml 파일에 아래 라인 추가
      • searchguard.enterprise_modules_enabled: false


댓글

이 블로그의 인기 게시물

SSH 연결 Delay 해결

공공데이터(openapi) 사용법 (특정 정류소, 버스의 남은 좌석 확인 하기)