cfn-nag 0.4.23 → 0.4.24

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: a5572ec3d44e64f632333208c4033c6886dedc9d863bd42a4fe6f3375cc0f9af
4
- data.tar.gz: 9bf4ee8a6658b21a1081b207305ad8b62ae7a1fd2d030d72a12521b31a20c20d
3
+ metadata.gz: f9485f94c90e2e05e6e2ff624e8c43e70a5ca4fb5946060a6301d53f1e3f053f
4
+ data.tar.gz: 40b173ce55caad1c9fe9991ea4a8520d89ced23e0d2f2f6258295bc5925c9540
5
5
  SHA512:
6
- metadata.gz: f1de134ef12c55bf97777244950df3e2b268619e6fb3df596f970bb8591111db26a16b7a697d0cab48f660448cf40f3936c5a19cef2ab360bd8badb861953216
7
- data.tar.gz: 400363143dae1804502ab59a826cfa394527833b435a8a0ca1087b3f778ab7591e1a261761139791a66d1d0e3c2afa9a68423af6dbc809da6d73afd023552c98
6
+ metadata.gz: b482ad1361062684629561b900f69ec92e54c1a6f213edd1a958e916ace31ee196e09d5690441765c99530d2898728ad7662a62d6d56c76c5e4932ad41542c33
7
+ data.tar.gz: b93b1b8d83ffad07cd6da18ddf13f33109b0b72c553f8c3af6ae3dbb3a8f6917567fd78314a6f908f5e57b59cb9f1022b9d492ae4e7ed80c54cdc06e40cda9ff
@@ -1,14 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require 'cfn-nag/util/enforce_reference_parameter'
5
- require 'cfn-nag/util/enforce_string_or_dynamic_reference'
6
- require_relative 'base'
4
+ require_relative 'password_base_rule'
7
5
 
8
- class DMSEndpointPasswordRule < BaseRule
6
+ class DMSEndpointPasswordRule < PasswordBaseRule
9
7
  def rule_text
10
- 'DMS Endpoint must not be a plaintext string or a Ref to a NoEcho ' \
11
- 'Parameter with a Default value.'
8
+ 'DMS Endpoint password must not be a plaintext string ' \
9
+ 'or a Ref to a NoEcho Parameter with a Default value.'
12
10
  end
13
11
 
14
12
  def rule_type
@@ -19,17 +17,11 @@ class DMSEndpointPasswordRule < BaseRule
19
17
  'F37'
20
18
  end
21
19
 
22
- def audit_impl(cfn_model)
23
- dms_endpoints = cfn_model.resources_by_type('AWS::DMS::Endpoint')
24
- violating_dms_endpoints = dms_endpoints.select do |endpoint|
25
- if endpoint.password.nil?
26
- false
27
- else
28
- insecure_parameter?(cfn_model, endpoint.password) ||
29
- insecure_string_or_dynamic_reference?(cfn_model, endpoint.password)
30
- end
31
- end
20
+ def resource_type
21
+ 'AWS::DMS::Endpoint'
22
+ end
32
23
 
33
- violating_dms_endpoints.map(&:logical_resource_id)
24
+ def password_property
25
+ :password
34
26
  end
35
27
  end
@@ -1,15 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require 'cfn-nag/util/enforce_reference_parameter'
5
- require 'cfn-nag/util/enforce_string_or_dynamic_reference'
6
- require_relative 'base'
4
+ require_relative 'password_base_rule'
7
5
 
8
6
  # Rule class to fail on DirectoryService::MicrosoftAD password in template
9
- class DirectoryServiceMicrosoftADPasswordRule < BaseRule
7
+ class DirectoryServiceMicrosoftADPasswordRule < PasswordBaseRule
10
8
  def rule_text
11
- 'Directory Service Microsoft AD must not be a plaintext string or a ' \
12
- 'Ref to a NoEcho Parameter with a Default value.'
9
+ 'Directory Service Microsoft AD password must not be a plaintext string ' \
10
+ 'or a Ref to a NoEcho Parameter with a Default value.'
13
11
  end
