OpenSearchサービスを公式ドキュメントのDockerサンプルを利用して構築すると、デフォルトのユーザー/パスワードがadmin/adminで構築されます。
ローカル開発であればこれでも良いのですが、本番公開する場合、この組み合わせでは脆弱すぎるため、パスワードを変更することにしました。
注意点
これから行う作業により「REST API経由で登録したユーザー」が消去される可能性があります。
以下の作業を行う前に、まずは公式ドキュメントの注意点を御覧ください。
https://opensearch.org/docs/latest/security-plugin/configuration/security-admin/
先に行った作業のコマンドの紹介
以下の作業はOpenSearchのDockerコンテナ内で行ってください。
文章の先頭に「#」が付与されている部分が実際に入力するコマンドで、それ以外はコマンド実行結果になります。
# sh /usr/share/opensearch/plugins/opensearch-security/tools/hash.sh -p [新しいパスワード]
**************************************************************************
** This tool will be deprecated in the next major release of OpenSearch **
** https://github.com/opensearch-project/security/issues/1755 **
**************************************************************************
$2y$12$ABCDEFGABCDEFG/ABCDEFG.ABCDEFGABCDEFG/.ABCDEFG/ABCDEFG
# vi /usr/share/opensearch/config/opensearch-security/internal_users.yml
admin:
hash: "この部分を、先程のコマンドで表示されたハッシュに変更する"
reserved: true
backend_roles:
- "admin"
description: "Demo admin user"
# cd /usr/share/opensearch/plugins/opensearch-security/tools
# ./securityadmin.sh -f ../../../config/opensearch-security/internal_users.yml \
# -t internalusers \
# -icl \
# -nhnv \
# -cacert ../../../config/root-ca.pem \
# -cert ../../../config/kirk.pem \
# -key ../../../config/kirk-key.pem
**************************************************************************
** This tool will be deprecated in the next major release of OpenSearch **
** https://github.com/opensearch-project/security/issues/1755 **
**************************************************************************
Security Admin v7
Will connect to localhost:9200 ... done
Connected as "CN=kirk,OU=client,O=client,L=test,C=de"
OpenSearch Version: 2.4.0
Contacting opensearch cluster 'opensearch' and wait for YELLOW clusterstate ...
Clustername: opensearch-cluster
Clusterstate: GREEN
Number of nodes: 2
Number of data nodes: 2
.opendistro_security index already exists, so we do not need to create one.
Populate config from /usr/share/opensearch/plugins/opensearch-security/tools
Force type: internalusers
Will update '/internalusers' with ../../../config/opensearch-security/internal_users.yml
SUCC: Configuration for 'internalusers' created or updated
SUCC: Expected 1 config types for node {"updated_config_types":["internalusers"],"updated_config_size":1,"message":null} is 1 (["internalusers"]) due to: null
SUCC: Expected 1 config types for node {"updated_config_types":["internalusers"],"updated_config_size":1,"message":null} is 1 (["internalusers"]) due to: null
Done with success
各種コマンドの紹介
adminパスワードの変更手順になります。
まずはセキュリティツールを利用してハッシュを作成します。
sh /usr/share/opensearch/plugins/opensearch-security/tools/hash.sh -p [新しいパスワード]
上記コマンドを実行すると、暗号化されたパスワードハッシュが出力されるので、こちらをメモしておきます。
次に、internal_users.ymlファイルを変更します。
vi /usr/share/opensearch/config/opensearch-security/internal_users.yml
--- # This is the internal user database # The hash value is a bcrypt hash and can be generated with plugin/tools/hash.sh _meta: type: "internalusers" config_version: 2 # Define your internal users here ## Demo users admin: hash: "この部分を先程生成したハッシュに書き換える" reserved: true backend_roles: - "admin" description: "Demo admin user"
こんな感じのファイルになっているため、adminのhashを先程生成したハッシュに書き換えます。
最後に、securityadmin.shを利用して、ファイルの内容をインデックスに反映します。
cd /usr/share/opensearch/plugins/opensearch-security/tools
./securityadmin.sh -f ../../../config/opensearch-security/internal_users.yml \
-t internalusers \
-icl \
-nhnv \
-cacert ../../../config/root-ca.pem \
-cert ../../../config/kirk.pem \
-key ../../../config/kirk-key.pem
OpenSearchは上記のような認証情報をインデックス内に保存する仕様になっているようで、設定ファイルを変更したあとに上記スクリプトを実施してインデックスに設定を反映する必要があるそうです。
逆にREST API経由で登録したユーザーは、設定ファイルに自動で反映されないため注意が必要です。
REST APIで登録したユーザーと、設定ファイルでユーザー設定が異なっている場合、上記のスクリプトを実行してしまうと設定ファイルのユーザーで上書きされてしまいます。
最後にしれっと怖い一文があったので紹介しますが、
The
https://opensearch.org/docs/latest/security-plugin/configuration/security-admin/#basic-usagesecurityadmin.sh
tool can be run from any machine that has access to the http port of your OpenSearch cluster (the default port is 9200). You can change the security plugin configuration without having to access your nodes through SSH.
意訳すると
securityadmin.sh ツールは、OpenSearch クラスタの http ポートにアクセスできるマシンならどこからでも実行できます (デフォルトのポートは 9200 です)。SSH でノードにアクセスすることなく、セキュリティプラグインの設定を変更することができます。
ってなるんですが、そうなると9200ポートに対して適切にアクセス制限を行わないと、世界中の誰でもシェルを実行できるということでしょうかね・・・?
公式Dockerを利用していれば9200ポートはベーシック認証がかかっているはずなのでとりあえずは大丈夫そうですが、その仕様を知らずに全世界公開をしてしまうと怖いですね。
パスワード変更後
パスワード変更後は、当然ながらadmin/adminの組み合わせではログインできなくなりました。
https://localhost:9200でローカルのOpenSearchクラスタにアクセスできると思いますが、こちらもadmin/adminの組み合わせでログインできなくなりました。
以上
OpenSearchのadminパスワードの変更方法を紹介しました。
思ったよりもパスワード変更方法が複雑で、1日半ほど費やしてしまいました・・・
もっと日本語のOpenSearchの情報が増えるといいですね。