Skip to content

Commit 1a26021

Browse files
committed
🧹 clean up azure fine grained assets
1 parent 9f94719 commit 1a26021

File tree

5 files changed

+104
-33
lines changed

5 files changed

+104
-33
lines changed

providers/azure/provider/provider.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"context"
88
"errors"
99

10-
"go.mondoo.com/cnquery/v12"
1110
"go.mondoo.com/cnquery/v12/llx"
1211
"go.mondoo.com/cnquery/v12/providers-sdk/v1/inventory"
1312
"go.mondoo.com/cnquery/v12/providers-sdk/v1/plugin"
@@ -140,11 +139,6 @@ func (s *Service) Connect(req *plugin.ConnectReq, callback plugin.ProviderCallba
140139
return nil, errors.New("no connection data provided")
141140
}
142141

143-
// If we get 1 connection that enables fine-grained assets, enable it globally for the provider
144-
if cnquery.Features(req.Features).IsActive(cnquery.FineGrainedAssets) {
145-
resources.ENABLE_FINE_GRAINED_ASSETS = true
146-
}
147-
148142
conn, err := s.connect(req, callback)
149143
if err != nil {
150144
return nil, err

providers/azure/resources/discovery.go

Lines changed: 64 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package resources
66
import (
77
"errors"
88
"fmt"
9+
"slices"
910
"strings"
1011

1112
"go.mondoo.com/cnquery/v12/llx"
@@ -17,8 +18,6 @@ import (
1718
subscriptions "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions"
1819
)
1920

20-
var ENABLE_FINE_GRAINED_ASSETS = false
21-
2221
const (
2322
SubscriptionLabel = "azure.mondoo.com/subscription"
2423
ResourceGroupLabel = "azure.mondoo.com/resourcegroup"
@@ -44,6 +43,31 @@ const (
4443
DiscoverySecurityGroups = "security-groups"
4544
)
4645

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+
4771
type azureObject struct {
4872
subscription string
4973
tenant *string
@@ -73,13 +97,35 @@ func MondooAzureInstanceID(instanceID string) string {
7397
return "//platformid.api.mondoo.app/runtime/azure" + instanceID
7498
}
7599

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+
76123
func Discover(runtime *plugin.Runtime, rootConf *inventory.Config) (*inventory.Inventory, error) {
77124
conn, ok := runtime.Connection.(*connection.AzureConnection)
78125
if !ok {
79126
return nil, errors.New("invalid connection provided, it is not an Azure connection")
80127
}
81128
assets := []*inventory.Asset{}
82-
targets := rootConf.GetDiscover().GetTargets()
83129
subsToInclude := rootConf.Options["subscriptions"]
84130
subsToExclude := rootConf.Options["subscriptions-exclude"]
85131
filter := connection.SubscriptionsFilter{}
@@ -101,16 +147,15 @@ func Discover(runtime *plugin.Runtime, rootConf *inventory.Config) (*inventory.I
101147
subsWithConfigs[i] = subWithConfig{sub: sub, conf: getSubConfig(conn.Conf, sub)}
102148
}
103149

104-
if stringx.ContainsAnyOf(targets, DiscoverySubscriptions, DiscoveryAll, DiscoveryAuto) {
150+
targets := getDiscoveryTargets(rootConf)
151+
152+
if stringx.ContainsAnyOf(targets, DiscoverySubscriptions) {
105153
// we've already discovered those, simply add them as assets
106154
for _, s := range subsWithConfigs {
107155
assets = append(assets, subToAsset(s))
108156
}
109157
}
110-
matchingTargets := []string{DiscoveryAll}
111-
if ENABLE_FINE_GRAINED_ASSETS {
112-
matchingTargets = append(matchingTargets, DiscoveryAuto)
113-
}
158+
114159
// FIXME: do not discover instances as OSes right now, only discover as API representations.
115160
if stringx.ContainsAnyOf(targets, DiscoveryInstances) {
116161
vms, err := discoverInstances(runtime, subsWithConfigs)
@@ -119,60 +164,60 @@ func Discover(runtime *plugin.Runtime, rootConf *inventory.Config) (*inventory.I
119164
}
120165
assets = append(assets, vms...)
121166
}
122-
if stringx.ContainsAnyOf(targets, append(matchingTargets, DiscoveryInstancesApi)...) {
167+
if stringx.ContainsAnyOf(targets, DiscoveryInstancesApi) {
123168
vms, err := discoverInstancesApi(runtime, subsWithConfigs)
124169
if err != nil {
125170
return nil, err
126171
}
127172
assets = append(assets, vms...)
128173
}
129-
if stringx.ContainsAnyOf(targets, append(matchingTargets, DiscoverySqlServers)...) {
174+
if stringx.ContainsAnyOf(targets, DiscoverySqlServers) {
130175
sqlServers, err := discoverSqlServers(runtime, subsWithConfigs)
131176
if err != nil {
132177
return nil, err
133178
}
134179
assets = append(assets, sqlServers...)
135180
}
136-
if stringx.ContainsAnyOf(targets, append(matchingTargets, DiscoveryMySqlServers)...) {
181+
if stringx.ContainsAnyOf(targets, DiscoveryMySqlServers) {
137182
mySqlServers, err := discoverMySqlServers(runtime, subsWithConfigs)
138183
if err != nil {
139184
return nil, err
140185
}
141186
assets = append(assets, mySqlServers...)
142187
}
143-
if stringx.ContainsAnyOf(targets, append(matchingTargets, DiscoveryMySqlFlexibleServers)...) {
188+
if stringx.ContainsAnyOf(targets, DiscoveryMySqlFlexibleServers) {
144189
flexibleServers, err := discoverMySqlFlexibleServers(runtime, subsWithConfigs)
145190
if err != nil {
146191
return nil, err
147192
}
148193
assets = append(assets, flexibleServers...)
149194
}
150195

151-
if stringx.ContainsAnyOf(targets, append(matchingTargets, DiscoveryPostgresServers)...) {
196+
if stringx.ContainsAnyOf(targets, DiscoveryPostgresServers) {
152197
postgresServers, err := discoverPostgresqlServers(runtime, subsWithConfigs)
153198
if err != nil {
154199
return nil, err
155200
}
156201
assets = append(assets, postgresServers...)
157202
}
158203

159-
if stringx.ContainsAnyOf(targets, append(matchingTargets, DiscoveryPostgresFlexibleServers)...) {
204+
if stringx.ContainsAnyOf(targets, DiscoveryPostgresFlexibleServers) {
160205
flexibleServers, err := discoverPostgresqlFlexibleServers(runtime, subsWithConfigs)
161206
if err != nil {
162207
return nil, err
163208
}
164209
assets = append(assets, flexibleServers...)
165210
}
166211

167-
if stringx.ContainsAnyOf(targets, append(matchingTargets, DiscoveryMariaDbServers)...) {
212+
if stringx.ContainsAnyOf(targets, DiscoveryMariaDbServers) {
168213
mariaDbServers, err := discoverMariadbServers(runtime, subsWithConfigs)
169214
if err != nil {
170215
return nil, err
171216
}
172217
assets = append(assets, mariaDbServers...)
173218
}
174219

175-
if stringx.ContainsAnyOf(targets, append(matchingTargets, DiscoveryStorageAccounts)...) {
220+
if stringx.ContainsAnyOf(targets, DiscoveryStorageAccounts) {
176221
accs, err := discoverStorageAccounts(runtime, subsWithConfigs)
177222
if err != nil {
178223
return nil, err
@@ -181,21 +226,21 @@ func Discover(runtime *plugin.Runtime, rootConf *inventory.Config) (*inventory.I
181226
}
182227

183228
// 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) {
185230
containers, err := discoverStorageAccountsContainers(runtime, subsWithConfigs)
186231
if err != nil {
187232
return nil, err
188233
}
189234
assets = append(assets, containers...)
190235
}
191-
if stringx.ContainsAnyOf(targets, append(matchingTargets, DiscoverySecurityGroups)...) {
236+
if stringx.ContainsAnyOf(targets, DiscoverySecurityGroups) {
192237
secGrps, err := discoverSecurityGroups(runtime, subsWithConfigs)
193238
if err != nil {
194239
return nil, err
195240
}
196241
assets = append(assets, secGrps...)
197242
}
198-
if stringx.ContainsAnyOf(targets, append(matchingTargets, DiscoveryKeyVaults)...) {
243+
if stringx.ContainsAnyOf(targets, DiscoveryKeyVaults) {
199244
kvs, err := discoverVaults(runtime, subsWithConfigs)
200245
if err != nil {
201246
return nil, err
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package resources
2+
3+
import (
4+
"sort"
5+
"testing"
6+
7+
"github.com/stretchr/testify/require"
8+
"go.mondoo.com/cnquery/v12/providers-sdk/v1/inventory"
9+
)
10+
11+
func TestGetDiscoveryTargets(t *testing.T) {
12+
config := &inventory.Config{
13+
Discover: &inventory.Discovery{
14+
Targets: []string{},
15+
},
16+
}
17+
// test all with other stuff
18+
config.Discover.Targets = []string{"all", "projects", "instances"}
19+
require.Equal(t, allDiscovery(), getDiscoveryTargets(config))
20+
21+
// test just all
22+
config.Discover.Targets = []string{"all"}
23+
require.Equal(t, allDiscovery(), getDiscoveryTargets(config))
24+
25+
// test auto with other stuff
26+
config.Discover.Targets = []string{"auto", "postgres-servers", "keyvaults-vaults"}
27+
res := append(Auto, []string{DiscoveryPostgresServers, DiscoveryKeyVaults}...)
28+
sort.Strings(res)
29+
targets := getDiscoveryTargets(config)
30+
sort.Strings(targets)
31+
require.Equal(t, res, targets)
32+
33+
// test just auto
34+
config.Discover.Targets = []string{"auto"}
35+
require.Equal(t, Auto, getDiscoveryTargets(config))
36+
37+
// test random
38+
config.Discover.Targets = []string{"postgres-servers", "keyvaults-vaults", "instances"}
39+
require.Equal(t, []string{DiscoveryPostgresServers, DiscoveryKeyVaults, DiscoveryInstances}, getDiscoveryTargets(config))
40+
}

providers/gcp/provider/provider.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
"go.mondoo.com/ranger-rpc/codes"
1515
"go.mondoo.com/ranger-rpc/status"
1616

17-
"go.mondoo.com/cnquery/v12"
1817
"go.mondoo.com/cnquery/v12/llx"
1918
"go.mondoo.com/cnquery/v12/providers-sdk/v1/inventory"
2019
"go.mondoo.com/cnquery/v12/providers-sdk/v1/plugin"
@@ -188,11 +187,6 @@ func (s *Service) Connect(req *plugin.ConnectReq, callback plugin.ProviderCallba
188187
return nil, errors.New("no connection data provided")
189188
}
190189

191-
// If we get 1 connection that enables fine-grained assets, enable it globally for the provider
192-
if cnquery.Features(req.Features).IsActive(cnquery.FineGrainedAssets) {
193-
resources.ENABLE_FINE_GRAINED_ASSETS = true
194-
}
195-
196190
conn, err := s.connect(req, callback)
197191
if err != nil {
198192
return nil, err

providers/gcp/resources/discovery.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ import (
2121
"google.golang.org/api/cloudresourcemanager/v3"
2222
)
2323

24-
var ENABLE_FINE_GRAINED_ASSETS = false
25-
2624
const (
2725
// Discovery flags
2826
DiscoveryAuto = "auto"

0 commit comments

Comments
 (0)