cfn-guardian 0.11.0 → 0.11.2

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: 597eff7904e03dd773f5d3b2c5e9928b03ce3081f76c7dd0cf33d95e0020af3e
4
- data.tar.gz: 97ad25a41db6e7c6b88d4afd5c02560a2a114e6343ad27a001ca4dde87eeef97
3
+ metadata.gz: df845cc5dda684abf92cc6b71c4f285f370026389fe494510ecf5b6bca5062a8
4
+ data.tar.gz: 5549dd5b6070d88c8fe153aab86b15890d61cea88bfe650fd41cd9e2497b0dfb
5
5
  SHA512:
6
- metadata.gz: e8f6556b639e720418edf32faf4e19e1421636ef9835e85b2f6a61de40a26712affd4d4d9f63f4d1e83f6fad6da1461c7ffcd7fb845a16f4dfffda8c285b7853
7
- data.tar.gz: '068ddd35b4996594a05189ca9d6c3c232e362c951b37405e2ed9dbb0f747b77967637595a4f584177404814a77fe48268a71ce484621c42903723326bb6a0e1f'
6
+ metadata.gz: 1dee7c9fff0a49ffcfaf4455912ce6b324f34b79323a816660e0573840a9c35b1b2229b1e8fbed5460b2dd496802eb1b45ddecd1dbf604928b3c080c54de82b0
7
+ data.tar.gz: 82d325e4b19e862eee2b28c11acdfbedc0d96d7fbcaf392cb87642c42d2f31fd0a589b19abfe08de85e117e510ad02543bc169986e2121cb182c1b198eb7b7c1
@@ -39,6 +39,8 @@ Resources:
39
39
  File: file.txt
40
40
  # optionally check for a regex match pattern in the body of the file
41
41
  FileBodyMatch: ok
42
+ # optionally override the default connection timeout of 10 seconds
43
+ Timeout: 10
42
44
  ```
43
45
 
44
46
  ## Private SFTP Check
@@ -70,4 +72,5 @@ Resources:
70
72
  PrivateKeyPass: /ssm/path/privatekey/password
71
73
  File: file.txt
72
74
  FileBodyMatch: ok
75
+ Timeout: 10
73
76
  ```
@@ -189,7 +189,7 @@ module CfnGuardian
189
189
  @name = 'SFTPCheck'
190
190
  @package = 'sftp-check'
191
191
  @handler = 'handler.sftp_check'
192
- @version = '987e71f2607347e13e3f156535059d6d3ce1ceed'
192
+ @version = '901a63a0b9bbb4f09d1efae7049b20de4a1a22e2'
193
193
  @runtime = 'python3.7'
194
194
  end
195
195
  end
@@ -287,6 +287,7 @@ module CfnGuardian
287
287
  @private_key_pass = resource.fetch('PrivateKeyPass', nil)
288
288
  @file = resource.fetch('File', nil)
289
289
  @file_regex_match = resource.fetch('FileRegexMatch', nil)
290
+ @timeout = resource.fetch('Timeout', nil)
290
291
  end
291
292
 
292
293
  def payload
@@ -301,6 +302,7 @@ module CfnGuardian
301
302
  payload['PRIVATEKEY_PASSWORD'] = @private_key_pass unless @private_key_pass.nil?
302
303
  payload['FILE'] = @file unless @file.nil?
303
304
  payload['FILE_REGEX_MATCH'] = @file_regex_match unless @file_regex_match.nil?
305
+ payload['TIMEOUT'] = @timeout unless @timeout.nil?
304
306
  return payload.to_json
305
307
  end
306
308
 
@@ -35,39 +35,42 @@ module CfnGuardian
35
35
  end
36
36
 
37
37
  class RDSEventSubscription < BaseEventSubscription
38
- attr_accessor :source_id, :rds_event_category, :message
38
+ attr_accessor :event_id
39
39
 
40
40
  def initialize(resource)
41
41
  super(resource)
42
42
  @source = 'aws.rds'
43
- @detail_type = 'RDS DB Instance Event'
44
- @source_id = ''
45
- @rds_event_category = ''
46
- @message = ''
43
+ @event_id = nil
47
44
  end
48
45
 
49
46
  def detail
50
- return {
51
- EventCategories: [@rds_event_category],
52
- SourceType: [@source_type],
53
- SourceIdentifier: ["rds:#{@resource_id}"],
54
- Message: [@message]
55
- }
47
+ if @event_id.nil?
48
+ raise "#{self.class} missing `EventID` property"
49
+ end
50
+
51
+ return { EventID: [@event_id] }
56
52
  end
