Skip to content

Commit

Permalink
[Cloud Security] Host Name Misconfiguration Datagrid & Refactor CSP P…
Browse files Browse the repository at this point in the history
…lugin PHASE 1 (elastic#192114)

## Summary

In an attempt to make Reviewing easier and more accurate, the
implementation of Misconfiguration Data grid on Host.name flyout in
Alerts Page will be split into 2 Phases

Phase 1: Move Functions, Utils or Helpers, Hooks, constants to Package
Phase 2: Implementing the feature

This is Phase 1 of the process

This PR also include a small bug fix mentioned here
elastic#191677 (review)

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
  • Loading branch information
animehart and kibanamachine authored Sep 6, 2024
1 parent 2ace62c commit d177d11
Show file tree
Hide file tree
Showing 48 changed files with 200 additions and 153 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,18 @@ export const CDR_LATEST_NATIVE_MISCONFIGURATIONS_INDEX_PATTERN =
export const CDR_LATEST_THIRD_PARTY_MISCONFIGURATIONS_INDEX_PATTERN =
'security_solution-*.misconfiguration_latest';
export const CDR_MISCONFIGURATIONS_INDEX_PATTERN = `${CDR_LATEST_NATIVE_MISCONFIGURATIONS_INDEX_PATTERN},${CDR_LATEST_THIRD_PARTY_MISCONFIGURATIONS_INDEX_PATTERN}`;
export const CDR_MISCONFIGURATIONS_DATA_VIEW_NAME = 'Latest Cloud Security Misconfigurations';
export const LATEST_FINDINGS_RETENTION_POLICY = '26h';
export const MAX_FINDINGS_TO_LOAD = 500;
export const CSP_GET_BENCHMARK_RULES_STATE_ROUTE_PATH =
'/internal/cloud_security_posture/rules/_get_states';
export const CSP_GET_BENCHMARK_RULES_STATE_API_CURRENT_VERSION = '1';
export const STATUS_ROUTE_PATH = '/internal/cloud_security_posture/status';
export const STATUS_API_CURRENT_VERSION = '1';

/** The base path for all cloud security posture pages. */
export const CLOUD_SECURITY_POSTURE_BASE_PATH = '/cloud_security_posture';

export const CDR_MISCONFIGURATIONS_DATA_VIEW_ID_PREFIX =
'security_solution_cdr_latest_misconfigurations';
export const SECURITY_DEFAULT_DATA_VIEW_ID = 'security-solution-default';
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/*
* 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 { euiThemeVars } from '@kbn/ui-theme';

export const statusColors = {
passed: euiThemeVars.euiColorSuccess,
failed: euiThemeVars.euiColorVis9,
};
61 changes: 61 additions & 0 deletions x-pack/packages/kbn-cloud-security-posture/constants/navigation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* 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 { CLOUD_SECURITY_POSTURE_BASE_PATH } from '@kbn/cloud-security-posture-common';
import { i18n } from '@kbn/i18n';

export const NAV_ITEMS_NAMES = {
DASHBOARD: i18n.translate('xpack.csp.navigation.dashboardNavItemLabel', {
defaultMessage: 'Cloud Security Posture',
}),
VULNERABILITY_DASHBOARD: i18n.translate(
'xpack.csp.navigation.vulnerabilityDashboardNavItemLabel',
{ defaultMessage: 'Cloud Native Vulnerability Management' }
),
FINDINGS: i18n.translate('xpack.csp.navigation.findingsNavItemLabel', {
defaultMessage: 'Findings',
}),
BENCHMARKS: i18n.translate('xpack.csp.navigation.myBenchmarksNavItemLabel', {
defaultMessage: 'Benchmarks',
}),
RULES: i18n.translate('xpack.csp.navigation.rulesNavItemLabel', {
defaultMessage: 'Rules',
}),
};

export const findingsNavigation = {
findings_default: {
name: NAV_ITEMS_NAMES.FINDINGS,
path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/findings/configurations`,
id: 'cloud_security_posture-findings-default',
},
findings_by_resource: {
name: NAV_ITEMS_NAMES.FINDINGS,
path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/findings/resource`,
id: 'cloud_security_posture-findings-resource',
},
resource_findings: {
name: NAV_ITEMS_NAMES.FINDINGS,
path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/findings/resource/:resourceId`,
id: 'cloud_security_posture-findings-resourceId',
},
vulnerabilities: {
name: NAV_ITEMS_NAMES.FINDINGS,
path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/findings/vulnerabilities`,
id: 'cloud_security_posture-findings-vulnerabilities',
},
vulnerabilities_by_resource: {
name: NAV_ITEMS_NAMES.FINDINGS,
path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/findings/vulnerabilities/resource`,
id: 'cloud_security_posture-findings-vulnerabilities-resource',
},
resource_vulnerabilities: {
name: NAV_ITEMS_NAMES.FINDINGS,
path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/findings/vulnerabilities/resource/:resourceId`,
id: 'cloud_security_posture-findings-vulnerabilities-resourceId',
},
};
5 changes: 5 additions & 0 deletions x-pack/packages/kbn-cloud-security-posture/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,9 @@
*/

export * from './type';
export * from './constants/component_constants';
export * from './constants/navigation';
export type { NavFilter } from './src/hooks/use_navigate_findings';
export { showErrorToast } from './src/utils/show_error_toast';
export { encodeQuery, decodeQuery } from './src/utils/query_utils';
export { CspEvaluationBadge } from './src/components/csp_evaluation_badge';
12 changes: 12 additions & 0 deletions x-pack/packages/kbn-cloud-security-posture/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/*
* 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.
*/

module.exports = {
preset: '@kbn/test',
rootDir: '../../..',
roots: ['<rootDir>/x-pack/packages/kbn-cloud-security-posture'],
};
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import React from 'react';
import { EuiBadge, type EuiBadgeProps } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { css } from '@emotion/react';
import { statusColors } from '../common/constants';
import { statusColors } from '../../constants/component_constants';

interface Props {
type?: 'passed' | 'failed';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import { useQuery } from '@tanstack/react-query';
import { useKibana } from '@kbn/kibana-react-plugin/public';
import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common';
import { CspClientPluginStartDeps } from '@kbn/cloud-security-posture';
import { CspClientPluginStartDeps } from '../..';

/**
* Hook to retrieve a Data View by it's Index Pattern title
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
*/

import { renderHook, act } from '@testing-library/react-hooks/dom';
import { useNavigateFindings, useNavigateVulnerabilities } from './use_navigate_findings';
import { useNavigateVulnerabilities, useNavigateFindings } from './use_navigate_findings';
import { useHistory } from 'react-router-dom';

jest.mock('react-router-dom', () => ({
useHistory: jest.fn().mockReturnValue({ push: jest.fn() }),
}));

jest.mock('./use_kibana', () => ({
jest.mock('@kbn/kibana-react-plugin/public', () => ({
useKibana: jest.fn().mockReturnValue({
services: {
data: {
Expand All @@ -29,7 +29,8 @@ jest.mock('./use_kibana', () => ({
},
}),
}));
jest.mock('../api/use_data_view', () => ({

jest.mock('./use_data_view', () => ({
useDataView: jest.fn().mockReturnValue({
status: 'success',
data: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@ import { useCallback } from 'react';
import { useHistory } from 'react-router-dom';
import { Filter } from '@kbn/es-query';
import {
CDR_MISCONFIGURATIONS_DATA_VIEW_ID_PREFIX,
SECURITY_DEFAULT_DATA_VIEW_ID,
} from '../../../common/constants';
import { findingsNavigation } from '../navigation/constants';
import { encodeQuery } from '../navigation/query_utils';
import { useKibana } from './use_kibana';
import { useDataView } from '../api/use_data_view';
CDR_MISCONFIGURATIONS_DATA_VIEW_ID_PREFIX,
} from '@kbn/cloud-security-posture-common';
import type { CoreStart } from '@kbn/core/public';
import { useKibana } from '@kbn/kibana-react-plugin/public';
import { findingsNavigation } from '../../constants/navigation';
import { useDataView } from './use_data_view';
import { CspClientPluginStartDeps } from '../..';
import { encodeQuery } from '../utils/query_utils';

interface NegatedValue {
value: string | number;
Expand Down Expand Up @@ -54,7 +56,7 @@ const createFilter = (key: string, filterValue: FilterValue, dataViewId: string)
};
const useNavigate = (pathname: string, dataViewId = SECURITY_DEFAULT_DATA_VIEW_ID) => {
const history = useHistory();
const { services } = useKibana();
const { services } = useKibana<CoreStart & CspClientPluginStartDeps>();

return useCallback(
(filterParams: NavFilter = {}, groupBy?: string[]) => {
Expand Down
3 changes: 3 additions & 0 deletions x-pack/packages/kbn-cloud-security-posture/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,8 @@
"@kbn/cloud-security-posture-common",
"@kbn/i18n",
"@kbn/search-types",
"@kbn/ui-theme",
"@kbn/i18n-react",
"@kbn/rison",
]
}
4 changes: 0 additions & 4 deletions x-pack/plugins/cloud_security_posture/common/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,6 @@ export const DETECTION_RULE_RULES_API_CURRENT_VERSION = '2023-10-31';

export const CLOUD_SECURITY_POSTURE_PACKAGE_NAME = 'cloud_security_posture';

export const CDR_MISCONFIGURATIONS_DATA_VIEW_NAME = 'Latest Cloud Security Misconfigurations';
export const CDR_MISCONFIGURATIONS_DATA_VIEW_ID_PREFIX =
'security_solution_cdr_latest_misconfigurations';

export const FINDINGS_INDEX_NAME = 'logs-cloud_security_posture.findings';
export const FINDINGS_INDEX_PATTERN = 'logs-cloud_security_posture.findings-default*';
export const FINDINGS_INDEX_DEFAULT_NS = 'logs-cloud_security_posture.findings-default';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
*/

import { i18n } from '@kbn/i18n';
import { euiThemeVars } from '@kbn/ui-theme';
import { CSPM_POLICY_TEMPLATE, KSPM_POLICY_TEMPLATE } from '@kbn/cloud-security-posture-common';
import type { CloudSecurityPolicyTemplate, PostureInput } from '../../common/types_old';
import {
Expand All @@ -28,11 +27,6 @@ import aksLogo from '../assets/icons/cis_aks_logo.svg';
import gkeLogo from '../assets/icons/cis_gke_logo.svg';
import googleCloudLogo from '../assets/icons/google_cloud_logo.svg';

export const statusColors = {
passed: euiThemeVars.euiColorSuccess,
failed: euiThemeVars.euiColorVis9,
};

export const CSP_MOMENT_FORMAT = 'MMMM D, YYYY @ HH:mm:ss.SSS';
export const DEFAULT_VISIBLE_ROWS_PER_PAGE = 25;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import { renderHook, act } from '@testing-library/react-hooks/dom';
import { useUrlQuery } from './use_url_query';
import { useLocation, useHistory } from 'react-router-dom';
import { encodeQuery } from '../navigation/query_utils';
import { encodeQuery } from '@kbn/cloud-security-posture';

jest.mock('react-router-dom', () => ({
useHistory: jest.fn(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
*/
import { useEffect, useCallback, useMemo } from 'react';
import { useHistory, useLocation } from 'react-router-dom';
import { decodeQuery, encodeQuery } from '../navigation/query_utils';
import { encodeQuery, decodeQuery } from '@kbn/cloud-security-posture';

/**
* @description uses 'rison' to encode/decode a url query
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,14 @@
* 2.0.
*/

import { i18n } from '@kbn/i18n';
import { CSPM_POLICY_TEMPLATE, KSPM_POLICY_TEMPLATE } from '@kbn/cloud-security-posture-common';
import {
CSPM_POLICY_TEMPLATE,
KSPM_POLICY_TEMPLATE,
CLOUD_SECURITY_POSTURE_BASE_PATH,
} from '@kbn/cloud-security-posture-common';
import { NAV_ITEMS_NAMES } from '@kbn/cloud-security-posture/constants/navigation';
import type { CspBenchmarksPage, CspPage, CspPageNavigationItem } from './types';

const NAV_ITEMS_NAMES = {
DASHBOARD: i18n.translate('xpack.csp.navigation.dashboardNavItemLabel', {
defaultMessage: 'Cloud Security Posture',
}),
VULNERABILITY_DASHBOARD: i18n.translate(
'xpack.csp.navigation.vulnerabilityDashboardNavItemLabel',
{ defaultMessage: 'Cloud Native Vulnerability Management' }
),
FINDINGS: i18n.translate('xpack.csp.navigation.findingsNavItemLabel', {
defaultMessage: 'Findings',
}),
BENCHMARKS: i18n.translate('xpack.csp.navigation.myBenchmarksNavItemLabel', {
defaultMessage: 'Benchmarks',
}),
RULES: i18n.translate('xpack.csp.navigation.rulesNavItemLabel', {
defaultMessage: 'Rules',
}),
};

/** The base path for all cloud security posture pages. */
export const CLOUD_SECURITY_POSTURE_BASE_PATH = '/cloud_security_posture';

const CSPM_DASHBOARD_TAB_NAME = 'Cloud';
const KSPM_DASHBOARD_TAB_NAME = 'Kubernetes';

Expand Down Expand Up @@ -75,39 +57,6 @@ export const benchmarksNavigation: Record<CspBenchmarksPage, CspPageNavigationIt
},
};

export const findingsNavigation = {
findings_default: {
name: NAV_ITEMS_NAMES.FINDINGS,
path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/findings/configurations`,
id: 'cloud_security_posture-findings-default',
},
findings_by_resource: {
name: NAV_ITEMS_NAMES.FINDINGS,
path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/findings/resource`,
id: 'cloud_security_posture-findings-resource',
},
resource_findings: {
name: NAV_ITEMS_NAMES.FINDINGS,
path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/findings/resource/:resourceId`,
id: 'cloud_security_posture-findings-resourceId',
},
vulnerabilities: {
name: NAV_ITEMS_NAMES.FINDINGS,
path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/findings/vulnerabilities`,
id: 'cloud_security_posture-findings-vulnerabilities',
},
vulnerabilities_by_resource: {
name: NAV_ITEMS_NAMES.FINDINGS,
path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/findings/vulnerabilities/resource`,
id: 'cloud_security_posture-findings-vulnerabilities-resource',
},
resource_vulnerabilities: {
name: NAV_ITEMS_NAMES.FINDINGS,
path: `${CLOUD_SECURITY_POSTURE_BASE_PATH}/findings/vulnerabilities/resource/:resourceId`,
id: 'cloud_security_posture-findings-vulnerabilities-resourceId',
},
};

const ELASTIC_BASE_SHORT_URL = 'https://ela.st';

export const cspIntegrationDocsNavigation = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { BenchmarkData } from '../../common/types_old';
import { TestProvider } from '../test/test_provider';

const mockNavToFindings = jest.fn();
jest.mock('../common/hooks/use_navigate_findings', () => ({
jest.mock('@kbn/cloud-security-posture/src/hooks/use_navigate_findings', () => ({
useNavigateFindings: () => mockNavToFindings,
}));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
import React from 'react';
import { EuiFlexGroup, EuiFlexItem, useEuiTheme } from '@elastic/eui';
import { css } from '@emotion/react';
import { useNavigateFindings } from '@kbn/cloud-security-posture/src/hooks/use_navigate_findings';
import { CLOUD_PROVIDERS, getBenchmarkApplicableTo } from '../../common/utils/helpers';
import { CIS_AWS, CIS_GCP, CIS_AZURE, CIS_K8S, CIS_EKS } from '../../common/constants';
import { CISBenchmarkIcon } from './cis_benchmark_icon';
import { CompactFormattedNumber } from './compact_formatted_number';
import { useNavigateFindings } from '../common/hooks/use_navigate_findings';
import { BenchmarkData } from '../../common/types_old';
import { FINDINGS_GROUPING_OPTIONS } from '../common/constants';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import { EuiFlexGroup, EuiFlexItem, EuiText, EuiToolTip, useEuiTheme } from '@el
import { css, SerializedStyles } from '@emotion/react';
import { i18n } from '@kbn/i18n';
import React from 'react';
import { statusColors } from '@kbn/cloud-security-posture';
import { calculatePostureScore } from '../../common/utils/helpers';
import { statusColors } from '../common/constants';
import { CSP_FINDINGS_COMPLIANCE_SCORE } from './test_subjects';

/**
Expand Down
1 change: 0 additions & 1 deletion x-pack/plugins/cloud_security_posture/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import { CspPlugin } from './plugin';
export type { CspSecuritySolutionContext } from './types';
export { CLOUD_SECURITY_POSTURE_BASE_PATH } from './common/navigation/constants';
export type { CloudSecurityPosturePageId } from './common/navigation/types';
export { getSecuritySolutionLink } from './common/navigation/security_solution_links';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n-react';
import { generatePath } from 'react-router-dom';
import type { BenchmarksCisId } from '@kbn/cloud-security-posture-common';
import { useNavigateFindings } from '@kbn/cloud-security-posture/src/hooks/use_navigate_findings';
import { FINDINGS_GROUPING_OPTIONS } from '../../common/constants';
import { useNavigateFindings } from '../../common/hooks/use_navigate_findings';
import type { BenchmarkScore, Benchmark } from '../../../common/types/latest';
import * as TEST_SUBJ from './test_subjects';
import { isCommonError } from '../../components/cloud_posture_page';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ import { FormattedDate, FormattedTime } from '@kbn/i18n-react';
import moment from 'moment';
import { i18n } from '@kbn/i18n';
import { css } from '@emotion/react';
import { statusColors } from '@kbn/cloud-security-posture';
import { DASHBOARD_COMPLIANCE_SCORE_CHART } from '../test_subjects';
import { statusColors } from '../../../common/constants';
import { RULE_FAILED, RULE_PASSED } from '../../../../common/constants';
import { CompactFormattedNumber } from '../../../components/compact_formatted_number';
import type { Evaluation, PostureTrend, Stats } from '../../../../common/types_old';
Expand Down
Loading

0 comments on commit d177d11

Please sign in to comment.