Search Guard 기반 Elasticsearch 보안 인증 및 인증 구성

31431 단어 elastic

기사 목록

  • Install the Search Guard Plugin for your Elasticsearch version
  • Disable shard allocation
  • Stop all nodes
  • Download
  • Install
  • Generate all required TLS certificates
  • 오프라인 TLS 도구 다운로드
  • Config node- and certificate configuration settings
  • Generate Root and Intermediate CA
  • Generate Node and Client CA
  • Config SSL
  • distribute cetificates
  • Change the permission on directory of/config
  • Disable X-Pack security
  • Adding the TLS configuration
  • Enable the REST management API
  • Restart Elasticsearch
  • Re-enable shard allocation by using sgadmin
  • Initializing Search Guard
  • Change the permissions on that script and give it execution rights
  • Using sgadmin with PEM certificates
  • Test the installation
  • visiting https://es1:9200
  • Display information about the currently logged in user
  • Search Guard Health Check
  • Accessing data Check
  • Config Kibana
  • Installing the Search Guard Plugin
  • Disable X-Pack Security
  • Configuring the Kibana server user
  • Setting up SSL/TLS
  • Configuring the Root CA
  • Config logstash
  • Check permissions for the logstash user
  • set up a logstash user
  • Setting up TLS/SSL

  • Install the Search Guard Plugin for your Elasticsearch version


    Disable shard allocation

    curl -XPUT 'http://es1:9200/_cluster/settings?pretty' -H 'Content-Type: application/json' -d'
    {
      "persistent": {
        "cluster.routing.allocation.enable": "none"
      }
    }
    '
    

    다음 명령을 실행하려면 설정이 적용되는지 확인하십시오.
    curl -XGET 'http://es1:9200/_cluster/settings?pretty'
    

    다음 결과를 출력하면 구성이 성공했음을 나타냅니다.
    {
      "persistent" : {
        "cluster" : {
          "routing" : {
            "allocation" : {
              "enable" : "none"
            }
          }
        }
      },
      "transient" : { }
    }
    

    Stop all nodes


    다음 명령을 사용하여 ES 서비스의 프로세스 번호를 조회합니다(9200 포트 및 9300 포트를 사용하는 프로세스).
    netstat -tnlp
    kill -9  
    

    Download


    Search Guard Plugin 버전과 Elasticsearch 버전 간의 대응 관계에 대해서는 다음을 참조하십시오.https://docs.search-guard.com/latest/search-guard-versions
    여기는elasticsearch-6.6.1을 예로 들어 설명합니다. 생산 서버가 네트워크에 연결할 수 없기 때문에 여기는 오프라인 방식으로 설치하고 Search Guard Plugin을 다운로드합니다.
    다운로드 주소:https://oss.sonatype.org/service/local/repositories/releases/content/com/floragunn/search-guard-6/6.6.1-24.3/search-guard-6-6.6.1-24.3.zip

    Install


    search-guard-6.6.1-24.3.zip는 es가 있는 서버 노드로 복사하여/bin 디렉터리에 들어가 다음 명령을 실행하여 설치합니다
    ./elasticsearch-plugin install -b file:///usr/local/hadoop/elasticsearch/search-guard-6-6.6.1-24.3.zip
    

    구체적인 설치 절차는 홈페이지를 참고할 수 있다.https://docs.search-guard.com/6.x-24/search-guard-installation#adding-the-tls-configuration

    Generate all required TLS certificates


    참조:https://docs.search-guard.com/6.x-24/offline-tls-tool

    오프라인 TLS 도구 다운로드


    다운로드 주소:https://search.maven.org/#search|ga|1|a%3A"search-guard-tlstool"
    여기 다운로드된 건 Search-guard-tlstool-1.7.tar.gz
    tar -zxvf search-guard-tlstool-1.7.tar.gz -C search-guard-tlstool // 
    

    Config node- and certificate configuration settings


    /config 디렉토리 가져오기
    cp example.yml tlsconfig.yml
    vi  tlsconfig.yml
    

    Generate Root and Intermediate CA


    수정된 Self-generated certificate authority 부분은 다음과 같습니다.
    ca:
       root:
          # The distinguished name of this CA. You must specify a distinguished name.   
          dn: CN=root.ca.tomas.com,OU=CA,O=tomas,DC=tomas,DC=com
    
          # The size of the generated key in bits
          keysize: 2048
    
          # The validity of the generated certificate in days from now
          validityDays: 3650
          
          # Password for private key
          #   Possible values: 
          #   - auto: automatically generated password, returned in config output; 
          #   - none: unencrypted private key; 
          #   - other values: other values are used directly as password   
          pkPassword: root-ca-password
          
          # The name of the generated files can be changed here
          file: root-ca.pem
          
       # If you want to use an intermediate certificate as signing certificate,
       # please specify its parameters here. This is optional. If you remove this section,
       # the root certificate will be used for signing.         
       intermediate:
          # The distinguished name of this CA. You must specify a distinguished name.
          dn: CN=signing.ca.tomas.com,OU=CA,O=tomas,DC=tomas,DC=com
       
          # The size of the generated key in bits   
          keysize: 2048
          
          # The validity of the generated certificate in days from now      
          validityDays: 3650
      
          pkPassword: intermediate-ca-password
    
          file: intermediate-ca.pem
    
          # If you have a certificate revocation list, you can specify its distribution points here      
          # crlDistributionPoints: URI:https://raw.githubusercontent.com/floragunncom/unittest-assets/master/revoked.crl
    

    /tools 디렉터리에 들어가서 다음 명령을 실행하여 루트와 Intermediate 인증서를 생성합니다
    ./sgtlstool.sh -c ../config/tlsconfig.yml -ca
    

    다음과 같은 정보를 제시하면 Root와intermediate 인증서 생성이 성공했음을 나타냅니다.
    Root certificate and signing certificate have been sucessfully created.
    

    생성된 인증서는 기본적으로/tools/out 디렉터리에 저장됩니다.

    Generate Node and Client CA


    수정된 Default values and global settings 부분은 다음과 같습니다.
    defaults:
    
          # The validity of the generated certificate in days from now
          validityDays: 3650 
          
          # Password for private key
          #   Possible values: 
          #   - auto: automatically generated password, returned in config output; 
          #   - none: unencrypted private key; 
          #   - other values: other values are used directly as password   
          pkPassword: auto      
          
          # Specifies to recognize legitimate nodes by the distinguished names
          # of the certificates. This can be a list of DNs, which can contain wildcards.
          # Furthermore, it is possible to specify regular expressions by
          # enclosing the DN in //. 
          # Specification of this is optional. The tool will always include
          # the DNs of the nodes specified in the nodes section.            
          nodesDn:
           - "CN=*.tomas.com,OU=Ops,O=tomas,DC=tomas,DC=com"
          # - 'CN=node.other.com,OU=SSL,O=Test,L=Test,C=DE'
          # - 'CN=*.example.com,OU=SSL,O=Test,L=Test,C=DE'
          # - 'CN=elk-devcluster*'
          # - '/CN=.*regex/' 
    
          # If you want to use OIDs to mark legitimate node certificates, 
          # the OID can be included in the certificates by specifying the following
          # attribute
          
          nodeOid: "1.2.3.4.5.5"
    
          # The length of auto generated passwords            
          generatedPasswordLength: 12
          
          # Set this to true in order to generate config and certificates for 
          # the HTTP interface of nodes
          httpsEnabled: true
          
          # Set this to true in order to re-use the node transport certificates
          # for the HTTP interfaces. Only recognized if httpsEnabled is true
          
          reuseTransportCertificatesForHttp: false
          
          # Set this to true to enable hostname verification
          #verifyHostnames: false
          
          # Set this to true to resolve hostnames
          #resolveHostnames: false
    

    수정된 Nodes 섹션은 다음과 같이 구성됩니다.
    nodes:
      - name: es1
        dn: CN=es1.tomas.com,OU=Ops,O=tomas,DC=tomas,DC=com
        dns: es1
      - name: es2
        dn: CN=es2.tomas.com,OU=Ops,O=tomas,DC=tomas,DC=com
        dns: es2
      - name: es3
        dn: CN=es3.tomas.com,OU=Ops,O=tomas,DC=tomas,DC=com
        dns: es3
      - name: es4
        dn: CN=es4.tomas.com,OU=Ops,O=tomas,DC=tomas,DC=com
        dns: es4
    

    수정된 Clients 섹션은 다음과 같이 구성됩니다.
    clients:
      - name: spock
        dn: CN=spock.tomas.com,OU=Ops,O=tomas,DC=tomas,DC=com
      - name: kirk
        dn: CN=kirk.tomas.com,OU=Ops,O=tomas,DC=tomas,DC=com
        admin: true
    

    /tools 디렉터리에 들어가서 다음 명령을 실행하여 node와client 인증서를 생성합니다
    ./sgtlstool.sh -c ../config/tlsconfig.yml -crt
    

    다음과 같은 알림 정보를 보면 node와client 인증서 생성이 성공했음을 증명합니다
    Using signing certificate: /usr/local/hadoop/elasticsearch/search-guard-tlstool/tools/out/intermediate-ca.pem
    Created 4 node certificates.
    Passwords for the private keys of the node certificates have been auto-generated. The passwords are stored in the config snippet files.
    Created 2 client certificates.
    Passwords for the private keys of the client certificates have been auto-generated. The passwords are stored in the file "client-certificates.readme"
    

    Config SSL


    ElasticSearch 노드 간의 통신 묵값이 암호화되지 않아 데이터가 안전하지 않기 때문에 Search Guard는 ElasticSearch 노드 간의 통신을 암호화 방식으로 강제합니다.

    distribute cetificates


    상기 생성된 관련 인증서를 해당 ES 노드의/config 디렉터리로 복사합니다. 예를 들어 다음 파일을 hostname이 es1인 노드로 복사합니다.
    root-ca.pem
    root-ca.key
    intermediate-ca.pem
    intermediate-ca.key
    es1.pem
    es1.key
    es1_http.pem
    es1_http.key
    es1_elasticsearch_config_snippet.yml
    kirk.pem
    kirk.key
    spock.pem
    spock.key
    

    다음 명령을 사용하여 상기 파일의 권한을 0600으로 변경합니다
    chmod 600 root* intermediate* kirk* spock* es1*
    

    다음 파일을hostname이es2의 노드로 복사합니다
    root-ca.pem
    root-ca.key
    intermediate-ca.pem
    intermediate-ca.key
    es2.pem
    es2.key
    es2_http.pem
    es2_http.key
    es2_elasticsearch_config_snippet.yml
    kirk.pem
    kirk.key
    spock.pem
    spock.key
    

    상기 파일의 권한을 0600, 이상, 기타 노드로 변경하려면 다음과 같은 명령을 사용하십시오.
    chmod 600 root-ca.* intermediate-ca.* es1* spock.* kirk.*
    

    Change the permission on directory of /config


    다음 명령을 사용하여 ES 클러스터 노드의/config 디렉토리 권한을 0700으로 변경합니다.
    chmod 700 <ES_HOME>/config
    

    Disable X-Pack security


    6.3.0 버전부터 Elasticsearch와 Kibana는 X-Pack과 OSS를 연결합니다. 만약에 Elasticsearch가 6.3.0 이상의 버전을 사용한다면 X-Pack security, 즉 ES 군집 각 노드의/config/elasticsearch를 닫아야 합니다.yml 파일에 다음과 같은 설정이 추가되었습니다.
    xpack.security.enabled: false
    

    Adding the TLS configuration


    장es1_elasticsearch_config_snippet.yml 파일의 내용은hostname이es1인 노드/config/elasticsearch에 추가되었습니다.yml 파일
    # This is a configuration snippet for the node es1
    # This snippet needs to be inserted into the file config/elasticsearch.yml of the respective node.
    # If the config file already contains SearchGuard configuration, this needs to be replaced.
    # Furthermore, you need to copy the files referenced below into the same directory.
    # Please refer to http://docs.search-guard.com/latest/configuring-tls for further configuration of your installation.
    
    searchguard.ssl.transport.pemcert_filepath: es1.pem
    searchguard.ssl.transport.pemkey_filepath: es1.key
    searchguard.ssl.transport.pemkey_password: lZoD27XLoBry
    searchguard.ssl.transport.pemtrustedcas_filepath: root-ca.pem
    searchguard.ssl.transport.enforce_hostname_verification: false
    searchguard.ssl.transport.resolve_hostname: false
    
    searchguard.ssl.http.enabled: true
    searchguard.ssl.http.pemcert_filepath: es1_http.pem
    searchguard.ssl.http.pemkey_filepath: es1_http.key
    searchguard.ssl.http.pemkey_password: sualxs42muY1
    searchguard.ssl.http.pemtrustedcas_filepath: root-ca.pem
    
    searchguard.authcz.admin_dn:
    - CN=kirk.tomas.com,OU=Ops,O=tomas,DC=tomas,DC=com
    
    searchguard.cert.oid: 1.2.3.4.5.5
    

    장es2_elasticsearch_config_snippet.yml 파일의 내용은hostname이es2인 노드/config/elasticsearch에 추가되었습니다.yml 파일
    # This is a configuration snippet for the node es2
    # This snippet needs to be inserted into the file config/elasticsearch.yml of the respective node.
    # If the config file already contains SearchGuard configuration, this needs to be replaced.
    # Furthermore, you need to copy the files referenced below into the same directory.
    # Please refer to http://docs.search-guard.com/latest/configuring-tls for further configuration of your installation.
    
    searchguard.ssl.transport.pemcert_filepath: es2.pem
    searchguard.ssl.transport.pemkey_filepath: es2.key
    searchguard.ssl.transport.pemkey_password: d0aVkFO9ZW0W
    searchguard.ssl.transport.pemtrustedcas_filepath: root-ca.pem
    searchguard.ssl.transport.enforce_hostname_verification: false
    searchguard.ssl.transport.resolve_hostname: false
    
    searchguard.ssl.http.enabled: true
    searchguard.ssl.http.pemcert_filepath: es2_http.pem
    searchguard.ssl.http.pemkey_filepath: es2_http.key
    searchguard.ssl.http.pemkey_password: 153IQlKc2bul
    searchguard.ssl.http.pemtrustedcas_filepath: root-ca.pem
    
    searchguard.authcz.admin_dn:
    - CN=kirk.tomas.com,OU=Ops,O=tomas,DC=tomas,DC=com
    
    searchguard.cert.oid: 1.2.3.4.5.5
    

    Enable the REST management API


    ES 클러스터 각 노드의/config/elasticsearch.yml 파일에 다음과 같은 설정이 추가되었습니다.
    searchguard.restapi.roles_enabled: ["sg_all_access"]
    

    ES 클러스터 모든 노드 구성 후 ES 클러스터 재시작

    Restart Elasticsearch


    다음 명령을 사용하여 ES 클러스터의 모든 노드를 시작합니다.
    cd /usr/local/hadoop/elasticsearch/
    ./bin/elasticsearch -d
    

    Re-enable shard allocation by using sgadmin


    admin 인증서, 루트 인증서를 사용하고 sgadmin 도구나curl을 결합하여shardallocation을 할 수 있습니다. 여기에서 sgadmin을 사용합니다. 구체적인 명령은 다음과 같습니다.
    cd /usr/local/hadoop/elasticsearch/plugins/search-guard-6/tools
    chmod u+x sgadmin.sh // sgadmin.sh 
    ./sgadmin.sh -icl -nhnv -h es1 --enable-shard-allocation -cacert ../../../config/root-ca.pem -cert ../../../config/kirk.pem -key ../../../config/kirk.key -keypass zNbkgrtwctow
    

    그 중에서 zNbkgrtwctow는 관리자 인증서의 개인 키 비밀번호로client-certificates에 있습니다.readme 파일에서 찾기

    Initializing Search Guard


    참조:https://docs.search-guard.com/latest/sgadmin
    Search Guard의 설정 (users,roles,permissions 포함) 은 모두 ES 그룹에 저장된 index입니다. 이렇게 하면 설정을 수정한 후에 바로 적용됩니다. 그룹을 다시 시작하지 않아도 됩니다.Search Guard의 설정 정보는 sgadmin 도구를 통해 ES의 한 index에 불러와야 하기 때문에 (기본적으로 이 index는 존재하지 않습니다.) sgadmin은 주로 index와 설정 인증과 권한 수여 방식을 초기화하는 데 사용됩니다.

    Change the permissions on that script and give it execution rights

    chmod +x plugins/search-guard-7/tools/sgadmin.sh
    

    다음 명령을 실행하여 sgadmin을 볼 수 있음을 알립니다.sh 도구의 모든 명령줄 옵션
    ./sgadmin.sh
    

    Using sgadmin with PEM certificates


    ES 클러스터의 모든 노드(es1 노드의 경우)에서 다음 명령을 실행합니다.
    ./sgadmin.sh -h es1 -cd ../sgconfig/ -icl -nhnv -cacert ../../../config/root-ca.pem -cert ../../../config/kirk.pem -key ../../../config/kirk.key -keypass zNbkgrtwctow
    

    다음과 같은 알림 정보를 보면 그룹 초기화 성공 증명
    Search Guard Admin v6
    Will connect to hadoopSvr3:9300 ... done
    Elasticsearch Version: 6.6.1
    Search Guard Version: 6.6.1-24.3
    Connected as CN=kirk.wxtomas.com,OU=Ops,O=wxtomas Com\, Inc.,DC=wxtomas,DC=com
    Contacting elasticsearch cluster 'elasticsearch' and wait for YELLOW clusterstate ...
    Clustername: ES-cluster
    Clusterstate: GREEN
    Number of nodes: 2
    Number of data nodes: 2
    searchguard index does not exists, attempt to create it ... done (0-all replicas)
    Populate config from /usr/local/elasticsearch-6.6.1/plugins/search-guard-6/sgconfig
    Will update 'sg/config' with ../sgconfig/sg_config.yml 
       SUCC: Configuration for 'config' created or updated
    Will update 'sg/roles' with ../sgconfig/sg_roles.yml 
       SUCC: Configuration for 'roles' created or updated
    Will update 'sg/rolesmapping' with ../sgconfig/sg_roles_mapping.yml 
       SUCC: Configuration for 'rolesmapping' created or updated
    Will update 'sg/internalusers' with ../sgconfig/sg_internal_users.yml 
       SUCC: Configuration for 'internalusers' created or updated
    Will update 'sg/actiongroups' with ../sgconfig/sg_action_groups.yml 
       SUCC: Configuration for 'actiongroups' created or updated
    Done with success
    

    Test the installation


    visiting https://es1:9200


    사용자 이름과 암호를 입력해야 한다는 메시지가 나타나면 admin/admin 을 입력합니다.

    Display information about the currently logged in user


    visiting https://es1:9200/_searchguard/authinfo?pretty

    Search Guard Health Check


    Search Guard가 제대로 설치되어 있고 정상적으로 실행 중인지 확인하기 위해 Search Guard의 건강 상태를 확인하기 위해 브라우저 주소 표시줄에 아래 주소를 입력하십시오 https://:9200/_searchguard/health 출력 결과는 다음과 같습니다.
    {"message":null,"mode":"strict","status":"UP"}
    

    Search Guard가 정상적으로 작동하고 있음을 나타냅니다.

    Accessing data Check

    curl -u admin:admin -k -XGET 'https://:9200/_cat?pretty'
    

    이로써 Search Guard 인증은 기본적으로 완성되었습니다. 다음은 계정 권한의 창설과 관리에 관하여 Kibana에서 직접 조작할 수 있습니다.

    Config Kibana


    참조:https://docs.search-guard.com/6.x-24/kibana-plugin-installation

    Installing the Search Guard Plugin


    1. Kibana 버전과 일치하는 Search Guard Kibana Plugin 다운로드 주소:https://oss.sonatype.org/service/local/repositories/releases/content/com/floragunn/search-guard-kibana-plugin/6.6.1-18.4/search-guard-kibana-plugin-6.6.1-18.4.zip
    2. Kibana 닫기
    3. 다운로드한 플러그인search-guard-kibana-plugin-6.6.1-18.4.zip을 Kibana의 설치 디렉터리에 업로드하고 다음 명령을 실행하여 플러그인을 설치합니다
    bin/kibana-plugin install file:////usr/local/kibana-6.6.1-linux-x86_64/search-guard-kibana-plugin-6.6.1-18.4.zip
    

    다음과 같은 정보를 제시하면 설치가 성공했음을 나타냅니다.
    Attempting to transfer from file:////usr/local/kibana-6.6.1-linux-x86_64/search-guard-kibana-plugin-6.6.1-18.4.zip
    Transferring 1046761 bytes....................
    Transfer complete
    Retrieving metadata from plugin archive
    Extracting plugin archive
    Extraction complete
    Optimizing and caching browser bundles...
    Plugin installation complete
    

    Disable X-Pack Security


    kibana 설치 디렉터리에 있는config/kibana.yml 파일에서 수정 설정은 다음과 같습니다.
    xpack.security.enabled: false
    

    Configuring the Kibana server user


    kibana 설치 디렉터리에 있는config/kibana.yml 파일에서 수정 설정은 다음과 같습니다.
    elasticsearch.username: "kibanaserver"
    elasticsearch.password: "kibanaserver"
    

    Setting up SSL/TLS


    Elasticsearch REST layer에서 TLS를 열었기 때문에 키바나가 Elasticsearch에 접근하는 프로토콜은 http에서 https로 바뀌어야 합니다. config/kibana에서.yml 파일에서 수정 설정은 다음과 같습니다.
    elasticsearch.hosts: ["https://ip:9200"]
    

    Configuring the Root CA


    두 가지 설정이 있습니다. 하나는 인증서 검증을 닫는 것입니다. config/kibana에서.yml 파일에서 수정 설정은 다음과 같습니다.
    elasticsearch.ssl.verificationMode: none
    

    둘째, 루트 CA를 제공합니다, config/kibana에서.yml 파일에서 수정 설정은 다음과 같습니다.
    elasticsearch.ssl.certificateAuthorities: "/path/to/your/root-ca.pem"
    elasticsearch.ssl.verificationMode: certificate
    

    그리고 키바나를 시작합니다.

    Config logstash


    참조:https://docs.search-guard.com/6.x-24/elasticsearch-logstash-search-guard

    Check permissions for the logstash user


    Search Guard secured cluster에서 logstash user를 기본적으로 설정합니다. Search Guard에 logstash 사용자가 포함되어 있기 때문에 여기서 따로 설정하지 않습니다./plugins/search-guard-6/sgconfig/sg_roles.yml 파일에서 sg_ 보기logstash 사용자의 권한은 다음과 같습니다.
    # For logstash and beats
    sg_logstash:  
      cluster:
        - CLUSTER_MONITOR
        - CLUSTER_COMPOSITE_OPS
        - indices:admin/template/get
        - indices:admin/template/put
      indices:
        'logstash-*':
          '*':
            - CRUD
            - CREATE_INDEX
        '*beat*':
          '*':
            - CRUD
            - CREATE_INDEX
    
    

    관리자 계정으로 키바나에 로그인하여 Search Guard 메뉴에 들어가 Permissions and Roles 섹션의 Search Guard Roles에서 볼 수도 있습니다.

    set up a logstash user


    logstash 사용자를logstash의 프로필logstash에 설정합니다.conf에서elasticsearch 출력 부분은 구체적으로 다음과 같습니다.
    output {
        elasticsearch {
           user => logstash
           password => logstash
           ...
        }
    }
    

    Setting up TLS/SSL


    앞에서 ES에서 REST 층을 시작하는 TLS를 설정했기 때문에 logstash를 설정하여 https를 사용하여elasticsearch와 통신하고 루트 인증서를 logstash-6.4.2/config 디렉터리에 복사하고 logstash의 프로필 logstash를 설정해야 합니다.conf에서elasticsearch 출력 부분 설정은 다음과 같습니다.
        ssl => true
        ssl_certificate_verification => false
        cacert => "/usr/local/logstash-6.4.2/config/root-ca.pem"
        index => "logstash-rs1_26_mongodlog"
    

    주의: 사용자 정의 색인 이름이라면, 색인 이름은'logstash-*'시작 또는'beat'와 일치해야 합니다. 그렇지 않으면logstash 사용자는 권한이 없습니다.그리고logstash를 다시 시작합니다.

    좋은 웹페이지 즐겨찾기