57
53
  end
58
54
 
59
55
  class RDSInstanceEventSubscription < RDSEventSubscription
60
56
  def initialize(resource)
61
57
  super(resource)
62
- @source_type = 'DB_INSTANCE'
58
+ @resource_arn = "arn:aws:rds:${AWS::Region}:${AWS::AccountId}:db:#{@resource_id}"
63
59
  end
64
60
  end
65
61
 
66
62
  class RDSClusterEventSubscription < RDSEventSubscription
67
63
  def initialize(resource)
68
64
  super(resource)
69
- @detail_type = 'RDS DB Cluster Event'
70
- @source_type = 'DB_CLUSTER'
65
+ @resource_arn = "arn:aws:rds:${AWS::Region}:${AWS::AccountId}:cluster:#{@resource_id}"
66
+ end
67
+ end
68
+
69
+
70
+ class RDSClusterInstanceEventSubscription < RDSEventSubscription
71
+ def initialize(resource)
72
+ super(resource)
73
+ @resource_arn = "arn:aws:rds:${AWS::Region}:${AWS::AccountId}:db:#{@resource_id}"
71
74
  end
72
75
  end
73
76
 
@@ -5,20 +5,15 @@ module CfnGuardian::Resource
5
5
  alarm = CfnGuardian::Models::CloudFrontDistributionAlarm.new(@resource)
6
6
  alarm.name = '4xxErrorRate'
7
7
  alarm.metric_name = '4xxErrorRate'
8
- alarm.threshold = 2
9
- alarm.statistic = 'Sum'
8
+ alarm.threshold = 10
9
+ alarm.statistic = 'Average'
10
10
  @alarms.push(alarm)
11
11
 
12
12
  alarm = CfnGuardian::Models::CloudFrontDistributionAlarm.new(@resource)
13
13
  alarm.name = '5xxErrorRate'
14
14
  alarm.metric_name = '5xxErrorRate'
15
- alarm.threshold = 5
16
- @alarms.push(alarm)
17
-
18
- alarm = CfnGuardian::Models::CloudFrontDistributionAlarm.new(@resource)
19
- alarm.name = 'TotalErrorRate'
20
- alarm.metric_name = 'TotalErrorRate'
21
- alarm.threshold = 5
15
+ alarm.statistic = 'Average'
16
+ alarm.threshold = 10
22
17
  @alarms.push(alarm)
23
18
  end
24
19
 
@@ -4,15 +4,22 @@ module CfnGuardian::Resource
4
4
  def default_event_subscriptions()
5
5
  event_subscription = CfnGuardian::Models::RDSClusterEventSubscription.new(@resource)
6
6
  event_subscription.name = 'FailoverFailed'
7
- event_subscription.rds_event_category = 'failover'
8
- event_subscription.message = 'A failover for the DB cluster has failed.'
7
+ event_subscription.event_id = 'RDS-EVENT-0069'
9
8
  @event_subscriptions.push(event_subscription)
10
9
 
11
10
  event_subscription = CfnGuardian::Models::RDSClusterEventSubscription.new(@resource)
12
11
  event_subscription.name = 'FailoverFinished'
13
- event_subscription.rds_event_category = 'failover'
14
- event_subscription.message = 'A failover for the DB cluster has finished.'
15
- event_subscription.enabled = false
12
+ event_subscription.event_id = 'RDS-EVENT-0071'
13
+ @event_subscriptions.push(event_subscription)
14
+
15
+ event_subscription = CfnGuardian::Models::RDSClusterEventSubscription.new(@resource)
16
+ event_subscription.name = 'FailoverStartedSameAZ'
17
+ event_subscription.event_id = 'RDS-EVENT-0072'
18
+ @event_subscriptions.push(event_subscription)
19
+
20
+ event_subscription = CfnGuardian::Models::RDSClusterEventSubscription.new(@resource)
21
+ event_subscription.name = 'FailoverStartedDifferentAZ'
22
+ event_subscription.event_id = 'RDS-EVENT-0073'
16
23
  @event_subscriptions.push(event_subscription)
17
24
  end
18
25
 
@@ -25,6 +25,23 @@ module CfnGuardian::Resource
25
25
  alarm.evaluation_periods = 10
26
26
  @alarms.push(alarm)
27
27
  end
