From 0212c69e0ef5272bd93aa83e667dd57fadac1764 Mon Sep 17 00:00:00 2001
From: Jordan <51442161+JordanSh@users.noreply.github.com>
Date: Wed, 25 Sep 2024 18:35:24 +0300
Subject: [PATCH] [Cloud Security] 3P Misconfiguration page empty state
(#193051)
---
.../public/assets/illustrations/clouds.svg | 5822 +++++++++++++++++
.../misconfigurations_vendors.svg | 30 +
.../illustrations/vulnerabilities_vendors.svg | 16 +
.../common/api/use_wiz_integration_route.ts | 21 +
.../public/common/navigation/constants.ts | 4 +
.../no_findings_states.test.tsx | 52 +-
.../no_findings_states/no_findings_states.tsx | 198 +-
.../components/no_vulnerabilities_states.tsx | 175 +-
.../public/components/test_subjects.ts | 9 +-
.../translations/translations/fr-FR.json | 6 -
.../translations/translations/ja-JP.json | 6 -
.../translations/translations/zh-CN.json | 6 -
.../page_objects/findings_page.ts | 9 +
.../pages/findings_onboarding.ts | 39 +-
14 files changed, 6257 insertions(+), 136 deletions(-)
create mode 100644 x-pack/plugins/cloud_security_posture/public/assets/illustrations/clouds.svg
create mode 100644 x-pack/plugins/cloud_security_posture/public/assets/illustrations/misconfigurations_vendors.svg
create mode 100644 x-pack/plugins/cloud_security_posture/public/assets/illustrations/vulnerabilities_vendors.svg
create mode 100644 x-pack/plugins/cloud_security_posture/public/common/api/use_wiz_integration_route.ts
diff --git a/x-pack/plugins/cloud_security_posture/public/assets/illustrations/clouds.svg b/x-pack/plugins/cloud_security_posture/public/assets/illustrations/clouds.svg
new file mode 100644
index 0000000000000..37561c8d5a340
--- /dev/null
+++ b/x-pack/plugins/cloud_security_posture/public/assets/illustrations/clouds.svg
@@ -0,0 +1,5822 @@
+
diff --git a/x-pack/plugins/cloud_security_posture/public/assets/illustrations/misconfigurations_vendors.svg b/x-pack/plugins/cloud_security_posture/public/assets/illustrations/misconfigurations_vendors.svg
new file mode 100644
index 0000000000000..fb177750ed692
--- /dev/null
+++ b/x-pack/plugins/cloud_security_posture/public/assets/illustrations/misconfigurations_vendors.svg
@@ -0,0 +1,30 @@
+
diff --git a/x-pack/plugins/cloud_security_posture/public/assets/illustrations/vulnerabilities_vendors.svg b/x-pack/plugins/cloud_security_posture/public/assets/illustrations/vulnerabilities_vendors.svg
new file mode 100644
index 0000000000000..4c0ac5db13f5a
--- /dev/null
+++ b/x-pack/plugins/cloud_security_posture/public/assets/illustrations/vulnerabilities_vendors.svg
@@ -0,0 +1,16 @@
+
diff --git a/x-pack/plugins/cloud_security_posture/public/common/api/use_wiz_integration_route.ts b/x-pack/plugins/cloud_security_posture/public/common/api/use_wiz_integration_route.ts
new file mode 100644
index 0000000000000..aac16021310bd
--- /dev/null
+++ b/x-pack/plugins/cloud_security_posture/public/common/api/use_wiz_integration_route.ts
@@ -0,0 +1,21 @@
+/*
+ * 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 { pagePathGetters } from '@kbn/fleet-plugin/public';
+import { useKibana } from '../hooks/use_kibana';
+
+export const useAdd3PIntegrationRoute = (pkgkey: string) => {
+ const { http } = useKibana().services;
+
+ const path = pagePathGetters
+ .add_integration_to_policy({
+ pkgkey,
+ })
+ .join('');
+
+ return http.basePath.prepend(path);
+};
diff --git a/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts b/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts
index e5abbbfb7a9aa..9444b7b4b1922 100644
--- a/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts
+++ b/x-pack/plugins/cloud_security_posture/public/common/navigation/constants.ts
@@ -11,6 +11,7 @@ import {
CLOUD_SECURITY_POSTURE_BASE_PATH,
} from '@kbn/cloud-security-posture-common';
import { NAV_ITEMS_NAMES } from '@kbn/cloud-security-posture/constants/navigation';
+import { CNVM_POLICY_TEMPLATE } from '../../../common/constants';
import type { CspBenchmarksPage, CspPage, CspPageNavigationItem } from './types';
const CSPM_DASHBOARD_TAB_NAME = 'Cloud';
@@ -71,4 +72,7 @@ export const cspIntegrationDocsNavigation = {
gcpGetStartedPath: `https://www.elastic.co/guide/en/security/current/cspm-get-started-gcp.html`,
azureGetStartedPath: `https://www.elastic.co/guide/en/security/current/cspm-get-started-azure.html`,
},
+ cnvm: {
+ overviewPath: `${ELASTIC_BASE_SHORT_URL}/${CNVM_POLICY_TEMPLATE}`,
+ },
};
diff --git a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.test.tsx b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.test.tsx
index 1dcb9454a176a..9ac66d9252187 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.test.tsx
+++ b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.test.tsx
@@ -12,11 +12,20 @@ import { renderWrapper } from '../../test/mock_server/mock_server_test_provider'
import { NoFindingsStates } from './no_findings_states';
import * as statusHandlers from '../../../server/routes/status/status.handlers.mock';
import * as benchmarksHandlers from '../../../server/routes/benchmarks/benchmarks.handlers.mock';
+import { PACKAGE_NOT_INSTALLED_TEST_SUBJECT } from '../cloud_posture_page';
+import { MemoryRouter, Route } from '@kbn/shared-ux-router';
+import { THIRD_PARTY_INTEGRATIONS_NO_MISCONFIGURATIONS_FINDINGS_PROMPT } from '../test_subjects';
const server = setupMockServer();
-const renderNoFindingsStates = (postureType: 'cspm' | 'kspm' = 'cspm') => {
- return renderWrapper();
+const renderNoFindingsStates = (postureType: 'cspm' | 'kspm' = 'cspm', route = '/') => {
+ return renderWrapper(
+
+
+
+
+
+ );
};
describe('NoFindingsStates', () => {
@@ -24,12 +33,16 @@ describe('NoFindingsStates', () => {
it('shows integrations installation prompt with installation links when integration is not-installed', async () => {
server.use(statusHandlers.notInstalledHandler);
- renderNoFindingsStates();
+ renderNoFindingsStates('cspm', '/app/security/cloud_security_posture/findings/configurations');
expect(screen.getByText(/loading/i)).toBeInTheDocument();
+ await waitFor(() => {
+ expect(screen.getByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).toBeInTheDocument();
+ });
+
await waitFor(() => {
expect(
- screen.getByText(/detect security misconfigurations in your cloud infrastructure!/i)
+ screen.getByTestId(THIRD_PARTY_INTEGRATIONS_NO_MISCONFIGURATIONS_FINDINGS_PROMPT)
).toBeInTheDocument();
});
@@ -46,7 +59,33 @@ describe('NoFindingsStates', () => {
'/app/fleet/integrations/cloud_security_posture-1.9.0/add-integration/kspm'
);
});
+
+ await waitFor(() => {
+ expect(screen.getByRole('link', { name: /add wiz integration/i })).toHaveAttribute(
+ 'href',
+ '/app/fleet/integrations/wiz/add-integration'
+ );
+ });
+ });
+
+ it('does not show 3P prompt on not supported pages', async () => {
+ // 3P support is currently determined by the page URL. in this test case we do not provide the required URL
+ server.use(statusHandlers.notInstalledHandler);
+ renderNoFindingsStates();
+
+ expect(screen.getByText(/loading/i)).toBeInTheDocument();
+
+ await waitFor(() => {
+ expect(screen.getByTestId(PACKAGE_NOT_INSTALLED_TEST_SUBJECT)).toBeInTheDocument();
+ });
+
+ await waitFor(() => {
+ expect(
+ screen.queryByTestId(THIRD_PARTY_INTEGRATIONS_NO_MISCONFIGURATIONS_FINDINGS_PROMPT)
+ ).not.toBeInTheDocument();
+ });
});
+
it('shows install agent prompt with install agent link when status is not-deployed', async () => {
server.use(statusHandlers.notDeployedHandler);
server.use(benchmarksHandlers.cspmInstalledHandler);
@@ -64,6 +103,7 @@ describe('NoFindingsStates', () => {
);
});
});
+
it('shows install agent prompt with install agent link when status is not-deployed and postureType is KSPM', async () => {
server.use(statusHandlers.notDeployedHandler);
server.use(benchmarksHandlers.kspmInstalledHandler);
@@ -84,6 +124,7 @@ describe('NoFindingsStates', () => {
);
});
});
+
it('shows indexing message when status is indexing', async () => {
server.use(statusHandlers.indexingHandler);
@@ -100,6 +141,7 @@ describe('NoFindingsStates', () => {
)
).toBeInTheDocument();
});
+
it('shows timeout message when status is index-timeout', async () => {
server.use(statusHandlers.indexTimeoutHandler);
@@ -116,6 +158,7 @@ describe('NoFindingsStates', () => {
screen.getByText(/collecting findings is taking longer than expected/i)
).toBeInTheDocument();
});
+
it('shows unprivileged message when status is unprivileged', async () => {
server.use(statusHandlers.unprivilegedHandler);
@@ -137,6 +180,7 @@ describe('NoFindingsStates', () => {
).toBeInTheDocument();
});
});
+
it('renders empty container when the status does not match a no finding status', async () => {
server.use(statusHandlers.indexedHandler);
diff --git a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.tsx b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.tsx
index 9c8f2da45f8e8..5a8db618d5495 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.tsx
+++ b/x-pack/plugins/cloud_security_posture/public/components/no_findings_states/no_findings_states.tsx
@@ -16,6 +16,7 @@ import {
EuiFlexGroup,
EuiFlexItem,
EuiImage,
+ useEuiTheme,
} from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { i18n } from '@kbn/i18n';
@@ -23,16 +24,22 @@ import { css } from '@emotion/react';
import { CSPM_POLICY_TEMPLATE, KSPM_POLICY_TEMPLATE } from '@kbn/cloud-security-posture-common';
import type { IndexDetails, CspStatusCode } from '@kbn/cloud-security-posture-common';
import { useCspSetupStatusApi } from '@kbn/cloud-security-posture/src/hooks/use_csp_setup_status_api';
+import { useLocation } from 'react-router-dom';
+import { findingsNavigation } from '@kbn/cloud-security-posture';
+import { useAdd3PIntegrationRoute } from '../../common/api/use_wiz_integration_route';
import { FullSizeCenteredPage } from '../full_size_centered_page';
import { useCISIntegrationPoliciesLink } from '../../common/navigation/use_navigate_to_cis_integration_policies';
import {
CSPM_NOT_INSTALLED_ACTION_SUBJ,
KSPM_NOT_INSTALLED_ACTION_SUBJ,
NO_FINDINGS_STATUS_TEST_SUBJ,
+ THIRD_PARTY_INTEGRATIONS_NO_MISCONFIGURATIONS_FINDINGS_PROMPT,
+ THIRD_PARTY_NO_MISCONFIGURATIONS_FINDINGS_PROMPT_WIZ_INTEGRATION_BUTTON,
} from '../test_subjects';
import { CloudPosturePage, PACKAGE_NOT_INSTALLED_TEST_SUBJECT } from '../cloud_posture_page';
import type { PostureTypes } from '../../../common/types_old';
-import noDataIllustration from '../../assets/illustrations/no_data_illustration.svg';
+import cloudsSVG from '../../assets/illustrations/clouds.svg';
+import misconfigurationsVendorsSVG from '../../assets/illustrations/misconfigurations_vendors.svg';
import { useCspIntegrationLink } from '../../common/navigation/use_csp_integration_link';
import { NO_FINDINGS_STATUS_REFRESH_INTERVAL_MS } from '../../common/constants';
import { cspIntegrationDocsNavigation } from '../../common/navigation/constants';
@@ -171,74 +178,143 @@ const Unprivileged = ({ unprivilegedIndices }: { unprivilegedIndices: string[] }
);
const EmptySecurityFindingsPrompt = () => {
+ const location = useLocation();
+ const { euiTheme } = useEuiTheme();
const kspmIntegrationLink = useCspIntegrationLink(KSPM_POLICY_TEMPLATE);
const cspmIntegrationLink = useCspIntegrationLink(CSPM_POLICY_TEMPLATE);
+ const wizAddIntegrationLink = useAdd3PIntegrationRoute('wiz');
+ const is3PSupportedPage = location.pathname.includes(findingsNavigation.findings_default.path);
return (
- }
- title={
-
-
-
- }
- layout="horizontal"
- color="plain"
- body={
-
-
-
-
- ),
- }}
- />
-
- }
- actions={
-
-
-
+
+
+ }
+ title={
+
,
+ }}
/>
-
-
-
-
+
+ }
+ layout="vertical"
+ color="plain"
+ body={
+
,
+ learnMore: (
+
+
+
+ ),
+ }}
/>
-
-
-
- }
- />
+
+ }
+ actions={
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+ />
+
+ {is3PSupportedPage && (
+
+
+ }
+ title={
+
+ }}
+ />
+
+ }
+ layout="vertical"
+ color="plain"
+ body={
+
+ }}
+ />
+
+ }
+ actions={
+
+
+
+
+
+
+
+ }
+ />
+
+ )}
+
);
};
diff --git a/x-pack/plugins/cloud_security_posture/public/components/no_vulnerabilities_states.tsx b/x-pack/plugins/cloud_security_posture/public/components/no_vulnerabilities_states.tsx
index 074e75915a5b7..20438aa341ad6 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/no_vulnerabilities_states.tsx
+++ b/x-pack/plugins/cloud_security_posture/public/components/no_vulnerabilities_states.tsx
@@ -12,28 +12,35 @@ import {
EuiIcon,
EuiMarkdownFormat,
EuiButton,
- EuiButtonEmpty,
EuiFlexGroup,
EuiFlexItem,
EuiImage,
EuiLink,
+ useEuiTheme,
} from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n-react';
import { i18n } from '@kbn/i18n';
import { css } from '@emotion/react';
import type { IndexDetails } from '@kbn/cloud-security-posture-common';
import { useCspSetupStatusApi } from '@kbn/cloud-security-posture/src/hooks/use_csp_setup_status_api';
+import { useLocation } from 'react-router-dom';
+import { findingsNavigation } from '@kbn/cloud-security-posture';
import { VULN_MGMT_POLICY_TEMPLATE } from '../../common/constants';
import { FullSizeCenteredPage } from './full_size_centered_page';
import { CloudPosturePage } from './cloud_posture_page';
import {
NO_VULNERABILITIES_STATUS_TEST_SUBJ,
CNVM_NOT_INSTALLED_ACTION_SUBJ,
+ THIRD_PARTY_INTEGRATIONS_NO_VULNERABILITIES_FINDINGS_PROMPT,
+ THIRD_PARTY_NO_VULNERABILITIES_FINDINGS_PROMPT_WIZ_INTEGRATION_BUTTON,
} from './test_subjects';
-import noDataIllustration from '../assets/illustrations/no_data_illustration.svg';
import { useCspIntegrationLink } from '../common/navigation/use_csp_integration_link';
import { useCISIntegrationPoliciesLink } from '../common/navigation/use_navigate_to_cis_integration_policies';
import { PostureTypes } from '../../common/types_old';
+import { useAdd3PIntegrationRoute } from '../common/api/use_wiz_integration_route';
+import cloudsSVG from '../assets/illustrations/clouds.svg';
+import { cspIntegrationDocsNavigation } from '../common/navigation/constants';
+import vulnerabilitiesVendorsSVG from '../assets/illustrations/vulnerabilities_vendors.svg';
const REFETCH_INTERVAL_MS = 20000;
@@ -66,58 +73,128 @@ const CnvmIntegrationNotInstalledEmptyPrompt = ({
}: {
vulnMgmtIntegrationLink?: string;
}) => {
+ const location = useLocation();
+ const { euiTheme } = useEuiTheme();
+ const wizAddIntegrationLink = useAdd3PIntegrationRoute('wiz');
+ const is3PSupportedPage = location.pathname.includes(findingsNavigation.vulnerabilities.path);
+
return (
- }
- title={
-
- ,
- }}
- />
-
- }
- layout="horizontal"
- color="plain"
- body={
-
-
-
- }
- actions={
-
-
-
+
+
+ }
+ title={
+
,
+ }}
/>
-
-
-
-
+
+ }
+ layout="vertical"
+ color="plain"
+ body={
+
,
+ learnMore: (
+
+
+
+ ),
+ }}
/>
-
-
-
- }
- />
+
+ }
+ actions={
+
+
+
+
+
+
+
+ }
+ />
+
+ {is3PSupportedPage && (
+
+
+ }
+ title={
+
+ }}
+ />
+
+ }
+ layout="vertical"
+ color="plain"
+ body={
+
+ }}
+ />
+
+ }
+ actions={
+
+
+
+
+
+
+
+ }
+ />
+
+ )}
+
);
};
diff --git a/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts b/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts
index ee40fe4fc894e..6e17a59b3ba08 100644
--- a/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts
+++ b/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts
@@ -32,7 +32,14 @@ export const NO_VULNERABILITIES_STATUS_TEST_SUBJ = {
export const CNVM_NOT_INSTALLED_ACTION_SUBJ = 'cnvm-not-installed-action';
export const CSPM_NOT_INSTALLED_ACTION_SUBJ = 'cspm-not-installed-action';
export const KSPM_NOT_INSTALLED_ACTION_SUBJ = 'kspm-not-installed-action';
-
+export const THIRD_PARTY_INTEGRATIONS_NO_MISCONFIGURATIONS_FINDINGS_PROMPT =
+ '3p-integrations-no-misconfigurations-findings-prompt';
+export const THIRD_PARTY_INTEGRATIONS_NO_VULNERABILITIES_FINDINGS_PROMPT =
+ '3p-integrations-no-vulnerabilities-findings-prompt';
+export const THIRD_PARTY_NO_MISCONFIGURATIONS_FINDINGS_PROMPT_WIZ_INTEGRATION_BUTTON =
+ '3p-no-misconfigurations-findings-prompt-wiz-integration-button';
+export const THIRD_PARTY_NO_VULNERABILITIES_FINDINGS_PROMPT_WIZ_INTEGRATION_BUTTON =
+ '3p-no-vulnerabilities-findings-prompt-wiz-integration-button';
export const VULNERABILITIES_CONTAINER_TEST_SUBJ = 'vulnerabilities_container';
export const VULNERABILITIES_CVSS_SCORE_BADGE_SUBJ = 'vulnerabilities_cvss_score_badge';
diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json
index 0a9ddb6c6b753..acf2acb2dbd47 100644
--- a/x-pack/plugins/translations/translations/fr-FR.json
+++ b/x-pack/plugins/translations/translations/fr-FR.json
@@ -14023,12 +14023,6 @@
"xpack.csp.cloudPosturePage.packageNotInstalledRenderer.addCspmIntegrationButtonTitle": "Ajouter une intégration CSPM",
"xpack.csp.cloudPosturePage.packageNotInstalledRenderer.addKspmIntegrationButtonTitle": "Ajouter une intégration KSPM",
"xpack.csp.cloudPosturePage.packageNotInstalledRenderer.learnMoreTitle": "En savoir plus sur le niveau de sécurité du cloud",
- "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.promptDescription": "Détectez et corrigez les risques de configuration potentiels dans votre infrastructure cloud, comme les compartiments S3 accessibles au public, avec nos solutions de gestion du niveau de sécurité Kubernetes et de gestion du niveau de sécurité du cloud. {learnMore}",
- "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.promptTitle": "Détectez les erreurs de configuration de sécurité dans votre infrastructure cloud.",
- "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.addVulMngtIntegrationButtonTitle": "Installer la Gestion des vulnérabilités natives du cloud",
- "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.learnMoreButtonTitle": "En savoir plus",
- "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.promptDescription": "Ajoutez l'intégration de la Gestion des vulnérabilités natives du cloud pour commencer",
- "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.promptTitle": "Détecter des vulnérabilités dans vos {lineBreak} ressources cloud",
"xpack.csp.cnvmDashboard.statistics.cloudRegionTitle": "Comptes cloud",
"xpack.csp.cnvmDashboard.statistics.criticalTitle": "Critique",
"xpack.csp.cnvmDashboard.statistics.highTitle": "Élevé",
diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json
index 6e3754bb7046b..9e721bdec506a 100644
--- a/x-pack/plugins/translations/translations/ja-JP.json
+++ b/x-pack/plugins/translations/translations/ja-JP.json
@@ -13772,12 +13772,6 @@
"xpack.csp.cloudPosturePage.packageNotInstalledRenderer.addCspmIntegrationButtonTitle": "CSPM統合の追加",
"xpack.csp.cloudPosturePage.packageNotInstalledRenderer.addKspmIntegrationButtonTitle": "KSPM統合の追加",
"xpack.csp.cloudPosturePage.packageNotInstalledRenderer.learnMoreTitle": "クラウドセキュリティ態勢の詳細をご覧ください",
- "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.promptDescription": "クラウドおよびKubernetesセキュリティ態勢管理ソリューションを利用して、クラウドインフラの構成リスク(誰でもアクセス可能なS3バケットなど)の可能性を検出し、修正します。{learnMore}",
- "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.promptTitle": "クラウドインフラでセキュリティの誤った構成を検出します。",
- "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.addVulMngtIntegrationButtonTitle": "Cloud Native Vulnerability Managementをインストール",
- "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.learnMoreButtonTitle": "詳細",
- "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.promptDescription": "開始するには、Cloud Native Vulnerability Management統合を追加します",
- "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.promptTitle": "{lineBreak}クラウドアセットの脆弱性を検出",
"xpack.csp.cnvmDashboard.statistics.cloudRegionTitle": "クラウドアカウント",
"xpack.csp.cnvmDashboard.statistics.criticalTitle": "重大",
"xpack.csp.cnvmDashboard.statistics.highTitle": "高",
diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json
index 67d9fa5e067a0..9c6982f75c883 100644
--- a/x-pack/plugins/translations/translations/zh-CN.json
+++ b/x-pack/plugins/translations/translations/zh-CN.json
@@ -13797,12 +13797,6 @@
"xpack.csp.cloudPosturePage.packageNotInstalledRenderer.addCspmIntegrationButtonTitle": "添加 CSPM 集成",
"xpack.csp.cloudPosturePage.packageNotInstalledRenderer.addKspmIntegrationButtonTitle": "添加 KSPM 集成",
"xpack.csp.cloudPosturePage.packageNotInstalledRenderer.learnMoreTitle": "了解有关云安全态势的详情",
- "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.promptDescription": "使用我们的云和 Kubernetes 安全态势管理解决方案,在您的云基础设施中检测并缓解潜在的配置风险,如可公开访问的 S3 存储桶。{learnMore}",
- "xpack.csp.cloudPosturePage.packageNotInstalledRenderer.promptTitle": "在云基础设施中检测安全配置错误!",
- "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.addVulMngtIntegrationButtonTitle": "安装云原生漏洞管理",
- "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.learnMoreButtonTitle": "了解详情",
- "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.promptDescription": "添加云原生漏洞管理集成以开始",
- "xpack.csp.cloudPosturePage.vulnerabilitiesInstalledEmptyPrompt.promptTitle": "在 {lineBreak} 云资产中检测漏洞",
"xpack.csp.cnvmDashboard.statistics.cloudRegionTitle": "云帐户",
"xpack.csp.cnvmDashboard.statistics.criticalTitle": "紧急",
"xpack.csp.cnvmDashboard.statistics.highTitle": "高",
diff --git a/x-pack/test/cloud_security_posture_functional/page_objects/findings_page.ts b/x-pack/test/cloud_security_posture_functional/page_objects/findings_page.ts
index 0504958005a73..8e9483ce97b33 100644
--- a/x-pack/test/cloud_security_posture_functional/page_objects/findings_page.ts
+++ b/x-pack/test/cloud_security_posture_functional/page_objects/findings_page.ts
@@ -113,6 +113,7 @@ export function FindingsPageProvider({ getService, getPageObjects }: FtrProvider
return await retry.try(async () => {
await testSubjects.click(actionTestSubject);
await PageObjects.header.waitUntilLoadingHasFinished();
+
const result = await testSubjects.exists('createPackagePolicy_pageTitle');
if (!result) {
@@ -290,6 +291,12 @@ export function FindingsPageProvider({ getService, getPageObjects }: FtrProvider
const notInstalledVulnerabilities = createNotInstalledObject('cnvm-integration-not-installed');
const notInstalledCSP = createNotInstalledObject('cloud_posture_page_package_not_installed');
+ const thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt = createNotInstalledObject(
+ '3p-integrations-no-vulnerabilities-findings-prompt'
+ );
+ const thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt = createNotInstalledObject(
+ '3p-integrations-no-misconfigurations-findings-prompt'
+ );
const vulnerabilityDataGrid = {
getVulnerabilityTable: async () => testSubjects.find('euiDataGrid'),
@@ -375,6 +382,8 @@ export function FindingsPageProvider({ getService, getPageObjects }: FtrProvider
latestVulnerabilitiesTable,
notInstalledVulnerabilities,
notInstalledCSP,
+ thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt,
+ thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt,
index,
vulnerabilitiesIndex,
waitForPluginInitialized,
diff --git a/x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts b/x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts
index c9285fdd7b775..cfd044eea9501 100644
--- a/x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts
+++ b/x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts
@@ -17,16 +17,22 @@ export default ({ getPageObjects }: FtrProviderContext) => {
let findings: typeof PageObjects.findings;
let notInstalledVulnerabilities: typeof findings.notInstalledVulnerabilities;
let notInstalledCSP: typeof findings.notInstalledCSP;
+ let thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt: typeof findings.thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt;
+ let thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt: typeof findings.thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt;
beforeEach(async () => {
findings = PageObjects.findings;
notInstalledVulnerabilities = findings.notInstalledVulnerabilities;
notInstalledCSP = findings.notInstalledCSP;
+ thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt =
+ findings.thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt;
+ thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt =
+ findings.thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt;
await findings.waitForPluginInitialized();
});
- it('clicking on the `No integrations installed` prompt action button - `install CNVM`: navigates to the CNVM integration installation page', async () => {
+ it('Vulnerabilities - clicking on the `No integrations installed` prompt action button - `install CNVM`: navigates to the CNVM integration installation page', async () => {
await findings.navigateToLatestVulnerabilitiesPage();
await PageObjects.header.waitUntilLoadingHasFinished();
const element = await notInstalledVulnerabilities.getElement();
@@ -37,7 +43,20 @@ export default ({ getPageObjects }: FtrProviderContext) => {
await PageObjects.common.waitUntilUrlIncludes('add-integration/vuln_mgmt');
});
- it('clicking on the `No integrations installed` prompt action button - `install cloud posture intergation`: navigates to the CSPM integration installation page', async () => {
+ it('Vulnerabilities - clicking on the `Third party integrations` prompt action button - `Wiz Integration`: navigates to the Wiz integration installation page', async () => {
+ await findings.navigateToLatestVulnerabilitiesPage();
+ await PageObjects.header.waitUntilLoadingHasFinished();
+ const element = await thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt.getElement();
+ expect(element).to.not.be(null);
+
+ await thirdPartyIntegrationsNoVulnerabilitiesFindingsPrompt.navigateToAction(
+ '3p-no-vulnerabilities-findings-prompt-wiz-integration-button'
+ );
+
+ await PageObjects.common.waitUntilUrlIncludes('fleet/integrations/wiz/add-integration');
+ });
+
+ it('Misconfigurations - clicking on the `No integrations installed` prompt action button - `install cloud posture integration`: navigates to the CSPM integration installation page', async () => {
await findings.navigateToMisconfigurations();
await PageObjects.header.waitUntilLoadingHasFinished();
const element = await notInstalledCSP.getElement();
@@ -48,14 +67,28 @@ export default ({ getPageObjects }: FtrProviderContext) => {
await PageObjects.common.waitUntilUrlIncludes('add-integration/cspm');
});
- it('clicking on the `No integrations installed` prompt action button - `install kubernetes posture intergation`: navigates to the KSPM integration installation page', async () => {
+ it('Misconfigurations - clicking on the `No integrations installed` prompt action button - `install kubernetes posture integration`: navigates to the KSPM integration installation page', async () => {
await findings.navigateToMisconfigurations();
await PageObjects.header.waitUntilLoadingHasFinished();
const element = await notInstalledCSP.getElement();
expect(element).to.not.be(null);
await notInstalledCSP.navigateToAction('kspm-not-installed-action');
+
await PageObjects.common.waitUntilUrlIncludes('add-integration/kspm');
});
+
+ it('Misconfigurations - clicking on the `Third party integrations` prompt action button - `Wiz Integration`: navigates to the Wiz integration installation page', async () => {
+ await findings.navigateToMisconfigurations();
+ await PageObjects.header.waitUntilLoadingHasFinished();
+ const element = await thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt.getElement();
+ expect(element).to.not.be(null);
+
+ await thirdPartyIntegrationsNoMisconfigurationsFindingsPrompt.navigateToAction(
+ '3p-no-misconfigurations-findings-prompt-wiz-integration-button'
+ );
+
+ await PageObjects.common.waitUntilUrlIncludes('fleet/integrations/wiz/add-integration');
+ });
});
};