Skip to content

Commit

Permalink
Update logstash_admin role for system indices (#63368)
Browse files Browse the repository at this point in the history
This PR updates the `logstash_admin` role to include the recently-added Logstash Pipeline Management APIs, as well as access to the `.logstash*` index pattern.
  • Loading branch information
williamrandolph committed Oct 7, 2020
1 parent 0ad2d6c commit 1e741e8
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ A successful call returns an object with "cluster" and "index" fields.
"manage_ilm",
"manage_index_templates",
"manage_ingest_pipelines",
"manage_logstash_pipelines",
"manage_ml",
"manage_oidc",
"manage_own_api_key",
Expand Down
31 changes: 16 additions & 15 deletions x-pack/docs/en/security/authorization/built-in-roles.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Grants access necessary for the APM system user to send system-level data
(such as monitoring) to {es}.

[[built-in-roles-apm-user]] `apm_user` ::
Grants the privileges required for APM users (such as `read` and
Grants the privileges required for APM users (such as `read` and
`view_index_metadata` privileges on the `apm-*` and `.ml-anomalies*` indices).

[[built-in-roles-beats-admin]] `beats_admin` ::
Expand All @@ -27,7 +27,7 @@ Grants access necessary for the Beats system user to send system-level data
(such as monitoring) to {es}.
+
--
[NOTE]
[NOTE]
===============================
* This role should not be assigned to users as the granted permissions may
change between releases.
Expand Down Expand Up @@ -60,12 +60,12 @@ NOTE: This role does *not* provide the ability to create indices; those privileg
must be defined in a separate role.

[[built-in-roles-kibana-dashboard]] `kibana_dashboard_only_user` ::
(This role is deprecated, please use
(This role is deprecated, please use
{kibana-ref}/kibana-privileges.html#kibana-feature-privileges[{kib} feature privileges]
instead).
Grants read-only access to the {kib} Dashboard in every
Grants read-only access to the {kib} Dashboard in every
{kibana-ref}/xpack-spaces.html[space in {kib}].
This role does not have access to editing tools in {kib}.
This role does not have access to editing tools in {kib}.

[[built-in-roles-kibana-system]] `kibana_system` ::
Grants access necessary for the {kib} system user to read from and write to the
Expand All @@ -88,15 +88,16 @@ Grants access to all features in {kib}. For more information on {kib} authorizat
see {kibana-ref}/xpack-security-authorization.html[Kibana authorization].

[[built-in-roles-logstash-admin]] `logstash_admin` ::
Grants access to the `.logstash*` indices for managing configurations.
Grants access to the `.logstash*` indices for managing configurations, and grants
necessary access for logstash-specific APIs exposed by the logstash x-pack plugin.

[[built-in-roles-logstash-system]] `logstash_system` ::
Grants access necessary for the Logstash system user to send system-level data
(such as monitoring) to {es}. For more information, see
{logstash-ref}/ls-security.html[Configuring Security in Logstash].
+
--
[NOTE]
[NOTE]
===============================
* This role should not be assigned to users as the granted permissions may
change between releases.
Expand Down Expand Up @@ -131,17 +132,17 @@ with {kibana-ref}/xpack-security-authorization.html[access to the {kib} instance

[[built-in-roles-remote-monitoring-agent]] `remote_monitoring_agent`::
Grants the minimum privileges required to write data into the monitoring indices
(`.monitoring-*`). This role also has the privileges necessary to create
{metricbeat} indices (`metricbeat-*`) and write data into them.
(`.monitoring-*`). This role also has the privileges necessary to create
{metricbeat} indices (`metricbeat-*`) and write data into them.

[[built-in-roles-remote-monitoring-collector]] `remote_monitoring_collector`::
Grants the minimum privileges required to collect monitoring data for the {stack}.

[[built-in-roles-reporting-user]] `reporting_user`::
Grants the specific privileges required for users of {reporting} other than those
required to use {kib}. This role grants access to the reporting indices; each
required to use {kib}. This role grants access to the reporting indices; each
user has access to only their own reports.
Reporting users should also be assigned additional roles that grant
Reporting users should also be assigned additional roles that grant
{kibana-ref}/xpack-security-authorization.html[access to {kib}] as well as read
access to the <<roles-indices-priv,indices>> that will be used to generate reports.

Expand All @@ -158,13 +159,13 @@ the `superuser` role can also manage users and roles and
<<run-as-privilege, impersonate>> any other user in the system. Due to the
permissive nature of this role, take extra care when assigning it to a user.

[[built-in-roles-transform-admin]] `transform_admin`::
Grants `manage_transform` cluster privileges, which enable you to manage
{transforms}. This role also includes all
[[built-in-roles-transform-admin]] `transform_admin`::
Grants `manage_transform` cluster privileges, which enable you to manage
{transforms}. This role also includes all
{kibana-ref}/kibana-privileges.html[Kibana privileges] for the {ml-features}.

[[built-in-roles-transform-user]] `transform_user`::
Grants `monitor_transform` cluster privileges, which enable you to use
Grants `monitor_transform` cluster privileges, which enable you to use
{transforms}. This role also includes all
{kibana-ref}/kibana-privileges.html[Kibana privileges] for the {ml-features}.

Expand Down
3 changes: 3 additions & 0 deletions x-pack/docs/en/security/authorization/privileges.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ All operations on index templates.
`manage_ingest_pipelines`::
All operations on ingest node pipelines.

`manage_logstash_pipelines`::
All operations on logstash pipelines.

`manage_ml`::
All {ml} operations, such as creating and deleting {dfeeds}, jobs, and model
snapshots.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,9 @@ public class ClusterPrivilegeResolver {
public static final NamedClusterPrivilege MANAGE_OWN_API_KEY = ManageOwnApiKeyClusterPrivilege.INSTANCE;
public static final NamedClusterPrivilege MANAGE_ENRICH = new ActionClusterPrivilege("manage_enrich", MANAGE_ENRICH_AUTOMATON);

public static final NamedClusterPrivilege MANAGE_LOGSTASH_PIPELINES = new ActionClusterPrivilege("manage_logstash_pipelines",
Set.of("cluster:admin/logstash/pipeline/*"));

private static final Map<String, NamedClusterPrivilege> VALUES = Stream.of(
NONE,
ALL,
Expand Down Expand Up @@ -167,7 +170,8 @@ public class ClusterPrivilegeResolver {
READ_SLM,
DELEGATE_PKI,
MANAGE_OWN_API_KEY,
MANAGE_ENRICH).collect(Collectors.toUnmodifiableMap(NamedClusterPrivilege::name, Function.identity()));
MANAGE_ENRICH,
MANAGE_LOGSTASH_PIPELINES).collect(Collectors.toUnmodifiableMap(NamedClusterPrivilege::name, Function.identity()));

/**
* Resolves a {@link NamedClusterPrivilege} from a given name if it exists.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,8 @@ private static Map<String, RoleDescriptor> initializeReservedRoles() {
RoleDescriptor.IndicesPrivileges.builder().indices(HistoryStoreField.INDEX_PREFIX + "*")
.privileges("read")
.build() }, null, MetadataUtils.DEFAULT_RESERVED_METADATA))
.put("logstash_admin", new RoleDescriptor("logstash_admin", null, new RoleDescriptor.IndicesPrivileges[] {
.put("logstash_admin", new RoleDescriptor("logstash_admin", new String[] {"manage_logstash_pipelines"},
new RoleDescriptor.IndicesPrivileges[] {
RoleDescriptor.IndicesPrivileges.builder().indices(".logstash*")
.privileges("create", "delete", "index", "manage", "read").build() },
null, MetadataUtils.DEFAULT_RESERVED_METADATA))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1656,6 +1656,10 @@ public void testLogstashAdminRole() {
assertThat(logstashAdminRole.cluster().check(ClusterUpdateSettingsAction.NAME, request, authentication), is(false));
assertThat(logstashAdminRole.cluster().check(DelegatePkiAuthenticationAction.NAME, request, authentication), is(false));

assertThat(logstashAdminRole.cluster().check("cluster:admin/logstash/pipeline/delete", request, authentication), is(true));
assertThat(logstashAdminRole.cluster().check("cluster:admin/logstash/pipeline/get", request, authentication), is(true));
assertThat(logstashAdminRole.cluster().check("cluster:admin/logstash/pipeline/put", request, authentication), is(true));

assertThat(logstashAdminRole.runAs().check(randomAlphaOfLengthBetween(1, 30)), is(false));

assertThat(logstashAdminRole.indices().allowedIndicesMatcher(IndexAction.NAME).test(mockIndexAbstraction("foo")), is(false));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ setup:
# This is fragile - it needs to be updated every time we add a new cluster/index privilege
# I would much prefer we could just check that specific entries are in the array, but we don't have
# an assertion for that
- length: { "cluster" : 36 }
- length: { "cluster" : 37 }
- length: { "index" : 19 }

0 comments on commit 1e741e8

Please sign in to comment.