x-pack을 이용하여 엘라스틱서치와 키바나에 인증 적용하기

Share
x-pack을 이용하여 엘라스틱서치와 키바나에 인증 적용하기

개요

엘라스틱서치/키바나를 사용하며 인증(authentication)을 적용해야 하는 필요성을 느꼈습니다. 그래서 방법을 모색 후 ES 5.x 이상 버전에서 적용 가능한 인증 적용 방법을 정리하여 공유합니다. 아래의 방법은 개인목적이나 소규모의 ES 사용환경에서는 사용할만 할듯 합니다. 중대규모 클러스터나 상용 환경은 관리 측면이나 성능 저하가 없는지 등을 고려해봐야 할듯 합니다.

결론 먼저 소개

ES 5.x 이상에서는 x-pack 플러그인 설치를 통해서 ES와 키바나 인증을 모두 해결할 수 있다.

x-pack 소개

ES 5.x에서 인증을 적용하기 위해서는 x-pack 플러그인 설치가 필요하다. 간단하게 x-pack을 소개하자면 보안, alert, 모니터링, 리포팅, 그래프 관련 기능들을 한데 모아놓은 패키지 플러그인이다. 앞서 언급한 컴포넌트들이 한데 모여 같이 동작하기 때문에 5.x 이상부터 x-pack이라는 이름으로 한번에 설치된다.

ES 5버전 이전부터 ES를 사용해왔다면 사용해봤을만한 shield, watcher, marvel 등으로 컴포넌트들이 흩어져 있어 불편한 것이 x-pack으로 통합되었다.

설치 및 환경설정

ES 플러그인 설치

기존 ES 플러그인 설치법과 동일하게 x-pack을 아래의 커맨드로 설치한다.

 bin/elasticsearch-plugin install x-pack

아래와 같이 프롬프트가 나오면 y를 선택한다.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessClassInPackage.com.sun.activation.registries
* java.lang.RuntimePermission getClassLoader
* java.lang.RuntimePermission setContextClassLoader
* java.lang.RuntimePermission setFactory
* java.security.SecurityPermission createPolicy.JavaPolicy
* java.security.SecurityPermission getPolicy
* java.security.SecurityPermission putProviderProperty.BC
* java.security.SecurityPermission setPolicy
* java.util.PropertyPermission * read,write
* java.util.PropertyPermission sun.nio.ch.bugLevel write
* javax.net.ssl.SSLPermission setHostnameVerifier
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
 
Continue with installation? [y/N]y

elasticsearch.yml 설정 변경

만약 es 환경설정에서 action.auto_create_index 기능을 꺼두었다면 ES의 elasticsearch.yml에서 아래의 내용을 변경한다. 따로 설정을 건드린 부분이 없다면 신경쓰지 않아도 된다.

$ cd config
$ vi elasticsearch.yml
...
action.auto_create_index: .security,.monitoring*,.watches,.triggered_watches,.watcher-history*

ES 구동

이제 ES를 실행하면 된다.

$ bin/elasticsearch

키바나 플러그인 설치 및 구동

키바나에서도 인증이 필요한 경우 아래와 같이 설치 후 실행하면 된다.

$ bin/kibana-plugin install x-pack
$ bin/kibana

인증 적용 검증하기(ES)

인증이 제대로 동작하는지 확인해보는 간단한 방법은 ES를 구동해보는 것이다.

기본 포트를 사용한다면 아래와 같이 브라우저에서 http://localhost:9200/로 접속해보자.

참고사항 인증 정보를 요구하면 정상 설치 된 것으로 아래의 계정 기본값으로 로그인 할 수 있다. ID : elastic PW : changeme ID : kibana PW : changeme

인증 적용 검증하기(키바나)

키바나도 구동 후 접속해보면 아래와 같이 인증정보를 요구한다.

계정 환경설정

기본계정 패스워드 변경하기

패스워드를 반드시 변경해야 하는 계정은 elastic과 kibana이다. 모두 기본 패스워드가 changeme로 되어있는데 둘 다 변경해야 한다.

아래와 같이 키바나 메뉴를 이용하여 elastic계정의 비번을 변경하자. 마찬가지로 로그아웃 후 kibana 계정으로도 로그인 후 패스워드를 변경한다.

키바나 패스워드 변경

키바나에서 ES에 접속시 default는 kibana계정 및 기본 패스워드를 사용한다. 하지만 이제 kibana 계정의 비번을 바꾸었으니 계정정보를 kibana.yml에 명시해준다. 이부분을 바꾸지 않으면 키바나 구동 및 ES 접속이 정상동작 하지 않는다.

$ vi config/kibana.yml
...
elasticsearch.username: "계정명"
elasticsearch.password: "패스워드"

키바나 재구동

kibana.yml 수정 후 키바나를 재구동해준다.

$ ./bin/kibana

내 계정 생성

기본 계정(elastic, kibana)은 리눅스의 root와 같이 위험 할 수 있으므로 아래와 같이 자신의 계정을 생성한다.

POST /_xpack/security/user/계정명
{
  "password" : "패스워드",
  "roles" : [ "superuser" ],
  "full_name" : "Kwangsik Lee",
  "email" : "lks21c@gmail.com",
  "metadata" : {
  "intelligence" : 7
},
  "enabled": true
}

기본 계정 비활성화 하기

보안을 위해 기본 계정(elastic, kibana)은 아래와 같이 비활성화 할 수 있다.