28
+
29
+ def default_event_subscriptions()
30
+ event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
31
+ event_subscription.name = 'MasterPasswordReset'
32
+ event_subscription.event_id = 'RDS-EVENT-0016'
33
+ @event_subscriptions.push(event_subscription)
34
+
35
+ event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
36
+ event_subscription.name = 'MasterPasswordResetFailure'
37
+ event_subscription.event_id = 'RDS-EVENT-0067'
38
+ @event_subscriptions.push(event_subscription)
39
+
40
+ event_subscription = CfnGuardian::Models::RDSClusterInstanceEventSubscription.new(@resource)
41
+ event_subscription.name = 'AuroraStorageLow'
42
+ event_subscription.event_id = 'RDS-EVENT-0227'
43
+ @event_subscriptions.push(event_subscription)
44
+ end
28
45
 
29
46
  end
30
47
  end
@@ -57,71 +57,100 @@ module CfnGuardian::Resource
57
57
  def default_event_subscriptions()
58
58
  event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
59
59
  event_subscription.name = 'MasterPasswordReset'
60
- event_subscription.rds_event_category = 'configuration change'
61
- event_subscription.message = 'The master password for the DB instance has been reset.'
60
+ event_subscription.event_id = 'RDS-EVENT-0016'
62
61
  @event_subscriptions.push(event_subscription)
63
62
 
64
63
  event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
65
64
  event_subscription.name = 'MasterPasswordResetFailure'
66
- event_subscription.rds_event_category = 'configuration change'
67
- event_subscription.message = 'An attempt to reset the master password for the DB instance has failed.'
65
+ event_subscription.event_id = 'RDS-EVENT-0067'
68
66
  @event_subscriptions.push(event_subscription)
69
67
 
70
68
  event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
71
69
  event_subscription.name = 'Deletion'
72
- event_subscription.rds_event_category = 'deletion'
73
- event_subscription.message = 'The DB instance has been deleted.'
70
+ event_subscription.event_id = 'RDS-EVENT-0003'
71
+ @event_subscriptions.push(event_subscription)
72
+
73
+ event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
74
+ event_subscription.name = 'StorageFullShutDown'
75
+ event_subscription.event_id = 'RDS-EVENT-0221'
76
+ @event_subscriptions.push(event_subscription)
77
+
78
+ event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
79
+ event_subscription.name = 'StorageCapacityLow'
80
+ event_subscription.event_id = 'RDS-EVENT-0222'
81
+ @event_subscriptions.push(event_subscription)
82
+
83
+ event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
84
+ event_subscription.name = 'InvalidState'
85
+ event_subscription.event_id = 'RDS-EVENT-0219'
86
+ @event_subscriptions.push(event_subscription)
87
+
88
+ event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
89
+ event_subscription.name = 'StorageScalingReachedThreshold'
90
+ event_subscription.event_id = 'RDS-EVENT-0224'
91
+ @event_subscriptions.push(event_subscription)
92
+
93
+ event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
94
+ event_subscription.name = 'StorageScalingFailed'
95
+ event_subscription.event_id = 'RDS-EVENT-0223'
96
+ @event_subscriptions.push(event_subscription)
97
+
98
+ event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
99
+ event_subscription.name = 'MultiAZStandByFailoverStarted'
100
+ event_subscription.event_id = 'RDS-EVENT-0013'
101
+ @event_subscriptions.push(event_subscription)
102
+
103
+ event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
104
+ event_subscription.name = 'MultiAZStandByFailoverCompleted'
105
+ event_subscription.event_id = 'RDS-EVENT-0015'
74
106
  @event_subscriptions.push(event_subscription)
75
107
 
76
108
  event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
77
109
  event_subscription.name = 'MultiAZFailoverStarted'
78
- event_subscription.rds_event_category = 'failover'
79
- event_subscription.message = 'A Multi-AZ failover that resulted in the promotion of a standby instance has started.'
110
+ event_subscription.event_id = 'RDS-EVENT-0050'
111
+ @event_subscriptions.push(event_subscription)
112
+
113
+ event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
114
+ event_subscription.name = 'MultiAZFailoverCompleted'
115
+ event_subscription.event_id = 'RDS-EVENT-0049'
80
116
  @event_subscriptions.push(event_subscription)
81
117
 
82
118
  event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
83
- event_subscription.name = 'MultiAZFailoverComplete'
84
- event_subscription.rds_event_category = 'failover'
85
- event_subscription.message = 'A Multi-AZ failover has completed.'
119
+ event_subscription.name = 'NotAttemptingFailover'
120
+ event_subscription.event_id = 'RDS-EVENT-0034'
86
121
  @event_subscriptions.push(event_subscription)
87
122
 
88
123
  event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
89
124
  event_subscription.name = 'DBFailure'
