github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/terraform/aws/iam/policies.go (about) 1 package iam 2 3 import ( 4 "strings" 5 6 defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types" 7 8 "github.com/liamg/iamgo" 9 10 "github.com/khulnasoft-lab/defsec/pkg/terraform" 11 12 "github.com/khulnasoft-lab/defsec/pkg/providers/aws/iam" 13 ) 14 15 func sameProvider(b1, b2 *terraform.Block) bool { 16 17 if b1.HasChild("provider") != b2.HasChild("provider") { 18 return false 19 } 20 21 var provider1, provider2 string 22 if providerAttr := b1.GetAttribute("provider"); providerAttr.IsString() { 23 provider1 = providerAttr.Value().AsString() 24 } 25 if providerAttr := b2.GetAttribute("provider"); providerAttr.IsString() { 26 provider2 = providerAttr.Value().AsString() 27 } 28 return strings.EqualFold(provider1, provider2) 29 } 30 31 func parsePolicy(policyBlock *terraform.Block, modules terraform.Modules) (iam.Policy, error) { 32 policy := iam.Policy{ 33 Metadata: policyBlock.GetMetadata(), 34 Name: policyBlock.GetAttribute("name").AsStringValueOrDefault("", policyBlock), 35 Document: iam.Document{ 36 Metadata: defsecTypes.NewUnmanagedMetadata(), 37 Parsed: iamgo.Document{}, 38 IsOffset: false, 39 HasRefs: false, 40 }, 41 Builtin: defsecTypes.Bool(false, policyBlock.GetMetadata()), 42 } 43 var err error 44 doc, err := ParsePolicyFromAttr(policyBlock.GetAttribute("policy"), policyBlock, modules) 45 if err != nil { 46 return policy, err 47 } 48 policy.Document = *doc 49 return policy, nil 50 } 51 52 func adaptPolicies(modules terraform.Modules) (policies []iam.Policy) { 53 for _, policyBlock := range modules.GetResourcesByType("aws_iam_policy") { 54 policy := iam.Policy{ 55 Metadata: policyBlock.GetMetadata(), 56 Name: policyBlock.GetAttribute("name").AsStringValueOrDefault("", policyBlock), 57 Document: iam.Document{ 58 Metadata: defsecTypes.NewUnmanagedMetadata(), 59 Parsed: iamgo.Document{}, 60 IsOffset: false, 61 HasRefs: false, 62 }, 63 Builtin: defsecTypes.Bool(false, policyBlock.GetMetadata()), 64 } 65 doc, err := ParsePolicyFromAttr(policyBlock.GetAttribute("policy"), policyBlock, modules) 66 if err != nil { 67 continue 68 } 69 policy.Document = *doc 70 policies = append(policies, policy) 71 } 72 return 73 }