Skip to content
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

[Security Solution][SIEM migrations] Onboarding UI improvements #204320

Merged
Merged
Changes from 1 commit
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
60fbe6f
add support for topics on the onboarding page
semd Nov 22, 2024
3985477
reorganize directories inside components
semd Nov 22, 2024
03b5034
solve conflict
semd Nov 22, 2024
376f2d6
Merge remote-tracking branch 'upstream/main' into 10667/siem_migratio…
semd Nov 25, 2024
318d79e
Merge remote-tracking branch 'upstream' into 10667/siem_migrations/on…
semd Nov 26, 2024
8557994
resources schema id
semd Nov 26, 2024
da3938c
update and add tests
semd Nov 26, 2024
132c67b
resources type fix
semd Nov 27, 2024
94c56c8
add connector selection and auto-resume stopped migrations within the…
semd Nov 28, 2024
a0702c9
Merge remote-tracking branch 'origin/10667/siem_migrations/onboarding…
semd Nov 28, 2024
1d1f1da
Merge branch 'main' into 10667/siem_migrations/onboarding_ui
elasticmachine Nov 28, 2024
cee50d7
initial implementation
semd Nov 28, 2024
5a9a06a
extract common styles into single places
semd Nov 28, 2024
f2beaf3
format code
semd Nov 28, 2024
9f305c9
Merge branch '10667/siem_migrations/onboarding_ui' into 10667/siem_mi…
semd Nov 28, 2024
4ce992d
conflict solve
semd Nov 28, 2024
8b60935
cleaning
semd Nov 29, 2024
f09344b
solve conflict
semd Nov 29, 2024
ef6c17d
upload panel styles
semd Nov 29, 2024
5cb839d
flyout scafolding
semd Nov 29, 2024
ecadb11
solve conflicts
semd Nov 30, 2024
d79dc47
add upload input
semd Dec 1, 2024
a486424
basic workflow working
semd Dec 3, 2024
0ce93d9
Merge remote-tracking branch 'upstream/main' into 10667/siem_migratio…
semd Dec 3, 2024
b02a569
no connector selected callout
semd Dec 3, 2024
216a6dc
solve conflicts
semd Dec 3, 2024
0d6ae1f
[CI] Auto-commit changed files from 'node scripts/eslint --no-cache -…
kibanamachine Dec 4, 2024
6e63ffa
add langsmith trace options
semd Dec 4, 2024
86210fc
Merge remote-tracking branch 'refs/remotes/origin/10667/siem_migratio…
semd Dec 4, 2024
ac6e675
lint fixes
semd Dec 4, 2024
9573dd6
Merge branch '10667/siem_migrations/onboarding_ui_flyout' into 10667/…
semd Dec 4, 2024
dcaffe2
[CI] Auto-commit changed files from 'yarn openapi:generate'
kibanamachine Dec 4, 2024
2460462
resources missing route
semd Dec 5, 2024
0957440
organize get and filter parameters
semd Dec 5, 2024
5cdf539
conflicts solved
semd Dec 5, 2024
09b8b5a
Merge remote-tracking branch 'refs/remotes/origin/10667/siem_migratio…
semd Dec 5, 2024
ca33b12
type fixes
semd Dec 5, 2024
0af2d10
typo
semd Dec 5, 2024
c9af65b
Merge branch '10667/siem_migrations/onboarding_ui_flyout' into 10667/…
semd Dec 5, 2024
d2b32ee
Merge remote-tracking branch 'upstream/main' into 10667/siem_migratio…
semd Dec 5, 2024
349915b
restore batch size
semd Dec 5, 2024
459d856
Merge branch '10667/siem_migrations/onboarding_ui_flyout' into 10667/…
semd Dec 5, 2024
eb87b4b
Merge remote-tracking branch 'upstream/main' into 10667/siem_migratio…
semd Dec 5, 2024
9e548ff
use Security common NonEmptyString
semd Dec 5, 2024
aa06fe8
try/catch NDJson parser
semd Dec 5, 2024
e8614d6
adapt resources api and batch searchh
semd Dec 7, 2024
4c31b09
Merge remote-tracking branch 'origin/10667/siem_migrations/onboarding…
semd Dec 8, 2024
8e57219
conflicts solved
semd Dec 8, 2024
547d5a4
implement macros step
semd Dec 9, 2024
f28861a
conflicts solved
semd Dec 9, 2024
4ea0ae5
[CI] Auto-commit changed files from 'yarn openapi:generate'
kibanamachine Dec 9, 2024
6c2bcb6
fix type
semd Dec 9, 2024
cd1af61
migration retriever initialize
semd Dec 9, 2024
0e3d6eb
Merge remote-tracking branch 'upstream/main' into 10667/siem_migratio…
semd Dec 10, 2024
acb1a66
createAgent function
semd Dec 10, 2024
4734473
accept ndjson extension
semd Dec 10, 2024
b256828
Merge remote-tracking branch 'upstream/main' into 10667/siem_migratio…
semd Dec 10, 2024
07221d0
Merge remote-tracking branch 'origin/10667/siem_migrations/onboarding…
semd Dec 10, 2024
9e8af45
results panel
semd Dec 12, 2024
ae2a6b6
address comments
semd Dec 12, 2024
8eb86f8
Merge branch '10667/siem_migrations/onboarding_ui_flyout_macros_looku…
semd Dec 12, 2024
9d14cad
Merge branch 'main' into 10667/siem_migrations/onboarding_ui_flyout_m…
elasticmachine Dec 12, 2024
782a39a
implement mark lookup as emtpy
semd Dec 13, 2024
d97fcee
Merge remote-tracking branch 'origin/10667/siem_migrations/onboarding…
semd Dec 13, 2024
ede3df4
fix conflicts
semd Dec 14, 2024
9c4b257
fix conflict
semd Dec 14, 2024
fe8736c
[CI] Auto-commit changed files from 'node scripts/eslint --no-cache -…
kibanamachine Dec 14, 2024
0803573
Merge remote-tracking branch 'upstream/main' into 10667/siem_migratio…
semd Dec 16, 2024
d9fbdce
move code to siem_migrations public directory
semd Dec 16, 2024
b3bb5eb
move code to siem_migrations public directory
semd Dec 16, 2024
01a775d
Merge remote-tracking branch 'refs/remotes/origin/10667/siem_migratio…
semd Dec 16, 2024
67680b2
centralize panels components
semd Dec 16, 2024
5864495
conflicts solved
semd Dec 16, 2024
27637bd
[CI] Auto-commit changed files from 'node scripts/lint_ts_projects --…
kibanamachine Dec 16, 2024
876ddda
fix macros resource check
semd Dec 16, 2024
5d63c09
fix duplicate missing resources requests
semd Dec 16, 2024
b4c855b
Merge remote-tracking branch 'refs/remotes/origin/10667/siem_migratio…
semd Dec 16, 2024
823d5fb
fix translations
semd Dec 16, 2024
beff67b
fix relocation conflicts
semd Dec 17, 2024
6e3b4e2
theme aware vis colors
semd Dec 17, 2024
4a50aa9
vis dark mode
semd Dec 17, 2024
39e61e2
address PR comments
semd Dec 17, 2024
4aaa575
allow mark as empty when provided
semd Dec 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
resources missing route
semd committed Dec 5, 2024
commit 246046254fdb6a0f8e7d283e8a0f20cd5557945d
Original file line number Diff line number Diff line change
@@ -25,6 +25,8 @@ export const SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH =
`${SIEM_RULE_MIGRATION_PATH}/install_translated` as const;