90
- event_subscription.rds_event_category = 'failure'
91
- event_subscription.message = 'The DB instance has failed due to an incompatible configuration or an underlying storage issue. Begin a point-in-time-restore for the DB instance.'
125
+ event_subscription.event_id = 'RDS-EVENT-0031'
92
126
  @event_subscriptions.push(event_subscription)
93
127
 
94
128
  event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
95
129
  event_subscription.name = 'TableCountExceedsRecommended'
96
- event_subscription.rds_event_category = 'notification'
97
- event_subscription.message = 'The number of tables you have for your DB instance exceeds the recommended best practices for Amazon RDS.'
130
+ event_subscription.event_id = 'RDS-EVENT-0055'
98
131
  @event_subscriptions.push(event_subscription)
99
132
 
100
133
  event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
101
134
  event_subscription.name = 'DatabasesCountExceedsRecommended'
102
- event_subscription.rds_event_category = 'notification'
103
- event_subscription.message = 'The number of databases you have for your DB instance exceeds the recommended best practices for Amazon RDS.'
135
+ event_subscription.event_id = 'RDS-EVENT-0056'
104
136
  @event_subscriptions.push(event_subscription)
105
137
 
106
138
  event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
107
139
  event_subscription.name = 'ReplicationFailure'
108
140
  event_subscription.enabled = false
109
- event_subscription.rds_event_category = 'read replica'
110
- event_subscription.message = 'An error has occurred in the read replication process.'
141
+ event_subscription.event_id = 'RDS-EVENT-0045'
111
142
  @event_subscriptions.push(event_subscription)
112
143
 
113
144
  event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
114
145
  event_subscription.name = 'ReplicationTerminated'
115
146
  event_subscription.enabled = false
116
- event_subscription.rds_event_category = 'read replica'
117
- event_subscription.message = 'Replication on the read replica was terminated.'
147
+ event_subscription.event_id = 'RDS-EVENT-0057'
118
148
  @event_subscriptions.push(event_subscription)
119
149
 
120
150
  event_subscription = CfnGuardian::Models::RDSInstanceEventSubscription.new(@resource)
121
151
  event_subscription.name = 'ReplicationStopped'
122
152
  event_subscription.enabled = false
123
- event_subscription.rds_event_category = 'read replica'
124
- event_subscription.message = 'Replication on the read replica was manually stopped.'
153
+ event_subscription.event_id = 'RDS-EVENT-0062'
125
154
  @event_subscriptions.push(event_subscription)
126
155
  end
127
156
 
@@ -112,7 +112,7 @@ module CfnGuardian
112
112
 
113
113
  def add_event_subscription(subscription)
114
114
  event_pattern = {}
115
- event_pattern['detail-type'] = [subscription.detail_type]
115
+ event_pattern['detail-type'] = [subscription.detail_type] unless subscription.detail_type.empty?
116
116
  event_pattern['source'] = [subscription.source]
117
117
  event_pattern['resources'] = [subscription.resource_arn] unless subscription.resource_arn.empty?
118
118
  event_pattern['detail'] = subscription.detail unless subscription.detail.empty?
@@ -1,4 +1,4 @@
1
1
  module CfnGuardian
2
- VERSION = "0.11.0"
2
+ VERSION = "0.11.2"
3
3
  CHANGE_SET_VERSION = VERSION.gsub('.', '-').freeze
4
4
  end
data/lib/cfnguardian.rb CHANGED
@@ -215,6 +215,7 @@ module CfnGuardian
215
215
  method_option :config, aliases: :c, type: :array, desc: "yaml config files", required: true
216
216
  method_option :region, aliases: :r, type: :string, desc: "set the AWS region"
217
217
  method_option :tags, type: :hash, desc: "additional tags on the cloudformation stack"
218
+ method_option :check_resources_exist, type: :boolean, default: true, desc: "check each resource exists in the aws account"
218
219
 
219
220
  def tag_alarms
220
221
  set_log_level(options[:debug])
@@ -233,7 +234,7 @@ module CfnGuardian
233
234
  tags[:'guardian:config:yaml'] = config
234
235
 
235
236
  logger.info "tagging alarms from config file #{config}"
236
- compiler = CfnGuardian::Compile.new(config)
237
+ compiler = CfnGuardian::Compile.new(config, options[:check_resources_exist])
237
238
  compiler.get_resources
238
239
  alarms = compiler.alarms
239
240
  global_tags = compiler.global_tags.merge(tags)
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.11.0
4
+ version: 0.11.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guslington
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-30 00:00:00.000000000 Z
11
+ date: 2023-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor