クエリロールAPI
Query DSL を使用して、ページネーション 形式でロールを取得します。
リクエスト
GET /_security/_query/role
POST /_security/_query/role
前提条件
- このAPIを使用するには、少なくとも
read_security
クラスター権限を持っている必要があります。
説明
ロール管理APIは、ファイルベースのロール管理 を使用するよりも、一般的にロールを管理するための推奨方法です。クエリロールAPIは、ロールファイルで定義されたロールや、組み込みのロールを取得しません。オプションでクエリを使用して結果をフィルタリングできます。また、結果はページネーションされ、ソートされることもあります。
リクエストボディ
リクエストボディに次のパラメータを指定できます:
query
- (オプション、文字列) 返すロールをフィルタリングするためのクエリ。クエリは、
match_all
、bool
、term
、terms
、match
、ids
、prefix
、wildcard
、exists
、range
、およびsimple query string
を含むクエリタイプのサブセットをサポートします。
ロールに関連する次の値をクエリできます。query
の有効な値name
- (キーワード) ロールの名前。
description
- (テキスト) ロールの説明。
metadata
- (フラット化) ロール に関連するメタデータフィールド、例えば
metadata.app_tag
。メタデータは内部的にフラット化フィールドタイプとしてインデックスされます。これは、すべてのサブフィールドがクエリおよびソート時にkeyword
フィールドのように動作することを意味します。また、フィールド名パターンをサポートするクエリタイプに対しても、ワイルドカードパターンを使用してメタデータフィールドのサブセットを参照することはできません。最後に、metadata
フィールドを単に言及することで、すべてのメタデータフィールドを一緒に検索できます(すなわち、ドットやサブフィールド名が続かない場合)。 applications
- ロールが付与するアプリケーション権限のリスト。
application
- (キーワード) 権限およびリソースに関連するアプリケーションの名前。
privileges
- (キーワード) ロールが付与する権限の名前。
resources
- (キーワード) 権限が適用されるリソース。
from
- (オプション、整数) 開始ドキュメントオフセット。非負である必要があり、デフォルトは
0
です。
デフォルトでは、from
およびsize
パラメータを使用して、10,000件を超えるヒットをページングすることはできません。より多くのヒットをページングするには、search_after
パラメータを使用します。 size
- (オプション、整数) 返すヒットの数。負であってはならず、デフォルトは
10
です。
デフォルトでは、from
およびsize
パラメータを使用して、10,000件を超えるヒットをページングすることはできません。より多くのヒットをページングするには、search_after
パラメータを使用します。 sort
- (オプション、オブジェクト) ソート定義。
username
、roles
またはenabled
でソートできます。さらに、_doc
フィールドに対してインデックス順でソートを適用することもできます。 search_after
- (オプション、配列) 検索後 定義。
レスポンスボディ
このAPIは、次のトップレベルフィールドを返します:
total
- 見つかったロールの総数。
count
- レスポンスで返されたロールの数。
roles
- クエリに一致するロールのリスト。返されたロールの形式は、ロール定義形式の拡張です。
transient_metadata.enabled
および_sort
フィールドが追加されます。ロールが自動的に無効化される場合、transient_metadata.enabled
はfalse
に設定されます。たとえば、ロールがインストールされたライセンスによって許可されていない権限を付与する場合です。検索クエリがいくつかのフィールドでソートされている場合、_sort
が存在します。これは、ソートに使用された値の配列を含みます。
例
次のリクエストは、ロール名でソートされたすべてのロールをリストします:
Python
resp = client.security.query_role(
sort=[
"name"
],
)
print(resp)
Js
const response = await client.security.queryRole({
sort: ["name"],
});
console.log(response);
コンソール
POST /_security/_query/role
{
"sort": ["name"]
}
成功した呼び出しは、1つ以上のロールに対して取得された情報を含むJSON構造を返します:
コンソール-結果
{
"total": 2,
"count": 2,
"roles": [
{
"name" : "my_admin_role",
"cluster" : [
"all"
],
"indices" : [
{
"names" : [
"index1",
"index2"
],
"privileges" : [
"all"
],
"field_security" : {
"grant" : [
"title",
"body"
]
},
"allow_restricted_indices" : false
}
],
"applications" : [ ],
"run_as" : [
"other_user"
],
"metadata" : {
"version" : 1
},
"transient_metadata" : {
"enabled" : true
},
"description" : "Grants full access to all management features within the cluster.",
"_sort" : [
"my_admin_role"
]
},
{
"name" : "my_user_role",
"cluster" : [ ],
"indices" : [
{
"names" : [
"index1",
"index2"
],
"privileges" : [
"all"
],
"field_security" : {
"grant" : [
"title",
"body"
]
},
"allow_restricted_indices" : false
}
],
"applications" : [ ],
"run_as" : [ ],
"metadata" : {
"version" : 1
},
"transient_metadata" : {
"enabled" : true
},
"description" : "Grants user access to some indicies.",
"_sort" : [
"my_user_role"
]
}
]
}
このリクエストのために取得されたロールのリスト |
同様に、次のリクエストを使用して、説明に基づいてユーザーアクセスロールのみをクエリできます:
Python
resp = client.security.query_role(
query={
"match": {
"description": {
"query": "user access"
}
}
},
size=1,
)
print(resp)
Js
const response = await client.security.queryRole({
query: {
match: {
description: {
query: "user access",
},
},
},
size: 1,
});
console.log(response);
コンソール
POST /_security/_query/role
{
"query": {
"match": {
"description": {
"query": "user access"
}
}
},
"size": 1
}
最も一致するロールのみを返します |
コンソール-結果
{
"total": 2,
"count": 1,
"roles": [
{
"name" : "my_user_role",
"cluster" : [ ],
"indices" : [
{
"names" : [
"index1",
"index2"
],
"privileges" : [
"all"
],
"field_security" : {
"grant" : [
"title",
"body"
]
},
"allow_restricted_indices" : false
}
],
"applications" : [ ],
"run_as" : [ ],
"metadata" : {
"version" : 1
},
"transient_metadata" : {
"enabled" : true
},
"description" : "Grants user access to some indicies."
}
]
}