[role="xpack"]
[[security-api-query-role]]
=== Query Role API
++++
Query Role
++++
Retrieves roles with <> in a <> fashion.
[[security-api-query-role-request]]
==== {api-request-title}
`GET /_security/_query/role`
`POST /_security/_query/role`
[[security-api-query-role-prereqs]]
==== {api-prereq-title}
* To use this API, you must have at least the `read_security` cluster privilege.
[[security-api-query-role-desc]]
==== {api-description-title}
The role management APIs are generally the preferred way to manage roles, rather than using
<>.
The query roles API does not retrieve roles that are defined in roles files, nor <> ones.
You can optionally filter the results with a query. Also, the results can be paginated and sorted.
[[security-api-query-role-request-body]]
==== {api-request-body-title}
You can specify the following parameters in the request body:
`query`::
(Optional, string) A <> to filter which roles to return.
The query supports a subset of query types, including
<>, <>,
<>, <>,
<>, <>,
<>, <>,
<>, <>,
and <>.
+
You can query the following values associated with a role.
+
.Valid values for `query`
[%collapsible%open]
====
`name`::
(keyword) The <> of the role.
`description`::
(text) The <> of the role.
`metadata`::
(flattened) Metadata field associated with the <>, such as `metadata.app_tag`.
Note that metadata is internally indexed as a <> field type.
This means that all sub-fields act like `keyword` fields when querying and sorting.
It also implies that it is not possible to refer to a subset of metadata fields using wildcard patterns,
e.g. `metadata.field*`, even for query types that support field name patterns.
Lastly, all the metadata fields can be searched together when simply mentioning the
`metadata` field (i.e. not followed by any dot and sub-field name).
`applications`::
The list of <> that the role grants.
`application`:::
(keyword) The name of the application associated to the privileges and resources.
`privileges`:::
(keyword) The names of the privileges that the role grants.
`resources`:::
(keyword) The resources to which the privileges apply.
====
include::{es-ref-dir}/rest-api/common-parms.asciidoc[tag=from]
+
By default, you cannot page through more than 10,000 hits using the `from` and
`size` parameters. To page through more hits, use the
<> parameter.
`size`::
(Optional, integer) The number of hits to return. Must not be negative and defaults to `10`.
+
By default, you cannot page through more than 10,000 hits using the `from` and
`size` parameters. To page through more hits, use the
<> parameter.
`sort`::
(Optional, object) <>. You can sort on `username`, `roles` or `enabled`.
In addition, sort can also be applied to the `_doc` field to sort by index order.
`search_after`::
(Optional, array) <> definition.
[[security-api-query-role-response-body]]
==== {api-response-body-title}
This API returns the following top level fields:
`total`::
The total number of roles found.
`count`::
The number of roles returned in the response.
`roles`::
A list of roles that match the query.
The returned role format is an extension of the <> format.
It adds the `transient_metadata.enabled` and the `_sort` fields.
`transient_metadata.enabled` is set to `false` in case the role is automatically disabled,
for example when the role grants privileges that are not allowed by the installed license.
`_sort` is present when the search query sorts on some field.
It contains the array of values that have been used for sorting.
[[security-api-query-role-example]]
==== {api-examples-title}
The following request lists all roles, sorted by the role name:
[source,console]
----
POST /_security/_query/role
{
"sort": ["name"]
}
----
// TEST[setup:admin_role,user_role]
A successful call returns a JSON structure that contains the information
retrieved for one or more roles:
[source,console-result]
----
{
"total": 2,
"count": 2,
"roles": [ <1>
{
"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"
]
}
]
}
----
// TEST[continued]
<1> The list of roles that were retrieved for this request
Similarly, the following request can be used to query only the user access role,
given its description:
[source,console]
----
POST /_security/_query/role
{
"query": {
"match": {
"description": {
"query": "user access"
}
}
},
"size": 1 <1>
}
----
// TEST[continued]
<1> Return only the best matching role
[source,console-result]
----
{
"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."
}
]
}
----