14
12
 
15
13
  def rule_type
@@ -20,16 +18,11 @@ class DirectoryServiceMicrosoftADPasswordRule < BaseRule
20
18
  'F36'
21
19
  end
22
20
 
23
- def audit_impl(cfn_model)
24
- violating_ad = cfn_model.resources_by_type('AWS::DirectoryService::MicrosoftAD')
25
- .select do |ad|
26
- if ad.password.nil?
27
- false
28
- else
29
- insecure_parameter?(cfn_model, ad.password) ||
30
- insecure_string_or_dynamic_reference?(cfn_model, ad.password)
31
- end
32
- end
33
- violating_ad.map(&:logical_resource_id)
21
+ def resource_type
22
+ 'AWS::DirectoryService::MicrosoftAD'
23
+ end
24
+
25
+ def password_property
26
+ :password
34
27
  end
35
28
  end
@@ -1,14 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require 'cfn-nag/util/enforce_reference_parameter'
5
- require 'cfn-nag/util/enforce_string_or_dynamic_reference'
6
- require_relative 'base'
4
+ require_relative 'password_base_rule'
7
5
 
8
6
  # Rule class to fail on DirectoryService::SimpleAD password in template
9
- class DirectoryServiceSimpleADPasswordRule < BaseRule
7
+ class DirectoryServiceSimpleADPasswordRule < PasswordBaseRule
10
8
  def rule_text
11
- 'DirectoryService::SimpleAD should use a parameter for password, with NoEcho'
9
+ 'DirectoryService SimpleAD password must not be a plaintext string ' \
10
+ 'or a Ref to a NoEcho Parameter with a Default value.'
12
11
  end
13
12
 
14
13
  def rule_type
@@ -19,16 +18,11 @@ class DirectoryServiceSimpleADPasswordRule < BaseRule
19
18
  'F31'
20
19
  end
21
20
 
22
- def audit_impl(cfn_model)
23
- violating_ad = cfn_model.resources_by_type('AWS::DirectoryService::SimpleAD')
24
- .select do |ad|
25
- if ad.password.nil?
26
- false
27
- else
28
- insecure_parameter?(cfn_model, ad.password) ||
29
- insecure_string_or_dynamic_reference?(cfn_model, ad.password)
30
- end
31
- end
32
- violating_ad.map(&:logical_resource_id)
21
+ def resource_type
22
+ 'AWS::DirectoryService::SimpleAD'
23
+ end
24
+
25
+ def password_property
26
+ :password
33
27
  end
34
28
  end
@@ -1,14 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require 'cfn-nag/util/enforce_reference_parameter'
5
- require 'cfn-nag/util/enforce_string_or_dynamic_reference'
6
- require_relative 'base'
4
+ require_relative 'password_base_rule'
7
5
 
8
- class RDSDBClusterMasterUserPasswordRule < BaseRule
6
+ class RDSDBClusterMasterUserPasswordRule < PasswordBaseRule
9
7
  def rule_text
10
- 'RDS DB Cluster master user password must be Ref to NoEcho Parameter. ' \
11
- 'Default credentials are not recommended'
8
+ 'RDS DB Cluster master user password must not be a plaintext string ' \
9
+ 'or a Ref to a NoEcho Parameter with a Default value.'
12
10
  end
13
11
 
14
12
  def rule_type
@@ -19,17 +17,11 @@ class RDSDBClusterMasterUserPasswordRule < BaseRule
19
17
  'F34'
20
18
  end
21
19
 
