123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- [role="xpack"]
- [[securing-aliases]]
- === Granting privileges for data streams and index aliases
- {es} {security-features} allow you to secure operations executed against
- <<data-streams,data streams>> and <<alias,aliases>>.
- [[data-stream-privileges]]
- ==== Data stream privileges
- // tag::data-stream-security[]
- Use <<privileges-list-indices,indices privileges>> to control access to
- a data stream. Any role or user granted privileges to a data
- stream are automatically granted the same privileges to its backing indices.
- // end::data-stream-security[]
- For example, `my-data-stream` consists of two backing indices:
- `.ds-my-data-stream-2099.03.07-000001` and
- `.ds-my-data-stream-2099.03.08-000002`.
- A user is granted the `read` privilege to `my-data-stream`.
- [source,js]
- --------------------------------------------------
- {
- "names" : [ "my-data-stream" ],
- "privileges" : [ "read" ]
- }
- --------------------------------------------------
- // NOTCONSOLE
- Because the user is automatically granted the same privileges to the stream's
- backing indices, the user can retrieve a document directly from
- `.ds-my-data-stream-2099.03.08-000002`:
- ////
- [source,console]
- ----
- PUT my-index/_doc/2
- {
- "my-field": "foo"
- }
- ----
- ////
- [source,console]
- ----
- GET .ds-my-data-stream-2099.03.08-000002/_doc/2
- ----
- // TEST[continued]
- // TEST[s/.ds-my-data-stream-2099.03.08-000002/my-index/]
- Later `my-data-stream` <<manually-roll-over-a-data-stream,rolls over>>. This
- creates a new backing index: `.ds-my-data-stream-2099.03.09-000003`. Because the
- user still has the `read` privilege for `my-data-stream`, the user can retrieve
- documents directly from `.ds-my-data-stream-2099.03.09-000003`:
- [source,console]
- ----
- GET .ds-my-data-stream-2099.03.09-000003/_doc/2
- ----
- // TEST[continued]
- // TEST[s/.ds-my-data-stream-2099.03.09-000003/my-index/]
- [[index-alias-privileges]]
- ==== Index alias privileges
- An index alias points to one or more indices,
- holds metadata and potentially a filter. The {es} {security-features} treat
- aliases and indices
- the same. Privileges for indices actions are granted on specific indices or
- aliases. In order for an indices action to be authorized, the user that executes
- it needs to have permissions for that action on all the specific indices or
- aliases that the request relates to.
- Let's look at an example. Assuming we have an index called `2015`, an alias that
- points to it called `current_year`, and a user with the following role:
- [source,js]
- --------------------------------------------------
- {
- "names" : [ "2015" ],
- "privileges" : [ "read" ]
- }
- --------------------------------------------------
- // NOTCONSOLE
- The user attempts to retrieve a document from `current_year`:
- [source,console]
- -------------------------------------------------------------------------------
- GET /current_year/_doc/1
- -------------------------------------------------------------------------------
- // TEST[s/^/PUT 2015\n{"aliases": {"current_year": {}}}\nPUT 2015\/_doc\/1\n{}\n/]
- The above request gets rejected, although the user has `read` privilege on the
- concrete index that the `current_year` alias points to. The correct permission
- would be as follows:
- [source,js]
- --------------------------------------------------
- {
- "names" : [ "current_year" ],
- "privileges" : [ "read" ]
- }
- --------------------------------------------------
- // NOTCONSOLE
- [discrete]
- ==== Managing aliases
- Unlike creating indices, which requires the `create_index` privilege, adding,
- removing and retrieving aliases requires the `manage` permission. Aliases can be
- added to an index directly as part of the index creation:
- [source,console]
- -------------------------------------------------------------------------------
- PUT /2015
- {
- "aliases": {
- "current_year": {}
- }
- }
- -------------------------------------------------------------------------------
- or via the dedicated aliases api if the index already exists:
- [source,console]
- -------------------------------------------------------------------------------
- POST /_aliases
- {
- "actions" : [
- { "add" : { "index" : "2015", "alias" : "current_year" } }
- ]
- }
- -------------------------------------------------------------------------------
- // TEST[s/^/PUT 2015\n/]
- The above requests both require the `manage` privilege on the alias name as well
- as the targeted index, as follows:
- [source,js]
- --------------------------------------------------
- {
- "names" : [ "20*", "current_year" ],
- "privileges" : [ "manage" ]
- }
- --------------------------------------------------
- // NOTCONSOLE
- The index aliases api also allows also to delete aliases from existing indices.
- The privileges required for such a request are the same as above. Both index and
- alias need the `manage` permission.
- [discrete]
- ==== Filtered aliases
- Aliases can hold a filter, which allows to select a subset of documents that can
- be accessed out of all the documents that the physical index contains. These
- filters are not always applied and should not be used in place of
- <<document-level-security,document level security>>.
|