[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
댓글
댓글 쓰기