SRE/ELK

Kafka + Elasticsearch + Kibana + Docker-compose로 Xpack 보안 인증 구축

Say simple 2023. 6. 21. 13:57
728x90
반응형

Kafka Sink Connector + Elasticsearch + Kibana를 Docker-compose를 이용해 Xpack이 적용된 형태로 구축했다.

아래 스크립트는 카프카 싱크 커넥터를 설치하는 스크립트이다.

#!/bin/bash
 
FILE="./connect-plugins/confluentinc-kafka-connect-elasticsearch-14.0.3"

curl -X DELETE http://localhost:8083/connectors/elasticsearch-sink
 
if [ ! -e $FILE ]; then
  curl -o ./connect-plugins/confluentinc-kafka-connect-elasticsearch-14.0.3.zip https://d1i4a15mxbxib1.cloudfront.net/api/plugins/confluentinc/kafka-connect-elasticsearch/versions/14.0.3/confluentinc-kafka-connect-elasticsearch-14.0.3.zip

  unzip ./connect-plugins/confluentinc-kafka-connect-elasticsearch-14.0.3.zip
  rm -f ./connect-plugins/confluentinc-kafka-connect-elasticsearch-14.0.3.zip
fi

curl -X POST http://localhost:8083/connectors -H 'Content-Type: application/json' -d \
'{
  "name": "elasticsearch-sink",
  "config": {
    "connector.class": "io.confluent.connect.elasticsearch.ElasticsearchSinkConnector",
    "tasks.max": "1",
    "topics": "log",
    "key.ignore": "true",
    "schema.ignore": "true",
    "connection.url": "http://000.000.000.000:9200",
    "type.name": "_doc",
    "name": "elasticsearch-sink",
    "key.converter": "org.apache.kafka.connect.json.JsonConverter",
    "value.converter": "org.apache.kafka.connect.json.JsonConverter",
    "key.converter.schemas.enable": "false",
    "value.converter.schemas.enable": "false",
    "connection.username": "elastic",
    "connection.password": "changeme"
  }
}'

connection.username과 connection.password 쪽을 보면 인증에 필요한 정보를 전달하는 것을 볼 수 있다. 이제 카프카 커넥트 설정이 완료 되었으니 엘라스틱서치랑 키바나에 설정을 해주자.

version: '3.9'
services:
  elasticsearch:
    container_name: elastic
    image: docker.elastic.co/elasticsearch/elasticsearch:8.8.1
    ports:
      - '9200:9200'
      - '9300:9300'
    environment:
      - xpack.security.enabled=true
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - 'ES_JAVA_OPTS=-Xms1024m -Xmx1024m'
      - 'LS_JAVA_OPTS=-Xmx1024m -Xms1024m'
      - cluster.routing.allocation.disk.threshold_enabled=false
      - TZ=Asia/Seoul
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./data:/usr/share/elasticsearch/data

  kibana:
    container_name: kibana
    image: docker.elastic.co/kibana/kibana:8.8.1
    ports:
      - 5601:5601
    environment:
      - ELASTICSEARCH_HOSTS=http://000.000.000.000:9200 
      - ELASTICSEARCH_USERNAME=kibana_system
      - ELASTICSEARCH_PASSWORD="changeme"
    volumes:
      - ./kibana:/usr/share/kibana/data
        # - type: bind
        # source: ./kibana/config/kibana.yml
        # target: /usr/share/kibana/config/kibana.yml

엘라스틱서치의 docker-compose.yml 파일이다.

xpack.security.enabled=true

로 설정해 xpack을 활성화 시켰으며

키바나에서는 

- ELASTICSEARCH_USERNAME=kibana_system
- ELASTICSEARCH_PASSWORD="changeme"

를 추가해서 인증에 필요한 정보를 설정했다.

주석된 부분은 키바나의 설정 파일을 바인딩 하는 부분으로써 설정 파일을 직접 적용할 경우 주석을 해제한다. 아닐 경우엔 자동 생성된 설정 파일을 사용해도 무관하다.

이제 docker-compose up --build -d 명령어를 이용해 도커 컨테이너를 생성하면

docker exec -it elastic /bin/bash

명령어를 이용해 엘라스틱서치 ssh로 연결할 수 있다.

아래 명령어를 엘라스틱서치 쉘에서 입력하면 비밀번호를 변경할 수 있다.

./bin/elasticsearch-setup-passwords interactive

 

이제 changeme 부분을 변경한 비밀번호로 바꿔주자. 그리고 도커를 다시 빌드해주면 키바나가 정상적으로 작동하는 것을 볼 수 있다.

docker-compose up --build -d

 

이제 엘라스틱서치 주소로 접속하면 아래와 같이 인증 메세지를 확인할 수 있다.

키바나에서도 마찬가지로 로그인 화면을 볼 수 있다.

 

728x90
반응형