@meyicloud/meyi-insight-server 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants/incidentCategories.d.ts +18 -0
- package/dist/constants/incidentCategories.d.ts.map +1 -0
- package/dist/constants/incidentCategories.js +36 -0
- package/dist/constants/incidentCategories.js.map +1 -0
- package/dist/controllers/alert.controller.d.ts +12 -0
- package/dist/controllers/alert.controller.d.ts.map +1 -0
- package/dist/controllers/alert.controller.js +89 -0
- package/dist/controllers/alert.controller.js.map +1 -0
- package/dist/controllers/incident.controller.d.ts +16 -0
- package/dist/controllers/incident.controller.d.ts.map +1 -0
- package/dist/controllers/incident.controller.js +215 -0
- package/dist/controllers/incident.controller.js.map +1 -0
- package/dist/controllers/notification-provider.controller.d.ts +10 -0
- package/dist/controllers/notification-provider.controller.d.ts.map +1 -0
- package/dist/controllers/notification-provider.controller.js +59 -0
- package/dist/controllers/notification-provider.controller.js.map +1 -0
- package/dist/controllers/settings.controller.d.ts +7 -0
- package/dist/controllers/settings.controller.d.ts.map +1 -0
- package/dist/controllers/settings.controller.js +27 -0
- package/dist/controllers/settings.controller.js.map +1 -0
- package/dist/controllers/sop.controller.d.ts +11 -0
- package/dist/controllers/sop.controller.d.ts.map +1 -0
- package/dist/controllers/sop.controller.js +89 -0
- package/dist/controllers/sop.controller.js.map +1 -0
- package/dist/controllers/source.controller.d.ts +26 -0
- package/dist/controllers/source.controller.d.ts.map +1 -0
- package/dist/controllers/source.controller.js +333 -0
- package/dist/controllers/source.controller.js.map +1 -0
- package/dist/controllers/sourceDatadog.controller.d.ts +17 -0
- package/dist/controllers/sourceDatadog.controller.d.ts.map +1 -0
- package/dist/controllers/sourceDatadog.controller.js +169 -0
- package/dist/controllers/sourceDatadog.controller.js.map +1 -0
- package/dist/controllers/tenant.controller.d.ts +7 -0
- package/dist/controllers/tenant.controller.d.ts.map +1 -0
- package/dist/controllers/tenant.controller.js +33 -0
- package/dist/controllers/tenant.controller.js.map +1 -0
- package/dist/controllers/webhook.controller.d.ts +6 -0
- package/dist/controllers/webhook.controller.d.ts.map +1 -0
- package/dist/controllers/webhook.controller.js +83 -0
- package/dist/controllers/webhook.controller.js.map +1 -0
- package/dist/controllers/workflow.controller.d.ts +18 -0
- package/dist/controllers/workflow.controller.d.ts.map +1 -0
- package/dist/controllers/workflow.controller.js +118 -0
- package/dist/controllers/workflow.controller.js.map +1 -0
- package/dist/database/index.d.ts +7 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +12 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/schema.d.ts +5358 -0
- package/dist/database/schema.d.ts.map +1 -0
- package/dist/database/schema.js +516 -0
- package/dist/database/schema.js.map +1 -0
- package/dist/features/sources/cloudtrail/controller.d.ts +38 -0
- package/dist/features/sources/cloudtrail/controller.d.ts.map +1 -0
- package/dist/features/sources/cloudtrail/controller.js +421 -0
- package/dist/features/sources/cloudtrail/controller.js.map +1 -0
- package/dist/features/sources/cloudtrail/routes.d.ts +6 -0
- package/dist/features/sources/cloudtrail/routes.d.ts.map +1 -0
- package/dist/features/sources/cloudtrail/routes.js +8 -0
- package/dist/features/sources/cloudtrail/routes.js.map +1 -0
- package/dist/features/sources/cloudtrail/schema.d.ts +2 -0
- package/dist/features/sources/cloudtrail/schema.d.ts.map +1 -0
- package/dist/features/sources/cloudtrail/schema.js +26 -0
- package/dist/features/sources/cloudtrail/schema.js.map +1 -0
- package/dist/features/sources/cloudtrail/stackTemplates.d.ts +3 -0
- package/dist/features/sources/cloudtrail/stackTemplates.d.ts.map +1 -0
- package/dist/features/sources/cloudtrail/stackTemplates.js +548 -0
- package/dist/features/sources/cloudtrail/stackTemplates.js.map +1 -0
- package/dist/features/sources/cloudtrail/template.d.ts +21 -0
- package/dist/features/sources/cloudtrail/template.d.ts.map +1 -0
- package/dist/features/sources/cloudtrail/template.js +1230 -0
- package/dist/features/sources/cloudtrail/template.js.map +1 -0
- package/dist/features/sources/cloudwatch/controller.d.ts +13 -0
- package/dist/features/sources/cloudwatch/controller.d.ts.map +1 -0
- package/dist/features/sources/cloudwatch/controller.js +514 -0
- package/dist/features/sources/cloudwatch/controller.js.map +1 -0
- package/dist/features/sources/cloudwatch/eventbridgeTemplate.d.ts +7 -0
- package/dist/features/sources/cloudwatch/eventbridgeTemplate.d.ts.map +1 -0
- package/dist/features/sources/cloudwatch/eventbridgeTemplate.js +230 -0
- package/dist/features/sources/cloudwatch/eventbridgeTemplate.js.map +1 -0
- package/dist/features/sources/cloudwatch/service.d.ts +50 -0
- package/dist/features/sources/cloudwatch/service.d.ts.map +1 -0
- package/dist/features/sources/cloudwatch/service.js +269 -0
- package/dist/features/sources/cloudwatch/service.js.map +1 -0
- package/dist/features/sources/cloudwatch/template.d.ts +26 -0
- package/dist/features/sources/cloudwatch/template.d.ts.map +1 -0
- package/dist/features/sources/cloudwatch/template.js +335 -0
- package/dist/features/sources/cloudwatch/template.js.map +1 -0
- package/dist/features/sources/cloudwatch/types.d.ts +26 -0
- package/dist/features/sources/cloudwatch/types.d.ts.map +1 -0
- package/dist/features/sources/cloudwatch/types.js +2 -0
- package/dist/features/sources/cloudwatch/types.js.map +1 -0
- package/dist/features/sources/grafana/controller.d.ts +18 -0
- package/dist/features/sources/grafana/controller.d.ts.map +1 -0
- package/dist/features/sources/grafana/controller.js +183 -0
- package/dist/features/sources/grafana/controller.js.map +1 -0
- package/dist/features/sources/grafana/routes.d.ts +6 -0
- package/dist/features/sources/grafana/routes.d.ts.map +1 -0
- package/dist/features/sources/grafana/routes.js +6 -0
- package/dist/features/sources/grafana/routes.js.map +1 -0
- package/dist/features/sources/grafana/schema.d.ts +2 -0
- package/dist/features/sources/grafana/schema.d.ts.map +1 -0
- package/dist/features/sources/grafana/schema.js +24 -0
- package/dist/features/sources/grafana/schema.js.map +1 -0
- package/dist/features/sources/grafana/service.d.ts +33 -0
- package/dist/features/sources/grafana/service.d.ts.map +1 -0
- package/dist/features/sources/grafana/service.js +215 -0
- package/dist/features/sources/grafana/service.js.map +1 -0
- package/dist/features/sources/index.d.ts +29 -0
- package/dist/features/sources/index.d.ts.map +1 -0
- package/dist/features/sources/index.js +47 -0
- package/dist/features/sources/index.js.map +1 -0
- package/dist/features/sources/observability/controller.d.ts +6 -0
- package/dist/features/sources/observability/controller.d.ts.map +1 -0
- package/dist/features/sources/observability/controller.js +16 -0
- package/dist/features/sources/observability/controller.js.map +1 -0
- package/dist/features/sources/observability/routes.d.ts +4 -0
- package/dist/features/sources/observability/routes.d.ts.map +1 -0
- package/dist/features/sources/observability/routes.js +8 -0
- package/dist/features/sources/observability/routes.js.map +1 -0
- package/dist/features/sources/observability/schema.d.ts +3 -0
- package/dist/features/sources/observability/schema.d.ts.map +1 -0
- package/dist/features/sources/observability/schema.js +44 -0
- package/dist/features/sources/observability/schema.js.map +1 -0
- package/dist/features/sources/observability/service.d.ts +36 -0
- package/dist/features/sources/observability/service.d.ts.map +1 -0
- package/dist/features/sources/observability/service.js +127 -0
- package/dist/features/sources/observability/service.js.map +1 -0
- package/dist/features/sources/prometheus/controller.d.ts +9 -0
- package/dist/features/sources/prometheus/controller.d.ts.map +1 -0
- package/dist/features/sources/prometheus/controller.js +359 -0
- package/dist/features/sources/prometheus/controller.js.map +1 -0
- package/dist/features/sources/prometheus/templates.d.ts +18 -0
- package/dist/features/sources/prometheus/templates.d.ts.map +1 -0
- package/dist/features/sources/prometheus/templates.js +244 -0
- package/dist/features/sources/prometheus/templates.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/0007_pipeline_yaml_definitions.d.ts +3 -0
- package/dist/migrations/0007_pipeline_yaml_definitions.d.ts.map +1 -0
- package/dist/migrations/0007_pipeline_yaml_definitions.js +19 -0
- package/dist/migrations/0007_pipeline_yaml_definitions.js.map +1 -0
- package/dist/migrations/0008_tenant_isolation.d.ts +3 -0
- package/dist/migrations/0008_tenant_isolation.d.ts.map +1 -0
- package/dist/migrations/0008_tenant_isolation.js +42 -0
- package/dist/migrations/0008_tenant_isolation.js.map +1 -0
- package/dist/migrations/run.d.ts +6 -0
- package/dist/migrations/run.d.ts.map +1 -0
- package/dist/migrations/run.js +1262 -0
- package/dist/migrations/run.js.map +1 -0
- package/dist/models/alarm-group.model.d.ts +42 -0
- package/dist/models/alarm-group.model.d.ts.map +1 -0
- package/dist/models/alarm-group.model.js +98 -0
- package/dist/models/alarm-group.model.js.map +1 -0
- package/dist/models/alert.model.d.ts +54 -0
- package/dist/models/alert.model.d.ts.map +1 -0
- package/dist/models/alert.model.js +119 -0
- package/dist/models/alert.model.js.map +1 -0
- package/dist/models/dedup-config.model.d.ts +53 -0
- package/dist/models/dedup-config.model.d.ts.map +1 -0
- package/dist/models/dedup-config.model.js +157 -0
- package/dist/models/dedup-config.model.js.map +1 -0
- package/dist/models/grouping-config.model.d.ts +70 -0
- package/dist/models/grouping-config.model.d.ts.map +1 -0
- package/dist/models/grouping-config.model.js +174 -0
- package/dist/models/grouping-config.model.js.map +1 -0
- package/dist/models/incident-comment.model.d.ts +14 -0
- package/dist/models/incident-comment.model.d.ts.map +1 -0
- package/dist/models/incident-comment.model.js +38 -0
- package/dist/models/incident-comment.model.js.map +1 -0
- package/dist/models/incident-event.model.d.ts +16 -0
- package/dist/models/incident-event.model.d.ts.map +1 -0
- package/dist/models/incident-event.model.js +31 -0
- package/dist/models/incident-event.model.js.map +1 -0
- package/dist/models/incident.model.d.ts +47 -0
- package/dist/models/incident.model.d.ts.map +1 -0
- package/dist/models/incident.model.js +201 -0
- package/dist/models/incident.model.js.map +1 -0
- package/dist/models/normalization-config.model.d.ts +44 -0
- package/dist/models/normalization-config.model.d.ts.map +1 -0
- package/dist/models/normalization-config.model.js +153 -0
- package/dist/models/normalization-config.model.js.map +1 -0
- package/dist/models/notification-provider.model.d.ts +12 -0
- package/dist/models/notification-provider.model.d.ts.map +1 -0
- package/dist/models/notification-provider.model.js +48 -0
- package/dist/models/notification-provider.model.js.map +1 -0
- package/dist/models/pipeline-event.model.d.ts +15 -0
- package/dist/models/pipeline-event.model.d.ts.map +1 -0
- package/dist/models/pipeline-event.model.js +32 -0
- package/dist/models/pipeline-event.model.js.map +1 -0
- package/dist/models/settings.model.d.ts +8 -0
- package/dist/models/settings.model.d.ts.map +1 -0
- package/dist/models/settings.model.js +30 -0
- package/dist/models/settings.model.js.map +1 -0
- package/dist/models/sop.model.d.ts +58 -0
- package/dist/models/sop.model.d.ts.map +1 -0
- package/dist/models/sop.model.js +138 -0
- package/dist/models/sop.model.js.map +1 -0
- package/dist/models/source.model.d.ts +177 -0
- package/dist/models/source.model.d.ts.map +1 -0
- package/dist/models/source.model.js +794 -0
- package/dist/models/source.model.js.map +1 -0
- package/dist/models/tenant.model.d.ts +13 -0
- package/dist/models/tenant.model.d.ts.map +1 -0
- package/dist/models/tenant.model.js +28 -0
- package/dist/models/tenant.model.js.map +1 -0
- package/dist/models/workflow.model.d.ts +36 -0
- package/dist/models/workflow.model.d.ts.map +1 -0
- package/dist/models/workflow.model.js +136 -0
- package/dist/models/workflow.model.js.map +1 -0
- package/dist/pipeline/AlarmPipelineWorker.d.ts +18 -0
- package/dist/pipeline/AlarmPipelineWorker.d.ts.map +1 -0
- package/dist/pipeline/AlarmPipelineWorker.js +342 -0
- package/dist/pipeline/AlarmPipelineWorker.js.map +1 -0
- package/dist/pipeline/CanonicalAlarm.d.ts +59 -0
- package/dist/pipeline/CanonicalAlarm.d.ts.map +1 -0
- package/dist/pipeline/CanonicalAlarm.js +81 -0
- package/dist/pipeline/CanonicalAlarm.js.map +1 -0
- package/dist/pipeline/DedupService.d.ts +29 -0
- package/dist/pipeline/DedupService.d.ts.map +1 -0
- package/dist/pipeline/DedupService.js +172 -0
- package/dist/pipeline/DedupService.js.map +1 -0
- package/dist/pipeline/GroupFlushWorker.d.ts +16 -0
- package/dist/pipeline/GroupFlushWorker.d.ts.map +1 -0
- package/dist/pipeline/GroupFlushWorker.js +196 -0
- package/dist/pipeline/GroupFlushWorker.js.map +1 -0
- package/dist/pipeline/GroupingService.d.ts +27 -0
- package/dist/pipeline/GroupingService.d.ts.map +1 -0
- package/dist/pipeline/GroupingService.js +338 -0
- package/dist/pipeline/GroupingService.js.map +1 -0
- package/dist/pipeline/NormalizationRuleEngine.d.ts +5 -0
- package/dist/pipeline/NormalizationRuleEngine.d.ts.map +1 -0
- package/dist/pipeline/NormalizationRuleEngine.js +86 -0
- package/dist/pipeline/NormalizationRuleEngine.js.map +1 -0
- package/dist/pipeline/NormalizationService.d.ts +29 -0
- package/dist/pipeline/NormalizationService.d.ts.map +1 -0
- package/dist/pipeline/NormalizationService.js +275 -0
- package/dist/pipeline/NormalizationService.js.map +1 -0
- package/dist/pipeline/alarmQueue.d.ts +66 -0
- package/dist/pipeline/alarmQueue.d.ts.map +1 -0
- package/dist/pipeline/alarmQueue.js +254 -0
- package/dist/pipeline/alarmQueue.js.map +1 -0
- package/dist/pipeline/defaults/ensureDefaults.d.ts +3 -0
- package/dist/pipeline/defaults/ensureDefaults.d.ts.map +1 -0
- package/dist/pipeline/defaults/ensureDefaults.js +124 -0
- package/dist/pipeline/defaults/ensureDefaults.js.map +1 -0
- package/dist/pipeline/defaults/pipelineDefaults.d.ts +13 -0
- package/dist/pipeline/defaults/pipelineDefaults.d.ts.map +1 -0
- package/dist/pipeline/defaults/pipelineDefaults.js +266 -0
- package/dist/pipeline/defaults/pipelineDefaults.js.map +1 -0
- package/dist/pipeline/yaml/DedupYaml.d.ts +33 -0
- package/dist/pipeline/yaml/DedupYaml.d.ts.map +1 -0
- package/dist/pipeline/yaml/DedupYaml.js +25 -0
- package/dist/pipeline/yaml/DedupYaml.js.map +1 -0
- package/dist/pipeline/yaml/GroupingYaml.d.ts +49 -0
- package/dist/pipeline/yaml/GroupingYaml.d.ts.map +1 -0
- package/dist/pipeline/yaml/GroupingYaml.js +39 -0
- package/dist/pipeline/yaml/GroupingYaml.js.map +1 -0
- package/dist/pipeline/yaml/NormalizationYaml.d.ts +54 -0
- package/dist/pipeline/yaml/NormalizationYaml.d.ts.map +1 -0
- package/dist/pipeline/yaml/NormalizationYaml.js +23 -0
- package/dist/pipeline/yaml/NormalizationYaml.js.map +1 -0
- package/dist/pipeline/yaml/pipelineYaml.d.ts +11 -0
- package/dist/pipeline/yaml/pipelineYaml.d.ts.map +1 -0
- package/dist/pipeline/yaml/pipelineYaml.js +49 -0
- package/dist/pipeline/yaml/pipelineYaml.js.map +1 -0
- package/dist/realtime/events.d.ts +11 -0
- package/dist/realtime/events.d.ts.map +1 -0
- package/dist/realtime/events.js +21 -0
- package/dist/realtime/events.js.map +1 -0
- package/dist/routes/alert.routes.d.ts +4 -0
- package/dist/routes/alert.routes.d.ts.map +1 -0
- package/dist/routes/alert.routes.js +15 -0
- package/dist/routes/alert.routes.js.map +1 -0
- package/dist/routes/dedup-config.routes.d.ts +4 -0
- package/dist/routes/dedup-config.routes.d.ts.map +1 -0
- package/dist/routes/dedup-config.routes.js +82 -0
- package/dist/routes/dedup-config.routes.js.map +1 -0
- package/dist/routes/grouping-config.routes.d.ts +4 -0
- package/dist/routes/grouping-config.routes.d.ts.map +1 -0
- package/dist/routes/grouping-config.routes.js +82 -0
- package/dist/routes/grouping-config.routes.js.map +1 -0
- package/dist/routes/incident.routes.d.ts +4 -0
- package/dist/routes/incident.routes.d.ts.map +1 -0
- package/dist/routes/incident.routes.js +21 -0
- package/dist/routes/incident.routes.js.map +1 -0
- package/dist/routes/index.d.ts +47 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +83 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/normalization-config.routes.d.ts +4 -0
- package/dist/routes/normalization-config.routes.d.ts.map +1 -0
- package/dist/routes/normalization-config.routes.js +199 -0
- package/dist/routes/normalization-config.routes.js.map +1 -0
- package/dist/routes/notification-provider.routes.d.ts +4 -0
- package/dist/routes/notification-provider.routes.d.ts.map +1 -0
- package/dist/routes/notification-provider.routes.js +13 -0
- package/dist/routes/notification-provider.routes.js.map +1 -0
- package/dist/routes/pipeline.routes.d.ts +8 -0
- package/dist/routes/pipeline.routes.d.ts.map +1 -0
- package/dist/routes/pipeline.routes.js +243 -0
- package/dist/routes/pipeline.routes.js.map +1 -0
- package/dist/routes/settings.routes.d.ts +4 -0
- package/dist/routes/settings.routes.d.ts.map +1 -0
- package/dist/routes/settings.routes.js +10 -0
- package/dist/routes/settings.routes.js.map +1 -0
- package/dist/routes/sop.routes.d.ts +4 -0
- package/dist/routes/sop.routes.d.ts.map +1 -0
- package/dist/routes/sop.routes.js +14 -0
- package/dist/routes/sop.routes.js.map +1 -0
- package/dist/routes/source.routes.d.ts +9 -0
- package/dist/routes/source.routes.d.ts.map +1 -0
- package/dist/routes/source.routes.js +31 -0
- package/dist/routes/source.routes.js.map +1 -0
- package/dist/routes/tenant.routes.d.ts +4 -0
- package/dist/routes/tenant.routes.d.ts.map +1 -0
- package/dist/routes/tenant.routes.js +10 -0
- package/dist/routes/tenant.routes.js.map +1 -0
- package/dist/routes/workflow.routes.d.ts +4 -0
- package/dist/routes/workflow.routes.d.ts.map +1 -0
- package/dist/routes/workflow.routes.js +18 -0
- package/dist/routes/workflow.routes.js.map +1 -0
- package/dist/server.d.ts +22 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +76 -0
- package/dist/server.js.map +1 -0
- package/dist/service.d.ts +159 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +156 -0
- package/dist/service.js.map +1 -0
- package/dist/services/alert.service.d.ts +76 -0
- package/dist/services/alert.service.d.ts.map +1 -0
- package/dist/services/alert.service.js +688 -0
- package/dist/services/alert.service.js.map +1 -0
- package/dist/services/connector.service.d.ts +65 -0
- package/dist/services/connector.service.d.ts.map +1 -0
- package/dist/services/connector.service.js +28 -0
- package/dist/services/connector.service.js.map +1 -0
- package/dist/services/incident.service.d.ts +108 -0
- package/dist/services/incident.service.d.ts.map +1 -0
- package/dist/services/incident.service.js +325 -0
- package/dist/services/incident.service.js.map +1 -0
- package/dist/services/notification-provider.service.d.ts +12 -0
- package/dist/services/notification-provider.service.d.ts.map +1 -0
- package/dist/services/notification-provider.service.js +25 -0
- package/dist/services/notification-provider.service.js.map +1 -0
- package/dist/services/settings.service.d.ts +8 -0
- package/dist/services/settings.service.d.ts.map +1 -0
- package/dist/services/settings.service.js +14 -0
- package/dist/services/settings.service.js.map +1 -0
- package/dist/services/sop.service.d.ts +60 -0
- package/dist/services/sop.service.d.ts.map +1 -0
- package/dist/services/sop.service.js +66 -0
- package/dist/services/sop.service.js.map +1 -0
- package/dist/services/source.service.d.ts +162 -0
- package/dist/services/source.service.d.ts.map +1 -0
- package/dist/services/source.service.js +124 -0
- package/dist/services/source.service.js.map +1 -0
- package/dist/services/tenant.service.d.ts +11 -0
- package/dist/services/tenant.service.d.ts.map +1 -0
- package/dist/services/tenant.service.js +22 -0
- package/dist/services/tenant.service.js.map +1 -0
- package/dist/services/workflow.service.d.ts +32 -0
- package/dist/services/workflow.service.d.ts.map +1 -0
- package/dist/services/workflow.service.js +291 -0
- package/dist/services/workflow.service.js.map +1 -0
- package/dist/standalone.d.ts +2 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/standalone.js +55 -0
- package/dist/standalone.js.map +1 -0
- package/dist/tenancy.d.ts +5 -0
- package/dist/tenancy.d.ts.map +1 -0
- package/dist/tenancy.js +35 -0
- package/dist/tenancy.js.map +1 -0
- package/dist/utils/notificationTemplates.d.ts +98 -0
- package/dist/utils/notificationTemplates.d.ts.map +1 -0
- package/dist/utils/notificationTemplates.js +227 -0
- package/dist/utils/notificationTemplates.js.map +1 -0
- package/dist/utils/secretCrypto.d.ts +3 -0
- package/dist/utils/secretCrypto.d.ts.map +1 -0
- package/dist/utils/secretCrypto.js +40 -0
- package/dist/utils/secretCrypto.js.map +1 -0
- package/dist/utils/workflowYaml.d.ts +53 -0
- package/dist/utils/workflowYaml.d.ts.map +1 -0
- package/dist/utils/workflowYaml.js +269 -0
- package/dist/utils/workflowYaml.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
import { buildCloudTrailCentralStackTemplate, ALL_AWS_ACTIVE_REGIONS } from "./template.js";
|
|
2
|
+
import { resolveTenantId } from "../../../tenancy.js";
|
|
3
|
+
function normalizeSourceType(value) {
|
|
4
|
+
const normalized = String(value || "")
|
|
5
|
+
.toLowerCase()
|
|
6
|
+
.trim()
|
|
7
|
+
.replace(/[\s-]+/g, "_");
|
|
8
|
+
if (normalized === "aws_cloudtrail" || normalized === "cloud_trail")
|
|
9
|
+
return "cloudtrail";
|
|
10
|
+
return normalized;
|
|
11
|
+
}
|
|
12
|
+
function isCloudTrailType(value) {
|
|
13
|
+
return normalizeSourceType(value) === "cloudtrail";
|
|
14
|
+
}
|
|
15
|
+
function stripTrailingSlash(value) {
|
|
16
|
+
return value.replace(/\/+$/, "");
|
|
17
|
+
}
|
|
18
|
+
function isLocalhostUrl(value) {
|
|
19
|
+
try {
|
|
20
|
+
const host = new URL(value).hostname.toLowerCase();
|
|
21
|
+
return host === "localhost" || host === "127.0.0.1" || host === "::1";
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return /localhost|127\.0\.0\.1/i.test(value);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function buildPublicBaseUrl(req) {
|
|
28
|
+
const explicitBase = process.env.INSIGHT_PUBLIC_BASE_URL ||
|
|
29
|
+
process.env.PUBLIC_API_BASE_URL ||
|
|
30
|
+
process.env.APP_BASE_URL;
|
|
31
|
+
if (explicitBase)
|
|
32
|
+
return stripTrailingSlash(explicitBase);
|
|
33
|
+
const headerBase = String(req.headers["x-insight-public-base-url"] || "").trim();
|
|
34
|
+
if (headerBase && !isLocalhostUrl(headerBase)) {
|
|
35
|
+
return stripTrailingSlash(headerBase);
|
|
36
|
+
}
|
|
37
|
+
let proto = req.headers["x-forwarded-proto"] || req.protocol || "http";
|
|
38
|
+
if (proto.includes(","))
|
|
39
|
+
proto = proto.split(",")[0].trim();
|
|
40
|
+
const host = req.headers["x-forwarded-host"] || req.get("host") || "localhost";
|
|
41
|
+
if (!isLocalhostUrl(`http://${host}`) && proto === "http") {
|
|
42
|
+
proto = "https";
|
|
43
|
+
}
|
|
44
|
+
return stripTrailingSlash(`${proto}://${host}`);
|
|
45
|
+
}
|
|
46
|
+
function sanitizeAwsName(value, fallback, maxLength) {
|
|
47
|
+
const raw = String(value || "").trim();
|
|
48
|
+
const base = raw || fallback;
|
|
49
|
+
const cleaned = base.replace(/[^a-zA-Z0-9-_]/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "");
|
|
50
|
+
return (cleaned || fallback).slice(0, maxLength);
|
|
51
|
+
}
|
|
52
|
+
function buildAwsConsoleCreateStackUrl(input) {
|
|
53
|
+
const region = encodeURIComponent(input.region || "ap-south-1");
|
|
54
|
+
const stackName = encodeURIComponent(input.stackName);
|
|
55
|
+
if (input.templateUrl) {
|
|
56
|
+
const templateUrl = encodeURIComponent(input.templateUrl);
|
|
57
|
+
return `https://${region}.console.aws.amazon.com/cloudformation/home?region=${region}#/stacks/create/review?stackName=${stackName}&templateURL=${templateUrl}`;
|
|
58
|
+
}
|
|
59
|
+
return `https://${region}.console.aws.amazon.com/cloudformation/home?region=${region}#/stacks/create/template?stackName=${stackName}`;
|
|
60
|
+
}
|
|
61
|
+
function isAwsSupportedTemplateUrl(value) {
|
|
62
|
+
try {
|
|
63
|
+
const url = new URL(value);
|
|
64
|
+
const host = url.hostname.toLowerCase();
|
|
65
|
+
return (url.protocol === "https:" &&
|
|
66
|
+
(host === "s3.amazonaws.com" ||
|
|
67
|
+
/^s3[.-][a-z0-9-]+\.amazonaws\.com$/.test(host) ||
|
|
68
|
+
/\.s3[.-][a-z0-9-]+\.amazonaws\.com$/.test(host) ||
|
|
69
|
+
/\.s3\.amazonaws\.com$/.test(host)));
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export function createCloudTrailSourceController(sourceService, connectorService) {
|
|
76
|
+
return {
|
|
77
|
+
/**
|
|
78
|
+
* GET /:id/aws/cloudtrail/setup
|
|
79
|
+
* Returns the persisted CloudTrail setup values for this source.
|
|
80
|
+
*/
|
|
81
|
+
async getSetup(req, res) {
|
|
82
|
+
try {
|
|
83
|
+
const source = await sourceService.getById(req.params.id);
|
|
84
|
+
if (!source)
|
|
85
|
+
return res.status(404).json({ ok: false, error: "Source not found" });
|
|
86
|
+
if (!isCloudTrailType(source.type)) {
|
|
87
|
+
return res.status(400).json({ ok: false, error: "Source type must be cloudtrail" });
|
|
88
|
+
}
|
|
89
|
+
return res.json({
|
|
90
|
+
ok: true,
|
|
91
|
+
source: {
|
|
92
|
+
id: source.id,
|
|
93
|
+
name: source.name,
|
|
94
|
+
type: normalizeSourceType(source.type),
|
|
95
|
+
},
|
|
96
|
+
setup: {
|
|
97
|
+
awsRegion: String(source.awsRegion || "ap-south-1"),
|
|
98
|
+
awsStackName: String(source.awsStackName || `meyi-cloudtrail-${source.id.slice(0, 8)}`),
|
|
99
|
+
awsCreateNewTrail: source.awsCreateNewTrail !== false, // default true
|
|
100
|
+
awsDeploymentStatus: String(source.awsDeploymentStatus || "not_started"),
|
|
101
|
+
awsDeploymentStatusReason: source.awsDeploymentStatusReason ?? null,
|
|
102
|
+
awsStackId: source.awsStackId ?? null,
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
return res.status(500).json({ ok: false, error: e.message || "Failed to load CloudTrail setup" });
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
/**
|
|
111
|
+
* GET /:id/aws/cloudtrail/console-deploy
|
|
112
|
+
* Persists region/stackName/createNewTrail and returns all URLs needed for AWS Console quick-create.
|
|
113
|
+
*
|
|
114
|
+
* New behaviour (connector-aware):
|
|
115
|
+
* - Organizations mode: auto-resolves all accounts from the management connector;
|
|
116
|
+
* does NOT accept targetOUs/targetAccounts/targetRegions from the caller.
|
|
117
|
+
* - Standalone mode: validates that the given targetAccounts ID exists in the
|
|
118
|
+
* tenant's connector list before proceeding.
|
|
119
|
+
*/
|
|
120
|
+
async getConsoleDeploy(req, res) {
|
|
121
|
+
try {
|
|
122
|
+
const source = await sourceService.getById(req.params.id);
|
|
123
|
+
if (!source)
|
|
124
|
+
return res.status(404).json({ ok: false, error: "Source not found" });
|
|
125
|
+
if (!isCloudTrailType(source.type)) {
|
|
126
|
+
return res.status(400).json({ ok: false, error: "Source type must be cloudtrail" });
|
|
127
|
+
}
|
|
128
|
+
const tenantId = resolveTenantId(req);
|
|
129
|
+
const region = String(req.query.region || source.awsRegion || "ap-south-1").trim() || "ap-south-1";
|
|
130
|
+
const stackName = sanitizeAwsName(req.query.stackName || source.awsStackName, `meyi-cloudtrail-${source.id.slice(0, 8)}`, 128);
|
|
131
|
+
// createNewTrail: query param > stored value > default true
|
|
132
|
+
let createNewTrail;
|
|
133
|
+
if (req.query.createNewTrail !== undefined) {
|
|
134
|
+
createNewTrail = String(req.query.createNewTrail).toLowerCase() !== "false";
|
|
135
|
+
}
|
|
136
|
+
else if (source.awsCreateNewTrail !== undefined) {
|
|
137
|
+
createNewTrail = source.awsCreateNewTrail !== false;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
createNewTrail = true;
|
|
141
|
+
}
|
|
142
|
+
// Deployment mode: query param > stored value > default 'Organizations'
|
|
143
|
+
const deploymentMode = String(req.query.deploymentMode || source.awsDeploymentMode || "Organizations").trim() || "Organizations";
|
|
144
|
+
// ── Connector-aware validation ────────────────────────────────────────
|
|
145
|
+
let targetAccounts = "";
|
|
146
|
+
let targetOUs = "";
|
|
147
|
+
let managementAccountId = null;
|
|
148
|
+
let managementAccountName = null;
|
|
149
|
+
if (deploymentMode === "Organizations") {
|
|
150
|
+
// Auto-resolve via management connector — ignore any caller-supplied account targets
|
|
151
|
+
if (connectorService && tenantId) {
|
|
152
|
+
const requestedMgmtId = String(req.query.managementAccountId || "").trim();
|
|
153
|
+
const allConnectors = await connectorService.list(tenantId);
|
|
154
|
+
let mgmt = null;
|
|
155
|
+
if (requestedMgmtId) {
|
|
156
|
+
mgmt =
|
|
157
|
+
allConnectors.find((c) => c.accountId === requestedMgmtId &&
|
|
158
|
+
c.managementAccountId &&
|
|
159
|
+
c.managementAccountId === c.accountId) || allConnectors.find((c) => c.accountId === requestedMgmtId);
|
|
160
|
+
}
|
|
161
|
+
if (!mgmt) {
|
|
162
|
+
mgmt = await connectorService.getManagementConnector(tenantId);
|
|
163
|
+
}
|
|
164
|
+
if (!mgmt) {
|
|
165
|
+
return res.status(400).json({
|
|
166
|
+
ok: false,
|
|
167
|
+
error: "No management account connector found. " +
|
|
168
|
+
"Complete AWS onboarding in the Connectors section first.",
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
managementAccountId = mgmt.accountId ?? null;
|
|
172
|
+
managementAccountName = mgmt.accountName ?? null;
|
|
173
|
+
}
|
|
174
|
+
// Accept the org root ID / OU IDs from the caller (required for SERVICE_MANAGED StackSet deployment)
|
|
175
|
+
targetOUs = String(req.query.targetOUs ?? source.awsTargetOUs ?? "").trim();
|
|
176
|
+
targetAccounts = ""; // never filter by account in org mode
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
// Standalone — validate the supplied account ID against the connector list
|
|
180
|
+
const requestedAccount = String(req.query.targetAccounts ?? source.awsTargetAccounts ?? "").trim();
|
|
181
|
+
if (!requestedAccount || !/^\d{12}$/.test(requestedAccount)) {
|
|
182
|
+
return res.status(400).json({
|
|
183
|
+
ok: false,
|
|
184
|
+
error: "Standalone mode requires a valid 12-digit AWS account ID.",
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
if (connectorService && tenantId) {
|
|
188
|
+
const connector = await connectorService.findByAccountId(tenantId, requestedAccount);
|
|
189
|
+
if (!connector) {
|
|
190
|
+
return res.status(400).json({
|
|
191
|
+
ok: false,
|
|
192
|
+
error: `Account ${requestedAccount} is not in your connector list. ` +
|
|
193
|
+
"Only accounts that have been onboarded as connectors can be used for Standalone deployment.",
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
targetAccounts = requestedAccount;
|
|
198
|
+
targetOUs = "";
|
|
199
|
+
}
|
|
200
|
+
// targetRegions: always deploy to all active regions (not user-specified)
|
|
201
|
+
const targetRegions = "";
|
|
202
|
+
await sourceService.updateCloudTrailSetup(source.id, {
|
|
203
|
+
awsRegion: region,
|
|
204
|
+
awsStackName: stackName,
|
|
205
|
+
awsCreateNewTrail: createNewTrail,
|
|
206
|
+
awsDeploymentMode: deploymentMode,
|
|
207
|
+
awsTargetOUs: targetOUs || null,
|
|
208
|
+
awsTargetAccounts: targetAccounts || null,
|
|
209
|
+
awsTargetRegions: null, // always all active regions
|
|
210
|
+
});
|
|
211
|
+
const baseUrl = buildPublicBaseUrl(req);
|
|
212
|
+
const webhookPath = `/api/v1/insight/webhook/${source.webhookToken}`;
|
|
213
|
+
let webhookUrl = `${baseUrl}${webhookPath}`;
|
|
214
|
+
if (source.webhookAuthToken) {
|
|
215
|
+
const urlObj = new URL(baseUrl);
|
|
216
|
+
urlObj.username = "webhook";
|
|
217
|
+
urlObj.password = source.webhookAuthToken;
|
|
218
|
+
webhookUrl = `${urlObj.toString().replace(/\/$/, "")}${webhookPath}`;
|
|
219
|
+
}
|
|
220
|
+
const deploymentStatusPath = `/api/v1/insight/sources/${source.id}/aws/cloudtrail/deployment-status`;
|
|
221
|
+
const deploymentStatusUrl = `${baseUrl}${deploymentStatusPath}?token=${encodeURIComponent(source.webhookToken)}`;
|
|
222
|
+
const templatePath = `/api/v1/insight/sources/${source.id}/aws/cloudtrail/central-stack-template.yml`;
|
|
223
|
+
const templateUrl = `${baseUrl}${templatePath}?token=${encodeURIComponent(source.webhookToken)}`;
|
|
224
|
+
const templateDownloadUrl = templateUrl;
|
|
225
|
+
const canPrefillTemplateUrl = isAwsSupportedTemplateUrl(templateUrl);
|
|
226
|
+
const isPublicTemplateUrl = !/localhost|127\.0\.0\.1/i.test(templateUrl);
|
|
227
|
+
const quickCreateUrl = buildAwsConsoleCreateStackUrl({
|
|
228
|
+
region,
|
|
229
|
+
stackName,
|
|
230
|
+
templateUrl: canPrefillTemplateUrl ? templateUrl : null,
|
|
231
|
+
});
|
|
232
|
+
// StackSet name (predictable from the central stack name)
|
|
233
|
+
// Used by the frontend to build the "Add instances" console link
|
|
234
|
+
const stackSetName = `MeyiConnect-SecurityMonitoring-${stackName}`;
|
|
235
|
+
const encodedRegion = encodeURIComponent(region);
|
|
236
|
+
const encodedStackSetName = encodeURIComponent(stackSetName);
|
|
237
|
+
// URL to the "Add stacks to StackSet" wizard in AWS Console (no OU ID needed — wizard handles it)
|
|
238
|
+
const stackSetAddInstancesUrl = deploymentMode === "Organizations"
|
|
239
|
+
? `https://${encodedRegion}.console.aws.amazon.com/cloudformation/home?region=${encodedRegion}#/stacksets/${encodedStackSetName}/addStacks`
|
|
240
|
+
: null;
|
|
241
|
+
return res.json({
|
|
242
|
+
ok: true,
|
|
243
|
+
source: {
|
|
244
|
+
id: source.id,
|
|
245
|
+
name: source.name,
|
|
246
|
+
type: normalizeSourceType(source.type),
|
|
247
|
+
},
|
|
248
|
+
webhook: {
|
|
249
|
+
path: webhookPath,
|
|
250
|
+
url: webhookUrl,
|
|
251
|
+
},
|
|
252
|
+
deployment: {
|
|
253
|
+
method: "aws_console_cloudformation_central_stack",
|
|
254
|
+
region,
|
|
255
|
+
stackName,
|
|
256
|
+
createNewTrail,
|
|
257
|
+
deploymentMode,
|
|
258
|
+
targetOUs,
|
|
259
|
+
targetAccounts,
|
|
260
|
+
// All active regions — never user-specified
|
|
261
|
+
targetRegions: ALL_AWS_ACTIVE_REGIONS,
|
|
262
|
+
// Management account info (Organizations mode only)
|
|
263
|
+
managementAccountId,
|
|
264
|
+
managementAccountName,
|
|
265
|
+
deploymentStatusUrl,
|
|
266
|
+
templateUrl,
|
|
267
|
+
templateDownloadUrl,
|
|
268
|
+
quickCreateUrl,
|
|
269
|
+
isPublicTemplateUrl,
|
|
270
|
+
canPrefillTemplateUrl,
|
|
271
|
+
// Organizations: URL to add existing accounts via the AWS Console StackSet wizard
|
|
272
|
+
stackSetName,
|
|
273
|
+
stackSetAddInstancesUrl,
|
|
274
|
+
resources: ["cloudtrail", "s3_bucket", "sns_topic", "eventbridge_rules", "lambda", "iam_role"],
|
|
275
|
+
},
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
catch (e) {
|
|
279
|
+
return res.status(500).json({ ok: false, error: e.message || "Failed to prepare AWS Console deployment" });
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
/**
|
|
283
|
+
* POST /:id/aws/cloudtrail/console-deploy/start
|
|
284
|
+
* Sets awsDeploymentStatus = "pending" when the user opens the AWS Console quick-create URL.
|
|
285
|
+
*/
|
|
286
|
+
async markDeploymentStarted(req, res) {
|
|
287
|
+
try {
|
|
288
|
+
const source = await sourceService.getById(req.params.id);
|
|
289
|
+
if (!source)
|
|
290
|
+
return res.status(404).json({ ok: false, error: "Source not found" });
|
|
291
|
+
if (!isCloudTrailType(source.type)) {
|
|
292
|
+
return res.status(400).json({ ok: false, error: "Source type must be cloudtrail" });
|
|
293
|
+
}
|
|
294
|
+
const stackName = String(req.body?.stackName || source.awsStackName || `meyi-cloudtrail-${source.id.slice(0, 8)}`).trim();
|
|
295
|
+
const updated = await sourceService.updateCloudTrailDeployment(source.id, {
|
|
296
|
+
awsDeploymentStatus: "pending",
|
|
297
|
+
awsDeploymentStatusReason: "AWS Console stack creation opened",
|
|
298
|
+
awsStackName: stackName,
|
|
299
|
+
});
|
|
300
|
+
return res.json({
|
|
301
|
+
ok: true,
|
|
302
|
+
source: {
|
|
303
|
+
id: updated.id,
|
|
304
|
+
awsDeploymentStatus: updated.awsDeploymentStatus,
|
|
305
|
+
awsDeploymentStatusReason: updated.awsDeploymentStatusReason,
|
|
306
|
+
awsStackName: updated.awsStackName,
|
|
307
|
+
awsStackId: updated.awsStackId,
|
|
308
|
+
},
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
catch (e) {
|
|
312
|
+
return res.status(500).json({ ok: false, error: e.message || "Failed to mark deployment started" });
|
|
313
|
+
}
|
|
314
|
+
},
|
|
315
|
+
/**
|
|
316
|
+
* POST /:id/aws/cloudtrail/deployment-status?token=<webhookToken>
|
|
317
|
+
* Token-gated callback invoked by the CloudFormation custom resource Lambda after stack create/update/delete.
|
|
318
|
+
*/
|
|
319
|
+
async updateDeploymentStatus(req, res) {
|
|
320
|
+
try {
|
|
321
|
+
const source = await sourceService.getById(req.params.id);
|
|
322
|
+
if (!source)
|
|
323
|
+
return res.status(404).json({ ok: false, error: "Source not found" });
|
|
324
|
+
if (!isCloudTrailType(source.type)) {
|
|
325
|
+
return res.status(400).json({ ok: false, error: "Source type must be cloudtrail" });
|
|
326
|
+
}
|
|
327
|
+
const token = String(req.query.token || req.body?.token || "").trim();
|
|
328
|
+
if (!token || token !== String(source.webhookToken || "")) {
|
|
329
|
+
return res.status(403).json({ ok: false, error: "Invalid deployment status token" });
|
|
330
|
+
}
|
|
331
|
+
let parsedBody = req.body;
|
|
332
|
+
if (req.body?.source === "aws.cloudformation" && req.body?.detail) {
|
|
333
|
+
const detail = req.body.detail;
|
|
334
|
+
const statusDetails = detail["status-details"] || {};
|
|
335
|
+
parsedBody = {
|
|
336
|
+
operationStatus: statusDetails["detailed-status"] || statusDetails["status"],
|
|
337
|
+
reason: statusDetails["status-reason"],
|
|
338
|
+
stackId: detail["stack-set-arn"] || detail["stack-id"] || req.body.resources?.[0],
|
|
339
|
+
stackName: (detail["stack-set-arn"] || detail["stack-id"] || req.body.resources?.[0]) ? (detail["stack-set-arn"] || detail["stack-id"] || req.body.resources?.[0]).split("/")[1] : undefined
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
// Map CloudFormation StackSet status to internal status
|
|
343
|
+
const rawStatus = String(parsedBody?.operationStatus || parsedBody?.status || "").trim().toLowerCase();
|
|
344
|
+
let requestedStatus = rawStatus;
|
|
345
|
+
if (rawStatus === "succeeded" || rawStatus === "create_complete" || rawStatus === "update_complete" || rawStatus === "deployed")
|
|
346
|
+
requestedStatus = "deployed";
|
|
347
|
+
else if (rawStatus.includes("failed"))
|
|
348
|
+
requestedStatus = "failed";
|
|
349
|
+
else if (rawStatus === "delete_complete" || rawStatus === "deleted")
|
|
350
|
+
requestedStatus = "deleted";
|
|
351
|
+
const allowed = new Set(["not_started", "pending", "deployed", "failed", "deleted"]);
|
|
352
|
+
const status = allowed.has(requestedStatus) ? requestedStatus : "pending";
|
|
353
|
+
const updated = await sourceService.updateCloudTrailDeployment(source.id, {
|
|
354
|
+
awsDeploymentStatus: status,
|
|
355
|
+
awsDeploymentStatusReason: String(parsedBody?.reason || "").trim() || null,
|
|
356
|
+
awsStackId: String(parsedBody?.stackId || "").trim() || null,
|
|
357
|
+
awsStackName: String(parsedBody?.stackName || source.awsStackName || "").trim() || null,
|
|
358
|
+
});
|
|
359
|
+
return res.json({
|
|
360
|
+
ok: true,
|
|
361
|
+
sourceId: updated.id,
|
|
362
|
+
awsDeploymentStatus: updated.awsDeploymentStatus,
|
|
363
|
+
awsDeploymentStatusReason: updated.awsDeploymentStatusReason,
|
|
364
|
+
awsStackId: updated.awsStackId,
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
catch (e) {
|
|
368
|
+
return res.status(500).json({ ok: false, error: e.message || "Failed to update deployment status" });
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
/**
|
|
372
|
+
* GET /:id/aws/cloudtrail/central-stack-template.yml?token=<webhookToken>
|
|
373
|
+
* Token-gated download of the CloudFormation central-stack template with substitutions applied.
|
|
374
|
+
* The `?token=` param allows CFN to fetch the template without auth headers.
|
|
375
|
+
*/
|
|
376
|
+
async downloadTemplate(req, res) {
|
|
377
|
+
try {
|
|
378
|
+
const source = await sourceService.getById(req.params.id);
|
|
379
|
+
if (!source)
|
|
380
|
+
return res.status(404).json({ ok: false, error: "Source not found" });
|
|
381
|
+
if (!isCloudTrailType(source.type)) {
|
|
382
|
+
return res.status(400).json({ ok: false, error: "Source type must be cloudtrail" });
|
|
383
|
+
}
|
|
384
|
+
const token = String(req.query.token || "").trim();
|
|
385
|
+
if (!token || token !== String(source.webhookToken || "")) {
|
|
386
|
+
return res.status(403).json({ ok: false, error: "Invalid template token" });
|
|
387
|
+
}
|
|
388
|
+
const baseUrl = buildPublicBaseUrl(req);
|
|
389
|
+
let webhookUrl = `${baseUrl}/api/v1/insight/webhook/${source.webhookToken}`;
|
|
390
|
+
const deploymentStatusUrl = `${baseUrl}/api/v1/insight/sources/${source.id}/aws/cloudtrail/deployment-status?token=${encodeURIComponent(source.webhookToken)}`;
|
|
391
|
+
// Read from query params first (if provided by frontend during download), then fallback to database
|
|
392
|
+
const reqCreateNewTrail = req.query.createNewTrail !== undefined
|
|
393
|
+
? String(req.query.createNewTrail).toLowerCase() !== "false"
|
|
394
|
+
: undefined;
|
|
395
|
+
const createNewTrail = reqCreateNewTrail ?? (source.awsCreateNewTrail !== false); // default true
|
|
396
|
+
const reqDeploymentMode = req.query.deploymentMode ? String(req.query.deploymentMode).trim() : undefined;
|
|
397
|
+
const deploymentMode = reqDeploymentMode || source.awsDeploymentMode || 'Standalone';
|
|
398
|
+
const targetAccounts = req.query.targetAccounts !== undefined ? String(req.query.targetAccounts).trim() : (source.awsTargetAccounts || '');
|
|
399
|
+
const targetRegions = req.query.targetRegions !== undefined ? String(req.query.targetRegions).trim() : (source.awsTargetRegions || '');
|
|
400
|
+
const targetOUs = req.query.targetOUs !== undefined ? String(req.query.targetOUs).trim() : (source.awsTargetOUs || '');
|
|
401
|
+
const templateBody = buildCloudTrailCentralStackTemplate({
|
|
402
|
+
webhookUrl,
|
|
403
|
+
webhookAuthToken: source.webhookAuthToken,
|
|
404
|
+
deploymentStatusUrl,
|
|
405
|
+
createCloudTrail: createNewTrail,
|
|
406
|
+
deploymentMode,
|
|
407
|
+
targetAccounts,
|
|
408
|
+
targetRegions,
|
|
409
|
+
targetOUs,
|
|
410
|
+
});
|
|
411
|
+
res.setHeader("Content-Type", "application/yaml; charset=utf-8");
|
|
412
|
+
res.setHeader("Content-Disposition", `attachment; filename="meyi-cloudtrail-central-stack-${source.id.slice(0, 8)}.yml"`);
|
|
413
|
+
return res.status(200).send(templateBody);
|
|
414
|
+
}
|
|
415
|
+
catch (e) {
|
|
416
|
+
return res.status(500).json({ ok: false, error: e.message || "Failed to generate CloudTrail template" });
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../../src/features/sources/cloudtrail/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Router } from "express";
|
|
2
|
+
import type { createCloudTrailSourceController } from "./controller.js";
|
|
3
|
+
type CloudTrailSourceController = ReturnType<typeof createCloudTrailSourceController>;
|
|
4
|
+
export declare function registerCloudTrailSourceRoutes(router: Router, ctrl: CloudTrailSourceController): void;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../src/features/sources/cloudtrail/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAC;AAExE,KAAK,0BAA0B,GAAG,UAAU,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAEtF,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,QAM9F"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export function registerCloudTrailSourceRoutes(router, ctrl) {
|
|
2
|
+
router.get("/:id/aws/cloudtrail/setup", ctrl.getSetup.bind(ctrl));
|
|
3
|
+
router.get("/:id/aws/cloudtrail/console-deploy", ctrl.getConsoleDeploy.bind(ctrl));
|
|
4
|
+
router.post("/:id/aws/cloudtrail/console-deploy/start", ctrl.markDeploymentStarted.bind(ctrl));
|
|
5
|
+
router.post("/:id/aws/cloudtrail/deployment-status", ctrl.updateDeploymentStatus.bind(ctrl));
|
|
6
|
+
router.get("/:id/aws/cloudtrail/central-stack-template.yml", ctrl.downloadTemplate.bind(ctrl));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../../src/features/sources/cloudtrail/routes.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,8BAA8B,CAAC,MAAc,EAAE,IAAgC;IAC7F,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,GAAG,CAAC,oCAAoC,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnF,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7F,MAAM,CAAC,GAAG,CAAC,gDAAgD,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/features/sources/cloudtrail/schema.ts"],"names":[],"mappings":"AAEA,wBAAgB,mCAAmC,CAAC,WAAW,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,OA2BxF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { boolean, index, text, timestamp, uniqueIndex, uuid } from "drizzle-orm/pg-core";
|
|
2
|
+
export function createInsightCloudTrailSourceSetups(meyiconnect, insightSources) {
|
|
3
|
+
return meyiconnect.table("insight_cloudtrail_source_setups", {
|
|
4
|
+
id: uuid("id").primaryKey().defaultRandom(),
|
|
5
|
+
sourceId: uuid("source_id")
|
|
6
|
+
.notNull()
|
|
7
|
+
.references(() => insightSources.id, { onDelete: "cascade" }),
|
|
8
|
+
awsRegion: text("aws_region"),
|
|
9
|
+
awsStackName: text("aws_stack_name"),
|
|
10
|
+
awsCreateNewTrail: boolean("aws_create_new_trail").notNull().default(true),
|
|
11
|
+
awsDeploymentStatus: text("aws_deployment_status").notNull().default("not_started"),
|
|
12
|
+
awsDeploymentStatusReason: text("aws_deployment_status_reason"),
|
|
13
|
+
awsStackId: text("aws_stack_id"),
|
|
14
|
+
// Deployment configuration inputs from the onboarding wizard
|
|
15
|
+
awsDeploymentMode: text("aws_deployment_mode").default("Organizations"),
|
|
16
|
+
awsTargetOUs: text("aws_target_ous"), // comma-separated OU IDs or Root ID; null = all accounts
|
|
17
|
+
awsTargetAccounts: text("aws_target_accounts"), // comma-separated account IDs; null = all accounts in OU
|
|
18
|
+
awsTargetRegions: text("aws_target_regions"), // comma-separated region names; null = all active regions
|
|
19
|
+
createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
|
|
20
|
+
updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
|
|
21
|
+
}, (t) => [
|
|
22
|
+
uniqueIndex("insight_cloudtrail_source_setups_source_unique").on(t.sourceId),
|
|
23
|
+
index("insight_cloudtrail_source_setups_status_idx").on(t.awsDeploymentStatus),
|
|
24
|
+
]);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/features/sources/cloudtrail/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEzF,MAAM,UAAU,mCAAmC,CAAC,WAAgB,EAAE,cAAmB;IACvF,OAAO,WAAW,CAAC,KAAK,CACtB,kCAAkC,EAClC;QACE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;QAC3C,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;aACxB,OAAO,EAAE;aACT,UAAU,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;QAC/D,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;QAC7B,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC;QACpC,iBAAiB,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC1E,mBAAmB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;QACnF,yBAAyB,EAAE,IAAI,CAAC,8BAA8B,CAAC;QAC/D,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC;QAChC,6DAA6D;QAC7D,iBAAiB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;QACvE,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAa,yDAAyD;QAC1G,iBAAiB,EAAE,IAAI,CAAC,qBAAqB,CAAC,EAAG,yDAAyD;QAC1G,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAK,0DAA0D;QAC3G,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;QACjF,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;KAClF,EACD,CAAC,CAAM,EAAE,EAAE,CAAC;QACV,WAAW,CAAC,gDAAgD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5E,KAAK,CAAC,6CAA6C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;KAC/E,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const STACK_YAML = "AWSTemplateFormatVersion: '2010-09-09'\nDescription: |\n Meyi Connect Security Monitoring - Regional Events Stack.\n Deploys regional security alerting rules and SNS webhook delivery.\n\nParameters:\n Environment:\n Type: String\n Default: \"MeyiConnect\"\n Description: Environment name (used as a prefix for resource names)\n\n WebhookUrl:\n Type: String\n Description: MeyiConnect webhook URL for security alerts.\n\n CreateCloudTrail:\n Type: String\n Default: 'false'\n Description: Kept for backwards compatibility.\n\n PrimaryRegion:\n Type: String\n Default: 'us-east-1'\n Description: Kept for backwards compatibility.\n\n DeploymentMode:\n Type: String\n Default: 'Organizations'\n Description: Kept for backwards compatibility.\n\nResources:\n\n # ============================================================\n # SNS TOPIC & SUBSCRIPTION FOR ALERTS\n # ============================================================\n\n SecurityAlertsTopic:\n Type: AWS::SNS::Topic\n Properties:\n Tags:\n - Key: Project\n Value: MeyiConnect\n - Key: Created_for\n Value: L1 Security\n - Key: aws-apn-id\n Value: pc:eyl8vo7kcwv8k9qctzbathhiq\n\n SecurityAlertsTopicPolicy:\n Type: AWS::SNS::TopicPolicy\n Properties:\n Topics:\n - !Ref SecurityAlertsTopic\n PolicyDocument:\n Version: '2012-10-17'\n Statement:\n - Effect: Allow\n Principal:\n Service: events.amazonaws.com\n Action: sns:Publish\n Resource: !Ref SecurityAlertsTopic\n\n WebhookSubscription:\n Type: AWS::SNS::Subscription\n Properties:\n TopicArn: !Ref SecurityAlertsTopic\n Endpoint: !Ref WebhookUrl\n Protocol: https\n\n # ============================================================\n # EVENTBRIDGE RULES ON DEFAULT BUS\n # Regional events fire directly in this region - no forwarding needed\n # ============================================================\n\n DataAndInfrastructureSecurityRule:\n Type: AWS::Events::Rule\n DependsOn: SecurityAlertsTopicPolicy\n Properties:\n Tags:\n - Key: Project\n Value: MeyiConnect\n - Key: Created_for\n Value: L1 Security\n - Key: aws-apn-id\n Value: pc:eyl8vo7kcwv8k9qctzbathhiq\n Description: EC2, VPC, network, S3, and RDS configuration changes in the deployment region\n EventPattern:\n source:\n - aws.ec2\n - aws.s3\n - aws.rds\n detail-type:\n - AWS API Call via CloudTrail\n detail:\n eventSource:\n - ec2.amazonaws.com\n - s3.amazonaws.com\n - rds.amazonaws.com\n eventName:\n # EC2 & Network Events\n - StopInstances\n - RunInstances\n - RebootInstances\n - StartInstances\n - TerminateInstances\n - CreateCustomerGateway\n - DeleteCustomerGateway\n - AttachInternetGateway\n - CreateInternetGateway\n - DeleteInternetGateway\n - DetachInternetGateway\n - CreateNetworkAcl\n - DeleteNetworkAcl\n - CreateNetworkAclEntry\n - DeleteNetworkAclEntry\n - ReplaceNetworkAclEntry\n - ReplaceNetworkAclAssociation\n - AuthorizeSecurityGroupIngress\n - AuthorizeSecurityGroupEgress\n - RevokeSecurityGroupIngress\n - RevokeSecurityGroupEgress\n - ModifySecurityGroupRules\n - UpdateSecurityGroupRuleDescriptionsIngress\n - UpdateSecurityGroupRuleDescriptionsEgress\n - CreateSecurityGroup\n - DeleteSecurityGroup\n - CreateVpc\n - DeleteVpc\n - ModifyVpcAttribute\n - AcceptVpcPeeringConnection\n - CreateVpcPeeringConnection\n - DeleteVpcPeeringConnection\n - RejectVpcPeeringConnection\n - AttachClassicLinkVpc\n - DetachClassicLinkVpc\n - DisableVpcClassicLink\n - EnableVpcClassicLink\n - ModifyImageAttribute\n - ModifySnapshotAttribute\n - ModifyInstanceAttribute\n - ImportKeyPair\n - CreateKeyPair\n - DisableEbsEncryptionByDefault\n - DeleteFlowLogs\n # S3 Events\n - PutBucketPublicAccessBlock\n - DeletePublicAccessBlock\n - PutBucketPolicy\n - DeleteBucketPolicy\n - PutBucketAcl\n - PutBucketEncryption\n - DeleteBucketEncryption\n - DeleteBucket\n # RDS Events\n - ModifyDBInstance\n - ModifyDBSnapshotAttribute\n - DeleteDBInstance\n - DeleteDBClusterSnapshot\n - RestoreDBInstanceFromDBSnapshot\n State: ENABLED\n Targets:\n - Arn: !Ref SecurityAlertsTopic\n Id: SNSTarget\n\n OperationsAndSecretsSecurityRule:\n Type: AWS::Events::Rule\n DependsOn: SecurityAlertsTopicPolicy\n Properties:\n Tags:\n - Key: Project\n Value: MeyiConnect\n - Key: Created_for\n Value: L1 Security\n - Key: aws-apn-id\n Value: pc:eyl8vo7kcwv8k9qctzbathhiq\n Description: Lambda, SSM, Secrets Manager, and KMS configuration/management events\n EventPattern:\n source:\n - aws.lambda\n - aws.ssm\n - aws.secretsmanager\n - aws.kms\n detail-type:\n - AWS API Call via CloudTrail\n detail:\n eventSource:\n - lambda.amazonaws.com\n - ssm.amazonaws.com\n - secretsmanager.amazonaws.com\n - kms.amazonaws.com\n eventName:\n # Lambda, SSM, Secrets Manager\n - AddPermission\n - CreateFunction\n - UpdateFunctionCode\n - CreateEventSourceMapping\n - SendCommand\n - StartSession\n - PutParameter\n - DeleteParameter\n - DeleteSecret\n - PutResourcePolicy\n # KMS\n - ScheduleKeyDeletion\n - DisableKey\n - DisableKeyRotation\n - PutKeyPolicy\n - DeleteAlias\n - CancelKeyDeletion\n State: ENABLED\n Targets:\n - Arn: !Ref SecurityAlertsTopic\n Id: SNSTarget\n\n AuditAndTamperingSecurityRule:\n Type: AWS::Events::Rule\n DependsOn: SecurityAlertsTopicPolicy\n Properties:\n Tags:\n - Key: Project\n Value: MeyiConnect\n - Key: Created_for\n Value: L1 Security\n - Key: aws-apn-id\n Value: pc:eyl8vo7kcwv8k9qctzbathhiq\n Description: CloudTrail, GuardDuty, Security Hub, and Config auditing or tampering events\n EventPattern:\n source:\n - aws.cloudtrail\n - aws.securityhub\n - aws.guardduty\n - aws.config\n detail-type:\n - AWS API Call via CloudTrail\n detail:\n eventSource:\n - cloudtrail.amazonaws.com\n - securityhub.amazonaws.com\n - guardduty.amazonaws.com\n - config.amazonaws.com\n eventName:\n # CloudTrail\n - CreateTrail\n - UpdateTrail\n - DeleteTrail\n - StartLogging\n - StopLogging\n - PutEventSelectors\n - DeleteEventDataStore\n # Security Services Tampering\n - BatchDisableStandards\n - DeleteMembers\n - DisassociateMembers\n - DeleteDetector\n - UpdateDetector\n - CreateFilter\n - StopMonitoringMembers\n - DisableSecurityHub\n - StopConfigurationRecorder\n - DeleteConfigurationRecorder\n - DeleteDeliveryChannel\n State: ENABLED\n Targets:\n - Arn: !Ref SecurityAlertsTopic\n Id: SNSTarget\n\n ControlTowerManagedRule:\n Type: AWS::Events::Rule\n DependsOn: SecurityAlertsTopicPolicy\n Properties:\n Tags:\n - Key: Project\n Value: MeyiConnect\n - Key: Created_for\n Value: L1 Security\n - Key: aws-apn-id\n Value: pc:eyl8vo7kcwv8k9qctzbathhiq\n Description: Security Hub findings imported by AWS Control Tower\n EventPattern:\n source:\n - aws.securityhub\n detail-type:\n - Security Hub Findings - Imported\n detail:\n findings:\n Compliance:\n AssociatedStandards:\n StandardsId:\n - prefix: standards/service-managed-aws-control-tower\n State: ENABLED\n Targets:\n - Arn: !Ref SecurityAlertsTopic\n Id: SNSTarget\n\n# ============================================================\n# OUTPUTS\n# ============================================================\n\nOutputs:\n SecurityAlertsTopicArn:\n Description: ARN of the regional security alerts SNS topic\n Value: !Ref SecurityAlertsTopic";
|
|
2
|
+
export declare const GLOBAL_STACK_YAML = "AWSTemplateFormatVersion: '2010-09-09'\nDescription: |\n Meyi Connect Security Monitoring - Global Events Stack (us-east-1). Fully independent of\n the regional Central Stack. Captures IAM, Root Login, Console Login Failure, and AWS Health\n events (all global services that only fire in us-east-1) and delivers them directly to the\n Meyi Connect webhook via Amazon SNS. No cross-region forwarding,\n no shared resources with any other stack.\n\nParameters:\n Environment:\n Type: String\n Default: \"MeyiConnect\"\n Description: Environment name (used as a prefix for resource names)\n\n WebhookUrl:\n Type: String\n Description: MeyiConnect webhook URL for global security alerts.\n\n CreateCloudTrail:\n Type: String\n Default: 'false'\n Description: Dummy parameter for compatibility with meyi-security-monitoring.yaml.\n\n PrimaryRegion:\n Type: String\n Default: 'us-east-1'\n Description: Dummy parameter for compatibility with meyi-security-monitoring.yaml.\n\n DeploymentMode:\n Type: String\n Default: 'Organizations'\n AllowedValues:\n - 'Organizations'\n - 'Standalone'\n Description: Whether this is deployed via AWS Organizations or as a standalone account.\n\nResources:\n\n # ============================================================\n # SNS TOPIC & SUBSCRIPTION FOR GLOBAL ALERTS\n # ============================================================\n\n GlobalSecurityAlertsTopic:\n Type: AWS::SNS::Topic\n Properties:\n Tags:\n - Key: Project\n Value: MeyiConnect\n - Key: Created_for\n Value: L1 Security\n - Key: aws-apn-id\n Value: pc:eyl8vo7kcwv8k9qctzbathhiq\n\n GlobalSecurityAlertsTopicPolicy:\n Type: AWS::SNS::TopicPolicy\n Properties:\n Topics:\n - !Ref GlobalSecurityAlertsTopic\n PolicyDocument:\n Version: '2012-10-17'\n Statement:\n - Effect: Allow\n Principal:\n Service: events.amazonaws.com\n Action: sns:Publish\n Resource: !Ref GlobalSecurityAlertsTopic\n\n WebhookSubscription:\n Type: AWS::SNS::Subscription\n Properties:\n TopicArn: !Ref GlobalSecurityAlertsTopic\n Endpoint: !Ref WebhookUrl\n Protocol: https\n\n # ============================================================\n # EVENTBRIDGE RULES - GLOBAL EVENTS\n # IAM, Root Login, Console Login, Health, and Organizations all fire only in us-east-1\n # ============================================================\n\n IAMAndOrganizationsSecurityEventsRule:\n Type: AWS::Events::Rule\n DependsOn: GlobalSecurityAlertsTopicPolicy\n Properties:\n Tags:\n - Key: Project\n Value: MeyiConnect\n - Key: Created_for\n Value: L1 Security\n - Key: aws-apn-id\n Value: pc:eyl8vo7kcwv8k9qctzbathhiq\n Description: IAM and Organizations security configuration changes\n EventPattern:\n source:\n - aws.iam\n - aws.organizations\n detail-type:\n - AWS API Call via CloudTrail\n detail:\n eventName:\n # IAM events\n - CreateUser\n - DeleteUser\n - CreateAccessKey\n - UpdateAccessKey\n - DeleteAccessKey\n - AttachRolePolicy\n - DetachRolePolicy\n - PutUserPolicy\n - PutRolePolicy\n - UpdateAssumeRolePolicy\n - DeactivateMFADevice\n - CreateLoginProfile\n - UpdateLoginProfile\n - DeleteLoginProfile\n - CreateAccountAlias\n - DeleteAccountAlias\n - UpdateAccountPasswordPolicy\n - DeleteAccountPasswordPolicy\n - DeleteGroupPolicy\n - PutGroupPolicy\n - CreatePolicy\n - DeletePolicy\n - CreatePolicyVersion\n - DeletePolicyVersion\n - AttachUserPolicy\n - DetachUserPolicy\n - AttachGroupPolicy\n - DetachGroupPolicy\n - CreateRole\n - DeleteRole\n - CreateSAMLProvider\n - UpdateSAMLProvider\n - CreateOpenIDConnectProvider\n - UpdateOpenIDConnectProvider\n - CreateServiceSpecificCredential\n # Organizations events\n - LeaveOrganization\n - RemoveAccountFromOrganization\n - DeletePolicy\n - DetachPolicy\n - DisablePolicyType\n - UpdatePolicy\n - CreateAccount\n - InviteAccountToOrganization\n State: ENABLED\n Targets:\n - Arn: !Ref GlobalSecurityAlertsTopic\n Id: SNSTarget\n\n ConsoleLoginRule:\n Type: AWS::Events::Rule\n DependsOn: GlobalSecurityAlertsTopicPolicy\n Properties:\n Tags:\n - Key: Project\n Value: MeyiConnect\n - Key: Created_for\n Value: L1 Security\n - Key: aws-apn-id\n Value: pc:eyl8vo7kcwv8k9qctzbathhiq\n Description: Root login, failed console logins, and MFA-not-used console login attempts\n EventPattern:\n detail-type:\n - AWS Console Sign In via CloudTrail\n detail:\n eventName:\n - ConsoleLogin\n $or:\n - userIdentity:\n type:\n - Root\n responseElements:\n ConsoleLogin:\n - Success\n - responseElements:\n ConsoleLogin:\n - Failure\n - responseElements:\n ConsoleLogin:\n - Success\n additionalEventData:\n MFAUsed:\n - \"No\"\n State: ENABLED\n Targets:\n - Arn: !Ref GlobalSecurityAlertsTopic\n Id: SNSTarget\n\n HealthEventsRule:\n Type: AWS::Events::Rule\n DependsOn: GlobalSecurityAlertsTopicPolicy\n Properties:\n Tags:\n - Key: Project\n Value: MeyiConnect\n - Key: Created_for\n Value: L1 Security\n - Key: aws-apn-id\n Value: pc:eyl8vo7kcwv8k9qctzbathhiq\n Description: AWS Health notifications\n EventPattern:\n source:\n - aws.health\n detail-type:\n - AWS Health Event\n State: ENABLED\n Targets:\n - Arn: !Ref GlobalSecurityAlertsTopic\n Id: SNSTarget\n\n RootAPICallsRule:\n Type: AWS::Events::Rule\n DependsOn: GlobalSecurityAlertsTopicPolicy\n Properties:\n Tags:\n - Key: Project\n Value: MeyiConnect\n - Key: Created_for\n Value: L1 Security\n - Key: aws-apn-id\n Value: pc:eyl8vo7kcwv8k9qctzbathhiq\n Description: Capture any API call made by the Root user account in us-east-1\n EventPattern:\n detail-type:\n - AWS API Call via CloudTrail\n detail:\n userIdentity:\n type:\n - Root\n State: ENABLED\n Targets:\n - Arn: !Ref GlobalSecurityAlertsTopic\n Id: SNSTarget\n\n# ============================================================\n# OUTPUTS\n# ============================================================\n\nOutputs:\n TopicArn:\n Description: Global security alerts SNS Topic ARN\n Value: !Ref GlobalSecurityAlertsTopic\n\n RulesDeployed:\n Description: Rules deployed in this stack\n Value: IAMAndOrganizationsSecurityEvents, ConsoleLogin, HealthEvents, RootAPICalls";
|
|
3
|
+
//# sourceMappingURL=stackTemplates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackTemplates.d.ts","sourceRoot":"","sources":["../../../../src/features/sources/cloudtrail/stackTemplates.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,+kSA4Sa,CAAC;AAErC,eAAO,MAAM,iBAAiB,u6OAqPyD,CAAC"}
|