cfn-guardian 0.6.10 → 0.6.11

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 355680f054f4e9550f1709780e0b3a5d72c8773c0222bb2307621080a76728b2
4
- data.tar.gz: 840685a1d7f15409e809e71944c90e433d428123d204e38c37113444c9508d44
3
+ metadata.gz: bc62d2d0be60b4f28ab5da32207415340db06de99ee00f2a326174903e2d7a8b
4
+ data.tar.gz: d6bf90ce725692e2396ed0e337a4cd773f3b187402e2d1ab081f219bc1898c85
5
5
  SHA512:
6
- metadata.gz: 5c8bb52fbeed1bcad2b05776798e5bd21861e08631801e607b6219bb93c5c1e53993355826b9f561aa6099364af09e9e1defa0ddf93f829db325499cc359ba3d
7
- data.tar.gz: eff695bda7e0e2e9325f0f7ef332f6e2c7f12a1a32ed8dabfca0a04d7c61a93c5616df8711a7daff6f64bcbbf8b3808b9d01b080334d80c163bcc2712f7431cb
6
+ metadata.gz: d9b1c3ad0dc61891ca602b2156fbd523cdccc77296d6d959a420e66d2dfbcd449983160f11e8c33b4f4380e56930eacde37f35e0d048935b5aaf969736f2fd9a
7
+ data.tar.gz: 657b0c5a4eb265e58a36173157b1850a41a6d311d471fe5f9363d18b25420d97126c219057cd22cd6b1a4456140da5abdaa539969e8ce9b6759f54808653876a
@@ -16,6 +16,7 @@ require 'cfnguardian/resources/dynamodb_table'
16
16
  require 'cfnguardian/resources/ec2_instance'
17
17
  require 'cfnguardian/resources/ecs_cluster'
18
18
  require 'cfnguardian/resources/ecs_service'
19
+ require 'cfnguardian/resources/eks_container_insights'
19
20
  require 'cfnguardian/resources/elastic_file_system'
20
21
  require 'cfnguardian/resources/elasticache_replication_group'
21
22
  require 'cfnguardian/resources/elastic_loadbalancer'
@@ -42,9 +43,11 @@ require 'cfnguardian/resources/glue'
42
43
  require 'cfnguardian/resources/step_functions'
43
44
  require 'cfnguardian/resources/vpn_tunnel'
44
45
  require 'cfnguardian/resources/vpn_connection'
46
+ require 'cfnguardian/resources/elastic_search'
45
47
  require 'cfnguardian/version'
46
48
  require 'cfnguardian/error'
47
49
 
50
+
48
51
  module CfnGuardian
49
52
  class Compile
50
53
  include Logging
@@ -28,12 +28,20 @@ Resources:
28
28
  ECSCluster:
29
29
  - Id: Default
30
30
  ECSService:
31
+ - Id: Default
32
+ Cluster: Default
33
+ EKSContainerInsightsCluster:
34
+ - Id: Default
35
+ EKSContainerInsightsNamespace:
31
36
  - Id: Default
32
37
  Cluster: Default
33
38
  ElasticFileSystem:
34
39
  - Id: Default
35
40
  ElasticLoadBalancer:
36
41
  - Id: Default
42
+ ElasticSearch:
43
+ - Id: Default
44
+ - Domain: Default
37
45
  ElastiCacheReplicationGroup:
38
46
  - Id: Default
39
47
  Http:
@@ -203,7 +203,28 @@ module CfnGuardian
203
203
  }
204
204
  end
205
205
  end
206
+
207
+ class EKSContainerInsightsClusterAlarm < BaseAlarm
208
+ def initialize(resource)
209
+ super(resource)
210
+ @group = 'EKSContainerInsightsCluster'
211
+ @namespace = 'ContainerInsights'
212
+ @dimensions = { ClusterName: resource['Id'] }
213
+ end
214
+ end
206
215
 
216
+ class EKSContainerInsightsNamespaceAlarm < BaseAlarm
217
+ def initialize(resource)
218
+ super(resource)
219
+ @group = 'EKSContainerInsightsNamespace'
220
+ @namespace = 'ContainerInsights'
221
+ @dimensions = {
222
+ ClusterName: resource['Cluster'],
223
+ Namespace: resource['Id']
224
+ }
225
+ end
226
+ end
227
+
207
228
  class ElastiCacheReplicationGroupAlarm < BaseAlarm
