• Elastic:为Elastic Docker部署设置安全


    文章转载自:https://elasticstack.blog.csdn.net/article/details/105710973

    创建docker-compose.yml

    在之前的教程中,那里使用的docker-compose.yml文件没有配置安全。我们需要重新修改:

    docker-compose.yml

    version: '3.0'
    services:
      es01:
        image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_STACK_VERSION}
        container_name: es01
        environment:
          - node.name=es01
          - discovery.seed_hosts=es02
          - cluster.initial_master_nodes=es01,es02
          - cluster.name=docker-cluster
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
          - xpack.security.enabled=true
          - xpack.security.transport.ssl.enabled=true
          - xpack.security.transport.ssl.keystore.type=PKCS12
          - xpack.security.transport.ssl.verification_mode=certificate
          - xpack.security.transport.ssl.keystore.path=elastic-stack-ca.p12
          - xpack.security.transport.ssl.truststore.path=elastic-stack-ca.p12
          - xpack.security.transport.ssl.truststore.type=PKCS12      
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - ./elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12
          - esdata01:/usr/share/elasticsearch/data
        ports:
          - 9200:9200
        networks:
          - esnet
      es02:
        image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_STACK_VERSION}
        container_name: es02
        environment:
          - node.name=es02
          - xpack.security.enabled=true
          - discovery.seed_hosts=es01
          - cluster.initial_master_nodes=es01,es02
          - cluster.name=docker-cluster
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - esdata02:/usr/share/elasticsearch/data
        networks:
          - esnet
     
      kibana:
        image: docker.elastic.co/kibana/kibana:${ELASTIC_STACK_VERSION}
        container_name: kibana
        ports: ['5601:5601']    
        networks: ['esnet']
        environment:
          - SERVER_NAME=kibana.localhost
          - ELASTICSEARCH_HOSTS=http://es01:9200
          - I18N_LOCALE=zh-CN
          - ELASTICSEARCH_USERNAME=elastic
          - ELASTICSEARCH_PASSWORD="123456"
        depends_on: ['es01']
     
    volumes:
      esdata01:
        driver: local
      esdata02:
        driver: local
     
    networks:
      esnet:
    

    为了能使得我们的docker-compose.yml适用更多的版本,我在上面添加一个ELASTIC_STACK_VERSION变量。我们需要在docker-compose.yml文件所处的文件目录下创建一个文件.env,并且它的内容是:

    ELASTIC_STACK_VERSION=7.6.2

    我们可以根据自己所需要的版本进行选择。另外一个重要的变化是在es01中,我加入了如下的部分:

          - xpack.security.enabled=true
          - xpack.security.transport.ssl.enabled=true
          - xpack.security.transport.ssl.keystore.type=PKCS12
          - xpack.security.transport.ssl.verification_mode=certificate
          - xpack.security.transport.ssl.keystore.path=elastic-stack-ca.p12
          - xpack.security.transport.ssl.truststore.path=elastic-stack-ca.p12
          - xpack.security.transport.ssl.truststore.type=PKCS12    
    

    按照Elasticsearch的要求,如果我们在docker的环境中启动xpack.security.enabled,我们必须也启动xpack.security.transport.ssl.enabled。否则,我们将会看到如下的错误信息:

    [1]: Transport SSL must be enabled if security is enabled on a [basic] license. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security by setting [xpack.security.enabled] to [false]

    因为需要有证书的原因,我同时也添加了如下的部分:

        volumes:
          - ./elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12
    

    在上面,我们把docker-compose.yml文件所在目录下的文件elastic-stack-ca.p12挂载到docker所在的目录中去。这个证书,我们将在如下的部分生成。

    针对Kibana的部分,我修改了如下的部分:

          - ELASTICSEARCH_USERNAME=elastic
          - ELASTICSEARCH_PASSWORD="123456"
    

    在这里,我们使用了一个账号叫做elastic/123456。这个账号需要我们在如下的步骤中来生成。

    创建证书

    就是上面所显示的那样,我们需要为TLS生成一个证书来进行配置。那么我们该如何生产这个证书呢?我们首先来启动一个Elasticsearch的实例。这个实例可以是按照我之前的“Elastic:菜鸟上手指南”中介绍的那样,我们创建一个Elasticsearch。

    在今天的教程中,我们将使用docker来创建一个Elasticsearch的实例:

    docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.2

    我们使用如下的命令:

    docker ps

    我们可以看到一个正在运行的Elasticsearch实例。请注意上面的container的名字为vigorous_goldstine。

    我们可以通过如下的命令进入到docker的容器中:

    docker exec -it vigorous_goldstine bash

    $ docker exec -it vigorous_goldstine bash
    [root@2b7a12d54c14 elasticsearch]# ls
    LICENSE.txt  README.asciidoc  config  jdk  logs     plugins
    NOTICE.txt   bin              data    lib  modules
    

    我们接着使用如下的命令:

    ./bin/elasticsearch-certutil ca

    我们接受默认的文件名elastic-stack-ca.p12:

    ls
    LICENSE.txt  README.asciidoc  config  elastic-stack-ca.p12  lib   modules
    NOTICE.txt   bin              data    jdk                   logs  plugins
    

    这样我们就生成了一个叫做elastic-stack-ca.p12的证书文件。我们接着输入命令exit退出container环境。

    接着我们进入到docker-compose.yml文件所处的目录:

    $ pwd
    /Users/liuxg/elastic/docker
    liuxg:docker liuxg$ ls
    docker-compose.yml
    

    我们打入如下的命令:

    docker cp vigorous_goldstine:/usr/share/elasticsearch/elastic-stack-ca.p12 .

    经过这样的拷贝后,我们可以看到当前目录下所有的文件:

    $ pwd
    /Users/liuxg/elastic/docker
    liuxg:docker liuxg$ ls
    docker-compose.yml   elastic-stack-ca.p12
    

    我们已经使用完这个docker,我们可以把这个docker进行销毁:

    $ docker stop vigorous_goldstine
    $ docker rm vigorous_goldstine
    

    现在我们的准备工作已经完成,我们接下来的工作就是来为我们的Elasticsearch生成用户名及密码。

    生产安全账号

    如果目前,我们一下子启动Elasticsearch和Kibana的话,我们是没有任何的账号的。我们可以分部启动Elasticsearch及Kibana。
    启动Elasticsearch

    在我们的termninal中,进入到docker-compose.yml所处的目录中:

    docker-compose up -d es01

    显示结果为:

    $ docker-compose up -d es01
    Starting es01 ... done
    

    我们可以通过命令来检查这个被启动的container:

    $ docker ps
    CONTAINER ID        IMAGE                                                 COMMAND                  CREATED             STATUS              PORTS                              NAMES
    0f764e16c163        docker.elastic.co/elasticsearch/elasticsearch:7.6.2   "/usr/local/bin/dock…"   5 minutes ago       Up About a minute   0.0.0.0:9200->9200/tcp, 9300/tcp   es01
    

    从上面我们可以看出来:Elasticsearch绑定的地址为0.0.0.0,也就是说它绑定于所有的网络接口的地址上。它同时可以被localhost:9200访问,也可以被自己的私有地址 PrivateIP:9200所访问。我们打开一个浏览器,并输入localhost:9200:

    我们可以看到:当我们试图去访问的时候,它让我们输入用户名及密码。而这个用户名及密码,我们还没创建呢。

    接下来我们来登录到我们的Elasticsearch的容器中:

    docker-compose exec es01 bash

    $ docker-compose exec es01 bash
    [root@496d9f848178 elasticsearch]# ls
    LICENSE.txt  README.asciidoc  config  jdk  logs     plugins
    NOTICE.txt   bin              data    lib  modules
    

    我们在该目录下打入如下的命令:

    ./bin/elasticsearch-setup-passwords interactive

    然后,我们按照提示把密码都设置为123456。

    设置完毕后,我们退出来。再次在localhost:9200上输入elastic/123456这个账号:

    这样我们的Elasticsearch的安全就设置好了。

    启动Kibana

    同样的方法,我们使用如下的命令:

    $ docker-compose up -d kibana

    $ docker-compose up -d kibana
    es01 is up-to-date
    Creating kibana ... done
    liuxg:docker liuxg$ docker ps
    CONTAINER ID        IMAGE                                                 COMMAND                  CREATED             STATUS              PORTS                              NAMES
    17c2273346bd        docker.elastic.co/kibana/kibana:7.6.2                 "/usr/local/bin/dumb…"   18 seconds ago      Up 18 seconds       0.0.0.0:5601->5601/tcp             kibana
    496d9f848178        docker.elastic.co/elasticsearch/elasticsearch:7.6.2   "/usr/local/bin/dock…"   2 hours ago         Up 2 hours          0.0.0.0:9200->9200/tcp, 9300/tcp   es01
    

    我们可以通过如下的命令来监测Kibana的运行log:

    $ docker-compose logs -f kibana

    $ docker-compose logs -f kibana
    Attaching to kibana
    kibana    | {"type":"log","@timestamp":"2020-04-23T11:19:36Z","tags":["info","plugins-service"],"pid":6,"message":"Plugin "case" is disabled."}
    kibana    | {"type":"log","@timestamp":"2020-04-23T11:19:51Z","tags":["warning","config","deprecation"],"pid":6,"message":"Setting [elasticsearch.username] to "elastic" is deprecated. You should use the "kibana" user instead."}
    kibana    | {"type":"log","@timestamp":"2020-04-23T11:19:51Z","tags":["warning","config","deprecation"],"pid":6,"message":"Setting [xpack.monitoring.elasticsearch.username] to "elastic" is deprecated. You should use the "kibana" user instead."}
    kibana    | {"type":"log","@timestamp":"2020-04-23T11:19:51Z","tags":["info","plugins-system"],"pid":6,"message":"Setting up [37] plugins: [taskManager,siem,licensing,infra,encryptedSavedObjects,code,usageCollection,metrics,canvas,timelion,features,security,apm_oss,translations,reporting,uiActions,data,navigation,status_page,share,newsfeed,inspector,expressions,visualizations,embeddable,advancedUiActions,dashboard_embeddable_container,kibana_legacy,management,dev_tools,home,spaces,cloud,apm,graph,eui_utils,bfetch]"}
    ...
    

    稍等片刻,在我们的浏览器中输入地址localhost:5601:

    在启动的画面,它提示我们输入用户名及密码。我们把账号信息elastic/123456。这样就可以登录了:

    这样我们的配置就完成了。如果你想把整个Elastic Stack关掉,你可以通过如下的命令:

    docker-compose down

    $ docker-compose down
    Stopping kibana ... done
    Stopping es01   ... done
    Removing kibana ... done
    Removing es01   ... done
    Removing network docker_esnet
    

    如果你下次想再用你这个集群,你只需要打入如下的命令:

    docker-compose up

    $ docker-compose up
    Creating network "docker_esnet" with the default driver
    Creating es01 ... done
    Creating es02 ... done
    Creating kibana ... done
    Attaching to es02, es01, kibana
    es01      | OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
    es02      | OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
    es01      | {"type": "server", "timestamp": "2020-04-23T11:27:10,816Z", "level": "INFO", "component": "o.e.e.NodeEnvironment", "cluster.name": "docker-cluster", "node.name": "es01", "message": "using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda1)]], net usable_space [40gb], net total_space [58.4gb], types [ext4]" }
    ...
    

    那么整个Elastic Stack (Elasticsearc及Kibana)就会一键启动。

    Beats 访问Elasticsearch

    当我们部署完Elasticsearch集群后,在以后,我们可能需要把数据导入到Elasticsearch中。上面我们一直在使用localhost:9200地址。但是这个是针对在本地的机器而言的。如果你的beats是在另外一个机器上 (在同一个局域网上),那么你需要使用 PrivateIP:9200地址来进行写入。这里的private IP可以通过如下的命令来获得:

    ifconfig | grep 192

    针对我的情况:

     ifconfig | grep 192
    	inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255
    

    也就是我可以通过192.168.0.100:9200的端口进行访问:

    好了今天就讲到这里。在今天的文章中,我们详细地介绍了如何为docker创建的Elasticsearch集群配置安全。
    更进一步

    如果你想使用Docker部署一个更为完整的Elastic Stack,你可以参考Elastic官方的仓库https://github.com/elastic/stack-docker。

  • 相关阅读:
    小程序开发点滴积累
    使用openssl在windows 10下本地xampp配置https开发环境
    linux networking
    CGI,FastCGI,PHP-FPM,PHP-CLI,modPHP
    centos 7.2 64位 docker安装lamp环境
    反模拟类游戏外挂 转
    鼠标 hook 源码 C#版
    C# 鼠标连击源码 转
    win32 API 在win10 64位失效
    利用浏览器外部协议(URL Procotol)打开本地exe文件
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/13360265.html
Copyright © 2020-2023  润新知