@@ -6,6 +6,7 @@ package resources
6
6
import (
7
7
"errors"
8
8
"fmt"
9
+ "slices"
9
10
"strings"
10
11
11
12
"go.mondoo.com/cnquery/v12/llx"
@@ -17,8 +18,6 @@ import (
17
18
subscriptions "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions"
18
19
)
19
20
20
- var ENABLE_FINE_GRAINED_ASSETS = false
21
-
22
21
const (
23
22
SubscriptionLabel = "azure.mondoo.com/subscription"
24
23
ResourceGroupLabel = "azure.mondoo.com/resourcegroup"
@@ -44,6 +43,31 @@ const (
44
43
DiscoverySecurityGroups = "security-groups"
45
44
)
46
45
46
+ var All = []string {
47
+ DiscoverySubscriptions ,
48
+ DiscoveryInstances ,
49
+ }
50
+
51
+ var Auto = []string {DiscoverySubscriptions }
52
+
53
+ func allDiscovery () []string {
54
+ return append (All , AllAPIResources ... )
55
+ }
56
+
57
+ var AllAPIResources = []string {
58
+ DiscoveryInstancesApi ,
59
+ DiscoverySqlServers ,
60
+ DiscoveryPostgresServers ,
61
+ DiscoveryPostgresFlexibleServers ,
62
+ DiscoveryMySqlServers ,
63
+ DiscoveryMySqlFlexibleServers ,
64
+ DiscoveryMariaDbServers ,
65
+ DiscoveryStorageAccounts ,
66
+ DiscoveryStorageContainers ,
67
+ DiscoveryKeyVaults ,
68
+ DiscoverySecurityGroups ,
69
+ }
70
+
47
71
type azureObject struct {
48
72
subscription string
49
73
tenant * string
@@ -73,13 +97,35 @@ func MondooAzureInstanceID(instanceID string) string {
73
97
return "//platformid.api.mondoo.app/runtime/azure" + instanceID
74
98
}
75
99
100
+ func getDiscoveryTargets (config * inventory.Config ) []string {
101
+ targets := config .Discover .Targets
102
+ if len (targets ) == 0 {
103
+ return Auto
104
+ }
105
+ if stringx .ContainsAnyOf (targets , DiscoveryAll ) {
106
+ // return the All list + All Api Resources list
107
+ return allDiscovery ()
108
+ }
109
+ if stringx .ContainsAnyOf (targets , DiscoveryAuto ) {
110
+ for i , target := range targets {
111
+ if target == DiscoveryAuto {
112
+ // remove the auto keyword
113
+ targets = slices .Delete (targets , i , i + 1 )
114
+ }
115
+ }
116
+ // add in the required discovery targets
117
+ return append (targets , Auto ... )
118
+ }
119
+ // random assortment of targets
120
+ return targets
121
+ }
122
+
76
123
func Discover (runtime * plugin.Runtime , rootConf * inventory.Config ) (* inventory.Inventory , error ) {
77
124
conn , ok := runtime .Connection .(* connection.AzureConnection )
78
125
if ! ok {
79
126
return nil , errors .New ("invalid connection provided, it is not an Azure connection" )
80
127
}
81
128
assets := []* inventory.Asset {}
82
- targets := rootConf .GetDiscover ().GetTargets ()
83
129
subsToInclude := rootConf .Options ["subscriptions" ]
84
130
subsToExclude := rootConf .Options ["subscriptions-exclude" ]
85
131
filter := connection.SubscriptionsFilter {}
@@ -101,16 +147,15 @@ func Discover(runtime *plugin.Runtime, rootConf *inventory.Config) (*inventory.I
101
147
subsWithConfigs [i ] = subWithConfig {sub : sub , conf : getSubConfig (conn .Conf , sub )}
102
148
}
103
149
104
- if stringx .ContainsAnyOf (targets , DiscoverySubscriptions , DiscoveryAll , DiscoveryAuto ) {
150
+ targets := getDiscoveryTargets (rootConf )
151
+
152
+ if stringx .ContainsAnyOf (targets , DiscoverySubscriptions ) {
105
153
// we've already discovered those, simply add them as assets
106
154
for _ , s := range subsWithConfigs {
107
155
assets = append (assets , subToAsset (s ))
108
156
}
109
157
}
110
- matchingTargets := []string {DiscoveryAll }
111
- if ENABLE_FINE_GRAINED_ASSETS {
112
- matchingTargets = append (matchingTargets , DiscoveryAuto )
113
- }
158
+
114
159
// FIXME: do not discover instances as OSes right now, only discover as API representations.
115
160
if stringx .ContainsAnyOf (targets , DiscoveryInstances ) {
116
161
vms , err := discoverInstances (runtime , subsWithConfigs )
@@ -119,60 +164,60 @@ func Discover(runtime *plugin.Runtime, rootConf *inventory.Config) (*inventory.I
119
164
}
120
165
assets = append (assets , vms ... )
121
166
}
122
- if stringx .ContainsAnyOf (targets , append ( matchingTargets , DiscoveryInstancesApi ) ... ) {
167
+ if stringx .ContainsAnyOf (targets , DiscoveryInstancesApi ) {
123
168
vms , err := discoverInstancesApi (runtime , subsWithConfigs )
124
169
if err != nil {
125
170
return nil , err
126
171
}
127
172
assets = append (assets , vms ... )
128
173
}
129
- if stringx .ContainsAnyOf (targets , append ( matchingTargets , DiscoverySqlServers ) ... ) {
174
+ if stringx .ContainsAnyOf (targets , DiscoverySqlServers ) {
130
175
sqlServers , err := discoverSqlServers (runtime , subsWithConfigs )
131
176
if err != nil {
132
177
return nil , err
133
178
}
134
179
assets = append (assets , sqlServers ... )
135
180
}
136
- if stringx .ContainsAnyOf (targets , append ( matchingTargets , DiscoveryMySqlServers ) ... ) {
181
+ if stringx .ContainsAnyOf (targets , DiscoveryMySqlServers ) {
137
182
mySqlServers , err := discoverMySqlServers (runtime , subsWithConfigs )
138
183
if err != nil {
139
184
return nil , err
140
185
}
141
186
assets = append (assets , mySqlServers ... )
142
187
}
143
- if stringx .ContainsAnyOf (targets , append ( matchingTargets , DiscoveryMySqlFlexibleServers ) ... ) {
188
+ if stringx .ContainsAnyOf (targets , DiscoveryMySqlFlexibleServers ) {
144
189
flexibleServers , err := discoverMySqlFlexibleServers (runtime , subsWithConfigs )
145
190
if err != nil {
146
191
return nil , err
147
192
}
148
193
assets = append (assets , flexibleServers ... )
149
194
}
150
195
151
- if stringx .ContainsAnyOf (targets , append ( matchingTargets , DiscoveryPostgresServers ) ... ) {
196
+ if stringx .ContainsAnyOf (targets , DiscoveryPostgresServers ) {
152
197
postgresServers , err := discoverPostgresqlServers (runtime , subsWithConfigs )
153
198
if err != nil {
154
199
return nil , err
155
200
}
156
201
assets = append (assets , postgresServers ... )
157
202
}
158
203
159
- if stringx .ContainsAnyOf (targets , append ( matchingTargets , DiscoveryPostgresFlexibleServers ) ... ) {
204
+ if stringx .ContainsAnyOf (targets , DiscoveryPostgresFlexibleServers ) {
160
205
flexibleServers , err := discoverPostgresqlFlexibleServers (runtime , subsWithConfigs )
161
206
if err != nil {
162
207
return nil , err
163
208
}
164
209
assets = append (assets , flexibleServers ... )
165
210
}
166
211
167
- if stringx .ContainsAnyOf (targets , append ( matchingTargets , DiscoveryMariaDbServers ) ... ) {
212
+ if stringx .ContainsAnyOf (targets , DiscoveryMariaDbServers ) {
168
213
mariaDbServers , err := discoverMariadbServers (runtime , subsWithConfigs )
169
214
if err != nil {
170
215
return nil , err
171
216
}
172
217
assets = append (assets , mariaDbServers ... )
173
218
}
174
219
175
- if stringx .ContainsAnyOf (targets , append ( matchingTargets , DiscoveryStorageAccounts ) ... ) {
220
+ if stringx .ContainsAnyOf (targets , DiscoveryStorageAccounts ) {
176
221
accs , err := discoverStorageAccounts (runtime , subsWithConfigs )
177
222
if err != nil {
178
223
return nil , err
@@ -181,21 +226,21 @@ func Discover(runtime *plugin.Runtime, rootConf *inventory.Config) (*inventory.I
181
226
}
182
227
183
228
// FIXME: bring back the storage containers as as part of FF scanning once we can do parallel scanning
184
- if stringx .ContainsAnyOf (targets , DiscoveryAll , DiscoveryStorageContainers ) {
229
+ if stringx .ContainsAnyOf (targets , DiscoveryStorageContainers ) {
185
230
containers , err := discoverStorageAccountsContainers (runtime , subsWithConfigs )
186
231
if err != nil {
187
232
return nil , err
188
233
}
189
234
assets = append (assets , containers ... )
190
235
}
191
- if stringx .ContainsAnyOf (targets , append ( matchingTargets , DiscoverySecurityGroups ) ... ) {
236
+ if stringx .ContainsAnyOf (targets , DiscoverySecurityGroups ) {
192
237
secGrps , err := discoverSecurityGroups (runtime , subsWithConfigs )
193
238
if err != nil {
194
239
return nil , err
195
240
}
196
241
assets = append (assets , secGrps ... )
197
242
}
198
- if stringx .ContainsAnyOf (targets , append ( matchingTargets , DiscoveryKeyVaults ) ... ) {
243
+ if stringx .ContainsAnyOf (targets , DiscoveryKeyVaults ) {
199
244
kvs , err := discoverVaults (runtime , subsWithConfigs )
200
245
if err != nil {
201
246
return nil , err
0 commit comments