cfn-nag 0.4.9 → 0.4.10

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: 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