Kibana Authentication with nginx proxy

kibana에 id/password 기반의 auth 적용

  • 현재 운영하고 있는 클러스터는 readonly-rest plugin을 사용해서 acl을 적용해 놓은 상태이기 때문에
    cluster에는 security(x-pack feature)를 적용하고 싶지 않고, kibana에만 id/password를 치고 로그인을 하고 싶었습니다.
  • 이런 경우 내가 security를 사용할 수 있는 subscription을 구매해서 가지고 있다고 하더라도 elastic에서 제공하는 방법으로는 불가능 합니다.
    그래서 nginxreverse proxy를 사용해서 kibana 앞단에 두고 로그인을 해야만 kibana를 접속 할 수 있도록 하는 방법에 대해서 포스팅 하려고 합니다.

yum/apt 를 사용하여 install 해도 전혀 무방하지만 저는 특정 위치에 설치하는것을 선호 하기 때문에 직접 소스코드를 컴파일 하는 방향으로 설명 하겠습니다.

# nginx 다운로드

먼저 nginx gzip 파일을 다운로드 받고 압축을 해제 합니다.

1
2
3
wget http://nginx.org/download/nginx-1.14.1.tar.gz
tar xvfz nginx-1.14.1.tar.gz
cd nginx-1.14.1

pcre & openssl 설치

pcre와 openssl 은 기본적으로 요구하는것 같으니 해당 파일들을 다운로드 받아서 압축을 해제 합니다. (기존에 설치되어 있고, 경로를 알고 있다면 이 작업은 필요 없습니다.) 압축은 nginx 압출 푼 디렉토리에서 진행하는게 나중에 정리할때 편합니다.

1
2
3
4
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz
tar xvfz pcre-8.42.tar.gz
tar xvfz openssl-1.1.1a.tar.gz

** + 2018-11-19 추가: ** 다른 고객사의 서버 에서는 zlib도 설치하는걸 요구해서 zlib 도 추가로 설치했습니다.

1
2
wget https://zlib.net/zlib-1.2.11.tar.gz
tar xvfz zlib-1.2.11.tar.gz

# configure, make&&make install

–prefix –with-pcre와 –with-openssl 옵션을 붙여서 configure 합니다. (필요하면 zlib 추가)

1
2
3
./configure --prefix=/nakjunizm/util/nginx --user=nakjunizm--group=nakjunizm --with-pcre=/nakjunizm/util/nginx-1.14.1/pcre-8.42 --with-openssl=/nakjunizm/util/nginx-1.14.1/openssl-1.1.1 --with-zlib=/nakjunizm/util/nginx-1.14.1/zlib-1.2.11

make&&make install

# temp directory 및 설치 파일 삭제

나중에 까먹을수도 있으니 작업한 파일들은 삭제 합시다.

1
2
cd ..
rm -rf nginx-1.14.1.tar.gz nginx-1.14.1

# id/password 기반의 authentication 설정

지금 까지는 nginx 설치과정이었고 이제부터 실제로 htpd-tools를 사용하여 패스워드 파일을 만들고, nginx에 reverse proxy 설정을 하여 id/password 를 적용해 보겠습니다.

# httpd-tools

nginx는 httpd-tools를 설치하고 htpasswd 명령어를 사용해서 만든 htpasswd 파일을 사용해서 로그인을 구현할 수 있습니다. 혹시 httpd-tools가 설치되어 있지 않다면 설치 후 아래와 같이 패스워드 파일을 만들어 줍시다.

1
2
3
4
5
nakjunizm@myserver:/nakjunizm/util/nginx$ sudo htpasswd -c /nakjunizm/util/nginx/userdata/htpasswd.users kibana

New password:
Re-type new password:
Adding password for user kibana

# nginx.conf 파일 수정

server 디렉티브를 찾아서 proxy와 auth 관련 설정을 추가해 줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vi nginx.conf
--------------
server {
listen 5602;
server_name localhost;

location / {

proxy_pass http://127.0.0.1:5600;
auth_basic "Restricted";
auth_basic_user_file /nakjunizm/util/nginx/userdata/htpasswd.users;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

위와 같이 간단히 설정을 하고 나면 http://nginx서버ip:5602 로 접속하면 127.0.0.1:5600 으로 넘겨주고, user/password 를 물어보는 팝업창이 나타납니다.

# kibana.yml 파일 수정

이제 kibana 5602 포트는 nginx에서 사용할 것이니 이제부터 kibana는 nginx에 설정한대로 5600번 포트로 띄울것 입니다.
** 그리고 직접 5600 포트를 치고 다이렉트로 들어올 수 있으면 지금 하고 있는 모든 작업이 의미없는 작업이 될 수 있으므로 ** server.host 를 127.0.0.1 로 바꿔 줍니다

1
2
3
4
vi kibana.yml
--------------
server.port: 5600
server.host: "127.0.0.1"

# kibana & nginx 재시작

모든 설정이 완료되었으므로 kibana를 재시작 하고, nginx를 시작 합니다. ngingx의 경우 sbin 경로를 따로 빼서 설치하지 않았음으로 설치위치/sbin/nginx 로 실행 합니다.

1
cd /nakjunizm/util/nginx/sbin ./nginx
#참고
  • 중지: ./nginx -s stop
  • 설정새로고침: ./nginx -s reload

# 접속 확인

이제 http://nginx-ip:5602로 접속 해서 정상적으로 로긴 화면이 나오는지 확인 합니다.

nginx_login

# 참고한 사이트

http://nginx.org/en/docs/configure.html
https://www.hugeserver.com/kb/how-secure-kibana-nginx-centos/

Share