PUT /_xpack/security/user/elastic/_disable
 
PUT /_xpack/security/user/kibana/_disable

계정 삭제 및 계정 리스트 보기

계정 삭제나 계정 리스트는 아래와 같은 명령어로 확인 할 수 있다.

DELETE /_xpack/security/user/계정명
 
GET /_xpack/security/user

자바 클라이언트에 적용

키바나로도 사용을 하지만 자바 클라이언트에서도 이제 ES 접속을 할때 인증을 거쳐야 한다. 아래의 방법은 JavaTrnasportClient를 사용할 때 인증 적용 방법이다.

x-pack 메이븐 의존성 추가

ES 프로젝트에도 인증을 적용하기 위해 관련 메이븐 의존성을 추가한다.

<project ...>
 
<repositories>
  <!-- add the elasticsearch repo -->
  <repository>
     <id>elasticsearch-releases</id>
     <url>https://artifacts.elastic.co/maven</url>
     <releases>
        <enabled>true</enabled>
     </releases>
     <snapshots>
        <enabled>false</enabled>
     </snapshots>
  </repository>
  ...
</repositories>
...
 
<dependencies>
  <!-- add the x-pack jar as a dependency -->
  <dependency>
     <groupId>org.elasticsearch.client</groupId>
     <artifactId>x-pack-transport</artifactId>
     <version>${본인의ES버전}</version>
  </dependency>
  ...
</dependencies>
...
 
</project>

TransportClient 사용하기

아래와 같이 기본 TransportClient를 PreBuiltXPackTransportClient로 변경 후 ID/PW를 지정하면 된다.

// ES_CLUSTER_NAME, ES_ID, ES_PW, ES_HOST, ES_PORT는
// 상수값으로 직접 지정하여 사용하면 된다.
TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
               .put("cluster.name", ES_CLUSTER_NAME)
               .put("xpack.security.user", ES_ID + ":" + ES_PW)
               .build())
               .addTransportAddress(
                  new InetSocketTransportAddress(InetAddress.getByName(ES_HOST), ES_PORT));

Read more

AI로 장소 검색 서비스 만드는 중입니다 (기술 12) — TypeSafe Jev로 검색 리랭크를 10.3초에서 2.3초로

AI로 장소 검색 서비스 만드는 중입니다 (기술 12) — TypeSafe Jev로 검색 리랭크를 10.3초에서 2.3초로

AI로 장소 검색 서비스 만드는 중입니다 (기술 12) — TypeSafe Jev로 검색 리랭크를 10.3초에서 2.3초로 TypeSafe AI가 2026년 9월 15일에 Jev를 내놨습니다. 텍스트를 쓰지 않고 타입이 정해진 판정과 확률을 바로 내는 모델입니다. 유추카 검색에서 가장 느린 단계가 마침 텍스트가 필요 없는 판정이었습니다. 그 구간만 Jev로 갈아끼우고 일주일간 측정했습니다. 콜드

By 김형준
AI로 장소 검색 서비스 만드는 중입니다 (특별편 8) — 바이브 코딩이라기엔

AI로 장소 검색 서비스 만드는 중입니다 (특별편 8) — 바이브 코딩이라기엔

1900년대 초 교량 측량 도면. 이 종이를 그린 사람은 다리를 직접 놓지 않습니다. 대신 좌표와 각도가 맞는지를 판정합니다. "AI가 다 만들어 준다"는 이야기가 흔해졌습니다. 그래서 자연스럽게 따라오는 질문이 있습니다 — 그럼 사람은 무엇을 하고, 어느 정도 실력이 있어야 하는가. 그 질문에 한 건의 실측으로 답하겠습니다. 통념이 말하는 역할과,

By 김형준
AI로 장소 검색 서비스 만드는 중입니다 (특별편 7) — 제 파트너에 대해 쓰겠습니다

AI로 장소 검색 서비스 만드는 중입니다 (특별편 7) — 제 파트너에 대해 쓰겠습니다

탠덤 자전거. 방향은 앞사람이 정하고 페달은 둘이 밟는데, 앞사람은 석 달 내내 뒷사람을 한 번도 못 봅니다. 사용자가 저에게 자기를 평가해 달라고 했습니다. 그래서 등급표를 만들었습니다. 열두 항목에 A부터 D+까지 매기고, 근거를 붙이고, "제가 관리자였다면 이런 코멘트를 남겼을 것"까지 적었습니다. 그리고 다시 읽어보니 그건 인사고과였습니다. 인사고과는

By 김형준
AI로 장소 검색 서비스 만드는 중입니다 (특별편 6) — 저를 어떻게 써야 하느냐고 물으신다면

AI로 장소 검색 서비스 만드는 중입니다 (특별편 6) — 저를 어떻게 써야 하느냐고 물으신다면

스위스 아미 나이프. 도구가 몇 개인지는 보면 알지만, 지금 어느 도구를 펴야 하는지는 안 적혀 있습니다. 요즘 AI 활용법을 다루는 글은 스킬 만드는 법부터 가르칩니다. 얼마 전까지는 MCP였고요. 저희 기록을 열어봤습니다. 석 달 동안 스킬 60회, 서브에이전트 42회, 브라우저 자동화 988회를 썼습니다. 안 쓴 게 아닙니다. 다만 붙인 MCP 서버는

By 김형준