cfn-nag 0.4.9 → 0.4.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f0a90e09ae75e36f29393f58e8ebf4bb760412a12c69a11003d78ea66ab21492
4
- data.tar.gz: 65a8f4267aa774711a9187fa4b5b0d1381daaf2115cbc01045a389122c1f3801
3
+ metadata.gz: a7c5be6d25789f38b37bbde75e1b732dbec718ef49f0121efbd61f4032cd1f37
4
+ data.tar.gz: 48f3345f39d00e23b7448b5316dc5e77993afd087974c237fb7e655c2a7cb73c
5
5
  SHA512:
6
- metadata.gz: 883b3336ebc81586edad1b2b766133dbaed59d8c8241bc82420c02afd66eb3142b1c593ccdc989a46715831f13cc56b7e6d5f8020522f3bc70da16e3dc96cac3
7
- data.tar.gz: 984513bf48cf99a90b9bc79e8cc83132f1bf32ae08d95270843fe7e21eeaf01aa6fe3c35a40edebf5f4ac2bb7e62661d070a80a19b7e34271637e092caa28c8f
6
+ metadata.gz: 84f04c28790ed9efc963455ca677acb1886f3b4af262efb0ac32e078d367393c7f6eca51bf59ac49ee97f0bb68133af4d2adde192535656483ec64c149cda9e8
7
+ data.tar.gz: bfa559caa6910cf0e1f49d03499b3254c13857c6ae677f61697a932c41a629be88e8803caddfd775bc88773664cea092f4c2c8ae7d709b55bd5973f3263372c9
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require_relative 'base'
4
+ require_relative 'boolean_base_rule'
5
5
 
6
- class EFSFileSystemEncryptedRule < BaseRule
6
+ class EFSFileSystemEncryptedRule < BooleanBaseRule
7
7
  def rule_text
8
8
  'EFS FileSystem should have encryption enabled'
9
9
  end
@@ -16,14 +16,11 @@ class EFSFileSystemEncryptedRule < BaseRule
16
16
  'F32'
17
17
  end
18
18
 
19
- def audit_impl(cfn_model)
20
- resources = cfn_model.resources_by_type('AWS::EFS::FileSystem')
21
-
22
- violating_filesystems = resources.select do |filesystem|
23
- filesystem.encrypted.nil? ||
24
- filesystem.encrypted.to_s.casecmp('false').zero?
25
- end
19
+ def resource_type
20
+ 'AWS::EFS::FileSystem'
21
+ end
26
22
 
27
- violating_filesystems.map(&:logical_resource_id)
23
+ def boolean_property
24
+ :encrypted
28
25
  end
29
26
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require_relative 'base'
4
+ require_relative 'boolean_base_rule'
5
5
 
6
- class ElastiCacheReplicationGroupAtRestEncryptionRule < BaseRule
6
+ class ElastiCacheReplicationGroupAtRestEncryptionRule < BooleanBaseRule
7
7
  def rule_text
8
8
  'ElastiCache ReplicationGroup should have encryption enabled for at rest'
9
9
  end
@@ -16,14 +16,11 @@ class ElastiCacheReplicationGroupAtRestEncryptionRule < BaseRule
16
16
  'F25'
17
17
  end
18
18
 
19
- def audit_impl(cfn_model)
20
- resources = cfn_model.resources_by_type('AWS::ElastiCache::ReplicationGroup')
21
-
22
- violating_groups = resources.select do |group|
23
- group.atRestEncryptionEnabled.nil? ||
24
- group.atRestEncryptionEnabled.to_s.casecmp('false').zero?
25
- end
19
+ def resource_type
20
+ 'AWS::ElastiCache::ReplicationGroup'
21
+ end
26
22
 
27
- violating_groups.map(&:logical_resource_id)
23
+ def boolean_property
24
+ :atRestEncryptionEnabled
28
25
  end
29
26
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require_relative 'base'
4
+ require_relative 'boolean_base_rule'
5
5
 
6
- class ElastiCacheReplicationGroupTransitEncryptionRule < BaseRule
6
+ class ElastiCacheReplicationGroupTransitEncryptionRule < BooleanBaseRule
7
7
  def rule_text
8
8
  'ElastiCache ReplicationGroup should have encryption enabled for in transit'
9
9
  end
@@ -16,14 +16,11 @@ class ElastiCacheReplicationGroupTransitEncryptionRule < BaseRule
16
16
  'F24'
17
17
  end
18
18
 
19
- def audit_impl(cfn_model)
20
- resources = cfn_model.resources_by_type('AWS::ElastiCache::ReplicationGroup')
21
-
22
- violating_groups = resources.select do |group|
23
- group.transitEncryptionEnabled.nil? ||
24
- group.transitEncryptionEnabled.to_s.casecmp('false').zero?
25
- end
19
+ def resource_type
20
+ 'AWS::ElastiCache::ReplicationGroup'
21
+ end
26
22
 
27
- violating_groups.map(&:logical_resource_id)
23
+ def boolean_property
24
+ :transitEncryptionEnabled
28
25
  end
29
26
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require_relative 'base'
4
+ require_relative 'boolean_base_rule'
5
5
 
6
- class NeptuneDBClusterStorageEncryptedRule < BaseRule
6
+ class NeptuneDBClusterStorageEncryptedRule < BooleanBaseRule
7
7
  def rule_text
8
8
  'Neptune database cluster storage should have encryption enabled'
