8. コンテンツにスキップ

8. Elasticsearch認証の設定

Elastic Stackの標準の機能でElasticsarchに接続する際にユーザーの認証を設定する ことができます。そちらの手順について説明します。

注意

Kibanaをご利用する方は必ず本手順を実施してください。

必須設定

ユーザー認証を有効にするためには、Elastic Stackのセキュリティ設定を有効にする必要があります。

必須設定

Elastic Stackのセキュリティ設定を有効にするためには、ノード間通信をTLSで暗号化する必要があります。

ノード間通信をTLSで暗号化するため、Elasticsearchに同梱されているツールを用いて以下を行います。

  • 認証局の生成

  • ノード証明書(自己証明書)の発行

8.1 認証局の生成

仕様補足

Linux版Elasticsearchはインストール時にセキュリティ設定が行われ、認証局が生成されるため、本手順を実施する必要はありません。

  1. ノード証明書の信頼性を検証するための認証局(CA)を生成します。

    > cd %elasticsearch_home%
    > bin\elasticsearch-certutil ca
    Please enter the desired output file [elastic-stack-ca.p12]: <Enter>
    Enter password for elastic-stack-ca.p12 : <認証局のパスワード(任意)>
    
  2. 認証局が生成されたことを確認します。

    dir %elasticsearch_home%\elastic-stack-ca.p12
    elastic-stack-ca.p12
    

仕様補足

認証局のパスワードはこの後の手順で使用するため、 メモをする等して忘れないでください。

8.2 ノード証明書の発行

仕様補足

Linux版Elasticsearchはインストール時にセキュリティ設定が行われ、ノード証明書が発行されるため、本手順を実施する必要はありません。

  1. ノード証明書を発行します。

    > cd %elasticsearch_home%
    > bin\elasticsearch-certutil cert —ca elastic-stack-ca.p12 -ca-pass <認証局のパスワード>
    Please enter the desired output file [elastic-certificates.p12]: <Enter>
    Enter password for elastic-certificates.p12 : <ノード証明書のパスワード(任意)>
    
  2. ノード証明書が発行されたことを確認します。

    dir %elasticsearch_home%\elastic-certificates.p12
    elastic-certificates.p12
    
  3. ノード証明書のパスワードをElasticsearchのキーストアに登録します。

キー名 説明
xpack.security.transport.ssl.keystore.secure_password トランスポート層:キーストアのパスワード
xpack.security.transport.ssl.truststore.secure_password トランスポート層:トラストストアのパスワード
xpack.security.http.ssl.keystore.secure_password HTTP層:キーストアのパスワード
> cd %elasticsearch_home%bin
> elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
Enter value for xpack.security.transport.ssl.keystore.secure_password: <ノード証明書のパスワード>
> elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
Enter value for xpack.security.transport.ssl.truststore.secure_password: <ノード証明書のパスワード>
> elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
Enter value for xpack.security.http.ssl.keystore.secure_password: <ノード証明書のパスワード>

仕様補足

ノード証明書のパスワードはこの後の手順で使用するため、 メモをする等して忘れないでください。

8.3 ノード証明書の配布

仕様補足

Linux版Elasticsearchはインストール時にセキュリティ設定が行われ、ノード証明書が配布されるため、本手順を実施する必要はありません。

  1. 配布先のフォルダを作成します。

    > cd %elasticsearch_home%
    > mkdir config\certs
    
  2. ノード証明書をコピーします。

    > cd %elasticsearch_home%
    > copy elastic-certificates.p12 config\certs
    
  3. ノード証明書がコピーされたことを確認します。

    dir %elasticsearch_home%\config\certs\elastic-certificates.p12
    elastic-certificates.p12
    

8.4 Elasticsearch設定ファイルの編集

仕様補足

Linux版Elasticsearchはインストール時にセキュリティ設定が行われ、Elasticsearch設定ファイル末尾にセキュリティ設定が記載された状態となります。

