Skip to content

Commit 62a5f7f

Browse files
syrullafiune
andauthored
🐛 fix azure provider to use the right settings types (#5415)
* Fix for the azure provider to use the right settings types * spelling fix * 🧹 apply suggestions from code review --------- Co-authored-by: Salim Afiune Maya <[email protected]>
1 parent ebb77e5 commit 62a5f7f

File tree

4 files changed

+76
-16
lines changed

4 files changed

+76
-16
lines changed

providers/azure/resources/azure.lr

+2
Original file line numberDiff line numberDiff line change
@@ -1802,6 +1802,8 @@ private azure.subscription.cloudDefenderService.settings @defaults("name kind")
18021802
kind string
18031803
// The settings type
18041804
type string
1805+
// The properties dict (enabled)
1806+
properties dict
18051807
}
18061808

18071809
// Microsoft Defender for Cloud security contact

providers/azure/resources/azure.lr.go

+12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

providers/azure/resources/azure.lr.manifest.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,7 @@ resources:
459459
id: {}
460460
kind: {}
461461
name: {}
462+
properties: {}
462463
type: {}
463464
is_private: true
464465
min_mondoo_version: 9.0.0

providers/azure/resources/cloud_defender.go

+61-16
Original file line numberDiff line numberDiff line change
@@ -450,12 +450,15 @@ func (a *mqlAzureSubscriptionCloudDefenderService) defenderForContainers() (inte
450450
func (a *mqlAzureSubscriptionCloudDefenderService) settingsMCAS() (*mqlAzureSubscriptionCloudDefenderServiceSettings, error) {
451451
return a.getSecuritySettingsFor(security.SettingNameAutoGeneratedMCAS)
452452
}
453+
453454
func (a *mqlAzureSubscriptionCloudDefenderService) settingsWDATP() (*mqlAzureSubscriptionCloudDefenderServiceSettings, error) {
454455
return a.getSecuritySettingsFor(security.SettingNameAutoGeneratedWDATP)
455456
}
457+
456458
func (a *mqlAzureSubscriptionCloudDefenderService) settingsSentinel() (*mqlAzureSubscriptionCloudDefenderServiceSettings, error) {
457459
return a.getSecuritySettingsFor(security.SettingNameAutoGeneratedSentinel)
458460
}
461+
459462
func (a *mqlAzureSubscriptionCloudDefenderService) getSecuritySettingsFor(name security.SettingNameAutoGenerated) (*mqlAzureSubscriptionCloudDefenderServiceSettings, error) {
460463
conn := a.MqlRuntime.Connection.(*connection.AzureConnection)
461464
ctx := context.Background()
@@ -465,28 +468,69 @@ func (a *mqlAzureSubscriptionCloudDefenderService) getSecuritySettingsFor(name s
465468
if err != nil {
466469
return nil, err
467470
}
468-
response, err := clientFactory.NewSettingsClient().Get(ctx, name, nil)
471+
472+
settingResp, err := clientFactory.NewSettingsClient().Get(ctx, name, nil)
469473
if err != nil {
470474
return nil, err
471475
}
472-
settings := response.GetSetting()
473-
if settings == nil {
474-
return nil, fmt.Errorf("unable to get %s security settings, response was empty", name)
476+
477+
baseSetting := settingResp.SettingClassification.GetSetting()
478+
if baseSetting == nil || baseSetting.Kind == nil {
479+
return nil, fmt.Errorf("retrieved setting or its kind is nil for '%s'", name)
475480
}
476481

477-
mqlMCAS, err := CreateResource(a.MqlRuntime,
478-
"azure.subscription.cloudDefenderService.settings",
479-
map[string]*llx.RawData{
480-
"id": llx.StringDataPtr(settings.ID),
481-
"name": llx.StringDataPtr(settings.Name),
482-
"kind": llx.StringDataPtr((*string)(settings.Kind)),
483-
"type": llx.StringDataPtr(settings.Type),
484-
},
485-
)
486-
if err != nil {
487-
return nil, err
482+
switch *baseSetting.Kind {
483+
case armsecurity.SettingKindDataExportSettings:
484+
// Handles MCAS and Sentinel
485+
settings, ok := settingResp.SettingClassification.(*armsecurity.DataExportSettings)
486+
if !ok {
487+
return nil, fmt.Errorf("failed assertion to DataExportSettings for kind '%s', setting '%s'. Actual type: %T", *baseSetting.Kind, name, settingResp.SettingClassification)
488+
}
489+
properties, err := convert.JsonToDict(settings.Properties)
490+
if err != nil {
491+
return nil, err
492+
}
493+
resource, err := CreateResource(a.MqlRuntime,
494+
"azure.subscription.cloudDefenderService.settings",
495+
map[string]*llx.RawData{
496+
"id": llx.StringDataPtr(settings.ID),
497+
"name": llx.StringDataPtr(settings.Name),
498+
"kind": llx.StringDataPtr((*string)(settings.Kind)),
499+
"type": llx.StringDataPtr(settings.Type),
500+
"properties": llx.DictData(properties),
501+
},
502+
)
503+
if err != nil {
504+
return nil, err
505+
}
506+
return resource.(*mqlAzureSubscriptionCloudDefenderServiceSettings), nil
507+
case armsecurity.SettingKindAlertSyncSettings:
508+
// Handles WDATP
509+
settings, ok := settingResp.SettingClassification.(*armsecurity.AlertSyncSettings)
510+
if !ok {
511+
return nil, fmt.Errorf("failed assertion to AlertSyncSettings for kind '%s', setting '%s'. Actual type: %T", *baseSetting.Kind, name, settingResp.SettingClassification)
512+
}
513+
properties, err := convert.JsonToDict(settings.Properties)
514+
if err != nil {
515+
return nil, err
516+
}
517+
resource, err := CreateResource(a.MqlRuntime,
518+
"azure.subscription.cloudDefenderService.settings",
519+
map[string]*llx.RawData{
520+
"id": llx.StringDataPtr(settings.ID),
521+
"name": llx.StringDataPtr(settings.Name),
522+
"kind": llx.StringDataPtr((*string)(settings.Kind)),
523+
"type": llx.StringDataPtr(settings.Type),
524+
"properties": llx.DictData(properties),
525+
},
526+
)
527+
if err != nil {
528+
return nil, err
529+
}
530+
return resource.(*mqlAzureSubscriptionCloudDefenderServiceSettings), nil
531+
default:
532+
return nil, fmt.Errorf("unsupported settings '%s' of kind '%s'", name, *baseSetting.Kind)
488533
}
489-
return mqlMCAS.(*mqlAzureSubscriptionCloudDefenderServiceSettings), nil
490534
}
491535

492536
func (s *mqlAzureSubscriptionCloudDefenderServiceSettings) id() (string, error) {
@@ -527,6 +571,7 @@ func (a *mqlAzureSubscriptionCloudDefenderService) securityContacts() ([]interfa
527571
}
528572
return res, nil
529573
}
574+
530575
func argsFromContactProperties(props *armsecurity.ContactProperties) map[string]*llx.RawData {
531576
args := map[string]*llx.RawData{}
532577
if props == nil {

0 commit comments

Comments
 (0)