-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature Controls - Role Management API Docs #34854
Changes from 1 commit
dfd4c99
32026f3
e2281d8
6234e84
0064bea
15a0437
2feb129
9d85329
92af0ad
ec6a85c
8bbee63
f99efcc
323608b
4e89fa5
f43cd7b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -32,9 +32,39 @@ that begin with `_` are reserved for system usage. | |
`elasticsearch`:: (object) Optional {es} cluster and index privileges, valid keys are | ||
`cluster`, `indices` and `run_as`. For more information, see {xpack-ref}/defining-roles.html[Defining Roles]. | ||
|
||
`kibana`:: (object) An object that specifies the <<kibana-privileges>>. Valid keys are `global` and `space`. Privileges defined in the `global` key will apply to all spaces within Kibana, and will take precedent over any privileges defined in the `space` key. For example, specifying `global: ["all"]` will grant full access to all spaces within Kibana, even if the role indicates that a specific space should only have `read` privileges. | ||
`kibana`:: (array) An array of objects which specify the <<kibana-privileges>> for this role: | ||
legrego marked this conversation as resolved.
Show resolved
Hide resolved
|
||
[source,js] | ||
-------------------------------------------------- | ||
[{ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Rather than explain all this in prose, I thought it'd be easier to understand if I just had a well-documented JSON snippet instead. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is a good idea. However, some of the lines are hard to read because of horizontal scrolling. I made an attempt to edit them down. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. My only concern is that we can't link to the "Kibana Privileges" section when using comments within the JSON. Perhaps we could mirror the way that Elasticsearch's role API docs implement the "index privileges": https://www.elastic.co/guide/en/elasticsearch/reference/7.0/security-api-put-role.html |
||
// An optional base privilege. | ||
// If specified, must either be ["all"] or ["read"]. | ||
// Privileges granted here cannot be revoked or downgraded via the `feature` section. | ||
legrego marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// "all" grants read/write access to all features within Kibana for the specified spaces. | ||
legrego marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// "read" grants read-only access to all featuers within Kibana for the specified spaces. | ||
legrego marked this conversation as resolved.
Show resolved
Hide resolved
|
||
"base": [], | ||
|
||
// Object containing privileges for specific features. | ||
// Privileges specified here will be added to the base privilege, if one was provided. | ||
legrego marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// For example, specifying `base: ["read"]` will grant read access to every feature, | ||
legrego marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// even if they aren't granted anything in this feature section. | ||
legrego marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// Use the Features API to retrieve a list of available features <1> | ||
legrego marked this conversation as resolved.
Show resolved
Hide resolved
|
||
"feature": { | ||
"advancedSettings": ["all"], | ||
"discover": ["all"], | ||
"visualize": ["all"], | ||
"dashboard": ["read"] | ||
}, | ||
|
||
// The spaces these privileges should be applied to. | ||
// To grant access to all spaces, set this to `["*"]`, or omit the value altogether. | ||
legrego marked this conversation as resolved.
Show resolved
Hide resolved
|
||
"spaces": ["default", "marketing", "sales"] | ||
}] | ||
-------------------------------------------------- | ||
|
||
<1> <<features-api>> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. note: This relies on the Features API docs created in #34575 |
||
|
||
===== Example | ||
===== Example 1 | ||
Granting read access to all features in all spaces, with full access to Advanced Settings. | ||
|
||
[source,js] | ||
-------------------------------------------------- | ||
|
@@ -54,22 +84,60 @@ PUT /api/security/role/my_kibana_role | |
"query" : "{\"match\": {\"title\": \"foo\"}}" | ||
} ] | ||
}, | ||
"kibana": { | ||
"global": ["all"] | ||
} | ||
"kibana": [ | ||
{ | ||
"base": [ | ||
"read" | ||
], | ||
"feature": { | ||
"advancedSettings": ["all"] | ||
}, | ||
"spaces": [ | ||
"*" | ||
] | ||
} | ||
] | ||
} | ||
-------------------------------------------------- | ||
// KIBANA | ||
|
||
==== Response | ||
|
||
A successful call returns a response code of `204` and no response body. | ||
===== Example 2 | ||
Granting "dashboard only" access to only the Marketing space. | ||
|
||
[source,js] | ||
-------------------------------------------------- | ||
PUT /api/security/role/my_kibana_role | ||
{ | ||
"metadata" : { | ||
"version" : 1 | ||
}, | ||
"elasticsearch": { | ||
legrego marked this conversation as resolved.
Show resolved
Hide resolved
|
||
"cluster" : [ "all" ], | ||
"indices" : [ { | ||
"names" : [ "index1", "index2" ], | ||
"privileges" : [ "all" ], | ||
"field_security" : { | ||
"grant" : [ "title", "body" ] | ||
}, | ||
"query" : "{\"match\": {\"title\": \"foo\"}}" | ||
} ] | ||
}, | ||
"kibana": [ | ||
{ | ||
"base": [], | ||
"feature": { | ||
"dashboard": ["read"] | ||
}, | ||
"spaces": [ | ||
"marketing" | ||
] | ||
} | ||
] | ||
} | ||
-------------------------------------------------- | ||
|
||
==== Granting access to specific spaces | ||
To grant access to individual spaces within {kib}, specify the space identifier within the `kibana` object. | ||
|
||
Note: granting access | ||
===== Example 3 | ||
Granting full access to all features in the Default space. | ||
|
||
[source,js] | ||
-------------------------------------------------- | ||
|
@@ -89,12 +157,19 @@ PUT /api/security/role/my_kibana_role | |
"query" : "{\"match\": {\"title\": \"foo\"}}" | ||
} ] | ||
}, | ||
"kibana": { | ||
"global": [], | ||
"space": { | ||
"marketing": ["all"], | ||
"engineering": ["read"] | ||
"kibana": [ | ||
{ | ||
"base": ["all"], | ||
"feature": { | ||
}, | ||
"spaces": [ | ||
"default" | ||
] | ||
} | ||
} | ||
] | ||
} | ||
-------------------------------------------------- | ||
|
||
==== Response | ||
|
||
A successful call returns a response code of `204` and no response body. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This feature list might be overkill, but I wanted to show an example of a really customized role definition. I can scale it back if that'd be better.