@stacksjs/ts-cloud-core 0.1.7 → 0.1.9
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/package.json +7 -6
- package/src/advanced-features.test.ts +465 -0
- package/src/aws/cloudformation.ts +421 -0
- package/src/aws/cloudfront.ts +158 -0
- package/src/aws/credentials.test.ts +132 -0
- package/src/aws/credentials.ts +545 -0
- package/src/aws/index.ts +87 -0
- package/src/aws/s3.test.ts +188 -0
- package/src/aws/s3.ts +1088 -0
- package/src/aws/signature.test.ts +670 -0
- package/src/aws/signature.ts +1155 -0
- package/src/backup/disaster-recovery.test.ts +726 -0
- package/src/backup/disaster-recovery.ts +500 -0
- package/src/backup/index.ts +34 -0
- package/src/backup/manager.test.ts +498 -0
- package/src/backup/manager.ts +432 -0
- package/src/cicd/circleci.ts +430 -0
- package/src/cicd/github-actions.ts +424 -0
- package/src/cicd/gitlab-ci.ts +255 -0
- package/src/cicd/index.ts +8 -0
- package/src/cli/history.ts +396 -0
- package/src/cli/index.ts +10 -0
- package/src/cli/progress.ts +458 -0
- package/src/cli/repl.ts +454 -0
- package/src/cli/suggestions.ts +327 -0
- package/src/cli/table.test.ts +319 -0
- package/src/cli/table.ts +332 -0
- package/src/cloudformation/builder.test.ts +327 -0
- package/src/cloudformation/builder.ts +378 -0
- package/src/cloudformation/builders/api-gateway.ts +449 -0
- package/src/cloudformation/builders/cache.ts +334 -0
- package/src/cloudformation/builders/cdn.ts +278 -0
- package/src/cloudformation/builders/compute.ts +485 -0
- package/src/cloudformation/builders/database.ts +392 -0
- package/src/cloudformation/builders/functions.ts +343 -0
- package/src/cloudformation/builders/messaging.ts +140 -0
- package/src/cloudformation/builders/monitoring.ts +300 -0
- package/src/cloudformation/builders/network.ts +264 -0
- package/src/cloudformation/builders/queue.ts +147 -0
- package/src/cloudformation/builders/security.ts +399 -0
- package/src/cloudformation/builders/storage.ts +285 -0
- package/src/cloudformation/index.ts +30 -0
- package/src/cloudformation/types.ts +173 -0
- package/src/compliance/aws-config.ts +543 -0
- package/src/compliance/cloudtrail.ts +376 -0
- package/src/compliance/compliance.test.ts +423 -0
- package/src/compliance/guardduty.ts +446 -0
- package/src/compliance/index.ts +66 -0
- package/src/compliance/security-hub.ts +456 -0
- package/src/containers/build-optimization.ts +416 -0
- package/src/containers/containers.test.ts +508 -0
- package/src/containers/image-scanning.ts +360 -0
- package/src/containers/index.ts +9 -0
- package/src/containers/registry.ts +293 -0
- package/src/containers/service-mesh.ts +520 -0
- package/src/database/database.test.ts +762 -0
- package/src/database/index.ts +9 -0
- package/src/database/migrations.ts +444 -0
- package/src/database/performance.ts +528 -0
- package/src/database/replicas.ts +534 -0
- package/src/database/users.ts +494 -0
- package/src/dependency-graph.ts +143 -0
- package/src/deployment/ab-testing.ts +582 -0
- package/src/deployment/blue-green.ts +452 -0
- package/src/deployment/canary.ts +500 -0
- package/src/deployment/deployment.test.ts +526 -0
- package/src/deployment/index.ts +61 -0
- package/src/deployment/progressive.ts +62 -0
- package/src/dns/dns.test.ts +641 -0
- package/src/dns/dnssec.ts +315 -0
- package/src/dns/index.ts +8 -0
- package/src/dns/resolver.ts +496 -0
- package/src/dns/routing.ts +593 -0
- package/src/email/advanced/analytics.ts +445 -0
- package/src/email/advanced/index.ts +11 -0
- package/src/email/advanced/rules.ts +465 -0
- package/src/email/advanced/scheduling.ts +352 -0
- package/src/email/advanced/search.ts +412 -0
- package/src/email/advanced/shared-mailboxes.ts +404 -0
- package/src/email/advanced/templates.ts +455 -0
- package/src/email/advanced/threading.ts +281 -0
- package/src/email/analytics.ts +467 -0
- package/src/email/bounce-handling.ts +425 -0
- package/src/email/email.test.ts +431 -0
- package/src/email/handlers/__tests__/inbound.test.ts +38 -0
- package/src/email/handlers/__tests__/outbound.test.ts +37 -0
- package/src/email/handlers/converter.ts +227 -0
- package/src/email/handlers/feedback.ts +228 -0
- package/src/email/handlers/inbound.ts +169 -0
- package/src/email/handlers/outbound.ts +178 -0
- package/src/email/index.ts +15 -0
- package/src/email/reputation.ts +303 -0
- package/src/email/templates.ts +352 -0
- package/src/errors/index.test.ts +434 -0
- package/src/errors/index.ts +416 -0
- package/src/health-checks/index.ts +40 -0
- package/src/index.ts +360 -0
- package/src/intrinsic-functions.ts +118 -0
- package/src/lambda/concurrency.ts +330 -0
- package/src/lambda/destinations.ts +345 -0
- package/src/lambda/dlq.ts +425 -0
- package/src/lambda/index.ts +11 -0
- package/src/lambda/lambda.test.ts +840 -0
- package/src/lambda/layers.ts +263 -0
- package/src/lambda/versions.ts +376 -0
- package/src/lambda/vpc.ts +399 -0
- package/src/local/config.ts +114 -0
- package/src/local/index.ts +6 -0
- package/src/local/mock-aws.ts +351 -0
- package/src/modules/ai.ts +340 -0
- package/src/modules/api.ts +478 -0
- package/src/modules/auth.ts +805 -0
- package/src/modules/cache.ts +417 -0
- package/src/modules/cdn.ts +1062 -0
- package/src/modules/communication.ts +1094 -0
- package/src/modules/compute.ts +3348 -0
- package/src/modules/database.ts +554 -0
- package/src/modules/deployment.ts +1079 -0
- package/src/modules/dns.ts +337 -0
- package/src/modules/email.ts +1538 -0
- package/src/modules/filesystem.ts +515 -0
- package/src/modules/index.ts +32 -0
- package/src/modules/messaging.ts +486 -0
- package/src/modules/monitoring.ts +2086 -0
- package/src/modules/network.ts +664 -0
- package/src/modules/parameter-store.ts +325 -0
- package/src/modules/permissions.ts +1081 -0
- package/src/modules/phone.ts +494 -0
- package/src/modules/queue.ts +1260 -0
- package/src/modules/redirects.ts +464 -0
- package/src/modules/registry.ts +699 -0
- package/src/modules/search.ts +401 -0
- package/src/modules/secrets.ts +416 -0
- package/src/modules/security.ts +731 -0
- package/src/modules/sms.ts +389 -0
- package/src/modules/storage.ts +1120 -0
- package/src/modules/workflow.ts +680 -0
- package/src/multi-account/config.ts +521 -0
- package/src/multi-account/index.ts +7 -0
- package/src/multi-account/manager.ts +427 -0
- package/src/multi-region/cross-region.ts +410 -0
- package/src/multi-region/index.ts +8 -0
- package/src/multi-region/manager.ts +483 -0
- package/src/multi-region/regions.ts +435 -0
- package/src/network-security/index.ts +48 -0
- package/src/observability/index.ts +9 -0
- package/src/observability/logs.ts +522 -0
- package/src/observability/metrics.ts +460 -0
- package/src/observability/observability.test.ts +782 -0
- package/src/observability/synthetics.ts +568 -0
- package/src/observability/xray.ts +358 -0
- package/src/phone/advanced/analytics.ts +349 -0
- package/src/phone/advanced/callbacks.ts +428 -0
- package/src/phone/advanced/index.ts +8 -0
- package/src/phone/advanced/ivr-builder.ts +504 -0
- package/src/phone/advanced/recording.ts +310 -0
- package/src/phone/handlers/__tests__/incoming-call.test.ts +40 -0
- package/src/phone/handlers/incoming-call.ts +117 -0
- package/src/phone/handlers/missed-call.ts +116 -0
- package/src/phone/handlers/voicemail.ts +179 -0
- package/src/phone/index.ts +9 -0
- package/src/presets/api-backend.ts +134 -0
- package/src/presets/data-pipeline.ts +204 -0
- package/src/presets/extend.test.ts +295 -0
- package/src/presets/extend.ts +297 -0
- package/src/presets/fullstack-app.ts +144 -0
- package/src/presets/index.ts +27 -0
- package/src/presets/jamstack.ts +135 -0
- package/src/presets/microservices.ts +167 -0
- package/src/presets/ml-api.ts +208 -0
- package/src/presets/nodejs-server.ts +104 -0
- package/src/presets/nodejs-serverless.ts +114 -0
- package/src/presets/realtime-app.ts +184 -0
- package/src/presets/static-site.ts +64 -0
- package/src/presets/traditional-web-app.ts +339 -0
- package/src/presets/wordpress.ts +138 -0
- package/src/preview/github.test.ts +249 -0
- package/src/preview/github.ts +297 -0
- package/src/preview/index.ts +37 -0
- package/src/preview/manager.test.ts +440 -0
- package/src/preview/manager.ts +326 -0
- package/src/preview/notifications.test.ts +582 -0
- package/src/preview/notifications.ts +341 -0
- package/src/queue/batch-processing.ts +402 -0
- package/src/queue/dlq-monitoring.ts +402 -0
- package/src/queue/fifo.ts +342 -0
- package/src/queue/index.ts +9 -0
- package/src/queue/management.ts +428 -0
- package/src/queue/queue.test.ts +429 -0
- package/src/resource-mgmt/index.ts +39 -0
- package/src/resource-naming.ts +62 -0
- package/src/s3/index.ts +523 -0
- package/src/schema/cloud-config.schema.json +554 -0
- package/src/schema/index.ts +68 -0
- package/src/security/certificate-manager.ts +492 -0
- package/src/security/index.ts +9 -0
- package/src/security/scanning.ts +545 -0
- package/src/security/secrets-manager.ts +476 -0
- package/src/security/secrets-rotation.ts +456 -0
- package/src/security/security.test.ts +738 -0
- package/src/sms/advanced/ab-testing.ts +389 -0
- package/src/sms/advanced/analytics.ts +336 -0
- package/src/sms/advanced/campaigns.ts +523 -0
- package/src/sms/advanced/chatbot.ts +224 -0
- package/src/sms/advanced/index.ts +10 -0
- package/src/sms/advanced/link-tracking.ts +248 -0
- package/src/sms/advanced/mms.ts +308 -0
- package/src/sms/handlers/__tests__/send.test.ts +40 -0
- package/src/sms/handlers/delivery-status.ts +133 -0
- package/src/sms/handlers/receive.ts +162 -0
- package/src/sms/handlers/send.ts +174 -0
- package/src/sms/index.ts +9 -0
- package/src/stack-diff.ts +389 -0
- package/src/static-site/index.ts +85 -0
- package/src/template-builder.ts +110 -0
- package/src/template-validator.ts +574 -0
- package/src/utils/cache.ts +291 -0
- package/src/utils/diff.ts +269 -0
- package/src/utils/hash.ts +227 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/parallel.ts +294 -0
- package/src/validators/credentials.test.ts +274 -0
- package/src/validators/credentials.ts +233 -0
- package/src/validators/quotas.test.ts +434 -0
- package/src/validators/quotas.ts +217 -0
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Security Hub
|
|
3
|
+
* Centralized security and compliance view across AWS accounts
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export interface SecurityHubConfig {
|
|
7
|
+
id: string
|
|
8
|
+
enable: boolean
|
|
9
|
+
controlFindingGenerator?: 'STANDARD_CONTROL' | 'SECURITY_CONTROL'
|
|
10
|
+
enableDefaultStandards?: boolean
|
|
11
|
+
standards?: SecurityStandard[]
|
|
12
|
+
automationRules?: AutomationRule[]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface SecurityStandard {
|
|
16
|
+
id: string
|
|
17
|
+
arn: string
|
|
18
|
+
name: string
|
|
19
|
+
description: string
|
|
20
|
+
enabled: boolean
|
|
21
|
+
disabledControls?: string[]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface AutomationRule {
|
|
25
|
+
id: string
|
|
26
|
+
ruleName: string
|
|
27
|
+
description?: string
|
|
28
|
+
actions: AutomationAction[]
|
|
29
|
+
criteria: AutomationCriteria
|
|
30
|
+
ruleStatus: 'ENABLED' | 'DISABLED'
|
|
31
|
+
ruleOrder: number
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface AutomationAction {
|
|
35
|
+
type: 'FINDING_FIELDS_UPDATE'
|
|
36
|
+
findingFieldsUpdate: {
|
|
37
|
+
note?: {
|
|
38
|
+
text: string
|
|
39
|
+
updatedBy: string
|
|
40
|
+
}
|
|
41
|
+
severity?: {
|
|
42
|
+
label: 'INFORMATIONAL' | 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL'
|
|
43
|
+
}
|
|
44
|
+
workflow?: {
|
|
45
|
+
status: 'NEW' | 'NOTIFIED' | 'RESOLVED' | 'SUPPRESSED'
|
|
46
|
+
}
|
|
47
|
+
relatedFindings?: Array<{
|
|
48
|
+
productArn: string
|
|
49
|
+
id: string
|
|
50
|
+
}>
|
|
51
|
+
userDefinedFields?: Record<string, string>
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface AutomationCriteria {
|
|
56
|
+
productName?: StringFilter[]
|
|
57
|
+
companyName?: StringFilter[]
|
|
58
|
+
severityLabel?: StringFilter[]
|
|
59
|
+
resourceType?: StringFilter[]
|
|
60
|
+
resourceId?: StringFilter[]
|
|
61
|
+
recordState?: StringFilter[]
|
|
62
|
+
workflowStatus?: StringFilter[]
|
|
63
|
+
complianceStatus?: StringFilter[]
|
|
64
|
+
verificationState?: StringFilter[]
|
|
65
|
+
confidence?: NumberFilter[]
|
|
66
|
+
criticality?: NumberFilter[]
|
|
67
|
+
title?: StringFilter[]
|
|
68
|
+
description?: StringFilter[]
|
|
69
|
+
sourceUrl?: StringFilter[]
|
|
70
|
+
productFields?: MapFilter[]
|
|
71
|
+
resourceTags?: MapFilter[]
|
|
72
|
+
userDefinedFields?: MapFilter[]
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface StringFilter {
|
|
76
|
+
value: string
|
|
77
|
+
comparison: 'EQUALS' | 'PREFIX' | 'NOT_EQUALS' | 'PREFIX_NOT_EQUALS'
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface NumberFilter {
|
|
81
|
+
gte?: number
|
|
82
|
+
lte?: number
|
|
83
|
+
eq?: number
|
|
84
|
+
gt?: number
|
|
85
|
+
lt?: number
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface MapFilter {
|
|
89
|
+
key: string
|
|
90
|
+
value?: string
|
|
91
|
+
comparison: 'EQUALS' | 'NOT_EQUALS'
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Security Hub manager
|
|
96
|
+
*/
|
|
97
|
+
export class SecurityHubManager {
|
|
98
|
+
private hubs: Map<string, SecurityHubConfig> = new Map()
|
|
99
|
+
private hubCounter = 0
|
|
100
|
+
private ruleCounter = 0
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Available security standards
|
|
104
|
+
*/
|
|
105
|
+
static readonly Standards = {
|
|
106
|
+
AWS_FOUNDATIONAL_SECURITY: {
|
|
107
|
+
arn: 'arn:aws:securityhub:::ruleset/aws-foundational-security-best-practices/v/1.0.0',
|
|
108
|
+
name: 'AWS Foundational Security Best Practices',
|
|
109
|
+
description: 'AWS recommended security best practices',
|
|
110
|
+
},
|
|
111
|
+
CIS_AWS_FOUNDATIONS_1_2: {
|
|
112
|
+
arn: 'arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0',
|
|
113
|
+
name: 'CIS AWS Foundations Benchmark v1.2.0',
|
|
114
|
+
description: 'CIS AWS Foundations Benchmark v1.2.0',
|
|
115
|
+
},
|
|
116
|
+
CIS_AWS_FOUNDATIONS_1_4: {
|
|
117
|
+
arn: 'arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.4.0',
|
|
118
|
+
name: 'CIS AWS Foundations Benchmark v1.4.0',
|
|
119
|
+
description: 'CIS AWS Foundations Benchmark v1.4.0',
|
|
120
|
+
},
|
|
121
|
+
PCI_DSS: {
|
|
122
|
+
arn: 'arn:aws:securityhub:us-east-1::standards/pci-dss/v/3.2.1',
|
|
123
|
+
name: 'PCI DSS v3.2.1',
|
|
124
|
+
description: 'Payment Card Industry Data Security Standard',
|
|
125
|
+
},
|
|
126
|
+
NIST_800_53: {
|
|
127
|
+
arn: 'arn:aws:securityhub:us-east-1::standards/nist-800-53/v/5.0.0',
|
|
128
|
+
name: 'NIST SP 800-53 Rev. 5',
|
|
129
|
+
description: 'NIST Special Publication 800-53 Revision 5',
|
|
130
|
+
},
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Create Security Hub
|
|
135
|
+
*/
|
|
136
|
+
createHub(hub: Omit<SecurityHubConfig, 'id'>): SecurityHubConfig {
|
|
137
|
+
const id = `hub-${Date.now()}-${this.hubCounter++}`
|
|
138
|
+
|
|
139
|
+
const securityHub: SecurityHubConfig = {
|
|
140
|
+
id,
|
|
141
|
+
...hub,
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
this.hubs.set(id, securityHub)
|
|
145
|
+
|
|
146
|
+
return securityHub
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Create comprehensive Security Hub with all standards
|
|
151
|
+
*/
|
|
152
|
+
createComprehensiveHub(): SecurityHubConfig {
|
|
153
|
+
return this.createHub({
|
|
154
|
+
enable: true,
|
|
155
|
+
controlFindingGenerator: 'SECURITY_CONTROL',
|
|
156
|
+
enableDefaultStandards: true,
|
|
157
|
+
standards: [
|
|
158
|
+
{
|
|
159
|
+
id: 'aws-foundational',
|
|
160
|
+
...SecurityHubManager.Standards.AWS_FOUNDATIONAL_SECURITY,
|
|
161
|
+
enabled: true,
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
id: 'cis-1-4',
|
|
165
|
+
...SecurityHubManager.Standards.CIS_AWS_FOUNDATIONS_1_4,
|
|
166
|
+
enabled: true,
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
id: 'pci-dss',
|
|
170
|
+
...SecurityHubManager.Standards.PCI_DSS,
|
|
171
|
+
enabled: true,
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
})
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Create basic Security Hub
|
|
179
|
+
*/
|
|
180
|
+
createBasicHub(): SecurityHubConfig {
|
|
181
|
+
return this.createHub({
|
|
182
|
+
enable: true,
|
|
183
|
+
controlFindingGenerator: 'STANDARD_CONTROL',
|
|
184
|
+
enableDefaultStandards: true,
|
|
185
|
+
standards: [
|
|
186
|
+
{
|
|
187
|
+
id: 'aws-foundational',
|
|
188
|
+
...SecurityHubManager.Standards.AWS_FOUNDATIONAL_SECURITY,
|
|
189
|
+
enabled: true,
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
})
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Create automation rule for low severity findings
|
|
197
|
+
*/
|
|
198
|
+
createLowSeveritySuppressionRule(): AutomationRule {
|
|
199
|
+
return {
|
|
200
|
+
id: `rule-${Date.now()}-${this.ruleCounter++}`,
|
|
201
|
+
ruleName: 'Suppress Low Severity Informational Findings',
|
|
202
|
+
description: 'Automatically suppress informational findings',
|
|
203
|
+
actions: [
|
|
204
|
+
{
|
|
205
|
+
type: 'FINDING_FIELDS_UPDATE',
|
|
206
|
+
findingFieldsUpdate: {
|
|
207
|
+
workflow: {
|
|
208
|
+
status: 'SUPPRESSED',
|
|
209
|
+
},
|
|
210
|
+
note: {
|
|
211
|
+
text: 'Automatically suppressed low severity finding',
|
|
212
|
+
updatedBy: 'SecurityHub Automation',
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
],
|
|
217
|
+
criteria: {
|
|
218
|
+
severityLabel: [
|
|
219
|
+
{
|
|
220
|
+
value: 'INFORMATIONAL',
|
|
221
|
+
comparison: 'EQUALS',
|
|
222
|
+
},
|
|
223
|
+
],
|
|
224
|
+
recordState: [
|
|
225
|
+
{
|
|
226
|
+
value: 'ACTIVE',
|
|
227
|
+
comparison: 'EQUALS',
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
},
|
|
231
|
+
ruleStatus: 'ENABLED',
|
|
232
|
+
ruleOrder: 1,
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Create automation rule for specific resource types
|
|
238
|
+
*/
|
|
239
|
+
createResourceTypeNotificationRule(resourceTypes: string[]): AutomationRule {
|
|
240
|
+
return {
|
|
241
|
+
id: `rule-${Date.now()}-${this.ruleCounter++}`,
|
|
242
|
+
ruleName: 'Notify on Critical Resource Findings',
|
|
243
|
+
description: 'Set findings for critical resources to NOTIFIED status',
|
|
244
|
+
actions: [
|
|
245
|
+
{
|
|
246
|
+
type: 'FINDING_FIELDS_UPDATE',
|
|
247
|
+
findingFieldsUpdate: {
|
|
248
|
+
workflow: {
|
|
249
|
+
status: 'NOTIFIED',
|
|
250
|
+
},
|
|
251
|
+
note: {
|
|
252
|
+
text: 'Critical resource finding requires attention',
|
|
253
|
+
updatedBy: 'SecurityHub Automation',
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
],
|
|
258
|
+
criteria: {
|
|
259
|
+
resourceType: resourceTypes.map(type => ({
|
|
260
|
+
value: type,
|
|
261
|
+
comparison: 'EQUALS' as const,
|
|
262
|
+
})),
|
|
263
|
+
severityLabel: [
|
|
264
|
+
{
|
|
265
|
+
value: 'HIGH',
|
|
266
|
+
comparison: 'EQUALS',
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
value: 'CRITICAL',
|
|
270
|
+
comparison: 'EQUALS',
|
|
271
|
+
},
|
|
272
|
+
],
|
|
273
|
+
workflowStatus: [
|
|
274
|
+
{
|
|
275
|
+
value: 'NEW',
|
|
276
|
+
comparison: 'EQUALS',
|
|
277
|
+
},
|
|
278
|
+
],
|
|
279
|
+
},
|
|
280
|
+
ruleStatus: 'ENABLED',
|
|
281
|
+
ruleOrder: 2,
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Create automation rule for compliance failures
|
|
287
|
+
*/
|
|
288
|
+
createComplianceFailureRule(): AutomationRule {
|
|
289
|
+
return {
|
|
290
|
+
id: `rule-${Date.now()}-${this.ruleCounter++}`,
|
|
291
|
+
ruleName: 'Flag Compliance Failures',
|
|
292
|
+
description: 'Increase severity for compliance failures',
|
|
293
|
+
actions: [
|
|
294
|
+
{
|
|
295
|
+
type: 'FINDING_FIELDS_UPDATE',
|
|
296
|
+
findingFieldsUpdate: {
|
|
297
|
+
severity: {
|
|
298
|
+
label: 'HIGH',
|
|
299
|
+
},
|
|
300
|
+
workflow: {
|
|
301
|
+
status: 'NOTIFIED',
|
|
302
|
+
},
|
|
303
|
+
note: {
|
|
304
|
+
text: 'Compliance failure detected - requires immediate attention',
|
|
305
|
+
updatedBy: 'SecurityHub Automation',
|
|
306
|
+
},
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
],
|
|
310
|
+
criteria: {
|
|
311
|
+
complianceStatus: [
|
|
312
|
+
{
|
|
313
|
+
value: 'FAILED',
|
|
314
|
+
comparison: 'EQUALS',
|
|
315
|
+
},
|
|
316
|
+
],
|
|
317
|
+
recordState: [
|
|
318
|
+
{
|
|
319
|
+
value: 'ACTIVE',
|
|
320
|
+
comparison: 'EQUALS',
|
|
321
|
+
},
|
|
322
|
+
],
|
|
323
|
+
},
|
|
324
|
+
ruleStatus: 'ENABLED',
|
|
325
|
+
ruleOrder: 3,
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Create automation rule for false positives
|
|
331
|
+
*/
|
|
332
|
+
createFalsePositiveSuppressionRule(productName: string, titlePatterns: string[]): AutomationRule {
|
|
333
|
+
return {
|
|
334
|
+
id: `rule-${Date.now()}-${this.ruleCounter++}`,
|
|
335
|
+
ruleName: `Suppress False Positives - ${productName}`,
|
|
336
|
+
description: `Automatically suppress known false positives from ${productName}`,
|
|
337
|
+
actions: [
|
|
338
|
+
{
|
|
339
|
+
type: 'FINDING_FIELDS_UPDATE',
|
|
340
|
+
findingFieldsUpdate: {
|
|
341
|
+
workflow: {
|
|
342
|
+
status: 'SUPPRESSED',
|
|
343
|
+
},
|
|
344
|
+
note: {
|
|
345
|
+
text: 'Known false positive - automatically suppressed',
|
|
346
|
+
updatedBy: 'SecurityHub Automation',
|
|
347
|
+
},
|
|
348
|
+
},
|
|
349
|
+
},
|
|
350
|
+
],
|
|
351
|
+
criteria: {
|
|
352
|
+
productName: [
|
|
353
|
+
{
|
|
354
|
+
value: productName,
|
|
355
|
+
comparison: 'EQUALS',
|
|
356
|
+
},
|
|
357
|
+
],
|
|
358
|
+
title: titlePatterns.map(pattern => ({
|
|
359
|
+
value: pattern,
|
|
360
|
+
comparison: 'PREFIX' as const,
|
|
361
|
+
})),
|
|
362
|
+
},
|
|
363
|
+
ruleStatus: 'ENABLED',
|
|
364
|
+
ruleOrder: 10,
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Get Security Hub
|
|
370
|
+
*/
|
|
371
|
+
getHub(id: string): SecurityHubConfig | undefined {
|
|
372
|
+
return this.hubs.get(id)
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* List Security Hubs
|
|
377
|
+
*/
|
|
378
|
+
listHubs(): SecurityHubConfig[] {
|
|
379
|
+
return Array.from(this.hubs.values())
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Generate CloudFormation for Security Hub
|
|
384
|
+
*/
|
|
385
|
+
generateHubCF(hub: SecurityHubConfig): any {
|
|
386
|
+
const cf: any = {
|
|
387
|
+
Type: 'AWS::SecurityHub::Hub',
|
|
388
|
+
Properties: {},
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
if (hub.controlFindingGenerator) {
|
|
392
|
+
cf.Properties.ControlFindingGenerator = hub.controlFindingGenerator
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
if (hub.enableDefaultStandards !== undefined) {
|
|
396
|
+
cf.Properties.EnableDefaultStandards = hub.enableDefaultStandards
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
return cf
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* Generate CloudFormation for security standard subscription
|
|
404
|
+
*/
|
|
405
|
+
generateStandardCF(standard: SecurityStandard): any {
|
|
406
|
+
const cf: any = {
|
|
407
|
+
Type: 'AWS::SecurityHub::Standard',
|
|
408
|
+
Properties: {
|
|
409
|
+
StandardsArn: standard.arn,
|
|
410
|
+
},
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
if (standard.disabledControls && standard.disabledControls.length > 0) {
|
|
414
|
+
cf.Properties.DisabledStandardsControls = standard.disabledControls.map(controlId => ({
|
|
415
|
+
StandardsControlArn: controlId,
|
|
416
|
+
Reason: 'Disabled by configuration',
|
|
417
|
+
}))
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
return cf
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Generate CloudFormation for automation rule
|
|
425
|
+
*/
|
|
426
|
+
generateAutomationRuleCF(rule: AutomationRule): any {
|
|
427
|
+
return {
|
|
428
|
+
Type: 'AWS::SecurityHub::AutomationRule',
|
|
429
|
+
Properties: {
|
|
430
|
+
RuleName: rule.ruleName,
|
|
431
|
+
Description: rule.description,
|
|
432
|
+
Actions: rule.actions.map(action => ({
|
|
433
|
+
Type: action.type,
|
|
434
|
+
FindingFieldsUpdate: action.findingFieldsUpdate,
|
|
435
|
+
})),
|
|
436
|
+
Criteria: rule.criteria,
|
|
437
|
+
RuleStatus: rule.ruleStatus,
|
|
438
|
+
RuleOrder: rule.ruleOrder,
|
|
439
|
+
},
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Clear all data
|
|
445
|
+
*/
|
|
446
|
+
clear(): void {
|
|
447
|
+
this.hubs.clear()
|
|
448
|
+
this.hubCounter = 0
|
|
449
|
+
this.ruleCounter = 0
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Global Security Hub manager instance
|
|
455
|
+
*/
|
|
456
|
+
export const securityHubManager: SecurityHubManager = new SecurityHubManager()
|