Monitoring으로 로그 표시(인증+TLS 유효판)
                                            
                                                
                                                
                                                
                                                
                                                
                                                 14412 단어  7.28.07.1키바나Elasticsearch
                    
소개
일본이 영화를 맞이했을 무렵, Elastic에서는 BASIC 서브스크립션으로 Security가 유효하게 되었습니다!
(게다가 갱신이 멈췄다고 생각되고 있던 6계에도 백포트되어 6.8가!)
이번에는 이전 Monitoring으로 로그 보기 에서 만든 docker-compose.yml 에서도 보안을 활성화해 보겠습니다.
(2019.05.20 추가) 보안을 활성화하면 TLS도 활성화하지 않으면 화나게 됩니다.
 준비
다음을 보면서 컨테이너에서 TLS를 사용할 수 있습니다.
 설정 변경
 docker-compose.yml 수정
elasticsearch에서 보안을 활성화하고 kibana에서 사용자 이름과 암호를 지정합니다.
패스워드는 ELASTIC_PASSWORD 로 지정하고 있습니다만, 어디까지나 테스트라고 하는 것으로 적당한 것을 지정하고 있습니다 (실제로 사용할 때는, 제대로 설정하지 않으면입니다만).
docker-compose.ymlversion: '2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.0.0-SNAPSHOT
    container_name: elasticsearch4
    environment:
      - cluster.name=docker-cluster
      - node.name=node-1
      - cluster.initial_master_nodes=node-1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - path.repo=/usr/share/elasticsearch/snapshots
      - xpack.security.enabled=true
      - ELASTIC_PASSWORD=elastic
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.security.transport.ssl.key=$CERTS_DIR/elasticsearch4/elasticsearch4.key
      - xpack.security.transport.ssl.certificate=$CERTS_DIR/elasticsearch4/elasticsearch4.crt
      - xpack.security.transport.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata1:/usr/share/elasticsearch/data
      - ./certs:$CERTS_DIR
    ports:
      - 9204:9200
    networks:
      - esnet
  kibana:
    image: docker.elastic.co/kibana/kibana:8.0.0-SNAPSHOT
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch4:9200
      - ELASTICSEARCH_USERNAME=elastic
      - ELASTICSEARCH_PASSWORD=elastic
    container_name: kibana4
    ports:
      - 5605:5601
    networks:
      - esnet
  beats:
    image: docker.elastic.co/beats/filebeat:8.0.0-SNAPSHOT
    container_name: beats4
    user: root
    environment:
      - ELASTICSEARCH_CONTAINER_NAME=elasticsearch4
      - ELASTICSEARCH_HOSTS=http://elasticsearch4:9200
      - KIBANA_HOST=http://kibana4:5601
    volumes:
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./filebeat.yml:/usr/share/filebeat/filebeat.yml
    networks:
      - esnet
volumes:
  esdata1:
    driver: local
networks:
  esnet:
docker-compose.yml 와 같은 디렉토리에 .env 도 만들어 둡니다.
.envCERTS_DIR=/usr/share/elasticsearch/config/certs
 filebeat.yml 수정
filebeat.yml 그러나 사용자 이름과 암호를 지정합니다.
filebeat.ymlfilebeat.autodiscover:
  providers:
    - type: docker
      labels.dedot: true
      templates:
        - condition:
            contains:
              docker.container.name: ${ELASTICSEARCH_CONTAINER_NAME:elasticsearch}
          config:
             - module: elasticsearch
               server:
                 enabled: true
                 input:
                   type: docker
                   containers.ids:
                     - "${data.docker.container.id}"
setup.kibana:
  host: "${KIBANA_HOST:kibana:5601}"
  username: elastic
  password: elastic
output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
  username: elastic
  password: elastic
 부팅
다음 명령으로 컨테이너를 시작합니다.
$ docker-compose up -d
문제가 없으면 로그를 수집하고 Monitoring에서 로그를 볼 수 있어야합니다.
하지만 Monitoring을 보면 다음과 같은 오류 메시지가 나타납니다.
[illegal_argument_exception] Fielddata is disabled on text fields by default. Set fielddata=true on [event.dataset] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.: Check the Elasticsearch Monitoring cluster network connection or the load level of the nodes.
 무슨 일이야?