無効にしたセキュリティ設定を元に戻します。

  1. Elasticsearchサーバーのサービスを一時停止します。

  2. Elasticsearchサーバーの設定ファイル elasticsearch.yml を更新します。

    • ElasticsearchサーバーのOSがLinuxである場合: ファイルパス:/etc/elasticsearch/elasticsearch.yml

      1. Elastic Stack のセキュリティを有効に設定します。

        xpack.security.enabled: true 
        xpack.security.enrollment.enabled: true
        
      2. Elasticsearchノード間の暗号化・相互認証を有効に設定します。

        xpack.security.transport.ssl:
        enabled: true
        verification_mode: certificate
        keystore.path: certs/transport.p12
        truststore.path: certs/transport.p12
        
    • ElasticsearchサーバーのOSがWindowsである場合:

      ファイルパス:%elasticsearch_home%\config\elasticsearch.yml

      #xpack.security.enabled: false
      xpack.security.enabled: true
      xpack.security.enrollment.enabled: true
      
      xpack.security.transport.ssl:
      enabled: true
      verification_mode: certificate
      keystore.path: certs/elastic-certificates.p12
      truststore.path: certs/elastic-certificates.p12
      
      xpack.security.http.ssl:
      enabled: false
      

      Elasticsearchサーバーのサービスを再起動します。

8.5 デフォルトユーザーのパスワード設定

仕様補足

予め用意されているユーザーは以下の通りです。

  • elastic
  • kibana_system
  • kibana
  • logstash_system
  • beats_system
  • apm_system
  • remote_monitoring_system

仕様補足

Linux版Elasticsearchはインストール時にセキュリティ設定が行われ、デフォルトユーザーのパスワードは設定済みとなります。 以下の手順でパスワードをリセットしてください。

仕様補足

Windows版Elasticsearchはインストール時にセキュリティ設定が行われず、デフォルトユーザーのパスワードは未設定となります。 以下の手順でパスワードを設定してください。

仕様補足

表示されたパスワードはこの後の手順で使用するため、 メモをする等して忘れないでください。

Elasticsearchサーバーでコマンドプロンプトを開き、以下のコマンドを実行します。

  • ElasticsearchサーバーのOSがLinuxである場合:

    • コマンド
      /usr/share/elasticsearch/bin/elasticsearch-reset-password -u [ユーザー名]
      
  • ElasticsearchサーバーのOSがWindowsである場合:

    • コマンド
      cd %elasticsearch_home%\bin
      elasticsearch-setup-passwords auto
      

8.6 Elasticsearchの疎通確認

以下のコマンドを実行し、Elasticsearchの通信でユーザー認証が有効となることを確認します。

curl -XGET "http://localhost:9200/?pretty" -u elastic:elapwd

「5.1.3 Elasticsearchのインストール確認」と同じレスポンスが返ることを確認します。

8.7 認証用ユーザーの作成

Elasticsearchの認証するユーザーとパスワードはKibanaを利用することで自由に作成することが可能です。

そちらの手順は別紙Kibana連携ガイド「ユーザーの作成」を参照してください。

8.8 logstash設定ファイルの更新

ユーザー認証の設定した状態でlogstashにより収集したデータを

