Elasticsearch X-Pack は、ロールに特定の権限を付与し、それらのロールをユーザーに割り当てる、ロールベースのアクセス制御 (RBAC) を提供します。Alibaba Cloud Elasticsearch にはいくつかの組み込みロールが含まれており、クラスター、インデックス、フィールドのよりきめ細かなコントロールのためにカスタムロールを作成できます。
背景
-
X-Pack RBAC の詳細については、「ユーザー認可」をご参照ください。
-
セキュリティ認証の詳細については、「Elasticsearch における認証と認可」をご参照ください。
操作手順
本手順は Elasticsearch V6.7 および V7.x に適用されます。他のバージョンでは手順が異なる場合があります。正確な手順については、コンソールをご参照ください。
-
ロールを作成します。
-
Kibana コンソールにログインします。
詳細については、「Kibana コンソールへのログイン」をご参照ください。
-
管理ページに移動します。
-
V6.7:左側メニューで、管理 をクリックします。
-
V7.x:ページの左上隅にある
アイコンをクリックし、管理 > [スタックの管理] を選択します。
-
-
Security セクションで、役割 をクリックします。
-
[ロールの作成] をクリックし、パラメーターを設定します。
パラメーター
説明
[ロール名]
ロールの名前です。
クラスター権限
クラスターのヘルス状態や設定の表示、スナップショットの作成など、クラスター操作の権限を定義します。詳細については、「クラスター権限」をご参照ください。
Run As 権限
任意。このロールを引き受けるユーザーです。ここで指定しない場合は、ユーザーの作成時にロールを割り当てることができます。詳細については、「ユーザーの作成」をご参照ください。
インデックス権限
インデックス操作の権限を定義します。たとえば、インデックス名を
*に設定して、すべてのインデックスのすべてのフィールドへのreadアクセスを許可することができます。インデックス名では、ワイルドカード () と正規表現がサポートされています。詳細については、「インデックス権限」をご参照ください。次のパラメーターを設定します:-
インデックス:ロールを作成する際、ドロップダウンリストには既存のインデックスパターンのみが表示され、クラスター内のすべての物理インデックスが自動的に読み込まれるわけではありません。表示されていないインデックスに権限を付与するには、特定のインデックス名またはワイルドカード (
*) を含むインデックス名を入力フィールドに手動で入力し、Enter キーを押して追加します。例:heartbeat-*。説明インデックスパターンがない場合は、管理 ページに移動し、Kibana の下にある [インデックスパターン] をクリックして、画面の指示に従って作成します。
-
権限:ロールに割り当てる権限です。
-
付与されるフィールド (任意):権限を付与するフィールドです。
Kibana 権限
Kibana 操作の権限を定義します。
ロールを作成する際には、権限を割り当てる必要があります。以下に、一般的なロール設定の例を示します:
-
標準ユーザーに特定のインデックスに対する読み取り専用権限を付与します。このユーザーは指定されたインデックスにのみアクセスできます。
詳細については、「読み取り専用インデックス権限の設定」をご参照ください。
-
標準ユーザーに、すべてまたは一部のダッシュボードを表示する権限を付与します。
詳細については、「ダッシュボード権限の設定」をご参照ください。
-
標準ユーザーに、一部のインデックスに対する読み書き権限と、すべてのクラスターに対する読み取り専用権限を付与します。たとえば、ユーザーはクラスターのヘルス状態、スナップショット、設定を表示したり、インデックスへのデータ書き込みやマッピングの更新を行ったりできます。
詳細については、「インデックスの読み書き権限とクラスターの読み取り専用権限の設定」をご参照ください。
-
標準ユーザーに、Kibana Discover とインデックスに対する読み取り専用権限を付与します。このユーザーは、Kibana コンソールの Discover ページに移動して、そのインデックスのデータを表示できます。
詳細については、「インデックスデータに対する Discover の読み取り専用権限の設定」をご参照ください。
-
標準ユーザーに、Kibana コンソールへのアクセス権を付与せずに、ドキュメントの作成、読み取り、更新、削除、インデックスの作成と削除、およびインデックス設定の変更を行う権限を付与します。
詳細については、「Kibana アクセスなしでインデックスとドキュメントを管理する権限の設定」をご参照ください。
-
-
[ロールの作成] をクリックします。
-
-
ユーザーを作成し、ロールを割り当てて権限を付与します。
-
管理ページに移動します。
-
V6.7:左側メニューで、管理 をクリックします。
-
V7.x:ページの左上隅にある
アイコンをクリックし、管理 > [スタックの管理] を選択します。
-
-
Security セクションで、[ユーザー] をクリックします。
-
[新規ユーザーの作成] をクリックし、パラメーターを設定します。
パラメーター
説明
[ユーザー名]
Kibana コンソールへのログインに使用するユーザー名です。
[ログインパスワード]
ユーザーが Kibana コンソールにログインするためのパスワードです。
[確認パスワード]
ログインパスワード と一致している必要があります。
フルネーム
ユーザーのフルネームです。
E メールアドレス
ユーザーの E メールアドレスです。
[役割]
ユーザーにロールを割り当てます。1 つ以上のカスタムロールまたは組み込みロールを選択できます。
重要ロールを作成する際に
[実行ユーザー権限]セクションでユーザーを指定した場合でも、ここでそのロールをユーザーに割り当てる必要があります。そうしないと、ユーザーはログオンできません。 -
[ユーザーの作成] をクリックします。
-
-
新しいユーザーとして Kibana コンソールにログインし、操作を実行して権限を確認します。
読み取り専用インデックス権限の設定
ユースケース
標準ユーザーに特定のインデックスに対する読み取り専用権限を付与します。ユーザーは Kibana コンソールでインデックスデータをクエリできますが、クラスターレベルの API にはアクセスできません。
ロール設定
表 1. 権限の説明
|
権限タイプ |
権限キー |
権限値 |
説明 |
|
インデックス権限 |
indices |
kibana_sample_data_logs |
インデックスの名前です。フルネーム、エイリアス、ワイルドカード、または正規表現を指定できます。詳細については、インデックス権限をご参照ください。 |
|
privileges |
|
インデックスに対する読み取り専用権限を付与します。これらの権限には、 |
|
|
付与されたフィールド (任意) |
|
インデックスフィールドです。* はすべてのフィールドを示します。 |
|
|
Kibana 権限 |
privileges |
|
すべてのスペースに対する Kibana の読み取り専用アクセスを付与します。デフォルトは none で、すべての Kibana スペースへのアクセスを拒否します。 |
検証
-
新しいユーザーとして Kibana コンソールにログインし、読み取りコマンドを実行します。コマンドは正常な結果を返します。
GET /kibana_sample_data_logs/_search -
書き込みコマンドを実行します。認可エラーが表示されます。
POST /kibana_sample_data_logs/_doc/1 { "productName": "testpro", "annual_rate": "3.22%", "describe": "testpro" }{ "error": { "root_cause": [ { "type": "security_exception", "reason": "action [indices:data/write/index] is unauthorized for user [user-test]" } ], "type": "security_exception", "reason": "action [indices:data/write/index] is unauthorized for user [user-test]" }, "status": 403 }
ダッシュボード権限の設定
ユースケース
標準ユーザーに特定のインデックスに対する読み取り専用権限を付与し、そのインデックスのダッシュボードデータを表示できるようにします。
ロール設定
ユーザーを作成する際に、read-index ロールと kibana_dashboard_only_user ロールをユーザーに割り当てます。
-
read-index: 作成が必要なカスタムロールの例です。このロールには、指定されたインデックスに対する読み取り専用権限があります。
-
kibana_dashboard_only_user: 指定されたインデックスのダッシュボードデータを表示する権限を持つ、Kibana の組み込みロールです。
説明-
Kibana 7.0 以降では、kibana_dashboard_only_user ロールは非推奨となっています。特定のインデックスのダッシュボードを表示するには、そのインデックスに対する読み取り専用権限を設定するだけで済みます。詳細については、「インデックスの読み取り専用権限の設定」をご参照ください。
-
kibana_dashboard_only_user ロールは、多くのシナリオでカスタムロールと併用できます。カスタムロールに [ダッシュボード専用ロール] 機能のみを割り当てる必要がある場合は、管理 ページの Kibana エリアで Dashboard セクションを見つけ、カスタムロールをバインドします (デフォルトは kibana_dashboard_only_user ロールです)。
-
検証
新しいユーザーとして Kibana コンソールにログインします。対応するインデックスのダッシュボードを表示できます。
[heartbeat-dashboard] という名前のダッシュボードには、[heartbeat-visu] 折れ線グラフが含まれており、Y 軸にはカウント、X 軸には @timestamp per 30 seconds が表示され、時間経過に伴うハートビートカウントの傾向を示します。
インデックスの読み取り/書き込みとクラスターの読み取り専用権限の設定
ユースケース
ユーザーに特定のインデックスに対する読み取り、書き込み、削除の権限と、クラスターおよび Kibana に対する読み取り専用権限を付与します。
ロール設定
表 2. 権限の説明
|
権限タイプ |
権限キー |
権限値 |
説明 |
|
クラスター権限 |
[クラスター] |
|
クラスターに対する読み取り専用権限を付与します。クラスターヘルス、ステータス、ホットスレッド、ノード情報、ブロックされたタスクの表示などが含まれます。 |
|
インデックス権限 |
indices |
|
インデックスの名前です。完全な名前、エイリアス、ワイルドカード、または正規表現を指定できます。詳細については、「roles-indices-priv」をご参照ください。 |
|
privileges |
|
インデックスに対する読み取り専用権限を付与します。この権限には、 |
|
|
|
インデックスを作成する権限です。インデックスの作成時にインデックスエイリアスを定義する場合は、 重要
インデックスエイリアスも、indices で定義されたマッチングルールを満たす必要があります。 |
||
|
|
マッピングや設定などのインデックスメタデータへの読み取り専用アクセスを許可します。 |
||
|
|
ドキュメントに対するすべての書き込み操作を実行する権限です。これには、 |
||
|
|
すべての操作をモニターする権限です。 |
||
|
|
インデックスのドキュメントを削除する権限です。 |
||
|
|
インデックスを削除する権限です。 |
||
|
granted fields |
|
権限を付与する対象のインデックスフィールドです。* はインデックスのすべてのフィールドを表します。 |
|
|
Kibana 権限 |
privileges |
|
すべてのスペースに対する Kibana の読み取り専用アクセスを許可します。デフォルトは none で、すべての Kibana スペースへのアクセスが拒否されます。 |
検証
一般ユーザーとして Kibana コンソールにログインします。次の操作を実行すると、すべて成功します。
GET _cat/indices?v
GET _cluster/stats
GET /product_info/_search
GET /product_info1/_search
POST /kibana_sample_data_logs/_doc/2
{
"productName":"testpro",
"annual_rate":"3.22%",
"describe":"testpro"
}
PUT /product_info2/_doc/1
{
"productName":"testpro",
"annual_rate":"3.22%",
"describe":"testpro"
}
DELETE product_info
--- 出力 ---
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .monitoring-es-6-2020.12.14 xxx 1 1
green open .kibana_1 xxx 1 1
green open kibana_sample_data_logs xxx 5 1 2 0 18.1kb 9kb
green open .monitoring-kibana-6-2020.12.12 xxx 1 1
green open .monitoring-es-6-2020.12.11 xxx 1 1
green open .monitoring-es-6-2020.12.10 xxx 1 1
green open .monitoring-kibana-6-2020.12.14 xxx 1 1
green open .monitoring-es-6-2020.12.09 xxx 1 1
green open .kibana_task_manager xxx 1 1
green open .monitoring-kibana-6-2020.12.13 xxx 1 1
green open .monitoring-kibana-6-2020.12.09 xxx 1 1
green open product_info1 xxx 5 1 0 0 2.5kb 1.2kb
green open .monitoring-kibana-6-2020.12.11 xxx 1 1
green open .monitoring-es-6-2020.12.12 xxx 1 1
green open product_info2 xxx 5 1 1 0 9.3kb 4.6kb
green open .monitoring-kibana-6-2020.12.10 xxx 1 1
green open .monitoring-es-6-2020.12.13 xxx 1 1
green open .security-6 xxx 1 1
-
クラスター内のインデックスの詳細情報を表示します。
GET /_cat/indices?v -
クラスターのステータスを表示します。
GET /_cluster/stats -
library_v1インデックスのデータをクエリします。GET /library_v1/_search -
library_v2インデックスのデータをクエリします。GET /library_v2/_search -
POST メソッドを使用して、
heartbeat-2023.01.01インデックスにデータを書き込みます。POST /heartbeat-2023.01.01/_doc/2 { "productName": "testpro", "annual_rate": "3.22%", "describe": "testpro" } -
PUT メソッドを使用して、
library_v3インデックスにデータを書き込みます。PUT /library_v3/_doc/1 { "productName": "testpro", "annual_rate": "3.22%", "describe": "testpro" } -
library_v1インデックスを削除します。DELETE library_v1
Discover の読み取り専用権限の設定
ユースケース
標準ユーザーに Kibana Discover とインデックスに対する読み取り専用権限を付与します。このユーザーは、Kibana コンソールの Discover ページに移動して、そのインデックスのデータを表示できます。
ロール設定
表 3. 権限の説明
|
権限タイプ |
権限キー |
権限値 |
説明 |
|
クラスター権限 |
Privileges |
|
クラスターのヘルスとステータス、ホットスレッド、ノード情報、ノードとクラスターの統計、保留中のクラスタータスクの表示など、すべてのクラスターに対する読み取り専用権限を付与します。 |
|
インデックス権限 |
Indices |
kibana_sample_data_ecommerce |
インデックスの名前です。フルネーム、エイリアス、ワイルドカード、または正規表現を指定できます。詳細については、「インデックス権限」をご参照ください。 |
|
Privileges |
|
インデックスに対する読み取り専用権限を付与します。これらの権限には、 |
|
|
付与されたフィールド (任意) |
|
インデックスフィールド。 |
|
|
Kibana 権限 |
Privileges |
|
すべての Kibana スペースに対する読み取り専用権限を付与します。デフォルト値は |
検証
新しいユーザーとして Kibana コンソールにログインします。 Discover ページで指定されたインデックスのデータを表示できます。
現在、インデックス kibana_sample_data_ecommerce が表示されており、そのインデックス内の e コマース注文ドキュメントの詳細がページに正常に表示されます。
Kibana アクセスなしでのインデックスとドキュメントの管理
ユースケース
ユーザーに Kibana コンソールへのアクセス権を付与することなく、API 経由でインデックスとドキュメントを管理する権限を付与します。
ロール設定
表 4. 権限の説明
|
権限タイプ |
権限キー |
権限値 |
説明 |
|
インデックス権限 |
インデックス |
|
インデックスの名前です。フルネーム、エイリアス、ワイルドカード、または正規表現を指定できます。詳細については、「インデックス権限」をご参照ください。 |
|
権限 |
|
インデックスを作成する権限です。インデックス作成リクエストにエイリアスが含まれる場合は、 |
|
|
|
インデックスを削除する権限です。 |
||
|
|
ドキュメントのインデックス登録と更新、およびインデックスマッピングの更新を行う権限です。 |
||
|
|
ドキュメントを削除する権限です。 |
||
|
|
インデックスに対する読み取り専用の権限です。この権限には、 |
||
|
|
エイリアス、設定、マッピング、テンプレートの管理など、インデックス管理操作を行うための権限です。 |
||
|
対象フィールド (任意) |
|
インデックスフィールド。 |
|
|
Kibana権限 |
権限 |
|
|
検証
-
cURL を使用してインデックスを作成してから削除します。
[root@iZbp17az4re1xxx ~]# [root@iZbp17az4re1xxx ~]# curl -u 'test:xxx' -XPUT "http://es-cn-co92y5p2b000xxx.elasticsearch.aliyuncs.com:9200/test_role" {"acknowledged":true,"shards_acknowledged":true,"index":"test_role"}[root@iZbp17az4re1kuerxxx ~]# [root@iZbp17az4re1xxx ~]# [root@iZbp17az4re1xxx ~]# curl -u 'test:xxx' -XDELETE "http://es-cn-co92y5p2b000xxx.elasticsearch.aliyuncs.com:9200/test_role" {"acknowledged":true} root@iZbp17az4re1kuerxxx ~]# -
インデックス設定を変更します。この例では、インデックスデータをウォームデータに設定します。
[root@iZbp17az4re1kuere ~]# [root@iZbp17az4re1kuere ~]# curl -u 'test:xxx' -XPUT "http://es-cn-co92y5p2b000xxx.elasticsearch.aliyuncs.com:9200/test_role/_settings" -H 'content-Type:application/json' -d '{"index":{"routing":{"allocation":{"require.box_type": "warm"}}}}' {"acknowledged":true}[root@iZbp17az4re1kuere-xxx ~]# -
ドキュメントの CRUD 操作を実行します。
[root@iZbp17az4re1kueren xxx ~]# [root@iZbp17az4re1kueren xxx ~]# [root@iZbp17az4re1kueren xxx ~]# curl -u 'test:xxx' -XPOST "http://es-cn-co92y5p2b000xxx.elasticsearch.aliyuncs.com:9200/test_role/_doc/1" -H 'content-Type:application/json' -d '{"test":"you know, for search"}' {"_index":"test_role","_type":"_doc","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":2,"failed":0},"_seq_no":0,"_primary_term":1} [root@iZbp17az4re1kueren xxx ~]# [root@iZbp17az4re1kueren xxx ~]# [root@iZbp17az4re1kueren xxx ~]# curl -u 'test:xxx' -XPOST "http://es-cn-co92y5p2b000xxx.elasticsearch.aliyuncs.com:9200/test_role/_doc/2" -H 'content-Type:application/json' -d '{"test":"you know, for search"}' {"_index":"test_role","_type":"_doc","_id":"2","_version":1,"result":"created","_shards":{"total":2,"successful":2,"failed":0},"_seq_no":1,"_primary_term":1} [root@iZbp17az4re1kueren xxx ~]# [root@iZbp17az4re1kueren xxx ~]# [root@iZbp17az4re1kueren xxx ~]# curl -u 'test:xxx' -XPOST "http://es-cn-co92y5p2b000xxx.elasticsearch.aliyuncs.com:9200/test_role/_doc/2" -H 'content-Type:application/json' -d '{"test":"you know, for search, 2.0"}' {"_index":"test_role","_type":"_doc","_id":"2","_version":2,"result":"updated","_shards":{"total":2,"successful":2,"failed":0},"_seq_no":2,"_primary_term":1} [root@iZbp17az4re1kueren xxx ~]# [root@iZbp17az4re1kueren xxx ~]# [root@iZbp17az4re1kueren xxx ~]# curl -u 'test:xxx' -XGET "http://es-cn-co92y5p2b000xxx.elasticsearch.aliyuncs.com:9200/test_role/_search?q=test:'search'" {"took":64,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":2,"max_score":0.19100356,"hits":[{"_index":"test_role","_type":"_doc","_id":"1","_score":0.19100356,"_source":{"test":"you know,for search"}},{"_index":"test_role","_type":"_doc","_id":"2","_score":0.17439455,"_source":{"test":"you know,for search, 2.0"}}]}} [root@iZbp17az4re1kueren xxx ~]# [root@iZbp17az4re1kueren xxx ~]# curl -u 'test:xxx' -XDELETE "http://es-cn-co92y5p2b000xxx.elasticsearch.aliyuncs.com:9200/test_role/_doc/2" {"_index":"test_role","_type":"_doc","_id":"2","_version":3,"result":"deleted","_shards":{"total":2,"successful":2,"failed":0},"_seq_no":3,"_primary_term":1} [root@iZbp17az4re1kueren xxx ~]# [root@iZbp17az4re1kueren xxx ~]# -
ユーザーとして Kibana コンソールにログインします。
ユーザーが必要な権限を持っていないことを示すメッセージが表示されます。
よくある質問
RAM ユーザーの AccessKey ID と AccessKey Secret を使用して、Elasticsearch クラスター内のデータに直接アクセスできますか?
いいえ、できません。RAM ユーザーの AccessKey ID と AccessKey Secret は、インスタンスの作成や再起動、設定の変更といった Alibaba Cloud 管理 API の呼び出しにのみ使用できます。Elasticsearch クラスター内のデータへの直接アクセスやデータ操作には使用できません。クラスターデータの読み取りや書き込み、またはインデックス操作を行うには、Elasticsearch X-Pack セキュリティ認証システムで作成されたユーザー名とパスワードを使用してください。
elastic スーパーユーザーが .kibana_security_session_1 インデックスを削除しようとすると、「403 insufficient privileges」エラーが表示されるのはなぜですか?
.kibana_security_session_1 インデックスは、Kibana がユーザーセッション情報を保存するために使用する保護されたシステムインデックスです。superuser ロールを持つ elastic ユーザーであっても、API を使用してこのインデックスを直接削除することはできません。これは Elasticsearch と Kibana のセキュリティ制限であり、権限設定の誤りではありません。このインデックスに関する問題が原因でログインやセッションの問題が発生している場合は、ブラウザキャッシュをクリアしてから、Kibana コンソールに再度ログインしてください。