diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/routes/__mocks__/request_context.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/routes/__mocks__/request_context.ts index e8a1e915f43dd..b9d23fc1e6db9 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/routes/__mocks__/request_context.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/detection_engine/routes/__mocks__/request_context.ts @@ -166,6 +166,7 @@ const createSecuritySolutionRequestContextMock = ( getAssetCriticalityDataClient: jest.fn(() => clients.assetCriticalityDataClient), getAuditLogger: jest.fn(() => mockAuditLogger), getDataViewsService: jest.fn(), + getEntityStoreApiKeyManager: jest.fn(), getEntityStoreDataClient: jest.fn(() => clients.entityStoreDataClient), getSiemRuleMigrationsClient: jest.fn(() => clients.siemRuleMigrationsClient), getInferenceClient: jest.fn(() => clients.getInferenceClient()), diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/apply_dataview_indices.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/apply_dataview_indices.ts index 8033a2a32a880..3e41442b52519 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/apply_dataview_indices.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/routes/apply_dataview_indices.ts @@ -58,6 +58,9 @@ export const applyDataViewIndicesEntityEngineRoute = ( }); } + const apiKeyManager = secSol.getEntityStoreApiKeyManager(); + await apiKeyManager.generate(); + if (errors.length === 0) { return response.ok({ body: { @@ -75,7 +78,7 @@ export const applyDataViewIndicesEntityEngineRoute = ( }); } } catch (e) { - logger.error('Error in ApplyEntityEngineDataViewIndices:', e); + logger.error(`Error in ApplyEntityEngineDataViewIndices: ${e.message}`); const error = transformError(e); return siemResponse.error({ statusCode: error.statusCode, diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/tasks/data_view_refresh/data_view_refresh_task.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/tasks/data_view_refresh/data_view_refresh_task.ts index 8065be9f6ae61..14fbdb588b2a8 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/tasks/data_view_refresh/data_view_refresh_task.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/entity_analytics/entity_store/tasks/data_view_refresh/data_view_refresh_task.ts @@ -110,7 +110,13 @@ export const registerEntityStoreDataViewRefreshTask = ({ request, }); - await entityStoreClient.applyDataViewIndices(); + const { errors } = await entityStoreClient.applyDataViewIndices(); + + if (errors.length > 0) { + logger.error( + `Errors applying data view changes to the entity store. Errors: \n${errors.join('\n\n')}` + ); + } }; taskManager.registerTaskDefinitions({ diff --git a/x-pack/solutions/security/plugins/security_solution/server/request_context_factory.ts b/x-pack/solutions/security/plugins/security_solution/server/request_context_factory.ts index d1288fbd3e298..40ef090798741 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/request_context_factory.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/request_context_factory.ts @@ -108,6 +108,16 @@ export class RequestContextFactory implements IRequestContextFactory { const getAuditLogger = () => security?.audit.asScoped(request); + const getEntityStoreApiKeyManager = () => + getApiKeyManager({ + core: coreStart, + logger: options.logger, + security: startPlugins.security, + encryptedSavedObjects: startPlugins.encryptedSavedObjects, + request, + namespace: getSpaceId(), + }); + // List of endpoint authz for the current request's user. Will be initialized the first // time it is requested (see `getEndpointAuthz()` below) let endpointAuthz: Immutable; @@ -144,6 +154,8 @@ export class RequestContextFactory implements IRequestContextFactory { getDataViewsService: () => dataViewsService, + getEntityStoreApiKeyManager, + getDetectionRulesClient: memoize(() => { const mlAuthz = buildMlAuthz({ license: licensing.license, @@ -257,14 +269,7 @@ export class RequestContextFactory implements IRequestContextFactory { experimentalFeatures: config.experimentalFeatures, telemetry: core.analytics, config: config.entityAnalytics.entityStore, - apiKeyManager: getApiKeyManager({ - core: coreStart, - logger, - security: startPlugins.security, - encryptedSavedObjects: startPlugins.encryptedSavedObjects, - request, - namespace: getSpaceId(), - }), + apiKeyManager: getEntityStoreApiKeyManager(), security: startPlugins.security, request, }); diff --git a/x-pack/solutions/security/plugins/security_solution/server/types.ts b/x-pack/solutions/security/plugins/security_solution/server/types.ts index f16d6a073725a..0c2385564f010 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/types.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/types.ts @@ -38,6 +38,7 @@ import type { AssetCriticalityDataClient } from './lib/entity_analytics/asset_cr import type { IDetectionRulesClient } from './lib/detection_engine/rule_management/logic/detection_rules_client/detection_rules_client_interface'; import type { EntityStoreDataClient } from './lib/entity_analytics/entity_store/entity_store_data_client'; import type { SiemRuleMigrationsClient } from './lib/siem_migrations/rules/siem_rule_migrations_service'; +import type { ApiKeyManager } from './lib/entity_analytics/entity_store/auth/api_key'; export { AppClient }; export interface SecuritySolutionApiRequestHandlerContext { @@ -55,6 +56,7 @@ export interface SecuritySolutionApiRequestHandlerContext { getRacClient: (req: KibanaRequest) => Promise; getAuditLogger: () => AuditLogger | undefined; getDataViewsService: () => DataViewsService; + getEntityStoreApiKeyManager: () => ApiKeyManager; getExceptionListClient: () => ExceptionListClient | null; getInternalFleetServices: () => EndpointInternalFleetServicesInterface; getRiskEngineDataClient: () => RiskEngineDataClient;