Elasticsearchに連携する際にはlogstash側にも認証の設定を行う必要があります。

  1. Logstash サービスを停止します。

    • ElasticsearchサーバーのOSがLinux の場合:

      以下のコマンドを実行し、サービスを停止します。

      • コマンド
        systemctl stop logstash
        
    • ElasticsearchサーバーのOSがWindows の場合:

      以下のコマンドを実行し、サービスを停止します。

      • コマンド
        cd %nssm_home%\win64
        nssm stop Logstashサービス名
        
  2. Logstash設定ファイルを更新します。

    • ElasticsearchサーバーのOSがLinux の場合:

      設定ファイルの格納先: /etc/logstash/conf.d 配下

    • ElasticsearchサーバーのOSがWindows の場合:

      設定ファイルの格納先: C:\temp\logstash-8.17.2\logstash-definitions配下

      ファイル名 説明
      logstash-postgresql.conf 設定ファイル(プロセス管理)
      logstash-postgresql_ci.conf 設定ファイル(構成管理)
      logstash-postgresql-faq.conf 設定ファイル(FAQ)
      logstash-postgresql-filelibrary.conf 設定ファイル(ファイルライブラリ)
    • filter plugin の設定

      • Ruby filter pluginの設定 (構成管理、FAQ、ファイルライブラリ)

        1. [elasticusername],[elasticpassword] を、Elasticsearchの認証用ユーザー名とパスワードに変更します。

          #basic_auth = "Basic " + Base64.strict_encode64("[elasticusername]:[elasticpassword]")
          basic_auth = "Basic " + Base64.strict_encode64("elastic:elapwd")
          
        2. 以下のコメントアウトを外します。

          #event.set("[@metadata][basic_auth]", basic_auth)
          event.set("[@metadata][basic_auth]", basic_auth)
          
    • output plugin の設定

      • Elasticsearch output pluginの設定

        1. user,passwordに記載されているElasticsearchのユーザー認証情報について、[elasticusername],[elasticpassword] から、Elasticsearchの認証用ユーザー名とパスワードに変更します。

          (Elasticsearchのユーザー認証情報をユーザー名:elastic、パスワード:elapwdに変更する場合)

          #user =>  "[elasticusrename]" 
          user => "elastic" 
          #password =>  "[elasticpassword]" 
          password=> "elapwd" 
          
      • Http output pluginの設定 (構成管理、FAQ、ファイルライブラリ)

        1. 以下のコメントアウトを外します。

          #"Authorization" => "%{[@metadata][basic_auth]}" 
          "Authorization" => "%{[@metadata][basic_auth]}" 
          

      修正後のファイルは以下のようになります。

      ... (省略) 
      
      filter { 
      
      ... (省略) 
      
          ruby { 
              code => ' 
              require "base64" 
      
              basic_auth = "Basic " + Base64.strict_encode64("elatic:elapwd") 
              event.set("[@metadata][basic_auth]", basic_auth) 
      
      ... (省略) 
      
          } 
      } 
      
      ... (省略) 
      
      output { 
      
          if [type] == "get_ci_fil" { 
              elasticsearch{ 
              hosts             => [ "http://eshost:9200" ] 
              index             => "ssm_ci" 
              document_id       => "%{ci_id}" 
              action            => "update" 
              retry_on_conflict => 10 
              doc_as_upsert     => true 
              pipeline          => "attachment" 
              user              => "elastic" 
              password          => "elapwd" 
              #  ssl_enabled           => true 
              #  ssl_verification_mode => none 
              #  ssl_keystore_path     => "[keystore_path]" 
              #  ssl_keystore_password => "[keystore_password]" 
          }
          if [data1] != "" { 
              http { 
                  url => "http://eshost:9200/ssm_ci/_doc/%{ci_id}?pipeline=attachment" 
                  http_method => "put" 
                  headers => { 
                  "Content-Type" => "application/json" 
                  "Authorization" => "%{[@metadata][basic_auth]}" 
                  } 
                  format => "json" 
                  message => "%{data1}" 
              #  ssl_verification_mode => none 
              #  ssl_keystore_path     => "[keystore_path]" 
              #  ssl_keystore_password => "[keystore_password]" 
          } 
      } 
      
      ... (省略) 
      
  3. Logstash サービスを起動します。

  4. ElasticsearchサーバーのOSがLinux の場合:

    以下のコマンドを実行し、サービスを起動します。

    • コマンド
      systemctl start logstash
      
  5. ElasticsearchサーバーのOSがWindowsの場合:

    以下のコマンドを実行し、サービスを起動します。

    • コマンド
      cd %nssm_home%\win64
      nssm start Logstashサービス名
      

8.9 Senju Service Managerの設定

Senju Service Managerで提供するElasticsearch連携機能を使用する際にも Elasticsearch認証の設定が必要となります。

本手順で設定したユーザーとパスワードを使用してください。

必須設定

Elasticsearch連携機能を利用する為には以下の設定が必須です。

・[管理者メニュー > 制御情報 > 制御情報 > 共通 > 共通]

管理項目名
Elasticsearch認証時のアカウント
Elasticsearch認証時のパスワード