Set fielddata=true on [event.dataset] 
라고 표시됩니다. Mapping을 보면...
{
   "mapping": {
     "properties": {
       "@timestamp": {
         "type": "date"
       },
(snip)
       "event": {
         "properties": {
           "created": {
             "type": "date"
           },
           "dataset": {
             "type": "text",
             "fields": {
               "keyword": {
                 "type": "keyword",
                 "ignore_above": 256
               }
             }
           },
(snip)
}
event.dataset 하지만 text 형이 되어 버리고 있네요・・・
template가 들어갈 것이므로, 제대로 event.dataset 는 keyword 형이 될 것인데.
Filebeat의 처리를 제대로 본 것은 아닙니다만, 아무래도 template가 등록되기 전에 Rollover용 Index( filebeat-8.0.0-{now/d}-000001 )가 등록되어 버리는 것 같습니다.
 
ILM도 활성화되지 않았습니다.
하는 일은 같을 것인데, 왜 전에는 잘 했을까? ? ?
template가 남아 있었는지...
-> 버그였던 것 같다. 지금 (2019.05.15 현재는 수정되었습니다)
게다가 보안에 관계없고 orz
 다루다
아래의 순서로 기동해 봅니다.
version: '2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.0.0-SNAPSHOT
    container_name: elasticsearch4
    environment:
      - cluster.name=docker-cluster
      - node.name=node-1
      - cluster.initial_master_nodes=node-1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - path.repo=/usr/share/elasticsearch/snapshots
      - xpack.security.enabled=true
      - ELASTIC_PASSWORD=elastic
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.security.transport.ssl.key=$CERTS_DIR/elasticsearch4/elasticsearch4.key
      - xpack.security.transport.ssl.certificate=$CERTS_DIR/elasticsearch4/elasticsearch4.crt
      - xpack.security.transport.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata1:/usr/share/elasticsearch/data
      - ./certs:$CERTS_DIR
    ports:
      - 9204:9200
    networks:
      - esnet
  kibana:
    image: docker.elastic.co/kibana/kibana:8.0.0-SNAPSHOT
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch4:9200
      - ELASTICSEARCH_USERNAME=elastic
      - ELASTICSEARCH_PASSWORD=elastic
    container_name: kibana4
    ports:
      - 5605:5601
    networks:
      - esnet
  beats:
    image: docker.elastic.co/beats/filebeat:8.0.0-SNAPSHOT
    container_name: beats4
    user: root
    environment:
      - ELASTICSEARCH_CONTAINER_NAME=elasticsearch4
      - ELASTICSEARCH_HOSTS=http://elasticsearch4:9200
      - KIBANA_HOST=http://kibana4:5601
    volumes:
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./filebeat.yml:/usr/share/filebeat/filebeat.yml
    networks:
      - esnet
volumes:
  esdata1:
    driver: local
networks:
  esnet:
CERTS_DIR=/usr/share/elasticsearch/config/certs
filebeat.autodiscover:
  providers:
    - type: docker
      labels.dedot: true
      templates:
        - condition:
            contains:
              docker.container.name: ${ELASTICSEARCH_CONTAINER_NAME:elasticsearch}
          config:
             - module: elasticsearch
               server:
                 enabled: true
                 input:
                   type: docker
                   containers.ids:
                     - "${data.docker.container.id}"
setup.kibana:
  host: "${KIBANA_HOST:kibana:5601}"
  username: elastic
  password: elastic
output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
  username: elastic
  password: elastic
$ docker-compose up -d
[illegal_argument_exception] Fielddata is disabled on text fields by default. Set fielddata=true on [event.dataset] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.: Check the Elasticsearch Monitoring cluster network connection or the load level of the nodes.
Set fielddata=true on [event.dataset] 
{
   "mapping": {
     "properties": {
       "@timestamp": {
         "type": "date"
       },
(snip)
       "event": {
         "properties": {
           "created": {
             "type": "date"
           },
           "dataset": {
             "type": "text",
             "fields": {
               "keyword": {
                 "type": "keyword",
                 "ignore_above": 256
               }
             }
           },
(snip)
}
docker-compose up -d elasticsearch kibana docker-compose run beats setup -e --modules elasticsearch DELETE filebeat-* docker-compose up -d beats Rollover용 Index는 다음과 같은 느낌으로 등록합니다.
PUT %3Cfilebeat-8.0.0-%7Bnow%2Fd%7D-000001%3E
{
   "aliases": {
     "filebeat-8.0.0": {}
   }
}
그래서 다시 Index를 확인하면 ...

제대로 된 것 같습니다.
결론
보안 자체는 아무런 문제없이 사용할 수있었습니다.
라고 할까, BASIC로 시큐리티가 유효하게 되는 것은 좋네요. 빨리 공식 출시되기를 바랍니다.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Monitoring으로 로그 표시(인증+TLS 유효판)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/tak7iji/items/3d8c5b044152016e1d96
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
Reference
이 문제에 관하여(Monitoring으로 로그 표시(인증+TLS 유효판)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tak7iji/items/3d8c5b044152016e1d96텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)