export const SIEM_RULE_MIGRATION_RESOURCES_PATH = `${SIEM_RULE_MIGRATION_PATH}/resources` as const;
export const SIEM_RULE_MIGRATION_RESOURCES_MISSING_PATH =
`${SIEM_RULE_MIGRATION_RESOURCES_PATH}/missing` as const;

export enum SiemMigrationTaskStatus {
READY = 'ready',
Original file line number Diff line number Diff line change
@@ -99,6 +99,30 @@ export type GetRuleMigrationResourcesRequestParamsInput = z.input<
export type GetRuleMigrationResourcesResponse = z.infer<typeof GetRuleMigrationResourcesResponse>;
export const GetRuleMigrationResourcesResponse = z.array(RuleMigrationResource);

export type GetRuleMigrationResourcesMissingRequestParams = z.infer<
typeof GetRuleMigrationResourcesMissingRequestParams
>;
export const GetRuleMigrationResourcesMissingRequestParams = z.object({
migration_id: NonEmptyString,
});
export type GetRuleMigrationResourcesMissingRequestParamsInput = z.input<
typeof GetRuleMigrationResourcesMissingRequestParams
>;

export type GetRuleMigrationResourcesMissingResponse = z.infer<
typeof GetRuleMigrationResourcesMissingResponse
>;
export const GetRuleMigrationResourcesMissingResponse = z.object({
/**
* The macro resources missing
*/
macro: z.array(z.string()).optional(),
/**
* The list resources missing
*/
list: z.array(z.string()).optional(),
});

export type GetRuleMigrationStatsRequestParams = z.infer<typeof GetRuleMigrationStatsRequestParams>;
export const GetRuleMigrationStatsRequestParams = z.object({
migration_id: NonEmptyString,
Original file line number Diff line number Diff line change
@@ -434,3 +434,39 @@ paths:
type: array
items:
$ref: '../../rule_migration.schema.yaml#/components/schemas/RuleMigrationResource'

/internal/siem_migrations/rules/{migration_id}/resources/missing:
get:
summary: Gets missing rule migration resources for a migration
operationId: GetRuleMigrationResourcesMissing
x-codegen-enabled: true
x-internal: true
description: Identifies missing resources from all the rules of an existing SIEM rules migration
tags:
- SIEM Rule Migrations
- Resources
parameters:
- name: migration_id
in: path
required: true
schema:
description: The migration id to attach the resources
$ref: '../../common.schema.yaml#/components/schemas/NonEmptyString'
responses:
200:
description: Indicates missing migration resources have been identified correctly
content:
application/json:
schema:
type: object
properties:
macro:
type: array
description: The macro resources missing
items:
type: string
list:
type: array
description: The list resources missing
items:
type: string
Original file line number Diff line number Diff line change
@@ -20,6 +20,7 @@ import { registerSiemRuleMigrationsResourceGetRoute } from './resources/get';
import { registerSiemRuleMigrationsRetryRoute } from './retry';
import { registerSiemRuleMigrationsInstallRoute } from './install';
import { registerSiemRuleMigrationsInstallTranslatedRoute } from './install_translated';
import { registerSiemRuleMigrationsResourceGetMissingRoute } from './resources/missing';

export const registerSiemRuleMigrationsRoutes = (
router: SecuritySolutionPluginRouter,
@@ -39,4 +40,5 @@ export const registerSiemRuleMigrationsRoutes = (

registerSiemRuleMigrationsResourceUpsertRoute(router, logger);
registerSiemRuleMigrationsResourceGetRoute(router, logger);
registerSiemRuleMigrationsResourceGetMissingRoute(router, logger);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import type { IKibanaResponse, Logger } from '@kbn/core/server';
import { buildRouteValidationWithZod } from '@kbn/zod-helpers';
import {
GetRuleMigrationResourcesMissingRequestParams,
type GetRuleMigrationResourcesMissingResponse,
} from '../../../../../../common/siem_migrations/model/api/rules/rule_migration.gen';
import { SIEM_RULE_MIGRATION_RESOURCES_MISSING_PATH } from '../../../../../../common/siem_migrations/constants';
import type { SecuritySolutionPluginRouter } from '../../../../../types';
import { withLicense } from '../util/with_license';

export const registerSiemRuleMigrationsResourceGetMissingRoute = (
router: SecuritySolutionPluginRouter,
logger: Logger
) => {
router.versioned
.get({
path: SIEM_RULE_MIGRATION_RESOURCES_MISSING_PATH,
access: 'internal',
security: { authz: { requiredPrivileges: ['securitySolution'] } },
})
.addVersion(
{
version: '1',
validate: {
request: {
params: buildRouteValidationWithZod(GetRuleMigrationResourcesMissingRequestParams),
},
},
},
withLicense(
async (
context,
req,
res
): Promise<IKibanaResponse<GetRuleMigrationResourcesMissingResponse>> => {
const migrationId = req.params.migration_id;
try {
const ctx = await context.resolve(['securitySolution']);
const ruleMigrationsClient = ctx.securitySolution.getSiemRuleMigrationsClient();

const resources = await ruleMigrationsClient.data.getMissingResources(migrationId);

return res.ok({ body: resources });
} catch (err) {
logger.error(err);
return res.badRequest({ body: err.message });
}
}
)
);
};
Original file line number Diff line number Diff line change
@@ -6,6 +6,8 @@
*/

import type { ElasticsearchClient, Logger } from '@kbn/core/server';
import type { RuleMigrationResourceType } from '../../../../../common/siem_migrations/model/rule_migration.gen';
import { getRuleResourceIdentifier } from '../../../../../common/siem_migrations/rules/resources';
import { RuleMigrationsDataIntegrationsClient } from './rule_migrations_data_integrations_client';
import { RuleMigrationsDataResourcesClient } from './rule_migrations_data_resources_client';
import { RuleMigrationsDataRulesClient } from './rule_migrations_data_rules_client';
@@ -44,4 +46,54 @@ export class RuleMigrationsDataClient {
logger
);
}

public async getMissingResources(
migrationId: string
): Promise<Record<RuleMigrationResourceType, string[]>> {
const missing: Record<RuleMigrationResourceType, Set<string>> = {
macro: new Set<string>(),
list: new Set<string>(),
};

const { data } = await this.rules.get(migrationId);
// This assumes all rules in the migration have the same vendor
const identifyRuleResources = getRuleResourceIdentifier(data[0].original_rule);

// Identify all resources in the rules
for (const rule of data) {
const identifiedResources = identifyRuleResources(rule.original_rule.query);
for (const type of ['macro', 'list'] as const) {
for (const resource of identifiedResources[type]) {
missing[type].add(resource);
}
}
}

// Identify all resources in the existing macros
const existingMacroResources = await this.resources.get(migrationId, 'macro');
for (const macro of existingMacroResources) {
const nestedResourcesIdentified = identifyRuleResources(macro.content);
for (const type of ['macro', 'list'] as const) {
for (const resource of nestedResourcesIdentified[type]) {
missing[type].add(resource);
}
}
}

// Exclude existing macros
for (const resource of existingMacroResources) {
missing.macro.delete(resource.name);
}

// Exclude existing lists
const existingListResources = await this.resources.get(migrationId, 'list');
for (const list of existingListResources) {
missing.list.delete(list.name);
}

return {
macro: Array.from(missing.macro),
list: Array.from(missing.list),
};
}
}