cfn-guardian 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +52 -0
- data/LICENSE.txt +21 -0
- data/README.md +412 -0
- data/Rakefile +2 -0
- data/cfn-guardian.gemspec +39 -0
- data/exe/cfn-guardian +4 -0
- data/lib/cfnguardian.rb +146 -0
- data/lib/cfnguardian/compile.rb +116 -0
- data/lib/cfnguardian/deploy.rb +144 -0
- data/lib/cfnguardian/log.rb +40 -0
- data/lib/cfnguardian/models/alarm.rb +292 -0
- data/lib/cfnguardian/models/check.rb +114 -0
- data/lib/cfnguardian/models/event.rb +192 -0
- data/lib/cfnguardian/resources/amazonmq_broker.rb +45 -0
- data/lib/cfnguardian/resources/apigateway.rb +34 -0
- data/lib/cfnguardian/resources/application_targetgroup.rb +31 -0
- data/lib/cfnguardian/resources/autoscaling_group.rb +22 -0
- data/lib/cfnguardian/resources/base.rb +116 -0
- data/lib/cfnguardian/resources/cloudfront_distribution.rb +26 -0
- data/lib/cfnguardian/resources/domain_expiry.rb +30 -0
- data/lib/cfnguardian/resources/dynamodb_table.rb +48 -0
- data/lib/cfnguardian/resources/ec2_instance.rb +24 -0
- data/lib/cfnguardian/resources/ecs_cluster.rb +44 -0
- data/lib/cfnguardian/resources/ecs_service.rb +32 -0
- data/lib/cfnguardian/resources/elastic_file_system.rb +17 -0
- data/lib/cfnguardian/resources/elastic_loadbalancer.rb +26 -0
- data/lib/cfnguardian/resources/elasticache_replication_group.rb +45 -0
- data/lib/cfnguardian/resources/http.rb +49 -0
- data/lib/cfnguardian/resources/lambda.rb +38 -0
- data/lib/cfnguardian/resources/network_targetgroup.rb +31 -0
- data/lib/cfnguardian/resources/nrpe.rb +42 -0
- data/lib/cfnguardian/resources/rds_cluster_instance.rb +30 -0
- data/lib/cfnguardian/resources/rds_instance.rb +45 -0
- data/lib/cfnguardian/resources/redshift_cluster.rb +30 -0
- data/lib/cfnguardian/resources/sql.rb +37 -0
- data/lib/cfnguardian/resources/sqs_queue.rb +23 -0
- data/lib/cfnguardian/s3.rb +35 -0
- data/lib/cfnguardian/stacks/main.rb +149 -0
- data/lib/cfnguardian/stacks/resources.rb +80 -0
- data/lib/cfnguardian/string.rb +19 -0
- data/lib/cfnguardian/validate.rb +80 -0
- data/lib/cfnguardian/version.rb +4 -0
- metadata +215 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
require 'cfndsl'
|
|
2
|
+
|
|
3
|
+
module CfnGuardian
|
|
4
|
+
module Stacks
|
|
5
|
+
class Main
|
|
6
|
+
include CfnDsl::CloudFormation
|
|
7
|
+
|
|
8
|
+
def build_template(stacks,checks)
|
|
9
|
+
@template = CloudFormation("Guardian main stack")
|
|
10
|
+
|
|
11
|
+
%w(Critical Warning Task Informational).each do |name|
|
|
12
|
+
parameter = @template.Parameter(name)
|
|
13
|
+
parameter.Type 'String'
|
|
14
|
+
parameter.Description "SNS topic ARN for #{name} notifications"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
parameters = {
|
|
18
|
+
Critical: Ref(:Critical),
|
|
19
|
+
Warning: Ref(:Warning),
|
|
20
|
+
Task: Ref(:Task),
|
|
21
|
+
Informational: Ref(:Informational)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
build_iam_role()
|
|
25
|
+
|
|
26
|
+
checks.each {|check| parameters["#{check[:name]}Function#{check[:environment]}"] = add_lambda(check)}
|
|
27
|
+
stacks.each {|stack| add_stack(stack['Name'],stack['TemplateURL'],parameters)}
|
|
28
|
+
|
|
29
|
+
return @template
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def build_iam_role()
|
|
33
|
+
@template.declare do
|
|
34
|
+
IAM_Role(:LambdaExecutionRole) do
|
|
35
|
+
AssumeRolePolicyDocument({
|
|
36
|
+
Version: '2012-10-17',
|
|
37
|
+
Statement: [{
|
|
38
|
+
Effect: 'Allow',
|
|
39
|
+
Principal: { Service: [ 'lambda.amazonaws.com' ] },
|
|
40
|
+
Action: [ 'sts:AssumeRole' ]
|
|
41
|
+
}]
|
|
42
|
+
})
|
|
43
|
+
Path '/'
|
|
44
|
+
Policies([
|
|
45
|
+
{
|
|
46
|
+
PolicyName: 'logging',
|
|
47
|
+
PolicyDocument: {
|
|
48
|
+
Version: '2012-10-17',
|
|
49
|
+
Statement: [{
|
|
50
|
+
Effect: 'Allow',
|
|
51
|
+
Action: [ 'logs:CreateLogGroup', 'logs:CreateLogStream', 'logs:PutLogEvents' ],
|
|
52
|
+
Resource: 'arn:aws:logs:*:*:*'
|
|
53
|
+
}]
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
PolicyName: 'metrics',
|
|
58
|
+
PolicyDocument: {
|
|
59
|
+
Version: '2012-10-17',
|
|
60
|
+
Statement: [{
|
|
61
|
+
Effect: 'Allow',
|
|
62
|
+
Action: [ 'cloudwatch:PutMetricData' ],
|
|
63
|
+
Resource: '*'
|
|
64
|
+
}]
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
PolicyName: 'attach-network-interface',
|
|
69
|
+
PolicyDocument: {
|
|
70
|
+
Version: '2012-10-17',
|
|
71
|
+
Statement: [{
|
|
72
|
+
Effect: 'Allow',
|
|
73
|
+
Action: [ 'ec2:CreateNetworkInterface', 'ec2:DescribeNetworkInterfaces', 'ec2:DeleteNetworkInterface' ],
|
|
74
|
+
Resource: '*'
|
|
75
|
+
}]
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
])
|
|
79
|
+
Tags([
|
|
80
|
+
{ Key: 'Name', Value: 'guardian-lambda-role' },
|
|
81
|
+
{ Key: 'Environment', Value: 'guardian' }
|
|
82
|
+
])
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def add_lambda(check)
|
|
88
|
+
vpc_config = {}
|
|
89
|
+
|
|
90
|
+
if check.has_key?(:vpc)
|
|
91
|
+
@template.declare do
|
|
92
|
+
EC2_SecurityGroup("#{check[:name]}SecurityGroup#{check[:environment]}") do
|
|
93
|
+
VpcId check[:vpc]
|
|
94
|
+
GroupDescription "Guardian lambda function #{check[:class]} check"
|
|
95
|
+
Tags([
|
|
96
|
+
{ Key: 'Name', Value: "guardian-#{check[:name]}-#{check[:environment]}" },
|
|
97
|
+
{ Key: 'Environment', Value: 'guardian' }
|
|
98
|
+
])
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
vpc_config[:SecurityGroupIds] = Ref("#{check[:name]}SecurityGroup#{check[:environment]}")
|
|
103
|
+
vpc_config[:SubnetIds] = check[:subnets]
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
@template.declare do
|
|
107
|
+
Lambda_Function("#{check[:name]}Function#{check[:environment]}") do
|
|
108
|
+
Code({
|
|
109
|
+
S3Bucket: FnSub("base2.lambda.${AWS::Region}"),
|
|
110
|
+
S3Key: "#{check[:package]}/#{check[:version]}/handler.zip"
|
|
111
|
+
})
|
|
112
|
+
Handler check[:handler]
|
|
113
|
+
MemorySize 128
|
|
114
|
+
Runtime check[:runtime]
|
|
115
|
+
Timeout 120
|
|
116
|
+
Role FnGetAtt(:LambdaExecutionRole, :Arn)
|
|
117
|
+
VpcConfig vpc_config unless vpc_config.empty?
|
|
118
|
+
Tags([
|
|
119
|
+
{ Key: 'Name', Value: "guardian-#{check[:name]}-#{check[:class]}" },
|
|
120
|
+
{ Key: 'Environment', Value: 'guardian' }
|
|
121
|
+
])
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
Lambda_Permission("#{check[:name]}Permissions#{check[:environment]}") do
|
|
125
|
+
FunctionName Ref("#{check[:name]}Function#{check[:environment]}")
|
|
126
|
+
Action 'lambda:InvokeFunction'
|
|
127
|
+
Principal 'events.amazonaws.com'
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
return FnGetAtt("#{check[:name]}Function#{check[:environment]}", :Arn)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def add_stack(name,url,stack_parameters)
|
|
135
|
+
@template.declare do
|
|
136
|
+
CloudFormation_Stack(name) do
|
|
137
|
+
Parameters stack_parameters
|
|
138
|
+
TemplateURL url
|
|
139
|
+
TimeoutInMinutes 15
|
|
140
|
+
Tags([
|
|
141
|
+
{ Key: 'Name', Value: "guardian-stack-#{name}" }
|
|
142
|
+
])
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
require 'cfndsl'
|
|
2
|
+
|
|
3
|
+
module CfnGuardian
|
|
4
|
+
module Stacks
|
|
5
|
+
class Resources
|
|
6
|
+
include CfnDsl::CloudFormation
|
|
7
|
+
|
|
8
|
+
def build_template(resources)
|
|
9
|
+
@template = CloudFormation("Guardian nested stack")
|
|
10
|
+
|
|
11
|
+
%w(Critical Warning Task Informational).each do |name|
|
|
12
|
+
parameter = @template.Parameter(name)
|
|
13
|
+
parameter.Type 'String'
|
|
14
|
+
parameter.Description "SNS topic ARN for #{name} notifications"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
resources.each do |resource|
|
|
18
|
+
case resource[:type]
|
|
19
|
+
when 'Alarm'
|
|
20
|
+
add_alarm(resource)
|
|
21
|
+
when 'Event'
|
|
22
|
+
add_event(resource)
|
|
23
|
+
else
|
|
24
|
+
puts "Warn: #{resource[:type]} is a unsuported resource type"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
return @template
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def add_alarm(resource)
|
|
32
|
+
@template.declare do
|
|
33
|
+
CloudWatch_Alarm("#{resource[:resource_name]}#{resource[:class]}#{resource[:name]}#{resource[:type]}"[0..255]) do
|
|
34
|
+
ActionsEnabled true
|
|
35
|
+
AlarmDescription "Guardian alarm #{resource[:class]} #{resource[:resource]} #{resource[:name]}"
|
|
36
|
+
AlarmName "#{resource[:class]}-#{resource[:resource]}-#{resource[:name]}"
|
|
37
|
+
ComparisonOperator resource[:comparison_operator]
|
|
38
|
+
Dimensions resource[:dimensions].map {|k,v| {Name: k, Value: v}}
|
|
39
|
+
EvaluationPeriods resource[:evaluation_periods]
|
|
40
|
+
Statistic resource[:statistic]
|
|
41
|
+
Period resource[:period]
|
|
42
|
+
Threshold resource[:threshold]
|
|
43
|
+
MetricName resource[:metric_name]
|
|
44
|
+
Namespace resource[:namespace]
|
|
45
|
+
AlarmActions [Ref(resource[:alarm_action])]
|
|
46
|
+
OKActions [Ref(resource[:alarm_action])]
|
|
47
|
+
TreatMissingData resource[:treat_missing_data] unless resource[:treat_missing_data].nil?
|
|
48
|
+
DatapointsToAlarm resource[:datapoints_to_alarm] unless resource[:datapoints_to_alarm].nil?
|
|
49
|
+
ExtendedStatistic resource[:extended_statistic] unless resource[:extended_statistic].nil?
|
|
50
|
+
EvaluateLowSampleCountPercentile resource[:evaluate_low_sample_count_percentile] unless resource[:evaluate_low_sample_count_percentile].nil?
|
|
51
|
+
Unit resource[:unit] unless resource[:unit].nil?
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def add_event(resource)
|
|
57
|
+
@template.declare do
|
|
58
|
+
Parameter(resource[:target]) do
|
|
59
|
+
Type 'String'
|
|
60
|
+
Description "Lamba funtion Arn for #{resource[:class]} #{resource[:type]}"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
Events_Rule("#{resource[:class]}#{resource[:type]}#{resource[:hash]}"[0..255]) do
|
|
64
|
+
State 'ENABLED'
|
|
65
|
+
Description "Guardian scheduled #{resource[:class]} #{resource[:type]}"
|
|
66
|
+
ScheduleExpression "cron(#{resource[:cron]})"
|
|
67
|
+
Targets([
|
|
68
|
+
{
|
|
69
|
+
Arn: Ref(resource[:target]),
|
|
70
|
+
Id: resource[:hash],
|
|
71
|
+
Input: FnSub(resource[:payload])
|
|
72
|
+
}
|
|
73
|
+
])
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
class String
|
|
2
|
+
def to_underscore
|
|
3
|
+
self.gsub(/::/, '/').
|
|
4
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
|
5
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
|
6
|
+
tr("-", "_").
|
|
7
|
+
downcase
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def to_camelcase
|
|
11
|
+
self.split('_').collect(&:capitalize).join
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def to_resource_name
|
|
15
|
+
self.split(/(\.|-|_)/).
|
|
16
|
+
map(&:capitalize).join.
|
|
17
|
+
gsub(/[^0-9A-Za-z]/, '')
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
require 'aws-sdk-cloudformation'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
require 'cfnguardian/version'
|
|
4
|
+
require 'cfnguardian/log'
|
|
5
|
+
require 'cfnguardian/s3'
|
|
6
|
+
|
|
7
|
+
module CfnGuardian
|
|
8
|
+
class Validate
|
|
9
|
+
include Logging
|
|
10
|
+
|
|
11
|
+
def initialize(bucket)
|
|
12
|
+
@bucket = bucket
|
|
13
|
+
@prefix = "validation"
|
|
14
|
+
@client = Aws::CloudFormation::Client.new()
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def validate()
|
|
18
|
+
success = []
|
|
19
|
+
Dir["out/*.yaml"].each do |template|
|
|
20
|
+
file_size_bytes = File.size(template)
|
|
21
|
+
|
|
22
|
+
if file_size_bytes > 51200
|
|
23
|
+
success << validate_s3(template)
|
|
24
|
+
else
|
|
25
|
+
success << validate_local(template)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
return success.include?(false)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def validate_local(path)
|
|
32
|
+
logger.info "Validating template #{path} locally"
|
|
33
|
+
template = File.read path
|
|
34
|
+
begin
|
|
35
|
+
response = @client.validate_template({
|
|
36
|
+
template_body: template
|
|
37
|
+
})
|
|
38
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
|
39
|
+
logger.warn("template #{path} failed validation with error:\n====> #{e.message}")
|
|
40
|
+
return false
|
|
41
|
+
end
|
|
42
|
+
return true
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def validate_s3(path)
|
|
46
|
+
success = true
|
|
47
|
+
logger.info "Validating template #{path} from s3 bucket #{@bucket}"
|
|
48
|
+
|
|
49
|
+
template = File.read path
|
|
50
|
+
md5 = Digest::MD5.hexdigest template
|
|
51
|
+
prefix = "#{@prefix}/#{md5}"
|
|
52
|
+
|
|
53
|
+
client = Aws::S3::Client.new()
|
|
54
|
+
client.put_object({
|
|
55
|
+
body: template,
|
|
56
|
+
bucket: @bucket,
|
|
57
|
+
key: prefix
|
|
58
|
+
})
|
|
59
|
+
logger.info("uploaded #{path} to s3://#{@bucket}/#{prefix}")
|
|
60
|
+
|
|
61
|
+
begin
|
|
62
|
+
response = @client.validate_template({
|
|
63
|
+
template_url: "https://#{@bucket}.s3.amazonaws.com/#{prefix}"
|
|
64
|
+
})
|
|
65
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
|
66
|
+
logger.warn("template #{path} failed validation with error:\n====> #{e.message}")
|
|
67
|
+
success = false
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
client.put_object({
|
|
71
|
+
bucket: @bucket,
|
|
72
|
+
key: prefix
|
|
73
|
+
})
|
|
74
|
+
logger.debug("removed validated template s3://#{@bucket}/#{prefix}")
|
|
75
|
+
|
|
76
|
+
return success
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: cfn-guardian
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Guslington
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: exe
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2020-01-20 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: thor
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0.20'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0.20'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: cfndsl
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '1.0'
|
|
34
|
+
- - "<"
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: '2'
|
|
37
|
+
type: :runtime
|
|
38
|
+
prerelease: false
|
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
40
|
+
requirements:
|
|
41
|
+
- - "~>"
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: '1.0'
|
|
44
|
+
- - "<"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '2'
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: terminal-table
|
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '1'
|
|
54
|
+
- - "<"
|
|
55
|
+
- !ruby/object:Gem::Version
|
|
56
|
+
version: '2'
|
|
57
|
+
type: :runtime
|
|
58
|
+
prerelease: false
|
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
60
|
+
requirements:
|
|
61
|
+
- - "~>"
|
|
62
|
+
- !ruby/object:Gem::Version
|
|
63
|
+
version: '1'
|
|
64
|
+
- - "<"
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: '2'
|
|
67
|
+
- !ruby/object:Gem::Dependency
|
|
68
|
+
name: aws-sdk-s3
|
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
|
70
|
+
requirements:
|
|
71
|
+
- - "~>"
|
|
72
|
+
- !ruby/object:Gem::Version
|
|
73
|
+
version: '1'
|
|
74
|
+
- - "<"
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '2'
|
|
77
|
+
type: :runtime
|
|
78
|
+
prerelease: false
|
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
80
|
+
requirements:
|
|
81
|
+
- - "~>"
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: '1'
|
|
84
|
+
- - "<"
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: '2'
|
|
87
|
+
- !ruby/object:Gem::Dependency
|
|
88
|
+
name: aws-sdk-cloudformation
|
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
|
90
|
+
requirements:
|
|
91
|
+
- - "~>"
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: '1'
|
|
94
|
+
- - "<"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '2'
|
|
97
|
+
type: :runtime
|
|
98
|
+
prerelease: false
|
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - "~>"
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '1'
|
|
104
|
+
- - "<"
|
|
105
|
+
- !ruby/object:Gem::Version
|
|
106
|
+
version: '2'
|
|
107
|
+
- !ruby/object:Gem::Dependency
|
|
108
|
+
name: bundler
|
|
109
|
+
requirement: !ruby/object:Gem::Requirement
|
|
110
|
+
requirements:
|
|
111
|
+
- - "~>"
|
|
112
|
+
- !ruby/object:Gem::Version
|
|
113
|
+
version: '2.0'
|
|
114
|
+
type: :development
|
|
115
|
+
prerelease: false
|
|
116
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
117
|
+
requirements:
|
|
118
|
+
- - "~>"
|
|
119
|
+
- !ruby/object:Gem::Version
|
|
120
|
+
version: '2.0'
|
|
121
|
+
- !ruby/object:Gem::Dependency
|
|
122
|
+
name: rake
|
|
123
|
+
requirement: !ruby/object:Gem::Requirement
|
|
124
|
+
requirements:
|
|
125
|
+
- - "~>"
|
|
126
|
+
- !ruby/object:Gem::Version
|
|
127
|
+
version: '10.0'
|
|
128
|
+
type: :development
|
|
129
|
+
prerelease: false
|
|
130
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
131
|
+
requirements:
|
|
132
|
+
- - "~>"
|
|
133
|
+
- !ruby/object:Gem::Version
|
|
134
|
+
version: '10.0'
|
|
135
|
+
description: Manages AWS cloudwatch alarms with default templates using cloudformation
|
|
136
|
+
email:
|
|
137
|
+
- itsupport@base2services.com
|
|
138
|
+
executables:
|
|
139
|
+
- cfn-guardian
|
|
140
|
+
extensions: []
|
|
141
|
+
extra_rdoc_files: []
|
|
142
|
+
files:
|
|
143
|
+
- ".gitignore"
|
|
144
|
+
- Gemfile
|
|
145
|
+
- Gemfile.lock
|
|
146
|
+
- LICENSE.txt
|
|
147
|
+
- README.md
|
|
148
|
+
- Rakefile
|
|
149
|
+
- cfn-guardian.gemspec
|
|
150
|
+
- exe/cfn-guardian
|
|
151
|
+
- lib/cfnguardian.rb
|
|
152
|
+
- lib/cfnguardian/compile.rb
|
|
153
|
+
- lib/cfnguardian/deploy.rb
|
|
154
|
+
- lib/cfnguardian/log.rb
|
|
155
|
+
- lib/cfnguardian/models/alarm.rb
|
|
156
|
+
- lib/cfnguardian/models/check.rb
|
|
157
|
+
- lib/cfnguardian/models/event.rb
|
|
158
|
+
- lib/cfnguardian/resources/amazonmq_broker.rb
|
|
159
|
+
- lib/cfnguardian/resources/apigateway.rb
|
|
160
|
+
- lib/cfnguardian/resources/application_targetgroup.rb
|
|
161
|
+
- lib/cfnguardian/resources/autoscaling_group.rb
|
|
162
|
+
- lib/cfnguardian/resources/base.rb
|
|
163
|
+
- lib/cfnguardian/resources/cloudfront_distribution.rb
|
|
164
|
+
- lib/cfnguardian/resources/domain_expiry.rb
|
|
165
|
+
- lib/cfnguardian/resources/dynamodb_table.rb
|
|
166
|
+
- lib/cfnguardian/resources/ec2_instance.rb
|
|
167
|
+
- lib/cfnguardian/resources/ecs_cluster.rb
|
|
168
|
+
- lib/cfnguardian/resources/ecs_service.rb
|
|
169
|
+
- lib/cfnguardian/resources/elastic_file_system.rb
|
|
170
|
+
- lib/cfnguardian/resources/elastic_loadbalancer.rb
|
|
171
|
+
- lib/cfnguardian/resources/elasticache_replication_group.rb
|
|
172
|
+
- lib/cfnguardian/resources/http.rb
|
|
173
|
+
- lib/cfnguardian/resources/lambda.rb
|
|
174
|
+
- lib/cfnguardian/resources/network_targetgroup.rb
|
|
175
|
+
- lib/cfnguardian/resources/nrpe.rb
|
|
176
|
+
- lib/cfnguardian/resources/rds_cluster_instance.rb
|
|
177
|
+
- lib/cfnguardian/resources/rds_instance.rb
|
|
178
|
+
- lib/cfnguardian/resources/redshift_cluster.rb
|
|
179
|
+
- lib/cfnguardian/resources/sql.rb
|
|
180
|
+
- lib/cfnguardian/resources/sqs_queue.rb
|
|
181
|
+
- lib/cfnguardian/s3.rb
|
|
182
|
+
- lib/cfnguardian/stacks/main.rb
|
|
183
|
+
- lib/cfnguardian/stacks/resources.rb
|
|
184
|
+
- lib/cfnguardian/string.rb
|
|
185
|
+
- lib/cfnguardian/validate.rb
|
|
186
|
+
- lib/cfnguardian/version.rb
|
|
187
|
+
homepage: https://github.com/base2Services/cfn-guardian
|
|
188
|
+
licenses:
|
|
189
|
+
- MIT
|
|
190
|
+
metadata:
|
|
191
|
+
allowed_push_host: https://rubygems.org
|
|
192
|
+
homepage_uri: https://github.com/base2Services/cfn-guardian
|
|
193
|
+
source_code_uri: https://github.com/base2Services/cfn-guardian
|
|
194
|
+
changelog_uri: https://github.com/base2Services/cfn-guardian
|
|
195
|
+
post_install_message:
|
|
196
|
+
rdoc_options: []
|
|
197
|
+
require_paths:
|
|
198
|
+
- lib
|
|
199
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
200
|
+
requirements:
|
|
201
|
+
- - ">="
|
|
202
|
+
- !ruby/object:Gem::Version
|
|
203
|
+
version: '0'
|
|
204
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
205
|
+
requirements:
|
|
206
|
+
- - ">="
|
|
207
|
+
- !ruby/object:Gem::Version
|
|
208
|
+
version: '0'
|
|
209
|
+
requirements: []
|
|
210
|
+
rubyforge_project:
|
|
211
|
+
rubygems_version: 2.7.6
|
|
212
|
+
signing_key:
|
|
213
|
+
specification_version: 4
|
|
214
|
+
summary: Manages AWS cloudwatch alarms with default templates using cloudformation
|
|
215
|
+
test_files: []
|