|
| 1 | +/* |
| 2 | + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one |
| 3 | + * or more contributor license agreements. Licensed under the Elastic License |
| 4 | + * 2.0; you may not use this file except in compliance with the Elastic License |
| 5 | + * 2.0. |
| 6 | + */ |
| 7 | + |
| 8 | +import { i18n } from '@kbn/i18n'; |
| 9 | + |
| 10 | +export type ReadinessTaskId = |
| 11 | + | 'enable-endpoint-visibility' |
| 12 | + | 'ingest-cloud-audit-logs' |
| 13 | + | 'ingest-asset-inventory' |
| 14 | + | 'enable-kubernetes-container-logs' |
| 15 | + | 'ingest-all-cloud-logs-inventory' |
| 16 | + | 'enable-mitre-aligned-detection-rules' |
| 17 | + | 'view-detection-coverage-mitre' |
| 18 | + | 'add-threat-intel-feeds' |
| 19 | + | 'customize-create-rules' |
| 20 | + | 'use-attack-discovery' |
| 21 | + | 'maintain-rule-coverage' |
| 22 | + | 'enable-cspm-on-all-clouds' |
| 23 | + | 'investigate-alert-using-timeline' |
| 24 | + | 'use-ai-assistant-for-alert-root-cause' |
| 25 | + | 'add-external-connectors' |
| 26 | + | 'automate-response-rules-case-creation' |
| 27 | + | 'create-manage-case-workflows' |
| 28 | + | 'complete-automated-cases'; |
| 29 | + |
| 30 | +export interface ReadinessTaskConfig { |
| 31 | + id: ReadinessTaskId; |
| 32 | + title: string; |
| 33 | + description: string; |
| 34 | + pillar: 'visibility' | 'detection' | 'response'; |
| 35 | + order: number; |
| 36 | + meta?: Record<string, unknown>; |
| 37 | +} |
| 38 | + |
| 39 | +// Used to define and validate readiness tasks structure |
| 40 | +export const READINESS_TASKS: ReadinessTaskConfig[] = [ |
| 41 | + /** |
| 42 | + * ### Visibility Pillar Tasks ### |
| 43 | + */ |
| 44 | + { |
| 45 | + // Completion: Elastic Defend agent running (healthy) or 3rd-party endpoint logs successfully ingested |
| 46 | + id: 'enable-endpoint-visibility', |
| 47 | + title: i18n.translate('xpack.securitySolution.readinessTask.enableEndpointVisibility.title', { |
| 48 | + defaultMessage: 'Enable Endpoint Visibility', |
| 49 | + }), |
| 50 | + description: i18n.translate( |
| 51 | + 'xpack.securitySolution.readinessTask.enableEndpointVisibility.description', |
| 52 | + { |
| 53 | + defaultMessage: |
| 54 | + 'Choose one of the following: (1) Deploy Elastic Defend to gain rich host and process telemetry, or (2) Ingest logs from existing endpoint protection tools (e.g. CrowdStrike, SentinelOne, Microsoft Defender) using supported integrations. This enables foundational endpoint visibility for investigation and detection', |
| 55 | + } |
| 56 | + ), |
| 57 | + pillar: 'visibility', |
| 58 | + order: 1, |
| 59 | + }, |
| 60 | + { |
| 61 | + // Completion: Events successfully ingested from at least one cloud provider (AWS/GCP/Azure/On-Prem) |
| 62 | + id: 'ingest-cloud-audit-logs', |
| 63 | + title: i18n.translate('xpack.securitySolution.readinessTask.ingestCloudAuditLogs.title', { |
| 64 | + defaultMessage: 'Ingest cloud/audit logs (AWS, GCP, Azure, On prem)', |
| 65 | + }), |
| 66 | + description: i18n.translate( |
| 67 | + 'xpack.securitySolution.readinessTask.ingestCloudAuditLogs.description', |
| 68 | + { |
| 69 | + defaultMessage: |
| 70 | + 'Set up integrations for AWS CloudTrail, Azure Activity, GCP Admin Activity, or on-prem audit logs', |
| 71 | + } |
| 72 | + ), |
| 73 | + pillar: 'visibility', |
| 74 | + order: 2, |
| 75 | + }, |
| 76 | + { |
| 77 | + // Completion: Cloud asset inventory indexed or visible in Inventory dashboard |
| 78 | + id: 'ingest-asset-inventory', |
| 79 | + title: i18n.translate('xpack.securitySolution.readinessTask.ingestAssetInventory.title', { |
| 80 | + defaultMessage: 'Ingest asset inventory', |
| 81 | + }), |
| 82 | + description: i18n.translate( |
| 83 | + 'xpack.securitySolution.readinessTask.ingestAssetInventory.description', |
| 84 | + { |
| 85 | + defaultMessage: |
| 86 | + 'Automatically pull and index asset metadata from cloud (via integrations) or via endpoint agent. View in Asset Inventory dashboard', |
| 87 | + } |
| 88 | + ), |
| 89 | + pillar: 'visibility', |
| 90 | + order: 6, |
| 91 | + }, |
| 92 | + { |
| 93 | + // Completion: Ingested logs from container/k8s integration |
| 94 | + id: 'enable-kubernetes-container-logs', |
| 95 | + title: i18n.translate( |
| 96 | + 'xpack.securitySolution.readinessTask.enableKubernetesContainerLogs.title', |
| 97 | + { |
| 98 | + defaultMessage: 'Enable Kubernetes or container logs', |
| 99 | + } |
| 100 | + ), |
| 101 | + description: i18n.translate( |
| 102 | + 'xpack.securitySolution.readinessTask.enableKubernetesContainerLogs.description', |
| 103 | + { |
| 104 | + defaultMessage: |
| 105 | + 'Set up the Kubernetes integration for kubernetes.audit_logs and/or container runtime logs.', |
| 106 | + } |
| 107 | + ), |
| 108 | + pillar: 'visibility', |
| 109 | + order: 10, |
| 110 | + }, |
| 111 | + { |
| 112 | + // Completion: Logs + asset data present from AWS, Azure, and GCP (dynamic based on Asset Inventory/Entity store) |
| 113 | + id: 'ingest-all-cloud-logs-inventory', |
| 114 | + title: i18n.translate( |
| 115 | + 'xpack.securitySolution.readinessTask.ingestAllCloudLogsInventory.title', |
| 116 | + { |
| 117 | + defaultMessage: |
| 118 | + 'Ingest all 3 major cloud providers (AWS, Azure, GCP) logs and Cloud Asset Inventory', |
| 119 | + } |
| 120 | + ), |
| 121 | + description: i18n.translate( |
| 122 | + 'xpack.securitySolution.readinessTask.ingestAllCloudLogsInventory.description', |
| 123 | + { |
| 124 | + defaultMessage: |
| 125 | + 'Onboard audit + inventory data for AWS, Azure, and GCP to show multi-cloud coverage.', |
| 126 | + } |
| 127 | + ), |
| 128 | + pillar: 'visibility', |
| 129 | + order: 15, |
| 130 | + }, |
| 131 | + |
| 132 | + /** |
| 133 | + * ### Detection Pillar Tasks ### |
| 134 | + */ |
| 135 | + { |
| 136 | + // Completion: High-severity MITRE rules enabled and firing |
| 137 | + id: 'enable-mitre-aligned-detection-rules', |
| 138 | + title: i18n.translate( |
| 139 | + 'xpack.securitySolution.readinessTask.enableMitreAlignedDetectionRules.title', |
| 140 | + { |
| 141 | + defaultMessage: 'Enable MITRE-aligned detection rules', |
| 142 | + } |
| 143 | + ), |
| 144 | + description: i18n.translate( |
| 145 | + 'xpack.securitySolution.readinessTask.enableMitreAlignedDetectionRules.description', |
| 146 | + { |
| 147 | + defaultMessage: |
| 148 | + "Enable Elastic's prebuilt rules mapped to MITRE ATT&CK. Evaluate rule coverage across key tactics.", |
| 149 | + } |
| 150 | + ), |
| 151 | + pillar: 'detection', |
| 152 | + order: 3, |
| 153 | + }, |
| 154 | + { |
| 155 | + // Completion: Coverage page visited |
| 156 | + id: 'view-detection-coverage-mitre', |
| 157 | + title: i18n.translate('xpack.securitySolution.readinessTask.viewDetectionCoverageMitre.title', { |
| 158 | + defaultMessage: 'View detection coverage across MITRE matrix', |
| 159 | + }), |
| 160 | + description: i18n.translate( |
| 161 | + 'xpack.securitySolution.readinessTask.viewDetectionCoverageMitre.description', |
| 162 | + { |
| 163 | + defaultMessage: |
| 164 | + 'Show tactics and techniques covered by active rules in a heatmap. Track posture', |
| 165 | + } |
| 166 | + ), |
| 167 | + pillar: 'detection', |
| 168 | + order: 4, |
| 169 | + }, |
| 170 | + { |
| 171 | + // Completion: Threat feed events ingested and alerts enriched |
| 172 | + id: 'add-threat-intel-feeds', |
| 173 | + title: i18n.translate('xpack.securitySolution.readinessTask.addThreatIntelFeeds.title', { |
| 174 | + defaultMessage: 'Add threat intelligence feeds', |
| 175 | + }), |
| 176 | + description: i18n.translate( |
| 177 | + 'xpack.securitySolution.readinessTask.addThreatIntelFeeds.description', |
| 178 | + { |
| 179 | + defaultMessage: |
| 180 | + 'Integrate threat intel (Abuse.ch, etc.) to enrich alerts and correlate known IOCs.', |
| 181 | + } |
| 182 | + ), |
| 183 | + pillar: 'detection', |
| 184 | + order: 7, |
| 185 | + }, |
| 186 | + { |
| 187 | + // Completion: A new or edited rule has been enabled |
| 188 | + id: 'customize-create-rules', |
| 189 | + title: i18n.translate('xpack.securitySolution.readinessTask.customizeCreateRules.title', { |
| 190 | + defaultMessage: 'Customize or create new detection rules', |
| 191 | + }), |
| 192 | + description: i18n.translate( |
| 193 | + 'xpack.securitySolution.readinessTask.customizeCreateRules.description', |
| 194 | + { |
| 195 | + defaultMessage: |
| 196 | + 'Modify a rule or author a new one using KQL/ES QL. Demonstrates SOC maturity.', |
| 197 | + } |
| 198 | + ), |
| 199 | + pillar: 'detection', |
| 200 | + order: 8, |
| 201 | + }, |
| 202 | + { |
| 203 | + // Completion: Activity like running Attack Discovery multiple times or scheduling action on the Attack Discovery page |
| 204 | + id: 'use-attack-discovery', |
| 205 | + title: i18n.translate('xpack.securitySolution.readinessTask.useAttackDiscovery.title', { |
| 206 | + defaultMessage: 'Use Attack Discovery to trace MITRE-mapped threat activity', |
| 207 | + }), |
| 208 | + description: i18n.translate( |
| 209 | + 'xpack.securitySolution.readinessTask.useAttackDiscovery.description', |
| 210 | + { |
| 211 | + defaultMessage: |
| 212 | + 'Visualize threats in MITRE ATT&CK graph via Attack Discovery. Correlates alerts to kill chain.', |
| 213 | + } |
| 214 | + ), |
| 215 | + pillar: 'detection', |
| 216 | + order: 11, |
| 217 | + }, |
| 218 | + { |
| 219 | + // Completion: >90% of relevant MITRE techniques covered by tuned rules |
| 220 | + id: 'maintain-rule-coverage', |
| 221 | + title: i18n.translate('xpack.securitySolution.readinessTask.maintainRuleCoverage.title', { |
| 222 | + defaultMessage: 'Maintain >90% rule coverage', |
| 223 | + }), |
| 224 | + description: i18n.translate( |
| 225 | + 'xpack.securitySolution.readinessTask.maintainRuleCoverage.description', |
| 226 | + { |
| 227 | + defaultMessage: 'Ensure high-severity rules are enabled', |
| 228 | + } |
| 229 | + ), |
| 230 | + pillar: 'detection', |
| 231 | + order: 13, |
| 232 | + }, |
| 233 | + { |
| 234 | + // Completion: CSPM enabled for AWS, Azure, and GCP, findings/dashboard pages visited (dynamic based on CSP footprint) |
| 235 | + id: 'enable-cspm-on-all-clouds', |
| 236 | + title: i18n.translate('xpack.securitySolution.readinessTask.enableCspmOnAllClouds.title', { |
| 237 | + defaultMessage: 'Enable CSPM on all 3 major cloud providers (AWS, Azure, GCP)', |
| 238 | + }), |
| 239 | + description: i18n.translate( |
| 240 | + 'xpack.securitySolution.readinessTask.enableCspmOnAllClouds.description', |
| 241 | + { |
| 242 | + defaultMessage: |
| 243 | + 'Activate cloud security posture monitoring (CSPM) for AWS, Azure, GCP. Review active findings.', |
| 244 | + } |
| 245 | + ), |
| 246 | + pillar: 'detection', |
| 247 | + order: 16, |
| 248 | + }, |
| 249 | + |
| 250 | + /** |
| 251 | + * ### Response Pillar Tasks ### |
| 252 | + */ |
| 253 | + { |
| 254 | + // Completion: Alert annotated, tagged, or enriched in Timeline |
| 255 | + id: 'investigate-alert-using-timeline', |
| 256 | + title: i18n.translate( |
| 257 | + 'xpack.securitySolution.readinessTask.investigateAlertUsingTimeline.title', |
| 258 | + { |
| 259 | + defaultMessage: 'Investigate an alert using Timeline', |
| 260 | + } |
| 261 | + ), |
| 262 | + description: i18n.translate( |
| 263 | + 'xpack.securitySolution.readinessTask.investigateAlertUsingTimeline.description', |
| 264 | + { |
| 265 | + defaultMessage: 'Triage an alert using the Timeline view. Add evidence and enrich context.', |
| 266 | + } |
| 267 | + ), |
| 268 | + pillar: 'response', |
| 269 | + order: 5, |
| 270 | + }, |
| 271 | + { |
| 272 | + // Completion: Summary generated on Alert - AI assistant workflow |
| 273 | + id: 'use-ai-assistant-for-alert-root-cause', |
| 274 | + title: i18n.translate( |
| 275 | + 'xpack.securitySolution.readinessTask.useAiAssistantForAlertRootCause.title', |
| 276 | + { |
| 277 | + defaultMessage: 'Use AI Assistant to summarize alert context or identify root cause', |
| 278 | + } |
| 279 | + ), |
| 280 | + description: i18n.translate( |
| 281 | + 'xpack.securitySolution.readinessTask.useAiAssistantForAlertRootCause.description', |
| 282 | + { |
| 283 | + defaultMessage: |
| 284 | + 'Ask AI to generate a quick summary or root cause for an alert. Prompt: "Summarize the root cause for this alert"', |
| 285 | + } |
| 286 | + ), |
| 287 | + pillar: 'response', |
| 288 | + order: 9, |
| 289 | + }, |
| 290 | + { |
| 291 | + // Completion: Jira/Slack/ServiceNow/SentinelOne/Crowdstrike connector tested and in use |
| 292 | + id: 'add-external-connectors', |
| 293 | + title: i18n.translate('xpack.securitySolution.readinessTask.addExternalConnectors.title', { |
| 294 | + defaultMessage: 'Add external connectors (Jira, Slack, ServiceNow)', |
| 295 | + }), |
| 296 | + description: i18n.translate( |
| 297 | + 'xpack.securitySolution.readinessTask.addExternalConnectors.description', |
| 298 | + { |
| 299 | + defaultMessage: 'Configure Jira, Slack, or ServiceNow for alert or case forwarding.', |
| 300 | + } |
| 301 | + ), |
| 302 | + pillar: 'response', |
| 303 | + order: 12, |
| 304 | + }, |
| 305 | + { |
| 306 | + // Completion: At least one rule creates a case or sends notification automatically |
| 307 | + id: 'automate-response-rules-case-creation', |
| 308 | + title: i18n.translate( |
| 309 | + 'xpack.securitySolution.readinessTask.automateResponseRulesCaseCreation.title', |
| 310 | + { |
| 311 | + defaultMessage: 'Automate response rules or case creation for alerts', |
| 312 | + } |
| 313 | + ), |
| 314 | + description: i18n.translate( |
| 315 | + 'xpack.securitySolution.readinessTask.automateResponseRulesCaseCreation.description', |
| 316 | + { |
| 317 | + defaultMessage: |
| 318 | + 'Use rule actions or case templates to automatically trigger cases or actions', |
| 319 | + } |
| 320 | + ), |
| 321 | + pillar: 'response', |
| 322 | + order: 14, |
| 323 | + }, |
| 324 | + { |
| 325 | + // Completion: Multiple alerts triaged and closed via case workflow |
| 326 | + id: 'create-manage-case-workflows', |
| 327 | + title: i18n.translate('xpack.securitySolution.readinessTask.createManageCaseWorkflows.title', { |
| 328 | + defaultMessage: 'Create and manage case workflows', |
| 329 | + }), |
| 330 | + description: i18n.translate( |
| 331 | + 'xpack.securitySolution.readinessTask.createManageCaseWorkflows.description', |
| 332 | + { |
| 333 | + defaultMessage: |
| 334 | + 'Open a case, assign it, and link alerts to it. Manages SOC workflow maturity.', |
| 335 | + } |
| 336 | + ), |
| 337 | + pillar: 'response', |
| 338 | + order: 17, |
| 339 | + }, |
| 340 | + { |
| 341 | + // Completion: 3+ cases with automation and alert linkages resolved |
| 342 | + id: 'complete-automated-cases', |
| 343 | + title: i18n.translate('xpack.securitySolution.readinessTask.completeAutomatedCases.title', { |
| 344 | + defaultMessage: 'Complete 3+ cases with automation and external sharing', |
| 345 | + }), |
| 346 | + description: i18n.translate( |
| 347 | + 'xpack.securitySolution.readinessTask.completeAutomatedCases.description', |
| 348 | + { |
| 349 | + defaultMessage: 'Demonstrate workflow maturity by automating and resolving multiple cases.', |
| 350 | + } |
| 351 | + ), |
| 352 | + pillar: 'response', |
| 353 | + order: 18, |
| 354 | + }, |
| 355 | +] as const; |
0 commit comments