208
229
  def initialize(resource)
209
230
  super(resource)
@@ -212,6 +233,21 @@ module CfnGuardian
212
233
  @dimensions = { CacheClusterId: resource['Id'] }
213
234
  end
214
235
  end
236
+
237
+ class ElasticSearchAlarm < BaseAlarm
238
+ def initialize(resource)
239
+ super(resource)
240
+ @group = 'ElasticSearch'
241
+ @namespace = 'AWS/ElasticSearch'
242
+ @dimensions = { DomainName: resource['Domain'], ClientId: resource['Id']}
243
+ @comparison_operator = 'GreaterThanThreshold'
244
+ @threshold = 1
245
+ @evaluation_periods = 5
246
+ @treat_missing_data = 'breaching'
247
+ @period = 60
248
+ @data_points_to_alarm = 1
249
+ end
250
+ end
215
251
 
216
252
  class ElasticLoadBalancerAlarm < BaseAlarm
217
253
  def initialize(resource)
@@ -0,0 +1,99 @@
1
+ module CfnGuardian::Resource
2
+ class EKSContainerInsightsCluster < Base
3
+
4
+ def default_alarms
5
+
6
+ alarm = CfnGuardian::Models::EKSContainerInsightsClusterAlarm.new(@resource)
7
+ alarm.name = 'NodeCpuUtilisationBase'
8
+ alarm.metric_name = 'node_cpu_utilization'
9
+ alarm.comparison_operator = 'GreaterThanThreshold'
10
+ alarm.statistic = 'Maximum'
11
+ alarm.threshold = 75
12
+ alarm.evaluation_periods = 60
13
+ alarm.alarm_action = 'Warning'
14
+ @alarms.push(alarm)
15
+
16
+ alarm = CfnGuardian::Models::EKSContainerInsightsClusterAlarm.new(@resource)
17
+ alarm.name = 'NodeCpuUtilisationSpike'
18
+ alarm.metric_name = 'node_cpu_utilization'
19
+ alarm.comparison_operator = 'GreaterThanThreshold'
20
+ alarm.statistic = 'Maximum'
21
+ alarm.threshold = 95
22
+ alarm.evaluation_periods = 5
23
+ @alarms.push(alarm)
24
+
25
+ alarm = CfnGuardian::Models::EKSContainerInsightsClusterAlarm.new(@resource)
26
+ alarm.name = 'NodeFileSystemUtilisationCrit'
27
+ alarm.metric_name = 'node_filesystem_utilization'
28
+ alarm.comparison_operator = 'GreaterThanThreshold'
29
+ alarm.statistic = 'Maximum'
30
+ alarm.threshold = 90
31
+ alarm.evaluation_periods = 1
32
+ @alarms.push(alarm)
33
+
34
+ alarm = CfnGuardian::Models::EKSContainerInsightsClusterAlarm.new(@resource)
35
+ alarm.name = 'NodeFileSystemUtilisationWarning'
36
+ alarm.metric_name = 'node_filesystem_utilization'
37
+ alarm.comparison_operator = 'GreaterThanThreshold'
38
+ alarm.statistic = 'Maximum'
39
+ alarm.threshold = 75
40
+ alarm.evaluation_periods = 1
41
+ alarm.alarm_action = 'Warning'
42
+ @alarms.push(alarm)
43
+
44
+ alarm = CfnGuardian::Models::EKSContainerInsightsClusterAlarm.new(@resource)
45
+ alarm.name = 'NodeMemoryUtilisationBase'
46
+ alarm.metric_name = 'node_memory_utilization'
47
+ alarm.comparison_operator = 'GreaterThanThreshold'
48
+ alarm.statistic = 'Maximum'
49
+ alarm.threshold = 80
50
+ alarm.evaluation_periods = 60
51
+ alarm.alarm_action = 'Warning'
52
+ @alarms.push(alarm)
53
+
54
+ alarm = CfnGuardian::Models::EKSContainerInsightsClusterAlarm.new(@resource)
55
+ alarm.name = 'NodeMemoryUtilisationSpike'
56
+ alarm.metric_name = 'node_memory_utilization'
57
+ alarm.comparison_operator = 'GreaterThanThreshold'
58
+ alarm.statistic = 'Maximum'
59
+ alarm.threshold = 90
60
+ alarm.evaluation_periods = 5
61
+ @alarms.push(alarm)
62
+
63
+ alarm = CfnGuardian::Models::EKSContainerInsightsClusterAlarm.new(@resource)
64
+ alarm.name = 'ClusterFailedNodeCount'
65
+ alarm.metric_name = 'cluster_failed_node_count'
66
+ alarm.comparison_operator = 'GreaterThanThreshold'
67
+ alarm.statistic = 'Minimum'
68
+ alarm.threshold = 0
69
+ alarm.evaluation_periods = 1
70
+ @alarms.push(alarm)
71
+
72
+ end
73
+ end
74
+
75
+ class EKSContainerInsightsNamespace < Base
76
+
77
+ def default_alarms
78
+
79
+ alarm = CfnGuardian::Models::EKSContainerInsightsNamespaceAlarm.new(@resource)
80
+ alarm.name = 'PodCpuUtilisation'
81
+ alarm.metric_name = 'pod_cpu_utilization'
82
+ alarm.comparison_operator = 'GreaterThanThreshold'
83
+ alarm.statistic = 'Maximum'
84
+ alarm.threshold = 90
85
+ alarm.evaluation_periods = 5
86
+ @alarms.push(alarm)
87
+
88
+ alarm = CfnGuardian::Models::EKSContainerInsightsNamespaceAlarm.new(@resource)
89
+ alarm.name = 'PodMemoryUtilisation'
90
+ alarm.metric_name = 'pod_memory_utilization'
91
+ alarm.comparison_operator = 'GreaterThanThreshold'
92
+ alarm.statistic = 'Maximum'
93
+ alarm.threshold = 90
94
+ alarm.evaluation_periods = 5
95
+ @alarms.push(alarm)
96
+
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,137 @@
1
+ module CfnGuardian::Resource
2
+ class ElasticSearch < Base
3
+
4
+ def default_alarms
5
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
6
+ alarm.name = 'NodeCount'
7
+ alarm.metric_name = 'Nodes'
8
+ alarm.threshold = 3
9
+ alarm.evaluation_periods = 1440 # 24 hours
10
+ alarm.data_points_to_alarm = 1
11
+ alarm.comparison_operator = 'LessThanOrEqualToThreshold'
12
+ alarm.alarm_action = 'Critical'
13
+ alarm.enabled = false
14
+ @alarms.push(alarm)
15
+
16
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
17
+ alarm.name = 'JVMMemoryPressureWarning'
18
+ alarm.metric_name = 'JVMMemoryPressure'
19
+ alarm.threshold = 72
20
+ alarm.evaluation_periods = 5
21
+ alarm.data_points_to_alarm = 3
22
+ alarm.alarm_action = 'Warning'
23
+ @alarms.push(alarm)
24
+
25
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
26
+ alarm.name = 'JVMMemoryPressureCrit'
27
+ alarm.metric_name = 'JVMMemoryPressure'
28
+ alarm.threshold = 92
29
+ alarm.evaluation_periods = 5
30
+ alarm.alarm_action = 'Critical'
31
+ @alarms.push(alarm)
32
+
33
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
34
+ alarm.name = 'ClusterIndexWritesBlocked'
35
+ alarm.metric_name = 'ClusterIndexWritesBlocked'
36
+ alarm.threshold = 1
37
+ alarm.evaluation_periods = 5
38
+ alarm.alarm_action = 'Critical'
39
+ @alarms.push(alarm)
40
+
41
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
42
+ alarm.name = 'MasterNodeCPUUtilisationWarning'
43
+ alarm.metric_name = 'MasterCPUUtilization'
44
+ alarm.threshold = 75
45
+ alarm.evaluation_periods = 60
46
+ alarm.alarm_action = 'Warning'
47
+ @alarms.push(alarm)
48
+
49
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
50
+ alarm.name = 'MasterNodeCPUUtilisationCrit'
51
+ alarm.metric_name = 'MasterCPUUtilization'
52
+ alarm.threshold = 95
53
+ alarm.evaluation_periods = 10
54
+ alarm.alarm_action = 'Critical'
55
+ @alarms.push(alarm)
56
+
57
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
58
+ alarm.name = 'FreeStorageSpaceWarning'
59
+ alarm.metric_name = 'FreeStorageSpace'
60
+ alarm.threshold = 50000
61
+ alarm.evaluation_periods = 1
62
+ alarm.alarm_action = 'Warning'
63
+ alarm.statistic = 'Minimum'
64
+ @alarms.push(alarm)
65
+
66
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
67
+ alarm.name = 'FreeStorageSpaceCrit'
68
+ alarm.metric_name = 'FreeStorageSpace'
69
+ alarm.threshold = 25000
70
+ alarm.evaluation_periods = 1
71
+ alarm.alarm_action = 'Critical'
72
+ @alarms.push(alarm)
73
+
74
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
75
+ alarm.name = 'CPUUtilizationWarning'
76
+ alarm.metric_name = 'CPUUtilization'
77
+ alarm.threshold = 75
78
+ alarm.evaluation_periods = 15
79
+ alarm.data_points_to_alarm = 3
80
+ alarm.alarm_action = 'Warning'
81
+ alarm.statistic = 'Average'
82
+ @alarms.push(alarm)
83
+
84
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
85
+ alarm.name = 'CPUUtilizationCrit'
86
+ alarm.metric_name = 'CPUUtilization'
87
+ alarm.threshold = 95
88
+ alarm.evaluation_periods = 5
89
+ alarm.data_points_to_alarm = 3
90
+ alarm.alarm_action = 'Critical'
91
+ alarm.statistic = 'Average'
92
+ @alarms.push(alarm)
93
+
94
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
95
+ alarm.name = 'KMSKeyError'
96
+ alarm.metric_name = 'KMSKeyError'
97
+ alarm.threshold = 1
98
+ alarm.evaluation_periods = 1
99
+ alarm.alarm_action = 'Warning'
100
+ alarm.statistic = 'Minimum'
101
+ alarm.comparison_operator = 'GreaterThanOrEqualToThreshold'
102
+ @alarms.push(alarm)
103
+
104
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
105
+ alarm.name = 'KMSKeyInaccessible'
106
+ alarm.metric_name = 'KMSKeyInaccessible'
107
+ alarm.threshold = 1
108
+ alarm.evaluation_periods = 1
109
+ alarm.alarm_action = 'Critical'
110
+ alarm.statistic = 'Minimum'
111
+ alarm.comparison_operator = 'GreaterThanOrEqualToThreshold'
112
+ alarm.enabled = false
113
+ @alarms.push(alarm)
114
+
115
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
116
+ alarm.name = 'ClusterStatusRed'
117
+ alarm.metric_name = 'ClusterStatus.red'
118
+ alarm.threshold = 1
119
+ alarm.evaluation_periods = 1
120
+ alarm.alarm_action = 'Critical'
121
+ alarm.statistic = 'Minimum'
122
+ alarm.comparison_operator = 'GreaterThanOrEqualToThreshold'
123
+ @alarms.push(alarm)
124
+
125
+ alarm = CfnGuardian::Models::ElasticSearchAlarm.new(@resource)
126
+ alarm.name = 'ClusterStatusYellow'
127
+ alarm.metric_name = 'ClusterStatus.yellow'
128
+ alarm.threshold = 1
129
+ alarm.evaluation_periods = 1
130
+ alarm.alarm_action = 'Warning'
131
+ alarm.statistic = 'Minimum'
132
+ alarm.comparison_operator = 'GreaterThanOrEqualToThreshold'
133
+ @alarms.push(alarm)
134
+
135
+ end
136
+ end
137
+ end
@@ -1,4 +1,4 @@
1
1
  module CfnGuardian
2
- VERSION = "0.6.10"
2
+ VERSION = "0.6.11"
3
3
  CHANGE_SET_VERSION = VERSION.gsub('.', '-').freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfn-guardian
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.10
4
+ version: 0.6.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guslington
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-25 00:00:00.000000000 Z
11
+ date: 2021-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -285,8 +285,10 @@ files:
285
285
  - lib/cfnguardian/resources/ec2_instance.rb
286
286
  - lib/cfnguardian/resources/ecs_cluster.rb
287
287
  - lib/cfnguardian/resources/ecs_service.rb
288
+ - lib/cfnguardian/resources/eks_container_insights.rb
288
289
  - lib/cfnguardian/resources/elastic_file_system.rb
289
290
  - lib/cfnguardian/resources/elastic_loadbalancer.rb
291
+ - lib/cfnguardian/resources/elastic_search.rb
290
292
  - lib/cfnguardian/resources/elasticache_replication_group.rb
291
293
  - lib/cfnguardian/resources/glue.rb
292
294
  - lib/cfnguardian/resources/http.rb