Rocky Linux 9 に OpenSearch と OpenSearch Dashboards を RPM で導入し TLS と認証で保護する完全手順

OpenSearch と OpenSearch Dashboards を Rocky Linux 9 に RPM で導入し、ノード間通信および REST レイヤーを TLS で保護し、OpenSearch Security プラグインで認証・認可を有効にする手順を示します。この記事を終えると、単一ノードの OpenSearch(ポート9200)と OpenSearch Dashboards(ポート5601)が稼働し、管理者・ダッシュボード用アカウントでアクセスできる状態になります。
重要:このガイドは単一ノード構成を前提にしています。本番クラスタや高可用性が必要な場合は「クラスタ設計とスケール項」を参照してください。
目的と対象読者
このドキュメントは Rocky Linux 9(RHEL系)サーバ上へ OpenSearch と OpenSearch Dashboards を公式リポジトリから RPM インストールし、TLS(自己署名 CA を作成)と OpenSearch Security による内部ユーザ認証を設定する手順を、実務的なチェックリストやトラブルシュートを添えて解説します。対象は Linux 管理者、SRE、開発者で、sudo 権限とシステム管理の基本を理解していることを前提とします。
用語(1行定義)
- OpenSearch: Elasticsearch からフォークされた検索・分析エンジン(オープンソース)。
- OpenSearch Dashboards: Kibana からフォークされた可視化 UI。
- TLS/SSL: ネットワーク通信の暗号化。
- OpenSearch Security: 認証・認可・監査を提供するプラグイン。
目次
- 前提条件
- システム準備(ホスト名、SWAP、vm.max_map_count)
- OpenSearch のインストール(公式リポジトリ経由)
- 基本設定(opensearch.yml と JVM ヒープ)
- TLS 証明書の作成と配置(CA、admin、node)
- OpenSearch への証明書追加と Security 設定
- 管理ユーザの作成と securityadmin の適用
- OpenSearch Dashboards の導入と設定
- ファイアウォールとアクセス確認
- 運用上のチェックリスト、トラブルシュート、拡張案
- まとめ
前提条件
- Rocky Linux 9 のサーバ(例: ホスト名 node-rock1、IP 192.168.5.25、RAM 8GB 以上を推奨)
- 非 root の sudo 権限を持つユーザ
- SELinux は permissive モード(本番では enforcing のまま整備する手順を検討)
重要な注意事項:本手順で作成する CA は自己署名のテスト用です。本番では社内 CA、ACME、または商用 CA を検討してください。
システム準備
ここではホスト名、/etc/hosts の設定、SWAP 無効化、vm.max_map_count の調整を行います。
- ホスト名と FQDN を設定します(例)
sudo hostnamectl set-hostname node-rock1
echo '192.168.5.25 node-rock1.hwdomain.lan node-rock1' >> /etc/hosts
一度ログアウトして再ログインし、FQDN を確認します。
sudo hostname -f
画像: ホスト名設定と fqdn 確認のスクリーンショット例
- SWAP を無効化
永続的に /etc/fstab をコメントアウトして現在のセッションで swapoff します。
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo swapoff -a
確認:
free -m
Swap が 0 になっていれば OK です。
- vm.max_map_count を増やす(OpenSearch のメモリマップ数要件)
sudo bash -c 'echo "vm.max_map_count=262144" >> /etc/sysctl.conf'
sudo sysctl -p
確認:
cat /proc/sys/vm/max_map_count
期待値: 262144
ノート: コンテナや K8s で実行する場合はホスト側でこのパラメータを設定する必要があります。
OpenSearch のインストール(RPM)
公式リポジトリを追加し、dnf でインストールします。
- リポジトリ追加
sudo curl -SL https://artifacts.opensearch.org/releases/bundle/opensearch/2.x/opensearch-2.x.repo -o /etc/yum.repos.d/opensearch-2.x.repo
sudo dnf repolist
出力例: OpenSearch 2.x リポジトリが見えることを確認します。
- パッケージ情報を確認してインストール
sudo dnf info opensearch
sudo dnf install opensearch
インストール時に GPG キーの登録プロンプトが出ます。y で承認します。
- systemd の再読み込み、サービス起動、永続化
sudo systemctl daemon-reload
sudo systemctl start opensearch
sudo systemctl enable opensearch
sudo systemctl status opensearch
「active (running)」および「enabled」が表示されれば起動・自動起動設定が完了です。
OpenSearch の基本設定
設定ファイルは /etc/opensearch にあります。単一ノードで動かすために最低限のパラメータを設定します。
- /etc/opensearch/opensearch.yml を編集
sudo nano /etc/opensearch/opensearch.yml
ファイルに次を追加または変更します(環境の IP に合わせて変更):
# Bind OpenSearch to the correct network interface. Use 0.0.0.0
# to include all available interfaces or specify an IP address
# assigned to a specific interface.
network.host: 192.168.5.25
# Unless you have already configured a cluster, you should set
# discovery.type to single-node, or the bootstrap checks will
# fail when you try to start the service.
discovery.type: single-node
# If you previously disabled the security plugin in opensearch.yml,
# be sure to re-enable it. Otherwise you can skip this setting.
plugins.security.disabled: false
- JVM ヒープサイズを調整
サーバの総メモリに応じて -Xms と -Xmx を設定します(例: 2GB)。/etc/opensearch/jvm.options を編集して次を設定します。
-Xms2g
-Xmx2g
- サービス再起動
sudo systemctl restart opensearch
- ポート確認(OpenSearch はデフォルトで 9200 を使用)
ss -tulpn | grep 9200
TLS 証明書の作成(自己署名 CA を利用した例)
ノード間通信(transport)と HTTP(REST)レイヤーを TLS で保護します。ここでは簡易的な自己署名ルート CA を作成し、admin 用証明書とノード用証明書を発行します。テスト用途の手順です。本番は PKI 運用方針を別途設計してください。
まず、既存のデモ証明書を削除し、/etc/opensearch/certs を作成します。
rm -f /opt/opensearch/{esnode-key.pem,esnode.pem,kirk-key.pem,kirk.pem,root-ca.pem}
sudo mkdir -p /etc/opensearch/certs; cd /etc/opensearch/certs
画像: デモ証明書を削除して証明書ディレクトリに移動した例
ルート CA の作成
openssl genrsa -out root-ca-key.pem 2048
openssl req -new -x509 -sha256 -key root-ca-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=ROOT" -out root-ca.pem -days 730
出力: root-ca-key.pem(秘密鍵)、root-ca.pem(証明書)
admin 証明書を作成
openssl genrsa -out admin-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem
openssl req -new -key admin-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=A" -out admin.csr
openssl x509 -req -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem -days 730
出力: admin-key.pem(PKCS#8 形式の秘密鍵)、admin.pem(管理者用証明書)
注: 管理者証明書はホスト名に依存しないため CN に任意の値を使えます。
ノード証明書を作成(node-rock1)
openssl genrsa -out node-rock1-key-temp.pem 2048
openssl pkcs8 -inform PEM -outform PEM -in node-rock1-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out node-rock1-key.pem
openssl req -new -key node-rock1-key.pem -subj "/C=CA/ST=ONTARIO/L=TORONTO/O=ORG/OU=UNIT/CN=node-rock1.hwdomain.lan" -out node-rock1.csr
echo 'subjectAltName=DNS:node-rock1.hwdomain.lan' > node-rock1.ext
openssl x509 -req -in node-rock1.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node-rock1.pem -days 730 -extfile node-rock1.ext
出力: node-rock1-key.pem(秘密鍵)、node-rock1.pem(ノード証明書)
一時ファイルの削除と CA のシステム登録
rm *temp.pem *csr *ext
openssl x509 -outform der -in root-ca.pem -out root-ca.crt
sudo cp root-ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
最後に所有権とパーミッションを設定します。
sudo chown -R opensearch:opensearch /etc/opensearch/certs
sudo chmod 0700 /etc/opensearch/certs
sudo chmod 0600 /etc/opensearch/certs/*.pem
sudo chmod 0600 /etc/opensearch/certs/*.crt
ls -l /etc/opensearch/certs
画像: 作成した証明書一覧の例
重要: 秘密鍵は厳格な権限管理(opensearch ユーザのみ読み取り)にしてください。
OpenSearch に TLS 設定を追加
作成した証明書を opensearch.yml に追記して、transport(ノード間)と http(REST)に TLS を適用します。例では add.sh スクリプトで追記しています。
例: add.sh の内容(環境に合わせてパスと CN を修正)
#! /bin/bash
echo "plugins.security.ssl.transport.pemcert_filepath: /etc/opensearch/certs/node-rock1.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.transport.pemkey_filepath: /etc/opensearch/certs/node-rock1-key.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.transport.pemtrustedcas_filepath: /etc/opensearch/certs/root-ca.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.enabled: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.pemcert_filepath: /etc/opensearch/certs/node-rock1.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.pemkey_filepath: /etc/opensearch/certs/node-rock1-key.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.ssl.http.pemtrustedcas_filepath: /etc/opensearch/certs/root-ca.pem" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.allow_default_init_securityindex: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.authcz.admin_dn:" | sudo tee -a /etc/opensearch/opensearch.yml
echo " - 'CN=A,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.nodes_dn:" | sudo tee -a /etc/opensearch/opensearch.yml
echo " - 'CN=node-rock1.hwdomain.lan,OU=UNIT,O=ORG,L=TORONTO,ST=ONTARIO,C=CA'" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.audit.type: internal_opensearch" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.enable_snapshot_restore_privilege: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.check_snapshot_restore_write_privileges: true" | sudo tee -a /etc/opensearch/opensearch.yml
echo "plugins.security.restapi.roles_enabled: [\"all_access\", \"security_rest_api_access\"]" | sudo tee -a /etc/opensearch/opensearch.yml
スクリプトを実行して opensearch.yml に追記します。
chmod +x add.sh
./add.sh
画像: opensearch.yml に TLS 設定を追記した例
追記後、OpenSearch を再起動して設定を反映します。
sudo systemctl restart opensearch
管理ユーザを作成して OpenSearch Security を適用
OpenSearch 内部ユーザ(internal_users.yml)を編集し、管理者と Dashboards 用ユーザを作成します。ハッシュ化されたパスワードは tools/hash.sh を使って生成します。
- パスワードハッシュの生成
cd /usr/share/opensearch/plugins/opensearch-security/tools
OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk ./hash.sh
パスワード入力後、ハッシュが出力されます。kibanaserver 用にもう一回生成します。
画像: ハッシュ生成の例
- /etc/opensearch/opensearch-security/internal_users.yml を編集
既存のデフォルトユーザを削除して、次のように管理者(admin)と kibanaserver を追加します。hash は先ほど生成した値に置き換えてください。
admin:
hash: "$2y$12$BnfqwqWRi7DkyuPgLa8.3.kLzdpIY11jFpSXTAOKOMCVj/i20k9oW"
reserved: true
backend_roles:
- "admin"
description: "Admin user"
kibanaserver:
hash: "$2y$12$kYjgPjPzIp9oTghNdWIHcuUalE99RqSYtTCh6AiNuS5wmeEaWnbzK"
reserved: true
description: "Demo OpenSearch Dashboards user"
編集後、OpenSearch を再起動します。
sudo systemctl restart opensearch
- securityadmin.sh で設定を適用
cd /usr/share/opensearch/plugins/opensearch-security/tools
OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk ./securityadmin.sh -h 192.168.5.25 -p 9200 -cd /etc/opensearch/opensearch-security/ -cacert /etc/opensearch/certs/root-ca.pem -cert /etc/opensearch/certs/admin.pem -key /etc/opensearch/certs/admin-key.pem -icl -nhnv
画像: securityadmin.sh を実行して設定を反映した例
- curl でユーザ検証
curl https://node-rock1:9200 -u admin:password -k
curl https://node-rock1:9200 -u kibanaserver:kibanapass -k
-k
は自己署名 CA を許可するための一時措置です。本番ではクライアント側で CA を信頼させるか、証明書チェーンを正しく構成してください。
画像: admin と kibanaserver の認証検証例
OpenSearch Dashboards のインストールと設定
- 事前: 暗号ポリシーを LEGACY に設定(OpenSearch Dashboards の古い署名方式を許容するため)
sudo update-crypto-policies --set LEGACY
- Dashboards リポジトリを追加し、インストール
sudo curl -SL https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.x/opensearch-dashboards-2.x.repo -o /etc/yum.repos.d/opensearch-dashboards-2.x.repo
sudo dnf repolist
sudo dnf install opensearch-dashboards
GPG キーの確認が出たら承認します。
画像: リポジトリ追加とインストールの例
- サービス起動と永続化
sudo systemctl start opensearch-dashboards
sudo systemctl enable opensearch-dashboards
sudo systemctl status opensearch-dashboards
OpenSearch Dashboards の設定
設定ファイル: /etc/opensearch-dashboards/opensearch-dashboards.yml
sudo nano /etc/opensearch-dashboards/opensearch-dashboards.yml
主な変更箇所(例)
server.port: 5601
server.host: "192.168.5.25"
opensearch.hosts: [https://192.168.5.25:9200]
opensearch.ssl.verificationMode: none
opensearch.username: kibanaserver
opensearch.password: kibanapass
注: opensearch.ssl.verificationMode: none
は自己署名 CA の場合の暫定設定です。本番では信頼された CA による検証を有効にしてください。
設定変更後、サービスを再起動します。
sudo systemctl restart opensearch-dashboards
画像: Dashboards 設定のスクリーンショット例
ポート開放と Web アクセス確認
Dashboards はデフォルトで 5601 ポートを使用します。firewalld を使用している場合はポートを開放します。
sudo firewall-cmd --add-port=5601/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
ブラウザで http://192.168.5.25:5601 にアクセスし、kibanaserver ユーザでログインします。ログイン後に Dev Tools で GET /
を実行して 200 OK が返ることを確認します。
画像: ログイン画面とダッシュボードの表示例
運用チェックリスト(ロール別)
管理者(SRE/インフラ):
- ホスト名と /etc/hosts の整合性確認
- vm.max_map_count と swappiness の設定確認
- systemd ユニットの自動起動設定確認
- TLS 証明書の有効期限管理(更新スケジュール)
- バックアップとスナップショット方針の策定
セキュリティ担当:
- CA の運用ポリシーを策定
- 管理者用証明書の保管とローテーション
- Audit ログの保存先と保管期間の策定
アプリケーション開発者:
- インデックス設計とライフサイクル管理(ILM)方針
- 運用テレメトリ(メトリクス、アプリケーションログ)の取り扱い
テストケース / 受け入れ基準(簡易)
- OpenSearch サービスが active (running) である
- curl で HTTPS の
GET /
が 200 を返す(admin および kibanaserver) - OpenSearch Dashboards に kibanaserver でログインでき、Dev Tools でクエリが実行できる
- TLS 証明書のパーミッションが opensearch ユーザのみに設定されている
よくある問題と対処法
問題: securityadmin.sh が接続できない、または認証エラー
- 対処: opensearch.yml の TLS 設定で CA, cert, key のパスを確認。証明書の CN/SAN が一致しているか確認。
問題: Dashboards が OpenSearch に接続できない(認証失敗)
- 対処: opensearch-dashboards.yml の opensearch.username / password を確認。kibanaserver のハッシュと internal_users.yml が適用済みか確認。
問題: systemctl start opensearch でブートチェックが失敗
- 対処: discovery.type が single-node に設定されているか確認。JVM ヒープが過大に設定されていないか確認(総メモリの半分以下が目安)。
問題: SELinux によりファイルアクセスが拒否される
- 対処: SELinux を permissive にしている場合は audit.log を確認し、必要なコンテキストを付与。/etc/opensearch/certs に対して適切な
semanage fcontext
を設定する。
代替導入方法(短評)
- tarball インストール: 簡易だが systemd ユニットを自前で用意する必要がある。軽量テスト環境向け。
- Docker / コンテナ: 環境分離が容易で CI/CD に向く。永続ストレージとメモリ設定、vm.max_map_count の注意が必要。
- Kubernetes: StatefulSet と PersistentVolume を使ってスケールや可用性を確保できるが、運用設計(スナップショット、リソース管理)が複雑。
判断ヒント(メンタルモデル): 1台運用は RPM、複数台・可用性重視はコンテナまたは K8s。
拡張と運用に関するヒューリスティクス(参考)
- 小規模(1〜3 ノード): インデックス設計とシャード数を最小に。ノードごとのヒープを 2GB〜4GB に調整。
- 中〜大規模: シャードの合計数を管理し、ILM(Index Lifecycle Management)で古いデータを削除/冷却。
- セキュリティ: 管理者キーはオフラインで保管。証明書自動更新を組み込む。
簡易 SOP(Playbook): 新しいノードを追加する場合
- 新しいホストで vm.max_map_count を設定し、SWAP を無効化
- opensearch リポジトリを追加し、同じバージョンの OpenSearch をインストール
- node 用証明書を CN に新しいノードの FQDN を使って作成し、CA で署名
- /etc/opensearch/opensearch.yml に新ノードの network.host/ノード DN を追加
- セキュリティ設定を再適用(securityadmin.sh)
- クラスタ状態を確認し、リバランスとシャード割当を監視
セキュリティ強化のチェックポイント
- TLS: 必ずノード間 transport と HTTP レイヤーを暗号化
- 認可: 最小権限のロールを作成し、必要最小限の API 権限のみ付与
- 監査: plugins.security.audit を有効にして、認証/ロールの変更を記録
- ローテーション: 証明書と管理者パスワードのローテーションポリシーを策定
ベストプラクティス(運用・パフォーマンス)
- ヒープ(-Xmx/-Xms)は JVM 全メモリの半分以下(最大 32GB を超えない)
- ストレージは IOPS と書き込みレイテンシを重視(SSD 推奨)
- モニタリング: メトリクス収集(CPU、GC、Heap 使用率、ディスク使用率、スレッドプール)
- スナップショット: 定期バックアップを別ストレージ(S3 等)へ
参考フロー(Mermaid: 導入方法の選定)
flowchart TD
A[導入要件評価] --> B{単一ノードか複数ノードか}
B -->|単一| C[RPM インストール]
B -->|少数ノード| D[VM または Baremetal: RPM/Ansible]
B -->|大規模| E[Kubernetes/コンテナ]
C --> F[TLS と Security 設定]
D --> F
E --> F
F --> G[監視とバックアップ]
移行と互換性の注意点
- OpenSearch は Elasticsearch と API 互換性を持つが、バージョン差異による互換性の問題が生じる可能性がある。アップグレード前に互換性表と Breaking Change を確認してください。
- バージョン間のスナップショットの互換性は保証されない場合があるため、テスト環境で検証のこと。
最後に(まとめ)
この記事では Rocky Linux 9 に OpenSearch を RPM 経由で導入し、自己署名 CA による TLS、OpenSearch Security による認証・認可を設定し、OpenSearch Dashboards を接続するまでの一連の作業を提示しました。手順ごとに行うべき確認項目と運用上の注意点、代替手段やトラブルシュートも併記しています。
今後の拡張案: クラスタ運用、証明書自動更新、監査ログの外部保管、スナップショットやリカバリ手順の自動化などを検討してください。公式ドキュメントを参照しつつ、まずはこの単一ノードを基に検証を進めることを推奨します。
重要なノート
- 本ガイド内で使用している自己署名 CA はテスト用です。本番では信頼された CA を使用してください。
- 構成変更や証明書更新時は必ずサービスの再起動とログの確認を行ってください。
付録: 主要コマンド チートシート
- リポジトリ追加
sudo curl -SL
-o /etc/yum.repos.d/ .repo - インストール
sudo dnf install opensearch sudo dnf install opensearch-dashboards
- サービス操作
sudo systemctl start|stop|restart|status opensearch sudo systemctl start|stop|restart|status opensearch-dashboards
- 証明書関連(例)
openssl genrsa -out root-ca-key.pem 2048 openssl req -new -x509 -sha256 -key root-ca-key.pem -subj "/C=.../CN=ROOT" -out root-ca.pem -days 730
1行用語集
- TLS: ネットワーク暗号化プロトコル
- CA: 証明書を発行・署名する認証局
- SAN: Subject Alternative Name(証明書の代替名)
- JVM ヒープ: Java 仮想マシンが割り当てるヒープメモリ