Skip to content

Commit aa58fc7

Browse files
opaulohelasticsearchmachine
andauthored
[Security] Add entity store and asset criticality index privileges to built in Editor and Viewer roles (#129662)
* Adding asset criticality and entity store permissions to built in roles * Update docs/changelog/129662.yaml * [CI] Auto commit changes from spotless * Corrects entity store index pattern Updates the entity store index pattern to ensure it matches the minimum necessary index name and narrow it down to the correct use case --------- Co-authored-by: elasticsearchmachine <[email protected]>
1 parent f7e3fe1 commit aa58fc7

File tree

4 files changed

+33
-3
lines changed

4 files changed

+33
-3
lines changed

docs/changelog/129662.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pr: 129662
2+
summary: "[Security] Add entity store and asset criticality index privileges to built\
3+
\ in Editor, Viewer and Kibana System roles"
4+
area: Authorization
5+
type: enhancement
6+
issues: []

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/store/KibanaOwnedReservedRoleDescriptors.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ static RoleDescriptor kibanaSystem(String name) {
547547
.indices(".asset-criticality.asset-criticality-*")
548548
.privileges("create_index", "manage", "read", "write")
549549
.build(),
550-
RoleDescriptor.IndicesPrivileges.builder().indices(".entities.v1.latest.security*").privileges("read").build(),
550+
RoleDescriptor.IndicesPrivileges.builder().indices(".entities.v1.latest.security*").privileges("read", "write").build(),
551551
// For cloud_defend usageCollection
552552
RoleDescriptor.IndicesPrivileges.builder()
553553
.indices("logs-cloud_defend.*", "metrics-cloud_defend.*")

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authz/store/ReservedRolesStore.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ public class ReservedRolesStore implements BiConsumer<Set<String>, ActionListene
7575
public static final String LISTS_ITEMS_INDEX = ".items-*";
7676
public static final String LISTS_ITEMS_INDEX_REINDEXED_V8 = ".reindexed-v8-items-*";
7777

78+
/** "Security Solutions" Entity Store and Asset Criticality indices for Asset Inventory and Entity Analytics */
79+
public static final String ENTITY_STORE_V1_LATEST_INDEX = ".entities.v1.latest.security_*";
80+
public static final String ASSET_CRITICALITY_INDEX = ".asset-criticality.asset-criticality-*";
81+
7882
/** Index pattern for Universal Profiling */
7983
public static final String UNIVERSAL_PROFILING_ALIASES = "profiling-*";
8084
public static final String UNIVERSAL_PROFILING_BACKING_INDICES = ".profiling-*";
@@ -784,7 +788,9 @@ private static RoleDescriptor buildViewerRoleDescriptor() {
784788
ReservedRolesStore.LISTS_ITEMS_INDEX,
785789
ReservedRolesStore.ALERTS_LEGACY_INDEX_REINDEXED_V8,
786790
ReservedRolesStore.LISTS_INDEX_REINDEXED_V8,
787-
ReservedRolesStore.LISTS_ITEMS_INDEX_REINDEXED_V8
791+
ReservedRolesStore.LISTS_ITEMS_INDEX_REINDEXED_V8,
792+
ReservedRolesStore.ENTITY_STORE_V1_LATEST_INDEX,
793+
ReservedRolesStore.ASSET_CRITICALITY_INDEX
788794
)
789795
.privileges("read", "view_index_metadata")
790796
.build(),
@@ -846,10 +852,16 @@ private static RoleDescriptor buildEditorRoleDescriptor() {
846852
ReservedRolesStore.LISTS_ITEMS_INDEX,
847853
ReservedRolesStore.ALERTS_LEGACY_INDEX_REINDEXED_V8,
848854
ReservedRolesStore.LISTS_INDEX_REINDEXED_V8,
849-
ReservedRolesStore.LISTS_ITEMS_INDEX_REINDEXED_V8
855+
ReservedRolesStore.LISTS_ITEMS_INDEX_REINDEXED_V8,
856+
ReservedRolesStore.ASSET_CRITICALITY_INDEX
850857
)
851858
.privileges("read", "view_index_metadata", "write", "maintenance")
852859
.build(),
860+
// Security - Entity Store is view only
861+
RoleDescriptor.IndicesPrivileges.builder()
862+
.indices(ReservedRolesStore.ENTITY_STORE_V1_LATEST_INDEX)
863+
.privileges("read", "view_index_metadata")
864+
.build(),
853865
// Alerts-as-data
854866
RoleDescriptor.IndicesPrivileges.builder()
855867
.indices(

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/security/authz/store/ReservedRolesStoreTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1851,6 +1851,13 @@ public void testKibanaSystemRole() {
18511851
assertViewIndexMetadata(kibanaRole, indexName);
18521852
});
18531853

1854+
Arrays.asList(".entities.v1.latest.security_" + randomAlphaOfLength(randomIntBetween(0, 13))).forEach(indexName -> {
1855+
final IndexAbstraction indexAbstraction = mockIndexAbstraction(indexName);
1856+
assertThat(kibanaRole.indices().allowedIndicesMatcher(TransportSearchAction.TYPE.name()).test(indexAbstraction), is(true));
1857+
assertThat(kibanaRole.indices().allowedIndicesMatcher(TransportUpdateAction.TYPE.name()).test(indexAbstraction), is(true));
1858+
assertViewIndexMetadata(kibanaRole, indexName);
1859+
});
1860+
18541861
Arrays.asList("metrics-logstash." + randomAlphaOfLength(randomIntBetween(0, 13))).forEach((indexName) -> {
18551862
final IndexAbstraction indexAbstraction = mockIndexAbstraction(indexName);
18561863
assertThat(kibanaRole.indices().allowedIndicesMatcher("indices:foo").test(indexAbstraction), is(false));
@@ -3676,6 +3683,9 @@ public void testPredefinedViewerRole() {
36763683
assertOnlyReadAllowed(role, ".profiling-" + randomIntBetween(0, 5));
36773684
assertOnlyReadAllowed(role, randomAlphaOfLength(5));
36783685

3686+
assertOnlyReadAllowed(role, ".entities.v1.latest.security_" + randomIntBetween(0, 5));
3687+
assertOnlyReadAllowed(role, ".asset-criticality.asset-criticality-" + randomIntBetween(0, 5));
3688+
36793689
assertOnlyReadAllowed(role, ".slo-observability." + randomIntBetween(0, 5));
36803690
assertViewIndexMetadata(role, ".slo-observability." + randomIntBetween(0, 5));
36813691

@@ -3746,6 +3756,7 @@ public void testPredefinedEditorRole() {
37463756
assertOnlyReadAllowed(role, "endgame-" + randomIntBetween(0, 5));
37473757
assertOnlyReadAllowed(role, "profiling-" + randomIntBetween(0, 5));
37483758
assertOnlyReadAllowed(role, ".profiling-" + randomIntBetween(0, 5));
3759+
assertOnlyReadAllowed(role, ".entities.v1.latest.security_" + randomIntBetween(0, 5));
37493760
assertOnlyReadAllowed(role, randomAlphaOfLength(5));
37503761

37513762
assertReadWriteDocsAndMaintenanceButNotDeleteIndexAllowed(role, ".siem-signals-" + randomIntBetween(0, 5));
@@ -3756,6 +3767,7 @@ public void testPredefinedEditorRole() {
37563767
assertReadWriteDocsAndMaintenanceButNotDeleteIndexAllowed(role, ".internal.alerts-" + randomIntBetween(0, 5));
37573768
assertReadWriteDocsAndMaintenanceButNotDeleteIndexAllowed(role, ".preview.alerts-" + randomIntBetween(0, 5));
37583769
assertReadWriteDocsAndMaintenanceButNotDeleteIndexAllowed(role, ".internal.preview.alerts-" + randomIntBetween(0, 5));
3770+
assertReadWriteDocsAndMaintenanceButNotDeleteIndexAllowed(role, ".asset-criticality.asset-criticality-" + randomIntBetween(0, 5));
37593771

37603772
assertViewIndexMetadata(role, ".slo-observability." + randomIntBetween(0, 5));
37613773
assertReadWriteAndManage(role, ".slo-observability." + randomIntBetween(0, 5));

0 commit comments

Comments
 (0)