お金をかけずにサーバーの勉強をしよう

OpenSearchのユーザー追加

2023年7月13日

メニューへ戻る

こんにちは。

OpenSearchインストール」でデータベースが動くようにし、
OpenSearch Dashboardsインストール」で、ダッシュボードも使えるようになりました。

しかし、OpenSearchをユーザーレベルで使うには道半ばです。

ここでは OpenSearch Dashboardsを使って、OpenSearchに一般ユーザーの追加を行いたいと思います。
プログラミング言語などからの利用には一般ユーザーがないと管理が仕切れませんからね。

OpenSearchのドキュメントの「Users and roles」のページに、

Unless you need to create new reserved or hidden users, we highly recommend using OpenSearch Dashboards or the REST API to create new users, roles, and role mappings. The .yml files are for initial setup, not ongoing use.

と注意があります。

設定用の YAMLファイルでもできますが、OpenSearch Dashborardsを使うことにします。


では、まず OpenSearch Dashboardsに [admin]ユーザーでログインしましょう。
パスワードは「admin」です。
OpneSearch Dashboards 1

左上のを開くとメニューが展開されますので、[OpenSearch Plugins] → [Security] と選択します。
OpneSearch Dashboards 2

一般ユーザーの新規ユーザー(subro)を作ります。

[Internal users]を選択します。
OpneSearch Dashboards 3

Create internal userを押します。
OpneSearch Dashboards 4

新規ユーザー名とパスワードを入力します。
OpneSearch Dashboards 5

一番下にあるCreateを押します。
OpneSearch Dashboards 6

[subro]ユーザーができました。
OpneSearch Dashboards 7

ロールの雛形からコピーして、独自ロールを作ります。

[Roles]を選択します。
OpneSearch Dashboards 8

デフォルトで組み込まれている [own_index]ロールはユーザー自身が作った Indexに対してのフル権限です。
OpneSearch Dashboards 9

この [own_index]ロールを使いたいのですが、[Index permissions]列(どういう名前の Indexに対しての権限なのか)に、[${user_name}] と定義されています。
[${user_name}]はユーザー名に変換される変数ですので、私の場合は [subro] になります。

つまり [subro]という名前の Indexだけのフル権限になってしまいます。

これでは使えたものではありませんので、これを基にどんな名前の IndexでもOKなロールを作ります。

[own_index]ロールにチェックを入れ、右上にあるActionsを押すとメニューが出ますので、[Duplicate]を選択します。
OpneSearch Dashboards 10

ロール名は「own_index_full」にしました。
OpneSearch Dashboards 11

${user_name}は×で消して、
OpneSearch Dashboards 12

空になったら「*」と入れてからEnterでこうなります。
OpneSearch Dashboards 13

一番下にあるCreateを押します。
OpneSearch Dashboards 14

[own_index_full]ロールができますので、[Mapped users]タブを選択します。
OpneSearch Dashboards 15

Manage mappingを押します。
OpneSearch Dashboards 16

[Users]行が空になっていてそこをフォーカスすると、ユーザー一覧からユーザーを選べるようになります。
[subro]ユーザーを選びます。
OpneSearch Dashboards 17

[subro]ユーザーが選ばれた状態です。
OpneSearch Dashboards 18

一番下にあるMapを押します。
OpneSearch Dashboards 19

こんな風になりまして完了です。
OpneSearch Dashboards 20

これで OpenSearchサーバー側のパーミッションの設定は良いはずです。


[subro]ユーザーを使って Indexを作ってみます。

curlが使えるならどこからでも構いません。
外部からのアクセスが可能かどうかの確認も含めて、私のクライアントPCの Lubuntu 22.04.02からやってみました。

[test_index]インデックスを作成して、1件だけデータを投入します。
結果のパースに jqコマンドを使っています。

subro@Lubuntu2204:~$ curl -s -u 'subro:パスワード' -k -X POST https://UbuntuServer2204-1:9200/test_index/_doc -H 'Content-Type: application/json' -d '{ "name":"Jotaro" }' | jq
{
  "_index": "test_index",
  "_id": "i_FBTYkBDbSCZmtN3vZp",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 0,
  "_primary_term": 1
}

データの投入ができました。

逆にデータを取得してみます。

subro@Ubuntu2204:~$ curl -s -u 'subro:パスワード' -k -X GET https://UbuntuServer2204-1:9200/test_index/_search | jq
{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "test_index",
        "_id": "i_FBTYkBDbSCZmtN3vZp",
        "_score": 1,
        "_source": {
          "name": "Jotaro"
        }
      }
    ]
  }
}

取れていますね。
どうやら良さげです。


OpenSearchのユーザー管理・権限管理は、Elasticsearchとは違うのかも知れません。

権限設定は以下のような作業順序になるみたいです。

  1. ロール(という権限の容れもの)を作る
  2. 一番細かい権限(これは規定のものしかないかも)を必要な分だけロールに登録する
  3. ロールにユーザーを紐付ける(マッピング)

かなり細かい権限設定ができますので徹底的に作り込めますけど、ちょっとやってられない気もします。

ドキュメントには「まずクエリしてみて、パーミッションで弾かれたら、その都度ロールに権限を加えていくのが良い。」という旨が書いてありましたが、ここでやったように雛形を改造する方が却って漏れがないような気がします。


これでやっとこデータ投入が可能になりました。

そういえばまだ日本語検索の対応をしていなかった…。


次回「OpenSearchのインデックスに Pythonでデータを突っ込む」にて、データを入れていきます。