github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/rules/cloud/policies/aws/ssm/secret_use_customer_key.go (about) 1 package ssm 2 3 import ( 4 "github.com/khulnasoft-lab/defsec/internal/rules" 5 "github.com/khulnasoft-lab/defsec/pkg/providers" 6 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/ssm" 7 "github.com/khulnasoft-lab/defsec/pkg/scan" 8 "github.com/khulnasoft-lab/defsec/pkg/severity" 9 "github.com/khulnasoft-lab/defsec/pkg/state" 10 ) 11 12 var CheckSecretUseCustomerKey = rules.Register( 13 scan.Rule{ 14 AVDID: "AVD-AWS-0098", 15 Provider: providers.AWSProvider, 16 Service: "ssm", 17 ShortCode: "secret-use-customer-key", 18 Summary: "Secrets Manager should use customer managed keys", 19 Impact: "Using AWS managed keys reduces the flexibility and control over the encryption key", 20 Resolution: "Use customer managed keys", 21 Explanation: `Secrets Manager encrypts secrets by default using a default key created by AWS. To ensure control and granularity of secret encryption, CMK's should be used explicitly.`, 22 Links: []string{ 23 "https://docs.aws.amazon.com/kms/latest/developerguide/services-secrets-manager.html#asm-encrypt", 24 }, 25 Terraform: &scan.EngineMetadata{ 26 GoodExamples: terraformSecretUseCustomerKeyGoodExamples, 27 BadExamples: terraformSecretUseCustomerKeyBadExamples, 28 Links: terraformSecretUseCustomerKeyLinks, 29 RemediationMarkdown: terraformSecretUseCustomerKeyRemediationMarkdown, 30 }, 31 CloudFormation: &scan.EngineMetadata{ 32 GoodExamples: cloudFormationSecretUseCustomerKeyGoodExamples, 33 BadExamples: cloudFormationSecretUseCustomerKeyBadExamples, 34 Links: cloudFormationSecretUseCustomerKeyLinks, 35 RemediationMarkdown: cloudFormationSecretUseCustomerKeyRemediationMarkdown, 36 }, 37 Severity: severity.Low, 38 }, 39 func(s *state.State) (results scan.Results) { 40 for _, secret := range s.AWS.SSM.Secrets { 41 if secret.KMSKeyID.IsEmpty() { 42 results.Add( 43 "Secret is not encrypted with a customer managed key.", 44 secret.KMSKeyID, 45 ) 46 } else if secret.KMSKeyID.EqualTo(ssm.DefaultKMSKeyID) { 47 results.Add( 48 "Secret explicitly uses the default key.", 49 secret.KMSKeyID, 50 ) 51 } else { 52 results.AddPassed(&secret) 53 } 54 } 55 return 56 }, 57 )