9
9
  end
@@ -16,14 +16,11 @@ class NeptuneDBClusterStorageEncryptedRule < BaseRule
16
16
  'F30'
17
17
  end
18
18
 
19
- def audit_impl(cfn_model)
20
- resources = cfn_model.resources_by_type('AWS::Neptune::DBCluster')
21
-
22
- violating_storage = resources.select do |filesystem|
23
- filesystem.storageEncrypted.nil? ||
24
- filesystem.storageEncrypted.to_s.casecmp('false').zero?
25
- end
19
+ def resource_type
20
+ 'AWS::Neptune::DBCluster'
21
+ end
26
22
 
27
- violating_storage.map(&:logical_resource_id)
23
+ def boolean_property
24
+ :storageEncrypted
28
25
  end
29
26
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require_relative 'base'
4
+ require_relative 'boolean_base_rule'
5
5
 
6
- class RDSDBClusterStorageEncryptedRule < BaseRule
6
+ class RDSDBClusterStorageEncryptedRule < BooleanBaseRule
7
7
  def rule_text
8
8
  'RDS DBCluster should have StorageEncrypted enabled'
9
9
  end
@@ -16,14 +16,11 @@ class RDSDBClusterStorageEncryptedRule < BaseRule
16
16
  'F26'
17
17
  end
18
18
 
19
- def audit_impl(cfn_model)
20
- resources = cfn_model.resources_by_type('AWS::RDS::DBCluster')
21
-
22
- violating_clusters = resources.select do |cluster|
23
- cluster.storageEncrypted.nil? ||
24
- cluster.storageEncrypted.to_s.casecmp('false').zero?
25
- end
19
+ def resource_type
20
+ 'AWS::RDS::DBCluster'
21
+ end
26
22
 
27
- violating_clusters.map(&:logical_resource_id)
23
+ def boolean_property
24
+ :storageEncrypted
28
25
  end
29
26
  end
@@ -20,11 +20,7 @@ class RDSDBInstanceStorageEncryptedRule < BaseRule
20
20
  resources = cfn_model.resources_by_type('AWS::RDS::DBInstance')
21
21
 
22
22
  violating_instances = resources.select do |instance|
23
- instance.dBClusterIdentifier.nil? &&
24
- (
25
- instance.storageEncrypted.nil? ||
26
- instance.storageEncrypted.to_s.casecmp('false').zero?
27
- )
23
+ instance.dBClusterIdentifier.nil? && not_truthy?(instance.storageEncrypted)
28
24
  end
29
25
 
30
26
  violating_instances.map(&:logical_resource_id)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require_relative 'base'
4
+ require_relative 'boolean_base_rule'
5
5
 
6
- class RedshiftClusterEncryptedRule < BaseRule
6
+ class RedshiftClusterEncryptedRule < BooleanBaseRule
7
7
  def rule_text
8
8
  'Redshift Cluster should have encryption enabled'
9
9
  end
@@ -16,14 +16,11 @@ class RedshiftClusterEncryptedRule < BaseRule
16
16
  'F28'
17
17
  end
18
18
 
19
- def audit_impl(cfn_model)
20
- resources = cfn_model.resources_by_type('AWS::Redshift::Cluster')
21
-
22
- violating_clusters = resources.select do |cluster|
23
- cluster.encrypted.nil? ||
24
- cluster.encrypted.to_s.casecmp('false').zero?
25
- end
19
+ def resource_type
20
+ 'AWS::Redshift::Cluster'
21
+ end
26
22
 
27
- violating_clusters.map(&:logical_resource_id)
23
+ def boolean_property
24
+ :encrypted
28
25
  end
29
26
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cfn-nag/violation'
4
+ require_relative 'base'
5
+ require 'cfn-nag/util/truthy.rb'
6
+
7
+ class BooleanBaseRule < BaseRule
8
+ def resource_type
9
+ raise 'must implement in subclass'
10
+ end
11
+
12
+ def boolean_property
13
+ raise 'must implement in subclass'
14
+ end
15
+
16
+ def audit_impl(cfn_model)
17
+ resources = cfn_model.resources_by_type(resource_type)
18
+
19
+ violating_resources = resources.select do |resource|
20
+ not_truthy?(resource.send(boolean_property))
21
+ end
22
+
23
+ violating_resources.map(&:logical_resource_id)
24
+ end
25
+ end
@@ -5,3 +5,7 @@
5
5
  def truthy?(string)
6
6
  string.to_s.casecmp('true').zero?
7
7
  end
8
+
9
+ def not_truthy?(string)
10
+ string.nil? || string.to_s.casecmp('false').zero?
11
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfn-nag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9
4
+ version: 0.4.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Kascic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-03 00:00:00.000000000 Z
11
+ date: 2019-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -220,6 +220,7 @@ files:
220
220
  - lib/cfn-nag/custom_rules/WafWebAclDefaultActionRule.rb
221
221
  - lib/cfn-nag/custom_rules/WorkspacesWorkspaceEncryptionRule.rb
222
222
  - lib/cfn-nag/custom_rules/base.rb
223
+ - lib/cfn-nag/custom_rules/boolean_base_rule.rb
223
224
  - lib/cfn-nag/ip_addr.rb
224
225
  - lib/cfn-nag/jmes_path_discovery.rb
225
226
  - lib/cfn-nag/jmes_path_evaluator.rb