github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/arm/compute/adapt.go (about)

     1  package compute
     2  
     3  import (
     4  	"github.com/khulnasoft-lab/defsec/pkg/providers/azure/compute"
     5  	"github.com/khulnasoft-lab/defsec/pkg/scanners/azure"
     6  	defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types"
     7  )
     8  
     9  func Adapt(deployment azure.Deployment) compute.Compute {
    10  	return compute.Compute{
    11  		LinuxVirtualMachines:   adaptLinuxVirtualMachines(deployment),
    12  		WindowsVirtualMachines: adaptWindowsVirtualMachines(deployment),
    13  		ManagedDisks:           adaptManagedDisks(deployment),
    14  	}
    15  }
    16  
    17  func adaptManagedDisks(deployment azure.Deployment) (managedDisks []compute.ManagedDisk) {
    18  
    19  	for _, resource := range deployment.GetResourcesByType("Microsoft.Compute/disks") {
    20  		managedDisks = append(managedDisks, adaptManagedDisk(resource))
    21  	}
    22  
    23  	return managedDisks
    24  }
    25  
    26  func adaptManagedDisk(resource azure.Resource) compute.ManagedDisk {
    27  	hasEncryption := resource.Properties.HasKey("encryption")
    28  
    29  	return compute.ManagedDisk{
    30  		Metadata: resource.Metadata,
    31  		Encryption: compute.Encryption{
    32  			Metadata: resource.Metadata,
    33  			Enabled:  defsecTypes.Bool(hasEncryption, resource.Metadata),
    34  		},
    35  	}
    36  }
    37  
    38  func adaptWindowsVirtualMachines(deployment azure.Deployment) (windowsVirtualMachines []compute.WindowsVirtualMachine) {
    39  	for _, resource := range deployment.GetResourcesByType("Microsoft.Compute/virtualMachines") {
    40  		if resource.Properties.GetMapValue("osProfile").GetMapValue("windowsConfiguration").AsMap() != nil {
    41  			windowsVirtualMachines = append(windowsVirtualMachines, adaptWindowsVirtualMachine(resource))
    42  		}
    43  	}
    44  
    45  	return windowsVirtualMachines
    46  }
    47  
    48  func adaptWindowsVirtualMachine(resource azure.Resource) compute.WindowsVirtualMachine {
    49  	return compute.WindowsVirtualMachine{
    50  		Metadata: resource.Metadata,
    51  		VirtualMachine: compute.VirtualMachine{
    52  			Metadata: resource.Metadata,
    53  			CustomData: resource.Properties.GetMapValue("osProfile").
    54  				GetMapValue("customData").AsStringValue("", resource.Metadata),
    55  		},
    56  	}
    57  }
    58  
    59  func adaptLinuxVirtualMachines(deployment azure.Deployment) (linuxVirtualMachines []compute.LinuxVirtualMachine) {
    60  	for _, resource := range deployment.GetResourcesByType("Microsoft.Compute/virtualMachines") {
    61  		if resource.Properties.GetMapValue("osProfile").GetMapValue("linuxConfiguration").AsMap() != nil {
    62  			linuxVirtualMachines = append(linuxVirtualMachines, adaptLinuxVirtualMachine(resource))
    63  		}
    64  	}
    65  
    66  	return linuxVirtualMachines
    67  }
    68  
    69  func adaptLinuxVirtualMachine(resource azure.Resource) compute.LinuxVirtualMachine {
    70  	return compute.LinuxVirtualMachine{
    71  		Metadata: resource.Metadata,
    72  		VirtualMachine: compute.VirtualMachine{
    73  			Metadata: resource.Metadata,
    74  			CustomData: resource.Properties.GetMapValue("osProfile").
    75  				GetMapValue("customData").AsStringValue("", resource.Metadata),
    76  		},
    77  		OSProfileLinuxConfig: compute.OSProfileLinuxConfig{
    78  			Metadata: resource.Metadata,
    79  			DisablePasswordAuthentication: resource.Properties.GetMapValue("osProfile").
    80  				GetMapValue("linuxConfiguration").
    81  				GetMapValue("disablePasswordAuthentication").AsBoolValue(false, resource.Metadata),
    82  		},
    83  	}
    84  
    85  }