github.com/aquasecurity/trivy-iac@v0.8.1-0.20240127024015-3d8e412cf0ab/internal/adapters/terraform/aws/iam/roles.go (about) 1 package iam 2 3 import ( 4 "github.com/aquasecurity/defsec/pkg/providers/aws/iam" 5 "github.com/aquasecurity/defsec/pkg/terraform" 6 ) 7 8 func adaptRoles(modules terraform.Modules) []iam.Role { 9 var roles []iam.Role 10 for _, roleBlock := range modules.GetResourcesByType("aws_iam_role") { 11 role := iam.Role{ 12 Metadata: roleBlock.GetMetadata(), 13 Name: roleBlock.GetAttribute("name").AsStringValueOrDefault("", roleBlock), 14 } 15 16 if inlineBlock := roleBlock.GetBlock("inline_policy"); inlineBlock.IsNotNil() { 17 if policy, err := parsePolicy(inlineBlock, modules); err == nil { 18 role.Policies = append(role.Policies, policy) 19 } 20 } 21 22 if policy, ok := applyForDependentResource( 23 modules, roleBlock.ID(), "name", "aws_iam_role_policy", "role", findPolicy(modules), 24 ); ok && policy != nil { 25 role.Policies = append(role.Policies, *policy) 26 } 27 28 if policy, ok := applyForDependentResource( 29 modules, roleBlock.ID(), "name", "aws_iam_role_policy_attachment", "role", findAttachmentPolicy(modules), 30 ); ok && policy != nil { 31 role.Policies = append(role.Policies, *policy) 32 } 33 34 roles = append(roles, role) 35 } 36 37 return roles 38 }