github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/rules/cloud/policies/aws/emr/enable_local_disk_encryption.go (about)

     1  package emr
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	"github.com/khulnasoft-lab/defsec/internal/rules"
     7  	"github.com/khulnasoft-lab/defsec/pkg/providers"
     8  	"github.com/khulnasoft-lab/defsec/pkg/scan"
     9  	"github.com/khulnasoft-lab/defsec/pkg/severity"
    10  	"github.com/khulnasoft-lab/defsec/pkg/state"
    11  )
    12  
    13  var CheckEnableLocalDiskEncryption = rules.Register(
    14  	scan.Rule{
    15  		AVDID:       "AVD-AWS-0139",
    16  		Provider:    providers.AWSProvider,
    17  		Service:     "emr",
    18  		ShortCode:   "enable-local-disk-encryption",
    19  		Summary:     "Enable local-disk encryption for EMR clusters.",
    20  		Impact:      "Local-disk data in the EMR cluster could be compromised if accessed.",
    21  		Resolution:  "Enable local-disk encryption for EMR cluster",
    22  		Explanation: `Data stored within an EMR instances should be encrypted to ensure sensitive data is kept private.`,
    23  		Links: []string{
    24  			"https://docs.aws.amazon.com/config/latest/developerguide/operational-best-practices-for-nist_800-171.html",
    25  		},
    26  		Terraform: &scan.EngineMetadata{
    27  			GoodExamples:        terraformEnableLocalDiskEncryptionGoodExamples,
    28  			BadExamples:         terraformEnableLocalDiskEncryptionBadExamples,
    29  			Links:               terraformEnableLocalDiskEncryptionLinks,
    30  			RemediationMarkdown: terraformEnableLocalDiskEncryptionRemediationMarkdown,
    31  		},
    32  		Severity: severity.High,
    33  	},
    34  	func(s *state.State) (results scan.Results) {
    35  		for _, conf := range s.AWS.EMR.SecurityConfiguration {
    36  			vars, err := readVarsFromConfigurationLocalDisk(conf.Configuration.Value())
    37  			if err != nil {
    38  				continue
    39  			}
    40  
    41  			if vars.EncryptionConfiguration.AtRestEncryptionConfiguration.LocalDiskEncryptionConfiguration.EncryptionKeyProviderType == "" {
    42  				results.Add(
    43  					"EMR cluster does not have local-disk encryption enabled.",
    44  					conf.Configuration,
    45  				)
    46  			} else {
    47  				results.AddPassed(&conf)
    48  			}
    49  
    50  		}
    51  		return
    52  	},
    53  )
    54  
    55  func readVarsFromConfigurationLocalDisk(raw string) (*conf, error) {
    56  	var testConf conf
    57  	if err := json.Unmarshal([]byte(raw), &testConf); err != nil {
    58  		return nil, err
    59  	}
    60  
    61  	return &testConf, nil
    62  }