22
- def audit_impl(cfn_model)
23
- rds_dbclusters = cfn_model.resources_by_type('AWS::RDS::DBCluster')
24
- violating_rdsclusters = rds_dbclusters.select do |cluster|
25
- if cluster.masterUserPassword.nil?
26
- false
27
- else
28
- insecure_parameter?(cfn_model, cluster.masterUserPassword) ||
29
- insecure_string_or_dynamic_reference?(cfn_model, cluster.masterUserPassword)
30
- end
31
- end
20
+ def resource_type
21
+ 'AWS::RDS::DBCluster'
22
+ end
32
23
 
33
- violating_rdsclusters.map(&:logical_resource_id)
24
+ def password_property
25
+ :masterUserPassword
34
26
  end
35
27
  end
@@ -1,14 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require 'cfn-nag/util/enforce_reference_parameter'
5
- require 'cfn-nag/util/enforce_string_or_dynamic_reference'
6
- require_relative 'base'
4
+ require_relative 'password_base_rule'
7
5
 
8
- class RDSInstanceMasterUserPasswordRule < BaseRule
6
+ class RDSInstanceMasterUserPasswordRule < PasswordBaseRule
9
7
  def rule_text
10
- 'RDS instance master user password must be Ref to NoEcho Parameter. ' \
11
- 'Default credentials are not recommended'
8
+ 'RDS instance master user password must not be a plaintext string ' \
9
+ 'or a Ref to a NoEcho Parameter with a Default value.'
12
10
  end
13
11
 
14
12
  def rule_type
@@ -19,21 +17,11 @@ class RDSInstanceMasterUserPasswordRule < BaseRule
19
17
  'F23'
20
18
  end
21
19
 
22
- # one word of warning... if somebody applies parameter values via JSON....
23
- # this will compare that....
24
- # probably shouldn't be doing that though if it's NoEcho there's a good reason
25
- # bother checking synthesized_value? that would be the indicator.....
26
- def audit_impl(cfn_model)
27
- rds_dbinstances = cfn_model.resources_by_type('AWS::RDS::DBInstance')
28
- violating_rdsinstances = rds_dbinstances.select do |instance|
29
- if instance.masterUserPassword.nil?
30
- false
31
- else
32
- insecure_parameter?(cfn_model, instance.masterUserPassword) ||
33
- insecure_string_or_dynamic_reference?(cfn_model, instance.masterUserPassword)
34
- end
35
- end
20
+ def resource_type
21
+ 'AWS::RDS::DBInstance'
22
+ end
36
23
 
37
- violating_rdsinstances.map(&:logical_resource_id)
24
+ def password_property
25
+ :masterUserPassword
38
26
  end
39
27
  end
@@ -1,15 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require 'cfn-nag/util/enforce_reference_parameter'
5
- require 'cfn-nag/util/enforce_string_or_dynamic_reference'
6
- require_relative 'base'
4
+ require_relative 'password_base_rule'
7
5
 
8
6
  # cfn_nag rules related to RDS Instance master username
9
- class RDSInstanceMasterUsernameRule < BaseRule
7
+ class RDSInstanceMasterUsernameRule < PasswordBaseRule
10
8
  def rule_text
11
- 'RDS instance master username must be Ref to NoEcho Parameter. Default ' \
12
- 'credentials are not recommended'
9
+ 'RDS instance master username must not be a plaintext string ' \
10
+ 'or a Ref to a NoEcho Parameter with a Default value.'
13
11
  end
14
12
 
15
13
  def rule_type
@@ -20,22 +18,11 @@ class RDSInstanceMasterUsernameRule < BaseRule
20
18
  'F24'
21
19
  end
22
20
 
23
- # Warning: if somebody applies parameter values via JSON, this will compare
24
- # that....
25
- # probably shouldn't be doing that though -
26
- # if it's NoEcho there's a good reason
27
- # bother checking synthesized_value? that would be the indicator.....
28
- def audit_impl(cfn_model)
29
- violating_rdsinstances = cfn_model.resources_by_type('AWS::RDS::DBInstance')
30
- .select do |instance|
31
- if instance.masterUsername.nil?
32
- false
33
- else
34
- insecure_parameter?(cfn_model, instance.masterUsername) ||
35
- insecure_string_or_dynamic_reference?(cfn_model, instance.masterUsername)
36
- end
37
- end
21
+ def resource_type
22
+ 'AWS::RDS::DBInstance'
23
+ end
38
24
 
