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

     1  package storage
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/khulnasoft-lab/defsec/pkg/providers/azure/storage"
     7  	"github.com/khulnasoft-lab/defsec/pkg/scanners/azure"
     8  
     9  	"github.com/khulnasoft-lab/defsec/pkg/types"
    10  )
    11  
    12  func Adapt(deployment azure.Deployment) storage.Storage {
    13  	return storage.Storage{
    14  		Accounts: adaptAccounts(deployment),
    15  	}
    16  }
    17  
    18  func adaptAccounts(deployment azure.Deployment) []storage.Account {
    19  	var accounts []storage.Account
    20  	for _, resource := range deployment.GetResourcesByType("Microsoft.Storage/storageAccounts") {
    21  
    22  		var networkRules []storage.NetworkRule
    23  		for _, acl := range resource.Properties.GetMapValue("networkAcls").AsList() {
    24  
    25  			var bypasses []types.StringValue
    26  			bypassProp := acl.GetMapValue("bypass")
    27  			for _, bypass := range strings.Split(bypassProp.AsString(), ",") {
    28  				bypasses = append(bypasses, types.String(bypass, bypassProp.GetMetadata()))
    29  			}
    30  
    31  			networkRules = append(networkRules, storage.NetworkRule{
    32  				Metadata:       acl.GetMetadata(),
    33  				Bypass:         bypasses,
    34  				AllowByDefault: types.Bool(acl.GetMapValue("defaultAction").EqualTo("Allow"), acl.GetMetadata()),
    35  			})
    36  		}
    37  
    38  		var queues []storage.Queue
    39  		for _, queueResource := range resource.GetResourcesByType("queueServices/queues") {
    40  			queues = append(queues, storage.Queue{
    41  				Metadata: queueResource.Metadata,
    42  				Name:     queueResource.Name.AsStringValue("", queueResource.Metadata),
    43  			})
    44  		}
    45  
    46  		var containers []storage.Container
    47  		for _, containerResource := range resource.GetResourcesByType("containerServices/containers") {
    48  			containers = append(containers, storage.Container{
    49  				Metadata:     containerResource.Metadata,
    50  				PublicAccess: containerResource.Properties.GetMapValue("publicAccess").AsStringValue("None", containerResource.Metadata),
    51  			})
    52  		}
    53  
    54  		account := storage.Account{
    55  			Metadata:     resource.Metadata,
    56  			NetworkRules: networkRules,
    57  			EnforceHTTPS: resource.Properties.GetMapValue("supportsHttpsTrafficOnly").AsBoolValue(false, resource.Properties.GetMetadata()),
    58  			Containers:   containers,
    59  			QueueProperties: storage.QueueProperties{
    60  				Metadata:      resource.Properties.GetMetadata(),
    61  				EnableLogging: types.BoolDefault(false, resource.Properties.GetMetadata()),
    62  			},
    63  			MinimumTLSVersion: resource.Properties.GetMapValue("minimumTlsVersion").AsStringValue("TLS1_0", resource.Properties.GetMetadata()),
    64  			Queues:            queues,
    65  		}
    66  		accounts = append(accounts, account)
    67  	}
    68  	return accounts
    69  }