39
- violating_rdsinstances.map(&:logical_resource_id)
25
+ def password_property
26
+ :masterUsername
40
27
  end
41
28
  end
@@ -1,14 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'cfn-nag/violation'
4
- require 'cfn-nag/util/enforce_reference_parameter'
5
- require 'cfn-nag/util/enforce_string_or_dynamic_reference'
6
- require_relative 'base'
4
+ require_relative 'password_base_rule'
7
5
 
8
- class RedshiftClusterMasterUserPasswordRule < BaseRule
6
+ class RedshiftClusterMasterUserPasswordRule < PasswordBaseRule
9
7
  def rule_text
10
- 'Redshift Cluster master user password must be Ref to NoEcho Parameter. ' \
11
- 'Default credentials are not recommended'
8
+ 'Redshift Cluster master user password must not be a plaintext string ' \
9
+ 'or a Ref to a NoEcho Parameter with a Default value.'
12
10
  end
13
11
 
14
12
  def rule_type
@@ -19,17 +17,11 @@ class RedshiftClusterMasterUserPasswordRule < BaseRule
19
17
  'F35'
20
18
  end
21
19
 
22
- def audit_impl(cfn_model)
23
- redshift_clusters = cfn_model.resources_by_type('AWS::Redshift::Cluster')
24
- violating_redshift_clusters = redshift_clusters.select do |cluster|
25
- if cluster.masterUserPassword.nil?
26
- false
27
- else
28
- insecure_parameter?(cfn_model, cluster.masterUserPassword) ||
29
- insecure_string_or_dynamic_reference?(cfn_model, cluster.masterUserPassword)
30
- end
31
- end
20
+ def resource_type
21
+ 'AWS::Redshift::Cluster'
22
+ end
32
23
 
33
- violating_redshift_clusters.map(&:logical_resource_id)
24
+ def password_property
25
+ :masterUserPassword
34
26
  end
35
27
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cfn-nag/violation'
4
+ require 'cfn-nag/util/enforce_reference_parameter'
5
+ require 'cfn-nag/util/enforce_string_or_dynamic_reference'
6
+ require_relative 'base'
7
+
8
+ class PasswordBaseRule < BaseRule
9
+ def resource_type
10
+ raise 'must implement in subclass'
11
+ end
12
+
13
+ def password_property
14
+ raise 'must implement in subclass'
15
+ end
16
+
17
+ def audit_impl(cfn_model)
18
+ resources = cfn_model.resources_by_type(resource_type)
19
+
20
+ violating_resources = resources.select do |resource|
21
+ if resource.send(password_property).nil?
22
+ false
23
+ else
24
+ insecure_parameter?(cfn_model, resource.send(password_property)) ||
25
+ insecure_string_or_dynamic_reference?(cfn_model,
26
+ resource.send(password_property))
27
+ end
28
+ end
29
+
30
+ violating_resources.map(&:logical_resource_id)
31
+ end
32
+ 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.23
4
+ version: 0.4.24
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-24 00:00:00.000000000 Z
11
+ date: 2019-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -239,6 +239,7 @@ files:
239
239
  - lib/cfn-nag/custom_rules/WorkspacesWorkspaceEncryptionRule.rb
240
240
  - lib/cfn-nag/custom_rules/base.rb
241
241
  - lib/cfn-nag/custom_rules/boolean_base_rule.rb
242
+ - lib/cfn-nag/custom_rules/password_base_rule.rb
242
243
  - lib/cfn-nag/ip_addr.rb
243
244
  - lib/cfn-nag/jmes_path_discovery.rb
244
245
  - lib/cfn-nag/jmes_path_evaluator.rb