From 723878f52d03cca572215912ea7323a51971e447 Mon Sep 17 00:00:00 2001 From: kubasobon Date: Tue, 21 Jan 2025 10:36:07 +0100 Subject: [PATCH 01/21] add Azure Storage Tables fetcher --- internal/inventory/asset.go | 1 + .../inventory/azurefetcher/fetcher_storage.go | 2 ++ .../azurelib/inventory/storage_provider.go | 34 +++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/internal/inventory/asset.go b/internal/inventory/asset.go index 05fd3a7aa5..d79f0c4120 100644 --- a/internal/inventory/asset.go +++ b/internal/inventory/asset.go @@ -107,6 +107,7 @@ var ( AssetClassificationAzureStorageBlobService = AssetClassification{CategoryStorageBucket, "Azure Storage Blob Service"} AssetClassificationAzureStorageQueue = AssetClassification{CategoryMessagingService, "Azure Storage Queue"} AssetClassificationAzureStorageQueueService = AssetClassification{CategoryMessagingService, "Azure Storage Queue Service"} + AssetClassificationAzureStorageTableService = AssetClassification{CategoryMessagingService, "Azure Storage Table Service"} AssetClassificationAzureSubscription = AssetClassification{CategoryAccessManagement, "Azure Subscription"} AssetClassificationAzureTenant = AssetClassification{CategoryAccessManagement, "Azure Tenant"} AssetClassificationAzureVirtualMachine = AssetClassification{CategoryHost, "Azure Virtual Machine"} diff --git a/internal/inventory/azurefetcher/fetcher_storage.go b/internal/inventory/azurefetcher/fetcher_storage.go index d06d8c80f9..d3eae7bb6e 100644 --- a/internal/inventory/azurefetcher/fetcher_storage.go +++ b/internal/inventory/azurefetcher/fetcher_storage.go @@ -39,6 +39,7 @@ type ( ListStorageAccountBlobServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountQueues(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountQueueServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) + ListStorageAccountTableServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccounts(ctx context.Context, storageAccountsSubscriptionsIds []string) ([]azurelib.AzureAsset, error) } ) @@ -59,6 +60,7 @@ func (f *storageFetcher) Fetch(ctx context.Context, assetChan chan<- inventory.A {"Storage Blob Services", f.provider.ListStorageAccountBlobServices, inventory.AssetClassificationAzureStorageBlobService}, {"Storage Queue Services", f.provider.ListStorageAccountQueueServices, inventory.AssetClassificationAzureStorageQueueService}, {"Storage Queues", f.provider.ListStorageAccountQueues, inventory.AssetClassificationAzureStorageQueue}, + {"Storage Tables", f.provider.ListStorageAccountTableServices, inventory.AssetClassificationAzureStorageTableService}, } storageAccounts, err := f.listStorageAccounts(ctx) diff --git a/internal/resources/providers/azurelib/inventory/storage_provider.go b/internal/resources/providers/azurelib/inventory/storage_provider.go index 7d79519ae9..b86746c6f8 100644 --- a/internal/resources/providers/azurelib/inventory/storage_provider.go +++ b/internal/resources/providers/azurelib/inventory/storage_provider.go @@ -40,6 +40,7 @@ type storageAccountAzureClientWrapper struct { AssetBlobServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.BlobServicesClientListOptions) ([]armstorage.BlobServicesClientListResponse, error) AssetQueues func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.QueueClientListOptions) ([]armstorage.QueueClientListResponse, error) AssetQueueServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.QueueServicesClientListOptions) (armstorage.QueueServicesClientListResponse, error) + AssetTableServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.TableServicesClientListOptions) (armstorage.TableServicesClientListResponse, error) AssetAccountStorage func(ctx context.Context, subID string, clientOptions *arm.ClientOptions) ([]armstorage.AccountsClientListResponse, error) } @@ -50,6 +51,7 @@ type StorageAccountProviderAPI interface { ListStorageAccountQueueServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountsBlobDiagnosticSettings(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountsTableDiagnosticSettings(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) + ListStorageAccountsTableServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountsQueueDiagnosticSettings(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccounts(ctx context.Context, storageAccountsSubscriptionsIds []string) ([]AzureAsset, error) } @@ -231,6 +233,38 @@ func (p *storageAccountProvider) ListStorageAccountQueueServices(ctx context.Con return assets, nil } +func (p *storageAccountProvider) ListStorageAccountTableServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { + var assets []AzureAsset + for _, sa := range storageAccounts { + response, err := p.client.AssetTableServices(ctx, sa.SubscriptionId, nil, sa.ResourceGroup, sa.Name, nil) + if err != nil { + return nil, fmt.Errorf("error while fetching azure table services for storage accounts %s: %w", sa.Id, err) + } + + for _, item := range response.Value { + properties, err := maps.AsMapStringAny(item.TableServiceProperties) + if err != nil { + p.log.Errorf("error while transforming azure table services for storage accounts %s: %v", sa.Id, err) + } + + assets = append(assets, AzureAsset{ + Id: pointers.Deref(item.ID), + Name: pointers.Deref(item.Name), + Type: strings.ToLower(pointers.Deref(item.Type)), + ResourceGroup: sa.ResourceGroup, + SubscriptionId: sa.SubscriptionId, + TenantId: sa.TenantId, + Properties: properties, + Extension: map[string]any{ + ExtensionStorageAccountID: sa.Id, + ExtensionStorageAccountName: sa.Name, + }, + }) + } + } + return assets, nil +} + func transformBlobServices(servicesPages []armstorage.BlobServicesClientListResponse, storageAccount AzureAsset) ([]AzureAsset, error) { var errs error return lo.FlatMap(servicesPages, func(response armstorage.BlobServicesClientListResponse, _ int) []AzureAsset { From 9c58a649faab3dd9709d87b8f9eeb9b947c91d6b Mon Sep 17 00:00:00 2001 From: kubasobon Date: Tue, 21 Jan 2025 11:12:25 +0100 Subject: [PATCH 02/21] fix strings --- internal/inventory/azurefetcher/fetcher_storage.go | 2 +- .../providers/azurelib/inventory/storage_provider.go | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/internal/inventory/azurefetcher/fetcher_storage.go b/internal/inventory/azurefetcher/fetcher_storage.go index d3eae7bb6e..6fecd2478c 100644 --- a/internal/inventory/azurefetcher/fetcher_storage.go +++ b/internal/inventory/azurefetcher/fetcher_storage.go @@ -60,7 +60,7 @@ func (f *storageFetcher) Fetch(ctx context.Context, assetChan chan<- inventory.A {"Storage Blob Services", f.provider.ListStorageAccountBlobServices, inventory.AssetClassificationAzureStorageBlobService}, {"Storage Queue Services", f.provider.ListStorageAccountQueueServices, inventory.AssetClassificationAzureStorageQueueService}, {"Storage Queues", f.provider.ListStorageAccountQueues, inventory.AssetClassificationAzureStorageQueue}, - {"Storage Tables", f.provider.ListStorageAccountTableServices, inventory.AssetClassificationAzureStorageTableService}, + {"Storage Table Services", f.provider.ListStorageAccountTableServices, inventory.AssetClassificationAzureStorageTableService}, } storageAccounts, err := f.listStorageAccounts(ctx) diff --git a/internal/resources/providers/azurelib/inventory/storage_provider.go b/internal/resources/providers/azurelib/inventory/storage_provider.go index b86746c6f8..c732608d3e 100644 --- a/internal/resources/providers/azurelib/inventory/storage_provider.go +++ b/internal/resources/providers/azurelib/inventory/storage_provider.go @@ -51,7 +51,7 @@ type StorageAccountProviderAPI interface { ListStorageAccountQueueServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountsBlobDiagnosticSettings(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountsTableDiagnosticSettings(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) - ListStorageAccountsTableServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) + ListStorageAccountTableServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountsQueueDiagnosticSettings(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccounts(ctx context.Context, storageAccountsSubscriptionsIds []string) ([]AzureAsset, error) } @@ -90,6 +90,13 @@ func NewStorageAccountProvider(log *logp.Logger, diagnosticSettingsClient *armmo } return cl.List(ctx, resourceGroupName, storageAccountName, options) }, + AssetTableServices: func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroupName, storageAccountName string, options *armstorage.TableServicesClientListOptions) (armstorage.TableServicesClientListResponse, error) { + cl, err := armstorage.NewTableServicesClient(subID, credentials, clientOptions) + if err != nil { + return armstorage.TableServicesClientListResponse{}, err + } + return cl.List(ctx, resourceGroupName, storageAccountName, options) + }, AssetAccountStorage: func(ctx context.Context, subID string, clientOptions *arm.ClientOptions) ([]armstorage.AccountsClientListResponse, error) { accountsClient, err := armstorage.NewAccountsClient(subID, credentials, clientOptions) if err != nil { From b4b567526fc488be830dbbff0ae09f3494a989c8 Mon Sep 17 00:00:00 2001 From: kubasobon Date: Tue, 21 Jan 2025 11:12:57 +0100 Subject: [PATCH 03/21] fix poetry integration tests --- tests/product/tests/test_aws_asset_inventory.py | 2 +- tests/product/tests/test_azure_asset_inventory.py | 2 +- tests/product/tests/test_gcp_asset_inventory.py | 2 +- tests/pyproject.toml | 8 ++++++-- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/tests/product/tests/test_aws_asset_inventory.py b/tests/product/tests/test_aws_asset_inventory.py index 1fa0eefb80..ffb1e1a408 100644 --- a/tests/product/tests/test_aws_asset_inventory.py +++ b/tests/product/tests/test_aws_asset_inventory.py @@ -33,7 +33,7 @@ def test_aws_asset_inventory( assert isinstance(entities, list) and len(entities) > 0, "Expected the list to be non-empty" for entity in entities: assert entity.cloud, "Expected .cloud section" - assert entity.cloud.Provider == "aws", f'Expected "aws" provider, got {entity.cloud.Provider}' + assert entity.cloud.provider == "aws", f'Expected "aws" provider, got {entity.cloud.provider}' assert len(entity.entity.id) > 0, "Expected .entity.id list to contain an ID" assert len(entity.entity.id[0]) > 0, "Expected the ID to be non-empty" assert entity.Attributes, "Expected the resource under .Attributes" diff --git a/tests/product/tests/test_azure_asset_inventory.py b/tests/product/tests/test_azure_asset_inventory.py index 7b957fe7eb..bb68be638d 100644 --- a/tests/product/tests/test_azure_asset_inventory.py +++ b/tests/product/tests/test_azure_asset_inventory.py @@ -34,7 +34,7 @@ def test_azure_asset_inventory( assert isinstance(entities, list) and len(entities) > 0, "Expected the list to be non-empty" for entity in entities: assert entity.cloud, "Expected .cloud section" - assert entity.cloud.Provider == "azure", f'Expected "aws" provider, got {entity.cloud.Provider}' + assert entity.cloud.provider == "azure", f'Expected "aws" provider, got {entity.cloud.provider}' assert len(entity.entity.id) > 0, "Expected .entity.id list to contain an ID" assert len(entity.entity.id[0]) > 0, "Expected the ID to be non-empty" assert entity.Attributes, "Expected the resource under .Attributes" diff --git a/tests/product/tests/test_gcp_asset_inventory.py b/tests/product/tests/test_gcp_asset_inventory.py index f24c260b88..83ae9fc2c4 100644 --- a/tests/product/tests/test_gcp_asset_inventory.py +++ b/tests/product/tests/test_gcp_asset_inventory.py @@ -34,7 +34,7 @@ def test_gcp_asset_inventory( assert isinstance(entities, list) and len(entities) > 0, "Expected the list to be non-empty" for entity in entities: assert entity.cloud, "Expected .cloud section" - assert entity.cloud.Provider == "gcp", f'Expected "gcp" provider, got {entity.cloud.Provider}' + assert entity.cloud.provider == "gcp", f'Expected "gcp" provider, got {entity.cloud.provider}' assert len(entity.entity.id) > 0, "Expected .entity.id list to contain an ID" assert len(entity.entity.id[0]) > 0, "Expected the ID to be non-empty" assert entity.Attributes, "Expected the resource under .Attributes" diff --git a/tests/pyproject.toml b/tests/pyproject.toml index 93897a2115..74f5847a59 100644 --- a/tests/pyproject.toml +++ b/tests/pyproject.toml @@ -27,9 +27,13 @@ dependencies = [ packages = [ {include="fleet_api"} ] +name = "tests" +version = "0.1.0" +description = "Test project for cloudbeat agent" +authors = ["Cloudbeat Team"] -[tool.poetry.requires-plugins] -poetry-plugin-export = ">=1.8" +#[tool.poetry.requires-plugins] +#poetry-plugin-export = ">=1.8" [build-system] requires = ["poetry-core>=1.0.0"] From c43b50b218038a0ad55f91f0507d54427e7f5c02 Mon Sep 17 00:00:00 2001 From: kubasobon Date: Tue, 21 Jan 2025 11:13:18 +0100 Subject: [PATCH 04/21] add test case for Azure Storage Table Service --- tests/product/tests/data/azure_asset_inventory/test_cases.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/product/tests/data/azure_asset_inventory/test_cases.py b/tests/product/tests/data/azure_asset_inventory/test_cases.py index 5bb20df53e..fc8e49b8ab 100644 --- a/tests/product/tests/data/azure_asset_inventory/test_cases.py +++ b/tests/product/tests/data/azure_asset_inventory/test_cases.py @@ -77,4 +77,8 @@ category="Storage Bucket", type_="Azure Storage Blob Service", ), + "[Asset Inventory][Azure][Azure Table Service] assets found": AssetInventoryCase( + category="Messaging Service", + type_="Azure Storage Table Service", + ), } From 3906d043c024d8f0a2deae4f2630ae2aca89222d Mon Sep 17 00:00:00 2001 From: kubasobon Date: Tue, 21 Jan 2025 11:30:47 +0100 Subject: [PATCH 05/21] generate mocks --- .../azurefetcher/mock_storage_provider.go | 55 +++++++++++++++++++ .../mock_storage_account_provider_api.go | 55 +++++++++++++++++++ .../providers/azurelib/mock_provider_api.go | 55 +++++++++++++++++++ 3 files changed, 165 insertions(+) diff --git a/internal/inventory/azurefetcher/mock_storage_provider.go b/internal/inventory/azurefetcher/mock_storage_provider.go index 927c778f5c..6015a6c331 100644 --- a/internal/inventory/azurefetcher/mock_storage_provider.go +++ b/internal/inventory/azurefetcher/mock_storage_provider.go @@ -204,6 +204,61 @@ func (_c *mockStorageProvider_ListStorageAccountQueues_Call) RunAndReturn(run fu return _c } +// ListStorageAccountTableServices provides a mock function with given fields: ctx, storageAccounts +func (_m *mockStorageProvider) ListStorageAccountTableServices(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []inventory.AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) []inventory.AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]inventory.AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []inventory.AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// mockStorageProvider_ListStorageAccountTableServices_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountTableServices' +type mockStorageProvider_ListStorageAccountTableServices_Call struct { + *mock.Call +} + +// ListStorageAccountTableServices is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []inventory.AzureAsset +func (_e *mockStorageProvider_Expecter) ListStorageAccountTableServices(ctx interface{}, storageAccounts interface{}) *mockStorageProvider_ListStorageAccountTableServices_Call { + return &mockStorageProvider_ListStorageAccountTableServices_Call{Call: _e.mock.On("ListStorageAccountTableServices", ctx, storageAccounts)} +} + +func (_c *mockStorageProvider_ListStorageAccountTableServices_Call) Run(run func(ctx context.Context, storageAccounts []inventory.AzureAsset)) *mockStorageProvider_ListStorageAccountTableServices_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]inventory.AzureAsset)) + }) + return _c +} + +func (_c *mockStorageProvider_ListStorageAccountTableServices_Call) Return(_a0 []inventory.AzureAsset, _a1 error) *mockStorageProvider_ListStorageAccountTableServices_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *mockStorageProvider_ListStorageAccountTableServices_Call) RunAndReturn(run func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)) *mockStorageProvider_ListStorageAccountTableServices_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccounts provides a mock function with given fields: ctx, storageAccountsSubscriptionsIds func (_m *mockStorageProvider) ListStorageAccounts(ctx context.Context, storageAccountsSubscriptionsIds []string) ([]inventory.AzureAsset, error) { ret := _m.Called(ctx, storageAccountsSubscriptionsIds) diff --git a/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go b/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go index af7e18b82f..f2f0c7f369 100644 --- a/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go +++ b/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go @@ -260,6 +260,61 @@ func (_c *MockStorageAccountProviderAPI_ListStorageAccountQueues_Call) RunAndRet return _c } +// ListStorageAccountTableServices provides a mock function with given fields: ctx, storageAccounts +func (_m *MockStorageAccountProviderAPI) ListStorageAccountTableServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []AzureAsset) ([]AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []AzureAsset) []AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockStorageAccountProviderAPI_ListStorageAccountTableServices_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountTableServices' +type MockStorageAccountProviderAPI_ListStorageAccountTableServices_Call struct { + *mock.Call +} + +// ListStorageAccountTableServices is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []AzureAsset +func (_e *MockStorageAccountProviderAPI_Expecter) ListStorageAccountTableServices(ctx interface{}, storageAccounts interface{}) *MockStorageAccountProviderAPI_ListStorageAccountTableServices_Call { + return &MockStorageAccountProviderAPI_ListStorageAccountTableServices_Call{Call: _e.mock.On("ListStorageAccountTableServices", ctx, storageAccounts)} +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountTableServices_Call) Run(run func(ctx context.Context, storageAccounts []AzureAsset)) *MockStorageAccountProviderAPI_ListStorageAccountTableServices_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]AzureAsset)) + }) + return _c +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountTableServices_Call) Return(_a0 []AzureAsset, _a1 error) *MockStorageAccountProviderAPI_ListStorageAccountTableServices_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountTableServices_Call) RunAndReturn(run func(context.Context, []AzureAsset) ([]AzureAsset, error)) *MockStorageAccountProviderAPI_ListStorageAccountTableServices_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccounts provides a mock function with given fields: ctx, storageAccountsSubscriptionsIds func (_m *MockStorageAccountProviderAPI) ListStorageAccounts(ctx context.Context, storageAccountsSubscriptionsIds []string) ([]AzureAsset, error) { ret := _m.Called(ctx, storageAccountsSubscriptionsIds) diff --git a/internal/resources/providers/azurelib/mock_provider_api.go b/internal/resources/providers/azurelib/mock_provider_api.go index 7f70723b7d..892868327d 100644 --- a/internal/resources/providers/azurelib/mock_provider_api.go +++ b/internal/resources/providers/azurelib/mock_provider_api.go @@ -1385,6 +1385,61 @@ func (_c *MockProviderAPI_ListStorageAccountQueues_Call) RunAndReturn(run func(c return _c } +// ListStorageAccountTableServices provides a mock function with given fields: ctx, storageAccounts +func (_m *MockProviderAPI) ListStorageAccountTableServices(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []inventory.AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) []inventory.AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]inventory.AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []inventory.AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockProviderAPI_ListStorageAccountTableServices_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountTableServices' +type MockProviderAPI_ListStorageAccountTableServices_Call struct { + *mock.Call +} + +// ListStorageAccountTableServices is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []inventory.AzureAsset +func (_e *MockProviderAPI_Expecter) ListStorageAccountTableServices(ctx interface{}, storageAccounts interface{}) *MockProviderAPI_ListStorageAccountTableServices_Call { + return &MockProviderAPI_ListStorageAccountTableServices_Call{Call: _e.mock.On("ListStorageAccountTableServices", ctx, storageAccounts)} +} + +func (_c *MockProviderAPI_ListStorageAccountTableServices_Call) Run(run func(ctx context.Context, storageAccounts []inventory.AzureAsset)) *MockProviderAPI_ListStorageAccountTableServices_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]inventory.AzureAsset)) + }) + return _c +} + +func (_c *MockProviderAPI_ListStorageAccountTableServices_Call) Return(_a0 []inventory.AzureAsset, _a1 error) *MockProviderAPI_ListStorageAccountTableServices_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockProviderAPI_ListStorageAccountTableServices_Call) RunAndReturn(run func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)) *MockProviderAPI_ListStorageAccountTableServices_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccounts provides a mock function with given fields: ctx, storageAccountsSubscriptionsIds func (_m *MockProviderAPI) ListStorageAccounts(ctx context.Context, storageAccountsSubscriptionsIds []string) ([]inventory.AzureAsset, error) { ret := _m.Called(ctx, storageAccountsSubscriptionsIds) From c908c66694face7be49526cb94d2f91ca2674405 Mon Sep 17 00:00:00 2001 From: kubasobon Date: Tue, 21 Jan 2025 12:30:44 +0100 Subject: [PATCH 06/21] fix existing test cases --- .../azurefetcher/fetcher_storage_test.go | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/internal/inventory/azurefetcher/fetcher_storage_test.go b/internal/inventory/azurefetcher/fetcher_storage_test.go index 078ff94641..78c3f1ce26 100644 --- a/internal/inventory/azurefetcher/fetcher_storage_test.go +++ b/internal/inventory/azurefetcher/fetcher_storage_test.go @@ -51,6 +51,11 @@ func TestStorageFetcher_Fetch(t *testing.T) { Name: "queue", DisplayName: "queue", } + azureTableService := azurelib_inventory.AzureAsset{ + Id: "queue", + Name: "queue", + DisplayName: "queue", + } expected := []inventory.AssetEvent{ inventory.NewAssetEvent( @@ -83,6 +88,16 @@ func TestStorageFetcher_Fetch(t *testing.T) { ServiceName: "Azure", }), ), + inventory.NewAssetEvent( + inventory.AssetClassificationAzureStorageTableService, + azureQueue.Id, + azureQueue.Name, + inventory.WithRawAsset(azureTableService), + inventory.WithCloud(inventory.Cloud{ + Provider: inventory.AzureCloudProvider, + ServiceName: "Azure", + }), + ), } // setup @@ -119,6 +134,12 @@ func TestStorageFetcher_Fetch(t *testing.T) { []azurelib_inventory.AzureAsset{azureQueue}, nil, ) + provider.EXPECT().ListStorageAccountTableServices( + mock.Anything, mock.Anything, + ).Return( + []azurelib_inventory.AzureAsset{azureTableService}, nil, + ) + fetcher := newStorageFetcher(logger, provider) // test & compare testutil.CollectResourcesAndMatch(t, fetcher, expected) From 389c3a3db75c249cb4abded12dabe2e06c69447f Mon Sep 17 00:00:00 2001 From: kubasobon Date: Wed, 22 Jan 2025 12:24:28 +0100 Subject: [PATCH 07/21] add File Services fetcher --- internal/inventory/asset.go | 3 +- .../inventory/azurefetcher/fetcher_storage.go | 2 + .../azurefetcher/fetcher_storage_test.go | 21 ++++++ .../azurefetcher/mock_storage_provider.go | 55 ++++++++++++++ .../mock_storage_account_provider_api.go | 55 ++++++++++++++ .../azurelib/inventory/storage_provider.go | 42 +++++++++++ .../inventory/storage_provider_test.go | 71 +++++++++++++++++++ .../providers/azurelib/mock_provider_api.go | 55 ++++++++++++++ 8 files changed, 303 insertions(+), 1 deletion(-) diff --git a/internal/inventory/asset.go b/internal/inventory/asset.go index d79f0c4120..9801d67a2b 100644 --- a/internal/inventory/asset.go +++ b/internal/inventory/asset.go @@ -105,9 +105,10 @@ var ( AssetClassificationAzureSnapshot = AssetClassification{CategorySnapshot, "Azure Snapshot"} AssetClassificationAzureStorageAccount = AssetClassification{CategoryPrivateEndpoint, "Azure Storage Account"} AssetClassificationAzureStorageBlobService = AssetClassification{CategoryStorageBucket, "Azure Storage Blob Service"} + AssetClassificationAzureStorageFileService = AssetClassification{CategoryStorageBucket, "Azure Storage File Service"} AssetClassificationAzureStorageQueue = AssetClassification{CategoryMessagingService, "Azure Storage Queue"} AssetClassificationAzureStorageQueueService = AssetClassification{CategoryMessagingService, "Azure Storage Queue Service"} - AssetClassificationAzureStorageTableService = AssetClassification{CategoryMessagingService, "Azure Storage Table Service"} + AssetClassificationAzureStorageTableService = AssetClassification{CategoryDatabase, "Azure Storage Table Service"} AssetClassificationAzureSubscription = AssetClassification{CategoryAccessManagement, "Azure Subscription"} AssetClassificationAzureTenant = AssetClassification{CategoryAccessManagement, "Azure Tenant"} AssetClassificationAzureVirtualMachine = AssetClassification{CategoryHost, "Azure Virtual Machine"} diff --git a/internal/inventory/azurefetcher/fetcher_storage.go b/internal/inventory/azurefetcher/fetcher_storage.go index 6fecd2478c..989bbaed5f 100644 --- a/internal/inventory/azurefetcher/fetcher_storage.go +++ b/internal/inventory/azurefetcher/fetcher_storage.go @@ -37,6 +37,7 @@ type ( storageProvider interface { ListSubscriptions(ctx context.Context) ([]azurelib.AzureAsset, error) ListStorageAccountBlobServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) + ListStorageAccountFileServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountQueues(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountQueueServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountTableServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) @@ -58,6 +59,7 @@ func (f *storageFetcher) Fetch(ctx context.Context, assetChan chan<- inventory.A classification inventory.AssetClassification }{ {"Storage Blob Services", f.provider.ListStorageAccountBlobServices, inventory.AssetClassificationAzureStorageBlobService}, + {"Storage File Services", f.provider.ListStorageAccountFileServices, inventory.AssetClassificationAzureStorageFileService}, {"Storage Queue Services", f.provider.ListStorageAccountQueueServices, inventory.AssetClassificationAzureStorageQueueService}, {"Storage Queues", f.provider.ListStorageAccountQueues, inventory.AssetClassificationAzureStorageQueue}, {"Storage Table Services", f.provider.ListStorageAccountTableServices, inventory.AssetClassificationAzureStorageTableService}, diff --git a/internal/inventory/azurefetcher/fetcher_storage_test.go b/internal/inventory/azurefetcher/fetcher_storage_test.go index 78c3f1ce26..a49bc97f82 100644 --- a/internal/inventory/azurefetcher/fetcher_storage_test.go +++ b/internal/inventory/azurefetcher/fetcher_storage_test.go @@ -41,6 +41,11 @@ func TestStorageFetcher_Fetch(t *testing.T) { Name: "blob_service", DisplayName: "blob_service", } + azureFileService := azurelib_inventory.AzureAsset{ + Id: "file_service", + Name: "file_service", + DisplayName: "file_service", + } azureQueueService := azurelib_inventory.AzureAsset{ Id: "queue_service", Name: "queue_service", @@ -68,6 +73,16 @@ func TestStorageFetcher_Fetch(t *testing.T) { ServiceName: "Azure", }), ), + inventory.NewAssetEvent( + inventory.AssetClassificationAzureStorageFileService, + azureFileService.Id, + azureFileService.Name, + inventory.WithRawAsset(azureFileService), + inventory.WithCloud(inventory.Cloud{ + Provider: inventory.AzureCloudProvider, + ServiceName: "Azure", + }), + ), inventory.NewAssetEvent( inventory.AssetClassificationAzureStorageQueueService, azureQueueService.Id, @@ -122,6 +137,12 @@ func TestStorageFetcher_Fetch(t *testing.T) { []azurelib_inventory.AzureAsset{azureBlobService}, nil, ) + provider.EXPECT().ListStorageAccountFileServices( + mock.Anything, mock.Anything, + ).Return( + []azurelib_inventory.AzureAsset{azureFileService}, nil, + ) + provider.EXPECT().ListStorageAccountQueueServices( mock.Anything, mock.Anything, ).Return( diff --git a/internal/inventory/azurefetcher/mock_storage_provider.go b/internal/inventory/azurefetcher/mock_storage_provider.go index 6015a6c331..aa4e17f913 100644 --- a/internal/inventory/azurefetcher/mock_storage_provider.go +++ b/internal/inventory/azurefetcher/mock_storage_provider.go @@ -94,6 +94,61 @@ func (_c *mockStorageProvider_ListStorageAccountBlobServices_Call) RunAndReturn( return _c } +// ListStorageAccountFileServices provides a mock function with given fields: ctx, storageAccounts +func (_m *mockStorageProvider) ListStorageAccountFileServices(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []inventory.AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) []inventory.AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]inventory.AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []inventory.AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// mockStorageProvider_ListStorageAccountFileServices_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountFileServices' +type mockStorageProvider_ListStorageAccountFileServices_Call struct { + *mock.Call +} + +// ListStorageAccountFileServices is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []inventory.AzureAsset +func (_e *mockStorageProvider_Expecter) ListStorageAccountFileServices(ctx interface{}, storageAccounts interface{}) *mockStorageProvider_ListStorageAccountFileServices_Call { + return &mockStorageProvider_ListStorageAccountFileServices_Call{Call: _e.mock.On("ListStorageAccountFileServices", ctx, storageAccounts)} +} + +func (_c *mockStorageProvider_ListStorageAccountFileServices_Call) Run(run func(ctx context.Context, storageAccounts []inventory.AzureAsset)) *mockStorageProvider_ListStorageAccountFileServices_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]inventory.AzureAsset)) + }) + return _c +} + +func (_c *mockStorageProvider_ListStorageAccountFileServices_Call) Return(_a0 []inventory.AzureAsset, _a1 error) *mockStorageProvider_ListStorageAccountFileServices_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *mockStorageProvider_ListStorageAccountFileServices_Call) RunAndReturn(run func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)) *mockStorageProvider_ListStorageAccountFileServices_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccountQueueServices provides a mock function with given fields: ctx, storageAccounts func (_m *mockStorageProvider) ListStorageAccountQueueServices(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { ret := _m.Called(ctx, storageAccounts) diff --git a/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go b/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go index f2f0c7f369..ad31ff0b65 100644 --- a/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go +++ b/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go @@ -150,6 +150,61 @@ func (_c *MockStorageAccountProviderAPI_ListStorageAccountBlobServices_Call) Run return _c } +// ListStorageAccountFileServices provides a mock function with given fields: ctx, storageAccounts +func (_m *MockStorageAccountProviderAPI) ListStorageAccountFileServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []AzureAsset) ([]AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []AzureAsset) []AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockStorageAccountProviderAPI_ListStorageAccountFileServices_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountFileServices' +type MockStorageAccountProviderAPI_ListStorageAccountFileServices_Call struct { + *mock.Call +} + +// ListStorageAccountFileServices is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []AzureAsset +func (_e *MockStorageAccountProviderAPI_Expecter) ListStorageAccountFileServices(ctx interface{}, storageAccounts interface{}) *MockStorageAccountProviderAPI_ListStorageAccountFileServices_Call { + return &MockStorageAccountProviderAPI_ListStorageAccountFileServices_Call{Call: _e.mock.On("ListStorageAccountFileServices", ctx, storageAccounts)} +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountFileServices_Call) Run(run func(ctx context.Context, storageAccounts []AzureAsset)) *MockStorageAccountProviderAPI_ListStorageAccountFileServices_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]AzureAsset)) + }) + return _c +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountFileServices_Call) Return(_a0 []AzureAsset, _a1 error) *MockStorageAccountProviderAPI_ListStorageAccountFileServices_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountFileServices_Call) RunAndReturn(run func(context.Context, []AzureAsset) ([]AzureAsset, error)) *MockStorageAccountProviderAPI_ListStorageAccountFileServices_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccountQueueServices provides a mock function with given fields: ctx, storageAccounts func (_m *MockStorageAccountProviderAPI) ListStorageAccountQueueServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { ret := _m.Called(ctx, storageAccounts) diff --git a/internal/resources/providers/azurelib/inventory/storage_provider.go b/internal/resources/providers/azurelib/inventory/storage_provider.go index c732608d3e..5bf8ce703e 100644 --- a/internal/resources/providers/azurelib/inventory/storage_provider.go +++ b/internal/resources/providers/azurelib/inventory/storage_provider.go @@ -38,6 +38,7 @@ import ( type storageAccountAzureClientWrapper struct { AssetDiagnosticSettings func(ctx context.Context, subID string, options *armmonitor.DiagnosticSettingsClientListOptions) ([]armmonitor.DiagnosticSettingsClientListResponse, error) AssetBlobServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.BlobServicesClientListOptions) ([]armstorage.BlobServicesClientListResponse, error) + AssetFileServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.FileServicesClientListOptions) (armstorage.FileServicesClientListResponse, error) AssetQueues func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.QueueClientListOptions) ([]armstorage.QueueClientListResponse, error) AssetQueueServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.QueueServicesClientListOptions) (armstorage.QueueServicesClientListResponse, error) AssetTableServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.TableServicesClientListOptions) (armstorage.TableServicesClientListResponse, error) @@ -47,6 +48,7 @@ type storageAccountAzureClientWrapper struct { type StorageAccountProviderAPI interface { ListDiagnosticSettingsAssetTypes(ctx context.Context, cycleMetadata cycle.Metadata, subscriptionIDs []string) ([]AzureAsset, error) ListStorageAccountBlobServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) + ListStorageAccountFileServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountQueues(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountQueueServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountsBlobDiagnosticSettings(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) @@ -76,6 +78,13 @@ func NewStorageAccountProvider(log *logp.Logger, diagnosticSettingsClient *armmo } return readPager(ctx, cl.NewListPager(resourceGroupName, storageAccountName, options)) }, + AssetFileServices: func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroupName, storageAccountName string, options *armstorage.FileServicesClientListOptions) (armstorage.FileServicesClientListResponse, error) { + cl, err := armstorage.NewFileServicesClient(subID, credentials, clientOptions) + if err != nil { + return armstorage.FileServicesClientListResponse{}, err + } + return cl.List(ctx, resourceGroupName, storageAccountName, options) + }, AssetQueues: func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroupName, storageAccountName string, options *armstorage.QueueClientListOptions) ([]armstorage.QueueClientListResponse, error) { cl, err := armstorage.NewQueueClient(subID, credentials, clientOptions) if err != nil { @@ -189,6 +198,39 @@ func (p *storageAccountProvider) ListStorageAccountBlobServices(ctx context.Cont return assets, nil } +func (p *storageAccountProvider) ListStorageAccountFileServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { + var assets []AzureAsset + for _, sa := range storageAccounts { + response, err := p.client.AssetFileServices(ctx, sa.SubscriptionId, nil, sa.ResourceGroup, sa.Name, nil) + if err != nil { + return nil, fmt.Errorf("error while fetching azure blob services for storage accounts %s: %w", sa.Id, err) + } + + for _, item := range response.Value { + properties, err := maps.AsMapStringAny(item.FileServiceProperties) + if err != nil { + p.log.Errorf("error while transforming azure queue services for storage accounts %s: %v", sa.Id, err) + } + + assets = append(assets, AzureAsset{ + Id: pointers.Deref(item.ID), + Name: pointers.Deref(item.Name), + Type: strings.ToLower(pointers.Deref(item.Type)), + ResourceGroup: sa.ResourceGroup, + SubscriptionId: sa.SubscriptionId, + TenantId: sa.TenantId, + Properties: properties, + Extension: map[string]any{ + ExtensionStorageAccountID: sa.Id, + ExtensionStorageAccountName: sa.Name, + }, + }) + } + } + + return assets, nil +} + func (p *storageAccountProvider) ListStorageAccountQueues(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { var assets []AzureAsset for _, sa := range storageAccounts { diff --git a/internal/resources/providers/azurelib/inventory/storage_provider_test.go b/internal/resources/providers/azurelib/inventory/storage_provider_test.go index 13240c7c66..7893b9618f 100644 --- a/internal/resources/providers/azurelib/inventory/storage_provider_test.go +++ b/internal/resources/providers/azurelib/inventory/storage_provider_test.go @@ -379,6 +379,77 @@ func TestListStorageAccountBlobServices(t *testing.T) { } } +func TestListStorageAccountFileServices(t *testing.T) { + response := func(v []*armstorage.FileServiceProperties) armstorage.FileServicesClientListResponse { + return armstorage.FileServicesClientListResponse{ + FileServiceItems: armstorage.FileServiceItems{ + Value: v, + }, + } + } + + tests := map[string]struct { + input []*armstorage.FileServiceProperties + expected []AzureAsset + expectedError bool + }{ + "list file services": { + input: []*armstorage.FileServiceProperties{ + { + ID: pointers.Ref("/subscriptions//resourceGroups//providers/Microsoft.Storage/storageAccounts//fileServices/file1"), + Name: pointers.Ref("file1"), + Type: pointers.Ref("microsoft.storage/storageaccounts/fileservices"), + FileServiceProperties: nil, + }, + }, + expected: []AzureAsset{ + { + Id: "/subscriptions//resourceGroups//providers/Microsoft.Storage/storageAccounts//fileServices/file1", + Name: "file1", + Properties: nil, + Extension: map[string]any{ + "storageAccountId": "", + "storageAccountName": "", + }, + Type: "microsoft.storage/storageaccounts/fileservices", + }, + }, + expectedError: false, + }, + } + + log := testhelper.NewLogger(t) + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + provider := &storageAccountProvider{ + log: log, + client: &storageAccountAzureClientWrapper{ + AssetFileServices: func(_ context.Context, _ string, _ *arm.ClientOptions, _, _ string, _ *armstorage.FileServicesClientListOptions) (armstorage.FileServicesClientListResponse, error) { + x := tc + return response(x.input), nil + }, + }, + diagnosticSettingsCache: cycle.NewCache[[]AzureAsset](log), + } + + got, err := provider.ListStorageAccountFileServices(context.Background(), []AzureAsset{ + { + Type: "Storage Account", + Id: "", + Name: "", + }, + }) + if tc.expectedError { + require.Error(t, err) + } else { + require.NoError(t, err) + } + + assert.ElementsMatch(t, tc.expected, got) + }) + } +} + func TestListDiagnosticSettingsAssetTypes(t *testing.T) { log := testhelper.NewLogger(t) diff --git a/internal/resources/providers/azurelib/mock_provider_api.go b/internal/resources/providers/azurelib/mock_provider_api.go index 892868327d..7749e1e695 100644 --- a/internal/resources/providers/azurelib/mock_provider_api.go +++ b/internal/resources/providers/azurelib/mock_provider_api.go @@ -1275,6 +1275,61 @@ func (_c *MockProviderAPI_ListStorageAccountBlobServices_Call) RunAndReturn(run return _c } +// ListStorageAccountFileServices provides a mock function with given fields: ctx, storageAccounts +func (_m *MockProviderAPI) ListStorageAccountFileServices(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []inventory.AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) []inventory.AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]inventory.AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []inventory.AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockProviderAPI_ListStorageAccountFileServices_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountFileServices' +type MockProviderAPI_ListStorageAccountFileServices_Call struct { + *mock.Call +} + +// ListStorageAccountFileServices is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []inventory.AzureAsset +func (_e *MockProviderAPI_Expecter) ListStorageAccountFileServices(ctx interface{}, storageAccounts interface{}) *MockProviderAPI_ListStorageAccountFileServices_Call { + return &MockProviderAPI_ListStorageAccountFileServices_Call{Call: _e.mock.On("ListStorageAccountFileServices", ctx, storageAccounts)} +} + +func (_c *MockProviderAPI_ListStorageAccountFileServices_Call) Run(run func(ctx context.Context, storageAccounts []inventory.AzureAsset)) *MockProviderAPI_ListStorageAccountFileServices_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]inventory.AzureAsset)) + }) + return _c +} + +func (_c *MockProviderAPI_ListStorageAccountFileServices_Call) Return(_a0 []inventory.AzureAsset, _a1 error) *MockProviderAPI_ListStorageAccountFileServices_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockProviderAPI_ListStorageAccountFileServices_Call) RunAndReturn(run func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)) *MockProviderAPI_ListStorageAccountFileServices_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccountQueueServices provides a mock function with given fields: ctx, storageAccounts func (_m *MockProviderAPI) ListStorageAccountQueueServices(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { ret := _m.Called(ctx, storageAccounts) From badfa400e2e6af4098ee6c0e47aa552b987dcf3b Mon Sep 17 00:00:00 2001 From: kubasobon Date: Wed, 22 Jan 2025 12:28:16 +0100 Subject: [PATCH 08/21] update integration test cases --- .../product/tests/data/azure_asset_inventory/test_cases.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/product/tests/data/azure_asset_inventory/test_cases.py b/tests/product/tests/data/azure_asset_inventory/test_cases.py index fc8e49b8ab..749f6b84f7 100644 --- a/tests/product/tests/data/azure_asset_inventory/test_cases.py +++ b/tests/product/tests/data/azure_asset_inventory/test_cases.py @@ -77,8 +77,12 @@ category="Storage Bucket", type_="Azure Storage Blob Service", ), + "[Asset Inventory][Azure][Azure Storage File Service] assets found": AssetInventoryCase( + category="Storage Bucket", + type_="Azure Storage File Service", + ), "[Asset Inventory][Azure][Azure Table Service] assets found": AssetInventoryCase( - category="Messaging Service", + category="Database", type_="Azure Storage Table Service", ), } From 1acf564e037311ce33973a3156fef62a5708dbbe Mon Sep 17 00:00:00 2001 From: kubasobon Date: Wed, 22 Jan 2025 12:48:45 +0100 Subject: [PATCH 09/21] update tests and add Tables --- internal/inventory/asset.go | 1 + .../inventory/azurefetcher/fetcher_storage.go | 2 + .../azurefetcher/fetcher_storage_test.go | 31 +++++++-- .../azurefetcher/mock_storage_provider.go | 55 +++++++++++++++ internal/inventory/testutil/testutil.go | 11 ++- .../mock_storage_account_provider_api.go | 55 +++++++++++++++ .../azurelib/inventory/storage_provider.go | 54 +++++++++++++++ .../inventory/storage_provider_test.go | 69 +++++++++++++++++++ .../providers/azurelib/mock_provider_api.go | 55 +++++++++++++++ .../data/azure_asset_inventory/test_cases.py | 4 ++ 10 files changed, 331 insertions(+), 6 deletions(-) diff --git a/internal/inventory/asset.go b/internal/inventory/asset.go index 9801d67a2b..f7f780a69f 100644 --- a/internal/inventory/asset.go +++ b/internal/inventory/asset.go @@ -108,6 +108,7 @@ var ( AssetClassificationAzureStorageFileService = AssetClassification{CategoryStorageBucket, "Azure Storage File Service"} AssetClassificationAzureStorageQueue = AssetClassification{CategoryMessagingService, "Azure Storage Queue"} AssetClassificationAzureStorageQueueService = AssetClassification{CategoryMessagingService, "Azure Storage Queue Service"} + AssetClassificationAzureStorageTable = AssetClassification{CategoryDatabase, "Azure Storage Table"} AssetClassificationAzureStorageTableService = AssetClassification{CategoryDatabase, "Azure Storage Table Service"} AssetClassificationAzureSubscription = AssetClassification{CategoryAccessManagement, "Azure Subscription"} AssetClassificationAzureTenant = AssetClassification{CategoryAccessManagement, "Azure Tenant"} diff --git a/internal/inventory/azurefetcher/fetcher_storage.go b/internal/inventory/azurefetcher/fetcher_storage.go index 989bbaed5f..cee84a39f3 100644 --- a/internal/inventory/azurefetcher/fetcher_storage.go +++ b/internal/inventory/azurefetcher/fetcher_storage.go @@ -40,6 +40,7 @@ type ( ListStorageAccountFileServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountQueues(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountQueueServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) + ListStorageAccountTables(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountTableServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccounts(ctx context.Context, storageAccountsSubscriptionsIds []string) ([]azurelib.AzureAsset, error) } @@ -62,6 +63,7 @@ func (f *storageFetcher) Fetch(ctx context.Context, assetChan chan<- inventory.A {"Storage File Services", f.provider.ListStorageAccountFileServices, inventory.AssetClassificationAzureStorageFileService}, {"Storage Queue Services", f.provider.ListStorageAccountQueueServices, inventory.AssetClassificationAzureStorageQueueService}, {"Storage Queues", f.provider.ListStorageAccountQueues, inventory.AssetClassificationAzureStorageQueue}, + {"Storage Tables", f.provider.ListStorageAccountTables, inventory.AssetClassificationAzureStorageTable}, {"Storage Table Services", f.provider.ListStorageAccountTableServices, inventory.AssetClassificationAzureStorageTableService}, } diff --git a/internal/inventory/azurefetcher/fetcher_storage_test.go b/internal/inventory/azurefetcher/fetcher_storage_test.go index a49bc97f82..cf18478661 100644 --- a/internal/inventory/azurefetcher/fetcher_storage_test.go +++ b/internal/inventory/azurefetcher/fetcher_storage_test.go @@ -56,10 +56,15 @@ func TestStorageFetcher_Fetch(t *testing.T) { Name: "queue", DisplayName: "queue", } + azureTable := azurelib_inventory.AzureAsset{ + Id: "table", + Name: "table", + DisplayName: "table", + } azureTableService := azurelib_inventory.AzureAsset{ - Id: "queue", - Name: "queue", - DisplayName: "queue", + Id: "table_service", + Name: "table_service", + DisplayName: "table_service", } expected := []inventory.AssetEvent{ @@ -103,10 +108,20 @@ func TestStorageFetcher_Fetch(t *testing.T) { ServiceName: "Azure", }), ), + inventory.NewAssetEvent( + inventory.AssetClassificationAzureStorageTable, + azureTable.Id, + azureTable.Name, + inventory.WithRawAsset(azureTable), + inventory.WithCloud(inventory.Cloud{ + Provider: inventory.AzureCloudProvider, + ServiceName: "Azure", + }), + ), inventory.NewAssetEvent( inventory.AssetClassificationAzureStorageTableService, - azureQueue.Id, - azureQueue.Name, + azureTableService.Id, + azureTableService.Name, inventory.WithRawAsset(azureTableService), inventory.WithCloud(inventory.Cloud{ Provider: inventory.AzureCloudProvider, @@ -155,6 +170,12 @@ func TestStorageFetcher_Fetch(t *testing.T) { []azurelib_inventory.AzureAsset{azureQueue}, nil, ) + provider.EXPECT().ListStorageAccountTables( + mock.Anything, mock.Anything, + ).Return( + []azurelib_inventory.AzureAsset{azureTable}, nil, + ) + provider.EXPECT().ListStorageAccountTableServices( mock.Anything, mock.Anything, ).Return( diff --git a/internal/inventory/azurefetcher/mock_storage_provider.go b/internal/inventory/azurefetcher/mock_storage_provider.go index aa4e17f913..05bf8a7a89 100644 --- a/internal/inventory/azurefetcher/mock_storage_provider.go +++ b/internal/inventory/azurefetcher/mock_storage_provider.go @@ -314,6 +314,61 @@ func (_c *mockStorageProvider_ListStorageAccountTableServices_Call) RunAndReturn return _c } +// ListStorageAccountTables provides a mock function with given fields: ctx, storageAccounts +func (_m *mockStorageProvider) ListStorageAccountTables(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []inventory.AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) []inventory.AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]inventory.AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []inventory.AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// mockStorageProvider_ListStorageAccountTables_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountTables' +type mockStorageProvider_ListStorageAccountTables_Call struct { + *mock.Call +} + +// ListStorageAccountTables is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []inventory.AzureAsset +func (_e *mockStorageProvider_Expecter) ListStorageAccountTables(ctx interface{}, storageAccounts interface{}) *mockStorageProvider_ListStorageAccountTables_Call { + return &mockStorageProvider_ListStorageAccountTables_Call{Call: _e.mock.On("ListStorageAccountTables", ctx, storageAccounts)} +} + +func (_c *mockStorageProvider_ListStorageAccountTables_Call) Run(run func(ctx context.Context, storageAccounts []inventory.AzureAsset)) *mockStorageProvider_ListStorageAccountTables_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]inventory.AzureAsset)) + }) + return _c +} + +func (_c *mockStorageProvider_ListStorageAccountTables_Call) Return(_a0 []inventory.AzureAsset, _a1 error) *mockStorageProvider_ListStorageAccountTables_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *mockStorageProvider_ListStorageAccountTables_Call) RunAndReturn(run func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)) *mockStorageProvider_ListStorageAccountTables_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccounts provides a mock function with given fields: ctx, storageAccountsSubscriptionsIds func (_m *mockStorageProvider) ListStorageAccounts(ctx context.Context, storageAccountsSubscriptionsIds []string) ([]inventory.AzureAsset, error) { ret := _m.Called(ctx, storageAccountsSubscriptionsIds) diff --git a/internal/inventory/testutil/testutil.go b/internal/inventory/testutil/testutil.go index a890d32498..058f6060d1 100644 --- a/internal/inventory/testutil/testutil.go +++ b/internal/inventory/testutil/testutil.go @@ -19,9 +19,12 @@ package testutil import ( "context" + "encoding/json" + "fmt" "testing" "time" + "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" "github.com/elastic/cloudbeat/internal/inventory" @@ -48,5 +51,11 @@ func CollectResourcesAndMatch(t *testing.T, fetcher inventory.AssetFetcher, expe } } - assert.ElementsMatch(t, expected, received) + if !assert.ElementsMatch(t, expected, received) { + a, _ := json.Marshal(expected) + b, _ := json.Marshal(received) + fmt.Println("------------------------------------------------------------") + fmt.Println(cmp.Diff(a, b)) + fmt.Println("------------------------------------------------------------") + } } diff --git a/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go b/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go index ad31ff0b65..07cdf27caf 100644 --- a/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go +++ b/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go @@ -370,6 +370,61 @@ func (_c *MockStorageAccountProviderAPI_ListStorageAccountTableServices_Call) Ru return _c } +// ListStorageAccountTables provides a mock function with given fields: ctx, storageAccounts +func (_m *MockStorageAccountProviderAPI) ListStorageAccountTables(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []AzureAsset) ([]AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []AzureAsset) []AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockStorageAccountProviderAPI_ListStorageAccountTables_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountTables' +type MockStorageAccountProviderAPI_ListStorageAccountTables_Call struct { + *mock.Call +} + +// ListStorageAccountTables is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []AzureAsset +func (_e *MockStorageAccountProviderAPI_Expecter) ListStorageAccountTables(ctx interface{}, storageAccounts interface{}) *MockStorageAccountProviderAPI_ListStorageAccountTables_Call { + return &MockStorageAccountProviderAPI_ListStorageAccountTables_Call{Call: _e.mock.On("ListStorageAccountTables", ctx, storageAccounts)} +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountTables_Call) Run(run func(ctx context.Context, storageAccounts []AzureAsset)) *MockStorageAccountProviderAPI_ListStorageAccountTables_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]AzureAsset)) + }) + return _c +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountTables_Call) Return(_a0 []AzureAsset, _a1 error) *MockStorageAccountProviderAPI_ListStorageAccountTables_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountTables_Call) RunAndReturn(run func(context.Context, []AzureAsset) ([]AzureAsset, error)) *MockStorageAccountProviderAPI_ListStorageAccountTables_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccounts provides a mock function with given fields: ctx, storageAccountsSubscriptionsIds func (_m *MockStorageAccountProviderAPI) ListStorageAccounts(ctx context.Context, storageAccountsSubscriptionsIds []string) ([]AzureAsset, error) { ret := _m.Called(ctx, storageAccountsSubscriptionsIds) diff --git a/internal/resources/providers/azurelib/inventory/storage_provider.go b/internal/resources/providers/azurelib/inventory/storage_provider.go index 5bf8ce703e..1286f0e9c2 100644 --- a/internal/resources/providers/azurelib/inventory/storage_provider.go +++ b/internal/resources/providers/azurelib/inventory/storage_provider.go @@ -41,6 +41,7 @@ type storageAccountAzureClientWrapper struct { AssetFileServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.FileServicesClientListOptions) (armstorage.FileServicesClientListResponse, error) AssetQueues func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.QueueClientListOptions) ([]armstorage.QueueClientListResponse, error) AssetQueueServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.QueueServicesClientListOptions) (armstorage.QueueServicesClientListResponse, error) + AssetTables func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.TableClientListOptions) ([]armstorage.TableClientListResponse, error) AssetTableServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.TableServicesClientListOptions) (armstorage.TableServicesClientListResponse, error) AssetAccountStorage func(ctx context.Context, subID string, clientOptions *arm.ClientOptions) ([]armstorage.AccountsClientListResponse, error) } @@ -53,6 +54,7 @@ type StorageAccountProviderAPI interface { ListStorageAccountQueueServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountsBlobDiagnosticSettings(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountsTableDiagnosticSettings(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) + ListStorageAccountTables(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountTableServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountsQueueDiagnosticSettings(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccounts(ctx context.Context, storageAccountsSubscriptionsIds []string) ([]AzureAsset, error) @@ -99,6 +101,14 @@ func NewStorageAccountProvider(log *logp.Logger, diagnosticSettingsClient *armmo } return cl.List(ctx, resourceGroupName, storageAccountName, options) }, + AssetTables: func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroupName, storageAccountName string, options *armstorage.TableClientListOptions) ([]armstorage.TableClientListResponse, error) { + cl, err := armstorage.NewTableClient(subID, credentials, clientOptions) + if err != nil { + return nil, err + } + + return readPager(ctx, cl.NewListPager(resourceGroupName, storageAccountName, options)) + }, AssetTableServices: func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroupName, storageAccountName string, options *armstorage.TableServicesClientListOptions) (armstorage.TableServicesClientListResponse, error) { cl, err := armstorage.NewTableServicesClient(subID, credentials, clientOptions) if err != nil { @@ -282,6 +292,24 @@ func (p *storageAccountProvider) ListStorageAccountQueueServices(ctx context.Con return assets, nil } +func (p *storageAccountProvider) ListStorageAccountTables(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { + var assets []AzureAsset + for _, sa := range storageAccounts { + responses, err := p.client.AssetTables(ctx, sa.SubscriptionId, nil, sa.ResourceGroup, sa.Name, nil) + if err != nil { + return nil, fmt.Errorf("error while fetching azure table services for storage accounts %s: %w", sa.Id, err) + } + + tables, err := transformTables(responses, sa) + if err != nil { + p.log.Errorf("error while transforming azure tables for storage accounts %s: %v", sa.Id, err) + } + + assets = append(assets, tables...) + } + return assets, nil +} + func (p *storageAccountProvider) ListStorageAccountTableServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { var assets []AzureAsset for _, sa := range storageAccounts { @@ -366,6 +394,32 @@ func transformQueues(pages []armstorage.QueueClientListResponse, storageAccount }), errs } +func transformTables(pages []armstorage.TableClientListResponse, storageAccount AzureAsset) ([]AzureAsset, error) { + var errs error + return lo.FlatMap(pages, func(response armstorage.TableClientListResponse, _ int) []AzureAsset { + return lo.Map(response.Value, func(item *armstorage.Table, _ int) AzureAsset { + properties, err := maps.AsMapStringAny(item.TableProperties) + if err != nil { + errs = errors.Join(errs, err) + } + + return AzureAsset{ + Id: pointers.Deref(item.ID), + Name: pointers.Deref(item.Name), + Type: strings.ToLower(pointers.Deref(item.Type)), + ResourceGroup: storageAccount.ResourceGroup, + SubscriptionId: storageAccount.SubscriptionId, + TenantId: storageAccount.TenantId, + Properties: properties, + Extension: map[string]any{ + ExtensionStorageAccountID: storageAccount.Id, + ExtensionStorageAccountName: storageAccount.Name, + }, + } + }) + }), errs +} + func (p *storageAccountProvider) ListStorageAccountsBlobDiagnosticSettings(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { return p.serviceDiagnosticSettings(ctx, "blobServices/default", storageAccounts) } diff --git a/internal/resources/providers/azurelib/inventory/storage_provider_test.go b/internal/resources/providers/azurelib/inventory/storage_provider_test.go index 7893b9618f..1152112d15 100644 --- a/internal/resources/providers/azurelib/inventory/storage_provider_test.go +++ b/internal/resources/providers/azurelib/inventory/storage_provider_test.go @@ -379,6 +379,75 @@ func TestListStorageAccountBlobServices(t *testing.T) { } } +func TestListStorageAccountTables(t *testing.T) { + response := func(v []*armstorage.Table) armstorage.TableClientListResponse { + return armstorage.TableClientListResponse{ + ListTableResource: armstorage.ListTableResource{Value: v}, + } + } + + tests := map[string]struct { + input []*armstorage.Table + expected []AzureAsset + expectedError bool + }{ + "list tables": { + input: []*armstorage.Table{ + { + ID: pointers.Ref("/subscriptions//resourceGroups//providers/Microsoft.Storage/storageAccounts//tables/table1"), + Name: pointers.Ref("table1"), + Type: pointers.Ref("microsoft.storage/storageaccounts/tables"), + TableProperties: &armstorage.TableProperties{}, + }, + }, + expected: []AzureAsset{ + { + Id: "/subscriptions//resourceGroups//providers/Microsoft.Storage/storageAccounts//tables/table1", + Name: "table1", + Properties: map[string]any{}, + Extension: map[string]any{ + "storageAccountId": "", + "storageAccountName": "", + }, + Type: "microsoft.storage/storageaccounts/tables", + }, + }, + expectedError: false, + }, + } + + log := testhelper.NewLogger(t) + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + provider := &storageAccountProvider{ + log: log, + client: &storageAccountAzureClientWrapper{ + AssetTables: func(_ context.Context, _ string, _ *arm.ClientOptions, _, _ string, _ *armstorage.TableClientListOptions) ([]armstorage.TableClientListResponse, error) { + x := tc + return []armstorage.TableClientListResponse{response(x.input)}, nil + }, + }, + diagnosticSettingsCache: cycle.NewCache[[]AzureAsset](log), + } + + got, err := provider.ListStorageAccountTables(context.Background(), []AzureAsset{ + { + Type: "Storage Account", + Id: "", + Name: "", + }, + }) + if tc.expectedError { + require.Error(t, err) + } else { + require.NoError(t, err) + } + + assert.ElementsMatch(t, tc.expected, got) + }) + } +} + func TestListStorageAccountFileServices(t *testing.T) { response := func(v []*armstorage.FileServiceProperties) armstorage.FileServicesClientListResponse { return armstorage.FileServicesClientListResponse{ diff --git a/internal/resources/providers/azurelib/mock_provider_api.go b/internal/resources/providers/azurelib/mock_provider_api.go index 7749e1e695..15fd7bb47b 100644 --- a/internal/resources/providers/azurelib/mock_provider_api.go +++ b/internal/resources/providers/azurelib/mock_provider_api.go @@ -1495,6 +1495,61 @@ func (_c *MockProviderAPI_ListStorageAccountTableServices_Call) RunAndReturn(run return _c } +// ListStorageAccountTables provides a mock function with given fields: ctx, storageAccounts +func (_m *MockProviderAPI) ListStorageAccountTables(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []inventory.AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) []inventory.AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]inventory.AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []inventory.AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockProviderAPI_ListStorageAccountTables_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountTables' +type MockProviderAPI_ListStorageAccountTables_Call struct { + *mock.Call +} + +// ListStorageAccountTables is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []inventory.AzureAsset +func (_e *MockProviderAPI_Expecter) ListStorageAccountTables(ctx interface{}, storageAccounts interface{}) *MockProviderAPI_ListStorageAccountTables_Call { + return &MockProviderAPI_ListStorageAccountTables_Call{Call: _e.mock.On("ListStorageAccountTables", ctx, storageAccounts)} +} + +func (_c *MockProviderAPI_ListStorageAccountTables_Call) Run(run func(ctx context.Context, storageAccounts []inventory.AzureAsset)) *MockProviderAPI_ListStorageAccountTables_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]inventory.AzureAsset)) + }) + return _c +} + +func (_c *MockProviderAPI_ListStorageAccountTables_Call) Return(_a0 []inventory.AzureAsset, _a1 error) *MockProviderAPI_ListStorageAccountTables_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockProviderAPI_ListStorageAccountTables_Call) RunAndReturn(run func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)) *MockProviderAPI_ListStorageAccountTables_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccounts provides a mock function with given fields: ctx, storageAccountsSubscriptionsIds func (_m *MockProviderAPI) ListStorageAccounts(ctx context.Context, storageAccountsSubscriptionsIds []string) ([]inventory.AzureAsset, error) { ret := _m.Called(ctx, storageAccountsSubscriptionsIds) diff --git a/tests/product/tests/data/azure_asset_inventory/test_cases.py b/tests/product/tests/data/azure_asset_inventory/test_cases.py index 749f6b84f7..5f883f83e5 100644 --- a/tests/product/tests/data/azure_asset_inventory/test_cases.py +++ b/tests/product/tests/data/azure_asset_inventory/test_cases.py @@ -81,6 +81,10 @@ category="Storage Bucket", type_="Azure Storage File Service", ), + "[Asset Inventory][Azure][Azure Table] assets found": AssetInventoryCase( + category="Database", + type_="Azure Storage Table", + ), "[Asset Inventory][Azure][Azure Table Service] assets found": AssetInventoryCase( category="Database", type_="Azure Storage Table Service", From 0596b427107b65342702ac69c15abb3b84a64fa0 Mon Sep 17 00:00:00 2001 From: kubasobon Date: Wed, 22 Jan 2025 13:08:38 +0100 Subject: [PATCH 10/21] add File Shares fetcher --- .../azurelib/inventory/storage_provider.go | 54 ++++++++++++++ .../inventory/storage_provider_test.go | 71 +++++++++++++++++++ 2 files changed, 125 insertions(+) diff --git a/internal/resources/providers/azurelib/inventory/storage_provider.go b/internal/resources/providers/azurelib/inventory/storage_provider.go index 1286f0e9c2..81ca22932f 100644 --- a/internal/resources/providers/azurelib/inventory/storage_provider.go +++ b/internal/resources/providers/azurelib/inventory/storage_provider.go @@ -39,6 +39,7 @@ type storageAccountAzureClientWrapper struct { AssetDiagnosticSettings func(ctx context.Context, subID string, options *armmonitor.DiagnosticSettingsClientListOptions) ([]armmonitor.DiagnosticSettingsClientListResponse, error) AssetBlobServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.BlobServicesClientListOptions) ([]armstorage.BlobServicesClientListResponse, error) AssetFileServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.FileServicesClientListOptions) (armstorage.FileServicesClientListResponse, error) + AssetFileShares func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.FileSharesClientListOptions) ([]armstorage.FileSharesClientListResponse, error) AssetQueues func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.QueueClientListOptions) ([]armstorage.QueueClientListResponse, error) AssetQueueServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.QueueServicesClientListOptions) (armstorage.QueueServicesClientListResponse, error) AssetTables func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.TableClientListOptions) ([]armstorage.TableClientListResponse, error) @@ -50,6 +51,7 @@ type StorageAccountProviderAPI interface { ListDiagnosticSettingsAssetTypes(ctx context.Context, cycleMetadata cycle.Metadata, subscriptionIDs []string) ([]AzureAsset, error) ListStorageAccountBlobServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountFileServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) + ListStorageAccountFileShares(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountQueues(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountQueueServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountsBlobDiagnosticSettings(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) @@ -87,6 +89,13 @@ func NewStorageAccountProvider(log *logp.Logger, diagnosticSettingsClient *armmo } return cl.List(ctx, resourceGroupName, storageAccountName, options) }, + AssetFileShares: func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroupName, storageAccountName string, options *armstorage.FileSharesClientListOptions) ([]armstorage.FileSharesClientListResponse, error) { + cl, err := armstorage.NewFileSharesClient(subID, credentials, clientOptions) + if err != nil { + return nil, err + } + return readPager(ctx, cl.NewListPager(resourceGroupName, storageAccountName, options)) + }, AssetQueues: func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroupName, storageAccountName string, options *armstorage.QueueClientListOptions) ([]armstorage.QueueClientListResponse, error) { cl, err := armstorage.NewQueueClient(subID, credentials, clientOptions) if err != nil { @@ -241,6 +250,25 @@ func (p *storageAccountProvider) ListStorageAccountFileServices(ctx context.Cont return assets, nil } +func (p *storageAccountProvider) ListStorageAccountFileShares(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { + var assets []AzureAsset + for _, sa := range storageAccounts { + responses, err := p.client.AssetFileShares(ctx, sa.SubscriptionId, nil, sa.ResourceGroup, sa.Name, nil) + if err != nil { + return nil, fmt.Errorf("error while fetching azure file share for storage accounts %s: %w", sa.Id, err) + } + + fileShares, err := transformFileShares(responses, sa) + if err != nil { + p.log.Errorf("error while transforming azure file share for storage accounts %s: %v", sa.Id, err) + } + + assets = append(assets, fileShares...) + } + + return assets, nil +} + func (p *storageAccountProvider) ListStorageAccountQueues(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { var assets []AzureAsset for _, sa := range storageAccounts { @@ -368,6 +396,32 @@ func transformBlobServices(servicesPages []armstorage.BlobServicesClientListResp }), errs } +func transformFileShares(pages []armstorage.FileSharesClientListResponse, storageAccount AzureAsset) ([]AzureAsset, error) { + var errs error + return lo.FlatMap(pages, func(response armstorage.FileSharesClientListResponse, _ int) []AzureAsset { + return lo.Map(response.Value, func(item *armstorage.FileShareItem, _ int) AzureAsset { + properties, err := maps.AsMapStringAny(item.Properties) + if err != nil { + errs = errors.Join(errs, err) + } + + return AzureAsset{ + Id: pointers.Deref(item.ID), + Name: pointers.Deref(item.Name), + Type: strings.ToLower(pointers.Deref(item.Type)), + ResourceGroup: storageAccount.ResourceGroup, + SubscriptionId: storageAccount.SubscriptionId, + TenantId: storageAccount.TenantId, + Properties: properties, + Extension: map[string]any{ + ExtensionStorageAccountID: storageAccount.Id, + ExtensionStorageAccountName: storageAccount.Name, + }, + } + }) + }), errs +} + func transformQueues(pages []armstorage.QueueClientListResponse, storageAccount AzureAsset) ([]AzureAsset, error) { var errs error return lo.FlatMap(pages, func(response armstorage.QueueClientListResponse, _ int) []AzureAsset { diff --git a/internal/resources/providers/azurelib/inventory/storage_provider_test.go b/internal/resources/providers/azurelib/inventory/storage_provider_test.go index 1152112d15..ff7d4a3130 100644 --- a/internal/resources/providers/azurelib/inventory/storage_provider_test.go +++ b/internal/resources/providers/azurelib/inventory/storage_provider_test.go @@ -379,6 +379,77 @@ func TestListStorageAccountBlobServices(t *testing.T) { } } +func TestListStorageAccountFileShares(t *testing.T) { + response := func(v []*armstorage.FileShareItem) armstorage.FileSharesClientListResponse { + return armstorage.FileSharesClientListResponse{ + FileShareItems: armstorage.FileShareItems{ + Value: v, + }, + } + } + + tests := map[string]struct { + input []*armstorage.FileShareItem + expected []AzureAsset + expectedError bool + }{ + "list file shares": { + input: []*armstorage.FileShareItem{ + { + ID: pointers.Ref("/subscriptions//resourceGroups//providers/Microsoft.Storage/storageAccounts//fileshares/fileshare1"), + Name: pointers.Ref("fileshare1"), + Type: pointers.Ref("microsoft.storage/storageaccounts/fileshares"), + Properties: &armstorage.FileShareProperties{}, + }, + }, + expected: []AzureAsset{ + { + Id: "/subscriptions//resourceGroups//providers/Microsoft.Storage/storageAccounts//fileshares/fileshare1", + Name: "fileshare1", + Properties: map[string]any{}, + Extension: map[string]any{ + "storageAccountId": "", + "storageAccountName": "", + }, + Type: "microsoft.storage/storageaccounts/fileshares", + }, + }, + expectedError: false, + }, + } + + log := testhelper.NewLogger(t) + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + provider := &storageAccountProvider{ + log: log, + client: &storageAccountAzureClientWrapper{ + AssetFileShares: func(_ context.Context, _ string, _ *arm.ClientOptions, _, _ string, _ *armstorage.FileSharesClientListOptions) ([]armstorage.FileSharesClientListResponse, error) { + x := tc + return []armstorage.FileSharesClientListResponse{response(x.input)}, nil + }, + }, + diagnosticSettingsCache: cycle.NewCache[[]AzureAsset](log), + } + + got, err := provider.ListStorageAccountFileShares(context.Background(), []AzureAsset{ + { + Type: "Storage Account", + Id: "", + Name: "", + }, + }) + if tc.expectedError { + require.Error(t, err) + } else { + require.NoError(t, err) + } + + assert.ElementsMatch(t, tc.expected, got) + }) + } +} + func TestListStorageAccountTables(t *testing.T) { response := func(v []*armstorage.Table) armstorage.TableClientListResponse { return armstorage.TableClientListResponse{ From e1d50d3c9f2884fcde4a7dfdad06a90392d345be Mon Sep 17 00:00:00 2001 From: kubasobon Date: Wed, 22 Jan 2025 13:13:07 +0100 Subject: [PATCH 11/21] add Azure File Share fetcher --- internal/inventory/asset.go | 1 + .../inventory/azurefetcher/fetcher_storage.go | 2 ++ .../azurefetcher/fetcher_storage_test.go | 21 +++++++++++++++++++ .../data/azure_asset_inventory/test_cases.py | 4 ++++ 4 files changed, 28 insertions(+) diff --git a/internal/inventory/asset.go b/internal/inventory/asset.go index f7f780a69f..8271aa2281 100644 --- a/internal/inventory/asset.go +++ b/internal/inventory/asset.go @@ -106,6 +106,7 @@ var ( AssetClassificationAzureStorageAccount = AssetClassification{CategoryPrivateEndpoint, "Azure Storage Account"} AssetClassificationAzureStorageBlobService = AssetClassification{CategoryStorageBucket, "Azure Storage Blob Service"} AssetClassificationAzureStorageFileService = AssetClassification{CategoryStorageBucket, "Azure Storage File Service"} + AssetClassificationAzureStorageFileShare = AssetClassification{CategoryStorageBucket, "Azure Storage File Share"} AssetClassificationAzureStorageQueue = AssetClassification{CategoryMessagingService, "Azure Storage Queue"} AssetClassificationAzureStorageQueueService = AssetClassification{CategoryMessagingService, "Azure Storage Queue Service"} AssetClassificationAzureStorageTable = AssetClassification{CategoryDatabase, "Azure Storage Table"} diff --git a/internal/inventory/azurefetcher/fetcher_storage.go b/internal/inventory/azurefetcher/fetcher_storage.go index cee84a39f3..06ad2981c4 100644 --- a/internal/inventory/azurefetcher/fetcher_storage.go +++ b/internal/inventory/azurefetcher/fetcher_storage.go @@ -38,6 +38,7 @@ type ( ListSubscriptions(ctx context.Context) ([]azurelib.AzureAsset, error) ListStorageAccountBlobServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountFileServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) + ListStorageAccountFileShares(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountQueues(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountQueueServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountTables(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) @@ -61,6 +62,7 @@ func (f *storageFetcher) Fetch(ctx context.Context, assetChan chan<- inventory.A }{ {"Storage Blob Services", f.provider.ListStorageAccountBlobServices, inventory.AssetClassificationAzureStorageBlobService}, {"Storage File Services", f.provider.ListStorageAccountFileServices, inventory.AssetClassificationAzureStorageFileService}, + {"Storage File Shares", f.provider.ListStorageAccountFileShares, inventory.AssetClassificationAzureStorageFileShare}, {"Storage Queue Services", f.provider.ListStorageAccountQueueServices, inventory.AssetClassificationAzureStorageQueueService}, {"Storage Queues", f.provider.ListStorageAccountQueues, inventory.AssetClassificationAzureStorageQueue}, {"Storage Tables", f.provider.ListStorageAccountTables, inventory.AssetClassificationAzureStorageTable}, diff --git a/internal/inventory/azurefetcher/fetcher_storage_test.go b/internal/inventory/azurefetcher/fetcher_storage_test.go index cf18478661..518df25b26 100644 --- a/internal/inventory/azurefetcher/fetcher_storage_test.go +++ b/internal/inventory/azurefetcher/fetcher_storage_test.go @@ -46,6 +46,11 @@ func TestStorageFetcher_Fetch(t *testing.T) { Name: "file_service", DisplayName: "file_service", } + azureFileShare := azurelib_inventory.AzureAsset{ + Id: "file_share", + Name: "file_share", + DisplayName: "file_share", + } azureQueueService := azurelib_inventory.AzureAsset{ Id: "queue_service", Name: "queue_service", @@ -88,6 +93,16 @@ func TestStorageFetcher_Fetch(t *testing.T) { ServiceName: "Azure", }), ), + inventory.NewAssetEvent( + inventory.AssetClassificationAzureStorageFileShare, + azureFileShare.Id, + azureFileShare.Name, + inventory.WithRawAsset(azureFileShare), + inventory.WithCloud(inventory.Cloud{ + Provider: inventory.AzureCloudProvider, + ServiceName: "Azure", + }), + ), inventory.NewAssetEvent( inventory.AssetClassificationAzureStorageQueueService, azureQueueService.Id, @@ -158,6 +173,12 @@ func TestStorageFetcher_Fetch(t *testing.T) { []azurelib_inventory.AzureAsset{azureFileService}, nil, ) + provider.EXPECT().ListStorageAccountFileShares( + mock.Anything, mock.Anything, + ).Return( + []azurelib_inventory.AzureAsset{azureFileShare}, nil, + ) + provider.EXPECT().ListStorageAccountQueueServices( mock.Anything, mock.Anything, ).Return( diff --git a/tests/product/tests/data/azure_asset_inventory/test_cases.py b/tests/product/tests/data/azure_asset_inventory/test_cases.py index 5f883f83e5..250c4313cc 100644 --- a/tests/product/tests/data/azure_asset_inventory/test_cases.py +++ b/tests/product/tests/data/azure_asset_inventory/test_cases.py @@ -81,6 +81,10 @@ category="Storage Bucket", type_="Azure Storage File Service", ), + "[Asset Inventory][Azure][Azure Storage File Share] assets found": AssetInventoryCase( + category="Storage Bucket", + type_="Azure Storage File Share", + ), "[Asset Inventory][Azure][Azure Table] assets found": AssetInventoryCase( category="Database", type_="Azure Storage Table", From bd501df4488e6c1fe0a637837a64ed75cef3bcc1 Mon Sep 17 00:00:00 2001 From: kubasobon Date: Wed, 22 Jan 2025 13:13:37 +0100 Subject: [PATCH 12/21] generate mocks --- .../azurefetcher/mock_storage_provider.go | 55 +++++++++++++++++++ .../mock_storage_account_provider_api.go | 55 +++++++++++++++++++ .../providers/azurelib/mock_provider_api.go | 55 +++++++++++++++++++ 3 files changed, 165 insertions(+) diff --git a/internal/inventory/azurefetcher/mock_storage_provider.go b/internal/inventory/azurefetcher/mock_storage_provider.go index 05bf8a7a89..026381764c 100644 --- a/internal/inventory/azurefetcher/mock_storage_provider.go +++ b/internal/inventory/azurefetcher/mock_storage_provider.go @@ -149,6 +149,61 @@ func (_c *mockStorageProvider_ListStorageAccountFileServices_Call) RunAndReturn( return _c } +// ListStorageAccountFileShares provides a mock function with given fields: ctx, storageAccounts +func (_m *mockStorageProvider) ListStorageAccountFileShares(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []inventory.AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) []inventory.AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]inventory.AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []inventory.AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// mockStorageProvider_ListStorageAccountFileShares_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountFileShares' +type mockStorageProvider_ListStorageAccountFileShares_Call struct { + *mock.Call +} + +// ListStorageAccountFileShares is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []inventory.AzureAsset +func (_e *mockStorageProvider_Expecter) ListStorageAccountFileShares(ctx interface{}, storageAccounts interface{}) *mockStorageProvider_ListStorageAccountFileShares_Call { + return &mockStorageProvider_ListStorageAccountFileShares_Call{Call: _e.mock.On("ListStorageAccountFileShares", ctx, storageAccounts)} +} + +func (_c *mockStorageProvider_ListStorageAccountFileShares_Call) Run(run func(ctx context.Context, storageAccounts []inventory.AzureAsset)) *mockStorageProvider_ListStorageAccountFileShares_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]inventory.AzureAsset)) + }) + return _c +} + +func (_c *mockStorageProvider_ListStorageAccountFileShares_Call) Return(_a0 []inventory.AzureAsset, _a1 error) *mockStorageProvider_ListStorageAccountFileShares_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *mockStorageProvider_ListStorageAccountFileShares_Call) RunAndReturn(run func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)) *mockStorageProvider_ListStorageAccountFileShares_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccountQueueServices provides a mock function with given fields: ctx, storageAccounts func (_m *mockStorageProvider) ListStorageAccountQueueServices(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { ret := _m.Called(ctx, storageAccounts) diff --git a/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go b/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go index 07cdf27caf..577c61bfc2 100644 --- a/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go +++ b/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go @@ -205,6 +205,61 @@ func (_c *MockStorageAccountProviderAPI_ListStorageAccountFileServices_Call) Run return _c } +// ListStorageAccountFileShares provides a mock function with given fields: ctx, storageAccounts +func (_m *MockStorageAccountProviderAPI) ListStorageAccountFileShares(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []AzureAsset) ([]AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []AzureAsset) []AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockStorageAccountProviderAPI_ListStorageAccountFileShares_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountFileShares' +type MockStorageAccountProviderAPI_ListStorageAccountFileShares_Call struct { + *mock.Call +} + +// ListStorageAccountFileShares is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []AzureAsset +func (_e *MockStorageAccountProviderAPI_Expecter) ListStorageAccountFileShares(ctx interface{}, storageAccounts interface{}) *MockStorageAccountProviderAPI_ListStorageAccountFileShares_Call { + return &MockStorageAccountProviderAPI_ListStorageAccountFileShares_Call{Call: _e.mock.On("ListStorageAccountFileShares", ctx, storageAccounts)} +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountFileShares_Call) Run(run func(ctx context.Context, storageAccounts []AzureAsset)) *MockStorageAccountProviderAPI_ListStorageAccountFileShares_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]AzureAsset)) + }) + return _c +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountFileShares_Call) Return(_a0 []AzureAsset, _a1 error) *MockStorageAccountProviderAPI_ListStorageAccountFileShares_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountFileShares_Call) RunAndReturn(run func(context.Context, []AzureAsset) ([]AzureAsset, error)) *MockStorageAccountProviderAPI_ListStorageAccountFileShares_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccountQueueServices provides a mock function with given fields: ctx, storageAccounts func (_m *MockStorageAccountProviderAPI) ListStorageAccountQueueServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { ret := _m.Called(ctx, storageAccounts) diff --git a/internal/resources/providers/azurelib/mock_provider_api.go b/internal/resources/providers/azurelib/mock_provider_api.go index 15fd7bb47b..9f2a4c54b3 100644 --- a/internal/resources/providers/azurelib/mock_provider_api.go +++ b/internal/resources/providers/azurelib/mock_provider_api.go @@ -1330,6 +1330,61 @@ func (_c *MockProviderAPI_ListStorageAccountFileServices_Call) RunAndReturn(run return _c } +// ListStorageAccountFileShares provides a mock function with given fields: ctx, storageAccounts +func (_m *MockProviderAPI) ListStorageAccountFileShares(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []inventory.AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) []inventory.AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]inventory.AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []inventory.AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockProviderAPI_ListStorageAccountFileShares_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountFileShares' +type MockProviderAPI_ListStorageAccountFileShares_Call struct { + *mock.Call +} + +// ListStorageAccountFileShares is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []inventory.AzureAsset +func (_e *MockProviderAPI_Expecter) ListStorageAccountFileShares(ctx interface{}, storageAccounts interface{}) *MockProviderAPI_ListStorageAccountFileShares_Call { + return &MockProviderAPI_ListStorageAccountFileShares_Call{Call: _e.mock.On("ListStorageAccountFileShares", ctx, storageAccounts)} +} + +func (_c *MockProviderAPI_ListStorageAccountFileShares_Call) Run(run func(ctx context.Context, storageAccounts []inventory.AzureAsset)) *MockProviderAPI_ListStorageAccountFileShares_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]inventory.AzureAsset)) + }) + return _c +} + +func (_c *MockProviderAPI_ListStorageAccountFileShares_Call) Return(_a0 []inventory.AzureAsset, _a1 error) *MockProviderAPI_ListStorageAccountFileShares_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockProviderAPI_ListStorageAccountFileShares_Call) RunAndReturn(run func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)) *MockProviderAPI_ListStorageAccountFileShares_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccountQueueServices provides a mock function with given fields: ctx, storageAccounts func (_m *MockProviderAPI) ListStorageAccountQueueServices(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { ret := _m.Called(ctx, storageAccounts) From 618fb0d448733c8db703a5b2695898545cd7f01d Mon Sep 17 00:00:00 2001 From: kubasobon Date: Wed, 22 Jan 2025 13:28:35 +0100 Subject: [PATCH 13/21] remove debug prints --- internal/inventory/testutil/testutil.go | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/internal/inventory/testutil/testutil.go b/internal/inventory/testutil/testutil.go index 058f6060d1..a890d32498 100644 --- a/internal/inventory/testutil/testutil.go +++ b/internal/inventory/testutil/testutil.go @@ -19,12 +19,9 @@ package testutil import ( "context" - "encoding/json" - "fmt" "testing" "time" - "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" "github.com/elastic/cloudbeat/internal/inventory" @@ -51,11 +48,5 @@ func CollectResourcesAndMatch(t *testing.T, fetcher inventory.AssetFetcher, expe } } - if !assert.ElementsMatch(t, expected, received) { - a, _ := json.Marshal(expected) - b, _ := json.Marshal(received) - fmt.Println("------------------------------------------------------------") - fmt.Println(cmp.Diff(a, b)) - fmt.Println("------------------------------------------------------------") - } + assert.ElementsMatch(t, expected, received) } From 83bc1daf27f558dba40ac4e903a582ace4d8c526 Mon Sep 17 00:00:00 2001 From: kubasobon Date: Wed, 22 Jan 2025 13:59:44 +0100 Subject: [PATCH 14/21] update ASSETS.md --- internal/inventory/ASSETS.md | 18 +++++++++--------- internal/inventory/cloud_assets.xlsx | Bin 174786 -> 180158 bytes 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/inventory/ASSETS.md b/internal/inventory/ASSETS.md index c2a286d796..edcc149e95 100644 --- a/internal/inventory/ASSETS.md +++ b/internal/inventory/ASSETS.md @@ -109,17 +109,17 @@ Storage Bucket: 100% (1/1) ## AZURE Resources -**Progress: 33% (18/54)** +**Progress: 40% (22/54)** Access Management: 100% (3/3) Container Registry: 100% (1/1) -Database: 100% (3/3) +Database: 100% (5/5) Host: 100% (1/1) Identity: 9% (1/11) -Infrastructure: 7% (2/28) +Infrastructure: 8% (2/23) Messaging Service: 100% (2/2) Private Endpoint: 100% (1/1) Snapshot: 100% (1/1) -Storage Bucket: 100% (1/1) +Storage Bucket: 75% (3/4) Volume: 100% (1/1) Web Service: 100% (1/1) @@ -134,6 +134,8 @@ Web Service: 100% (1/1) | Database | Azure Elastic Pool | Azure Elastic Pool | Yes ✅ | | Database | Azure SQL Database | Azure SQL Database | Yes ✅ | | Database | Azure SQL Server | Azure SQL Server | Yes ✅ | +| Database | Azure Storage Table | | Yes ✅ | +| Database | Azure Storage Table Service | | Yes ✅ | | Host | Azure Virtual Machine | Azure Virtual Machine | Yes ✅ | | Identity | Access Key | | No ❌ | | Identity | API Gateway Client Certificate | | No ❌ | @@ -168,17 +170,15 @@ Web Service: 100% (1/1) | Infrastructure | Azure Restorable Dropped Database | | No ❌ | | Infrastructure | Azure Restore Point | | No ❌ | | Infrastructure | Azure Server DNS Alias | | No ❌ | -| Infrastructure | Azure Storage Blob Container | | No ❌ | -| Infrastructure | Azure Storage File Service | | No ❌ | -| Infrastructure | Azure Storage File Share | | No ❌ | -| Infrastructure | Azure Storage Table | | No ❌ | -| Infrastructure | Azure Storage Table Service | | No ❌ | | Infrastructure | Azure Transparent Data Encryption | | No ❌ | | Messaging Service | Azure Storage Queue | Azure Storage Queue | Yes ✅ | | Messaging Service | Azure Storage Queue Service | Azure Storage Queue Service | Yes ✅ | | Private Endpoint | Azure Storage Account | Azure Storage Account | Yes ✅ | | Snapshot | Azure Snapshot | Azure Snapshot | Yes ✅ | +| Storage Bucket | Azure Storage Blob Container | | No ❌ | | Storage Bucket | Azure Storage Blob Service | Azure Storage Blob Service | Yes ✅ | +| Storage Bucket | Azure Storage File Service | | Yes ✅ | +| Storage Bucket | Azure Storage File Share | | Yes ✅ | | Volume | Azure Disk | Azure Disk | Yes ✅ | | Web Service | Azure App Service | Azure App Service | Yes ✅ | diff --git a/internal/inventory/cloud_assets.xlsx b/internal/inventory/cloud_assets.xlsx index 0a00779f6b3fe1e6d16144d7ab5bd1decf63e1ab..36cea349390ba820aabd5bcc4ccbfba1f599e9de 100644 GIT binary patch literal 180158 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 literal 174786 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%0A5QoXGln$LpU0oqkKqZgLt9oLn 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 Yr_F1=3Mgz0n+1O2!E>*}eo&y;zeF6U&;S4c From 60e4c8c105919dfc62e6ba30ef57e9c24374859c Mon Sep 17 00:00:00 2001 From: kubasobon Date: Wed, 22 Jan 2025 15:01:26 +0100 Subject: [PATCH 15/21] add blob containers --- .../providers/azurelib/inventory/asset.go | 1 + .../azurelib/inventory/storage_provider.go | 54 +++++++++++++++ .../inventory/storage_provider_test.go | 65 +++++++++++++++++++ 3 files changed, 120 insertions(+) diff --git a/internal/resources/providers/azurelib/inventory/asset.go b/internal/resources/providers/azurelib/inventory/asset.go index 32eb7cb067..11240d834b 100644 --- a/internal/resources/providers/azurelib/inventory/asset.go +++ b/internal/resources/providers/azurelib/inventory/asset.go @@ -26,6 +26,7 @@ const ( ActivityLogAlertAssetType = "microsoft.insights/activitylogalerts" ApplicationInsights = "microsoft.insights/components" BastionAssetType = "microsoft.network/bastionhosts" + BlobContainerAssetType = "microsoft.storage/storageaccounts/containers" BlobServiceAssetType = "microsoft.storage/storageaccounts/blobservices" ClassicStorageAccountAssetType = "microsoft.classicstorage/storageaccounts" ContainerRegistryAssetType = "microsoft.containerregistry/registries" diff --git a/internal/resources/providers/azurelib/inventory/storage_provider.go b/internal/resources/providers/azurelib/inventory/storage_provider.go index 81ca22932f..a12c250355 100644 --- a/internal/resources/providers/azurelib/inventory/storage_provider.go +++ b/internal/resources/providers/azurelib/inventory/storage_provider.go @@ -37,6 +37,7 @@ import ( type storageAccountAzureClientWrapper struct { AssetDiagnosticSettings func(ctx context.Context, subID string, options *armmonitor.DiagnosticSettingsClientListOptions) ([]armmonitor.DiagnosticSettingsClientListResponse, error) + AssetBlobContainers func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.BlobContainersClientListOptions) ([]armstorage.BlobContainersClientListResponse, error) AssetBlobServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.BlobServicesClientListOptions) ([]armstorage.BlobServicesClientListResponse, error) AssetFileServices func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.FileServicesClientListOptions) (armstorage.FileServicesClientListResponse, error) AssetFileShares func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroup, storageAccountName string, options *armstorage.FileSharesClientListOptions) ([]armstorage.FileSharesClientListResponse, error) @@ -49,6 +50,7 @@ type storageAccountAzureClientWrapper struct { type StorageAccountProviderAPI interface { ListDiagnosticSettingsAssetTypes(ctx context.Context, cycleMetadata cycle.Metadata, subscriptionIDs []string) ([]AzureAsset, error) + ListStorageAccountBlobContainers(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountBlobServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountFileServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) ListStorageAccountFileShares(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) @@ -75,6 +77,13 @@ func NewStorageAccountProvider(log *logp.Logger, diagnosticSettingsClient *armmo pager := diagnosticSettingsClient.NewListPager(resourceURI, options) return readPager(ctx, pager) }, + AssetBlobContainers: func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroupName, storageAccountName string, options *armstorage.BlobContainersClientListOptions) ([]armstorage.BlobContainersClientListResponse, error) { + cl, err := armstorage.NewBlobContainersClient(subID, credentials, clientOptions) + if err != nil { + return nil, err + } + return readPager(ctx, cl.NewListPager(resourceGroupName, storageAccountName, options)) + }, AssetBlobServices: func(ctx context.Context, subID string, clientOptions *arm.ClientOptions, resourceGroupName, storageAccountName string, options *armstorage.BlobServicesClientListOptions) ([]armstorage.BlobServicesClientListResponse, error) { cl, err := armstorage.NewBlobServicesClient(subID, credentials, clientOptions) if err != nil { @@ -198,6 +207,25 @@ func transformStorageAccounts(accountPages []armstorage.AccountsClientListRespon }), errs } +func (p *storageAccountProvider) ListStorageAccountBlobContainers(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { + var assets []AzureAsset + for _, sa := range storageAccounts { + responses, err := p.client.AssetBlobContainers(ctx, sa.SubscriptionId, nil, sa.ResourceGroup, sa.Name, nil) + if err != nil { + return nil, fmt.Errorf("error while fetching azure blob containers for storage accounts %s: %w", sa.Id, err) + } + + blobContainers, err := transformBlobContainers(responses, sa) + if err != nil { + return nil, fmt.Errorf("error while transforming azure blob containers for storage accounts %s: %w", sa.Id, err) + } + + assets = append(assets, blobContainers...) + } + + return assets, nil +} + func (p *storageAccountProvider) ListStorageAccountBlobServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { var assets []AzureAsset for _, sa := range storageAccounts { @@ -370,6 +398,32 @@ func (p *storageAccountProvider) ListStorageAccountTableServices(ctx context.Con return assets, nil } +func transformBlobContainers(servicesPages []armstorage.BlobContainersClientListResponse, storageAccount AzureAsset) ([]AzureAsset, error) { + var errs error + return lo.FlatMap(servicesPages, func(response armstorage.BlobContainersClientListResponse, _ int) []AzureAsset { + return lo.Map(response.Value, func(item *armstorage.ListContainerItem, _ int) AzureAsset { + properties, err := maps.AsMapStringAny(item.Properties) + if err != nil { + errs = errors.Join(errs, err) + } + + return AzureAsset{ + Id: pointers.Deref(item.ID), + Name: pointers.Deref(item.Name), + Type: strings.ToLower(pointers.Deref(item.Type)), + ResourceGroup: storageAccount.ResourceGroup, + SubscriptionId: storageAccount.SubscriptionId, + TenantId: storageAccount.TenantId, + Properties: properties, + Extension: map[string]any{ + ExtensionStorageAccountID: storageAccount.Id, + ExtensionStorageAccountName: storageAccount.Name, + }, + } + }) + }), errs +} + func transformBlobServices(servicesPages []armstorage.BlobServicesClientListResponse, storageAccount AzureAsset) ([]AzureAsset, error) { var errs error return lo.FlatMap(servicesPages, func(response armstorage.BlobServicesClientListResponse, _ int) []AzureAsset { diff --git a/internal/resources/providers/azurelib/inventory/storage_provider_test.go b/internal/resources/providers/azurelib/inventory/storage_provider_test.go index ff7d4a3130..418c6eb17e 100644 --- a/internal/resources/providers/azurelib/inventory/storage_provider_test.go +++ b/internal/resources/providers/azurelib/inventory/storage_provider_test.go @@ -34,6 +34,14 @@ import ( "github.com/elastic/cloudbeat/internal/resources/utils/testhelper" ) +func NewBlobContainersClientListResponse(items ...*armstorage.ListContainerItem) armstorage.BlobContainersClientListResponse { + return armstorage.BlobContainersClientListResponse{ + ListContainerItems: armstorage.ListContainerItems{ + Value: items, + }, + } +} + func newBlobServicesClientListResponse(items ...*armstorage.BlobServiceProperties) armstorage.BlobServicesClientListResponse { return armstorage.BlobServicesClientListResponse{ BlobServiceItems: armstorage.BlobServiceItems{ @@ -164,6 +172,63 @@ func TestTransformBlobServices(t *testing.T) { } } +func TestTransformBlobContainers(t *testing.T) { + tests := map[string]struct { + inputPages []armstorage.BlobContainersClientListResponse + inputStorageAccount AzureAsset + expected []AzureAsset + expectError bool + }{ + "noop": {}, + "transform response": { + inputPages: []armstorage.BlobContainersClientListResponse{ + NewBlobContainersClientListResponse( + &armstorage.ListContainerItem{ + ID: to.Ptr("id1"), + Name: to.Ptr("name1"), + Type: to.Ptr("Microsoft.Storage/storageaccounts/containers"), + Properties: &armstorage.ContainerProperties{Deleted: to.Ptr(false)}, + }, + ), + }, + inputStorageAccount: AzureAsset{ + Id: "sa1", + Name: "sa name", + ResourceGroup: "rg1", + TenantId: "t1", + }, + expected: []AzureAsset{ + { + Id: "id1", + Name: "name1", + Properties: map[string]any{"deleted": false}, + Extension: map[string]any{ + ExtensionStorageAccountID: "sa1", + ExtensionStorageAccountName: "sa name", + }, + ResourceGroup: "rg1", + TenantId: "t1", + Type: BlobContainerAssetType, + }, + }, + expectError: false, + }, + } + + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + got, err := transformBlobContainers(tc.inputPages, tc.inputStorageAccount) + if tc.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + } + + require.ElementsMatch(t, tc.expected, got) + }) + } +} + func TestListStorageAccountQueues(t *testing.T) { response := func(v []*armstorage.ListQueue) armstorage.QueueClientListResponse { return armstorage.QueueClientListResponse{ From bbe35861a52775cec2c70b0dba48c647bf990491 Mon Sep 17 00:00:00 2001 From: kubasobon Date: Wed, 22 Jan 2025 15:06:54 +0100 Subject: [PATCH 16/21] add tests for blob containers --- internal/inventory/asset.go | 45 +++++++-------- .../inventory/azurefetcher/fetcher_storage.go | 2 + .../azurefetcher/fetcher_storage_test.go | 21 +++++++ .../azurefetcher/mock_storage_provider.go | 55 +++++++++++++++++++ .../mock_storage_account_provider_api.go | 55 +++++++++++++++++++ .../providers/azurelib/mock_provider_api.go | 55 +++++++++++++++++++ 6 files changed, 211 insertions(+), 22 deletions(-) diff --git a/internal/inventory/asset.go b/internal/inventory/asset.go index 8271aa2281..7c7b3e65d1 100644 --- a/internal/inventory/asset.go +++ b/internal/inventory/asset.go @@ -92,28 +92,29 @@ var ( AssetClassificationAwsSnsTopic = AssetClassification{CategoryMessagingService, "AWS SNS Topic"} // Azure - AssetClassificationAzureAppService = AssetClassification{CategoryWebService, "Azure App Service"} - AssetClassificationAzureContainerRegistry = AssetClassification{CategoryContainerRegistry, "Azure Container Registry"} - AssetClassificationAzureCosmosDBAccount = AssetClassification{CategoryInfrastructure, "Azure Cosmos DB Account"} - AssetClassificationAzureCosmosDBSQLDatabase = AssetClassification{CategoryInfrastructure, "Azure Cosmos DB SQL Database"} - AssetClassificationAzureDisk = AssetClassification{CategoryVolume, "Azure Disk"} - AssetClassificationAzureElasticPool = AssetClassification{CategoryDatabase, "Azure Elastic Pool"} - AssetClassificationAzureResourceGroup = AssetClassification{CategoryAccessManagement, "Azure Resource Group"} - AssetClassificationAzureSQLDatabase = AssetClassification{CategoryDatabase, "Azure SQL Database"} - AssetClassificationAzureSQLServer = AssetClassification{CategoryDatabase, "Azure SQL Server"} - AssetClassificationAzureServicePrincipal = AssetClassification{CategoryIdentity, "Azure Principal"} - AssetClassificationAzureSnapshot = AssetClassification{CategorySnapshot, "Azure Snapshot"} - AssetClassificationAzureStorageAccount = AssetClassification{CategoryPrivateEndpoint, "Azure Storage Account"} - AssetClassificationAzureStorageBlobService = AssetClassification{CategoryStorageBucket, "Azure Storage Blob Service"} - AssetClassificationAzureStorageFileService = AssetClassification{CategoryStorageBucket, "Azure Storage File Service"} - AssetClassificationAzureStorageFileShare = AssetClassification{CategoryStorageBucket, "Azure Storage File Share"} - AssetClassificationAzureStorageQueue = AssetClassification{CategoryMessagingService, "Azure Storage Queue"} - AssetClassificationAzureStorageQueueService = AssetClassification{CategoryMessagingService, "Azure Storage Queue Service"} - AssetClassificationAzureStorageTable = AssetClassification{CategoryDatabase, "Azure Storage Table"} - AssetClassificationAzureStorageTableService = AssetClassification{CategoryDatabase, "Azure Storage Table Service"} - AssetClassificationAzureSubscription = AssetClassification{CategoryAccessManagement, "Azure Subscription"} - AssetClassificationAzureTenant = AssetClassification{CategoryAccessManagement, "Azure Tenant"} - AssetClassificationAzureVirtualMachine = AssetClassification{CategoryHost, "Azure Virtual Machine"} + AssetClassificationAzureAppService = AssetClassification{CategoryWebService, "Azure App Service"} + AssetClassificationAzureContainerRegistry = AssetClassification{CategoryContainerRegistry, "Azure Container Registry"} + AssetClassificationAzureCosmosDBAccount = AssetClassification{CategoryInfrastructure, "Azure Cosmos DB Account"} + AssetClassificationAzureCosmosDBSQLDatabase = AssetClassification{CategoryInfrastructure, "Azure Cosmos DB SQL Database"} + AssetClassificationAzureDisk = AssetClassification{CategoryVolume, "Azure Disk"} + AssetClassificationAzureElasticPool = AssetClassification{CategoryDatabase, "Azure Elastic Pool"} + AssetClassificationAzureResourceGroup = AssetClassification{CategoryAccessManagement, "Azure Resource Group"} + AssetClassificationAzureSQLDatabase = AssetClassification{CategoryDatabase, "Azure SQL Database"} + AssetClassificationAzureSQLServer = AssetClassification{CategoryDatabase, "Azure SQL Server"} + AssetClassificationAzureServicePrincipal = AssetClassification{CategoryIdentity, "Azure Principal"} + AssetClassificationAzureSnapshot = AssetClassification{CategorySnapshot, "Azure Snapshot"} + AssetClassificationAzureStorageAccount = AssetClassification{CategoryPrivateEndpoint, "Azure Storage Account"} + AssetClassificationAzureStorageBlobContainer = AssetClassification{CategoryStorageBucket, "Azure Storage Blob Container"} + AssetClassificationAzureStorageBlobService = AssetClassification{CategoryStorageBucket, "Azure Storage Blob Service"} + AssetClassificationAzureStorageFileService = AssetClassification{CategoryStorageBucket, "Azure Storage File Service"} + AssetClassificationAzureStorageFileShare = AssetClassification{CategoryStorageBucket, "Azure Storage File Share"} + AssetClassificationAzureStorageQueue = AssetClassification{CategoryMessagingService, "Azure Storage Queue"} + AssetClassificationAzureStorageQueueService = AssetClassification{CategoryMessagingService, "Azure Storage Queue Service"} + AssetClassificationAzureStorageTable = AssetClassification{CategoryDatabase, "Azure Storage Table"} + AssetClassificationAzureStorageTableService = AssetClassification{CategoryDatabase, "Azure Storage Table Service"} + AssetClassificationAzureSubscription = AssetClassification{CategoryAccessManagement, "Azure Subscription"} + AssetClassificationAzureTenant = AssetClassification{CategoryAccessManagement, "Azure Tenant"} + AssetClassificationAzureVirtualMachine = AssetClassification{CategoryHost, "Azure Virtual Machine"} // GCP AssetClassificationGcpProject = AssetClassification{CategoryAccount, "GCP Project"} diff --git a/internal/inventory/azurefetcher/fetcher_storage.go b/internal/inventory/azurefetcher/fetcher_storage.go index 06ad2981c4..75f47a6dcb 100644 --- a/internal/inventory/azurefetcher/fetcher_storage.go +++ b/internal/inventory/azurefetcher/fetcher_storage.go @@ -36,6 +36,7 @@ type ( storageProviderFunc func(context.Context, []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) storageProvider interface { ListSubscriptions(ctx context.Context) ([]azurelib.AzureAsset, error) + ListStorageAccountBlobContainers(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountBlobServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountFileServices(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) ListStorageAccountFileShares(ctx context.Context, storageAccounts []azurelib.AzureAsset) ([]azurelib.AzureAsset, error) @@ -60,6 +61,7 @@ func (f *storageFetcher) Fetch(ctx context.Context, assetChan chan<- inventory.A function storageProviderFunc classification inventory.AssetClassification }{ + {"Storage Blob Containers", f.provider.ListStorageAccountBlobContainers, inventory.AssetClassificationAzureStorageBlobContainer}, {"Storage Blob Services", f.provider.ListStorageAccountBlobServices, inventory.AssetClassificationAzureStorageBlobService}, {"Storage File Services", f.provider.ListStorageAccountFileServices, inventory.AssetClassificationAzureStorageFileService}, {"Storage File Shares", f.provider.ListStorageAccountFileShares, inventory.AssetClassificationAzureStorageFileShare}, diff --git a/internal/inventory/azurefetcher/fetcher_storage_test.go b/internal/inventory/azurefetcher/fetcher_storage_test.go index 518df25b26..c280aa3dca 100644 --- a/internal/inventory/azurefetcher/fetcher_storage_test.go +++ b/internal/inventory/azurefetcher/fetcher_storage_test.go @@ -36,6 +36,11 @@ func TestStorageFetcher_Fetch(t *testing.T) { Id: "storage_account", Name: "storage_account", } + azureBlobContainer := azurelib_inventory.AzureAsset{ + Id: "blob_container", + Name: "blob_container", + DisplayName: "blob_container", + } azureBlobService := azurelib_inventory.AzureAsset{ Id: "blob_service", Name: "blob_service", @@ -73,6 +78,16 @@ func TestStorageFetcher_Fetch(t *testing.T) { } expected := []inventory.AssetEvent{ + inventory.NewAssetEvent( + inventory.AssetClassificationAzureStorageBlobContainer, + azureBlobContainer.Id, + azureBlobContainer.Name, + inventory.WithRawAsset(azureBlobContainer), + inventory.WithCloud(inventory.Cloud{ + Provider: inventory.AzureCloudProvider, + ServiceName: "Azure", + }), + ), inventory.NewAssetEvent( inventory.AssetClassificationAzureStorageBlobService, azureBlobService.Id, @@ -161,6 +176,12 @@ func TestStorageFetcher_Fetch(t *testing.T) { []azurelib_inventory.AzureAsset{storageAccount}, nil, ) + provider.EXPECT().ListStorageAccountBlobContainers( + mock.Anything, mock.Anything, + ).Return( + []azurelib_inventory.AzureAsset{azureBlobContainer}, nil, + ) + provider.EXPECT().ListStorageAccountBlobServices( mock.Anything, mock.Anything, ).Return( diff --git a/internal/inventory/azurefetcher/mock_storage_provider.go b/internal/inventory/azurefetcher/mock_storage_provider.go index 026381764c..39a317f97f 100644 --- a/internal/inventory/azurefetcher/mock_storage_provider.go +++ b/internal/inventory/azurefetcher/mock_storage_provider.go @@ -39,6 +39,61 @@ func (_m *mockStorageProvider) EXPECT() *mockStorageProvider_Expecter { return &mockStorageProvider_Expecter{mock: &_m.Mock} } +// ListStorageAccountBlobContainers provides a mock function with given fields: ctx, storageAccounts +func (_m *mockStorageProvider) ListStorageAccountBlobContainers(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []inventory.AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) []inventory.AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]inventory.AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []inventory.AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// mockStorageProvider_ListStorageAccountBlobContainers_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountBlobContainers' +type mockStorageProvider_ListStorageAccountBlobContainers_Call struct { + *mock.Call +} + +// ListStorageAccountBlobContainers is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []inventory.AzureAsset +func (_e *mockStorageProvider_Expecter) ListStorageAccountBlobContainers(ctx interface{}, storageAccounts interface{}) *mockStorageProvider_ListStorageAccountBlobContainers_Call { + return &mockStorageProvider_ListStorageAccountBlobContainers_Call{Call: _e.mock.On("ListStorageAccountBlobContainers", ctx, storageAccounts)} +} + +func (_c *mockStorageProvider_ListStorageAccountBlobContainers_Call) Run(run func(ctx context.Context, storageAccounts []inventory.AzureAsset)) *mockStorageProvider_ListStorageAccountBlobContainers_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]inventory.AzureAsset)) + }) + return _c +} + +func (_c *mockStorageProvider_ListStorageAccountBlobContainers_Call) Return(_a0 []inventory.AzureAsset, _a1 error) *mockStorageProvider_ListStorageAccountBlobContainers_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *mockStorageProvider_ListStorageAccountBlobContainers_Call) RunAndReturn(run func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)) *mockStorageProvider_ListStorageAccountBlobContainers_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccountBlobServices provides a mock function with given fields: ctx, storageAccounts func (_m *mockStorageProvider) ListStorageAccountBlobServices(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { ret := _m.Called(ctx, storageAccounts) diff --git a/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go b/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go index 577c61bfc2..afc5aa1e04 100644 --- a/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go +++ b/internal/resources/providers/azurelib/inventory/mock_storage_account_provider_api.go @@ -95,6 +95,61 @@ func (_c *MockStorageAccountProviderAPI_ListDiagnosticSettingsAssetTypes_Call) R return _c } +// ListStorageAccountBlobContainers provides a mock function with given fields: ctx, storageAccounts +func (_m *MockStorageAccountProviderAPI) ListStorageAccountBlobContainers(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []AzureAsset) ([]AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []AzureAsset) []AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockStorageAccountProviderAPI_ListStorageAccountBlobContainers_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountBlobContainers' +type MockStorageAccountProviderAPI_ListStorageAccountBlobContainers_Call struct { + *mock.Call +} + +// ListStorageAccountBlobContainers is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []AzureAsset +func (_e *MockStorageAccountProviderAPI_Expecter) ListStorageAccountBlobContainers(ctx interface{}, storageAccounts interface{}) *MockStorageAccountProviderAPI_ListStorageAccountBlobContainers_Call { + return &MockStorageAccountProviderAPI_ListStorageAccountBlobContainers_Call{Call: _e.mock.On("ListStorageAccountBlobContainers", ctx, storageAccounts)} +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountBlobContainers_Call) Run(run func(ctx context.Context, storageAccounts []AzureAsset)) *MockStorageAccountProviderAPI_ListStorageAccountBlobContainers_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]AzureAsset)) + }) + return _c +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountBlobContainers_Call) Return(_a0 []AzureAsset, _a1 error) *MockStorageAccountProviderAPI_ListStorageAccountBlobContainers_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockStorageAccountProviderAPI_ListStorageAccountBlobContainers_Call) RunAndReturn(run func(context.Context, []AzureAsset) ([]AzureAsset, error)) *MockStorageAccountProviderAPI_ListStorageAccountBlobContainers_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccountBlobServices provides a mock function with given fields: ctx, storageAccounts func (_m *MockStorageAccountProviderAPI) ListStorageAccountBlobServices(ctx context.Context, storageAccounts []AzureAsset) ([]AzureAsset, error) { ret := _m.Called(ctx, storageAccounts) diff --git a/internal/resources/providers/azurelib/mock_provider_api.go b/internal/resources/providers/azurelib/mock_provider_api.go index 9f2a4c54b3..021da8ce72 100644 --- a/internal/resources/providers/azurelib/mock_provider_api.go +++ b/internal/resources/providers/azurelib/mock_provider_api.go @@ -1220,6 +1220,61 @@ func (_c *MockProviderAPI_ListSinglePostgresFirewallRules_Call) RunAndReturn(run return _c } +// ListStorageAccountBlobContainers provides a mock function with given fields: ctx, storageAccounts +func (_m *MockProviderAPI) ListStorageAccountBlobContainers(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { + ret := _m.Called(ctx, storageAccounts) + + var r0 []inventory.AzureAsset + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)); ok { + return rf(ctx, storageAccounts) + } + if rf, ok := ret.Get(0).(func(context.Context, []inventory.AzureAsset) []inventory.AzureAsset); ok { + r0 = rf(ctx, storageAccounts) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]inventory.AzureAsset) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, []inventory.AzureAsset) error); ok { + r1 = rf(ctx, storageAccounts) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// MockProviderAPI_ListStorageAccountBlobContainers_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'ListStorageAccountBlobContainers' +type MockProviderAPI_ListStorageAccountBlobContainers_Call struct { + *mock.Call +} + +// ListStorageAccountBlobContainers is a helper method to define mock.On call +// - ctx context.Context +// - storageAccounts []inventory.AzureAsset +func (_e *MockProviderAPI_Expecter) ListStorageAccountBlobContainers(ctx interface{}, storageAccounts interface{}) *MockProviderAPI_ListStorageAccountBlobContainers_Call { + return &MockProviderAPI_ListStorageAccountBlobContainers_Call{Call: _e.mock.On("ListStorageAccountBlobContainers", ctx, storageAccounts)} +} + +func (_c *MockProviderAPI_ListStorageAccountBlobContainers_Call) Run(run func(ctx context.Context, storageAccounts []inventory.AzureAsset)) *MockProviderAPI_ListStorageAccountBlobContainers_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context), args[1].([]inventory.AzureAsset)) + }) + return _c +} + +func (_c *MockProviderAPI_ListStorageAccountBlobContainers_Call) Return(_a0 []inventory.AzureAsset, _a1 error) *MockProviderAPI_ListStorageAccountBlobContainers_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *MockProviderAPI_ListStorageAccountBlobContainers_Call) RunAndReturn(run func(context.Context, []inventory.AzureAsset) ([]inventory.AzureAsset, error)) *MockProviderAPI_ListStorageAccountBlobContainers_Call { + _c.Call.Return(run) + return _c +} + // ListStorageAccountBlobServices provides a mock function with given fields: ctx, storageAccounts func (_m *MockProviderAPI) ListStorageAccountBlobServices(ctx context.Context, storageAccounts []inventory.AzureAsset) ([]inventory.AzureAsset, error) { ret := _m.Called(ctx, storageAccounts) From 7c33381c4dad2b3302b9a24a817593ff40afa098 Mon Sep 17 00:00:00 2001 From: kubasobon Date: Wed, 22 Jan 2025 15:27:55 +0100 Subject: [PATCH 17/21] update integration test cases --- tests/product/tests/data/azure_asset_inventory/test_cases.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/product/tests/data/azure_asset_inventory/test_cases.py b/tests/product/tests/data/azure_asset_inventory/test_cases.py index 250c4313cc..15c14ea268 100644 --- a/tests/product/tests/data/azure_asset_inventory/test_cases.py +++ b/tests/product/tests/data/azure_asset_inventory/test_cases.py @@ -73,6 +73,10 @@ category="Messaging Service", type_="Azure Storage Queue Service", ), + "[Asset Inventory][Azure][Azure Storage Blob Container] assets found": AssetInventoryCase( + category="Storage Bucket", + type_="Azure Storage Blob Container", + ), "[Asset Inventory][Azure][Azure Storage Blob Service] assets found": AssetInventoryCase( category="Storage Bucket", type_="Azure Storage Blob Service", From 19680517fbc2a8fe9f906d694b5a2fee62ab8269 Mon Sep 17 00:00:00 2001 From: kubasobon Date: Wed, 22 Jan 2025 15:28:07 +0100 Subject: [PATCH 18/21] update ASSETS.md --- internal/inventory/ASSETS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/inventory/ASSETS.md b/internal/inventory/ASSETS.md index edcc149e95..2d417a3762 100644 --- a/internal/inventory/ASSETS.md +++ b/internal/inventory/ASSETS.md @@ -109,7 +109,7 @@ Storage Bucket: 100% (1/1) ## AZURE Resources -**Progress: 40% (22/54)** +**Progress: 42% (23/54)** Access Management: 100% (3/3) Container Registry: 100% (1/1) Database: 100% (5/5) @@ -119,7 +119,7 @@ Infrastructure: 8% (2/23) Messaging Service: 100% (2/2) Private Endpoint: 100% (1/1) Snapshot: 100% (1/1) -Storage Bucket: 75% (3/4) +Storage Bucket: 100% (4/4) Volume: 100% (1/1) Web Service: 100% (1/1) @@ -175,7 +175,7 @@ Web Service: 100% (1/1) | Messaging Service | Azure Storage Queue Service | Azure Storage Queue Service | Yes ✅ | | Private Endpoint | Azure Storage Account | Azure Storage Account | Yes ✅ | | Snapshot | Azure Snapshot | Azure Snapshot | Yes ✅ | -| Storage Bucket | Azure Storage Blob Container | | No ❌ | +| Storage Bucket | Azure Storage Blob Container | | Yes ✅ | | Storage Bucket | Azure Storage Blob Service | Azure Storage Blob Service | Yes ✅ | | Storage Bucket | Azure Storage File Service | | Yes ✅ | | Storage Bucket | Azure Storage File Share | | Yes ✅ | From cc4ecd8c37e256863af95236218397808cd31554 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Sobo=C5=84?= Date: Mon, 27 Jan 2025 10:20:06 +0100 Subject: [PATCH 19/21] Update tests/product/tests/test_azure_asset_inventory.py Co-authored-by: orouz --- tests/product/tests/test_azure_asset_inventory.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/product/tests/test_azure_asset_inventory.py b/tests/product/tests/test_azure_asset_inventory.py index bb68be638d..34c5a33037 100644 --- a/tests/product/tests/test_azure_asset_inventory.py +++ b/tests/product/tests/test_azure_asset_inventory.py @@ -34,7 +34,7 @@ def test_azure_asset_inventory( assert isinstance(entities, list) and len(entities) > 0, "Expected the list to be non-empty" for entity in entities: assert entity.cloud, "Expected .cloud section" - assert entity.cloud.provider == "azure", f'Expected "aws" provider, got {entity.cloud.provider}' + assert entity.cloud.provider == "azure", f'Expected "azure" provider, got {entity.cloud.provider}' assert len(entity.entity.id) > 0, "Expected .entity.id list to contain an ID" assert len(entity.entity.id[0]) > 0, "Expected the ID to be non-empty" assert entity.Attributes, "Expected the resource under .Attributes" From 2e67515f790707fa3321fe870d41b0427a7fac7c Mon Sep 17 00:00:00 2001 From: kubasobon Date: Mon, 27 Jan 2025 11:55:34 +0100 Subject: [PATCH 20/21] fix categories to match spec --- internal/inventory/ASSETS.md | 14 ++++++++------ internal/inventory/asset.go | 9 +++++---- internal/inventory/cloud_assets.xlsx | Bin 180158 -> 180531 bytes 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/internal/inventory/ASSETS.md b/internal/inventory/ASSETS.md index 2d417a3762..ddef73d75a 100644 --- a/internal/inventory/ASSETS.md +++ b/internal/inventory/ASSETS.md @@ -112,14 +112,16 @@ Storage Bucket: 100% (1/1) **Progress: 42% (23/54)** Access Management: 100% (3/3) Container Registry: 100% (1/1) -Database: 100% (5/5) +Database: 100% (4/4) +File System Service: 100% (2/2) Host: 100% (1/1) Identity: 9% (1/11) Infrastructure: 8% (2/23) Messaging Service: 100% (2/2) Private Endpoint: 100% (1/1) +Service Usage Technology: 100% (2/2) Snapshot: 100% (1/1) -Storage Bucket: 100% (4/4) +Storage Bucket: 100% (1/1) Volume: 100% (1/1) Web Service: 100% (1/1) @@ -135,7 +137,8 @@ Web Service: 100% (1/1) | Database | Azure SQL Database | Azure SQL Database | Yes ✅ | | Database | Azure SQL Server | Azure SQL Server | Yes ✅ | | Database | Azure Storage Table | | Yes ✅ | -| Database | Azure Storage Table Service | | Yes ✅ | +| File System Service | Azure Storage File Service | | Yes ✅ | +| File System Service | Azure Storage File Share | | Yes ✅ | | Host | Azure Virtual Machine | Azure Virtual Machine | Yes ✅ | | Identity | Access Key | | No ❌ | | Identity | API Gateway Client Certificate | | No ❌ | @@ -174,11 +177,10 @@ Web Service: 100% (1/1) | Messaging Service | Azure Storage Queue | Azure Storage Queue | Yes ✅ | | Messaging Service | Azure Storage Queue Service | Azure Storage Queue Service | Yes ✅ | | Private Endpoint | Azure Storage Account | Azure Storage Account | Yes ✅ | +| Service Usage Technology | Azure Storage Blob Service | Azure Storage Blob Service | Yes ✅ | +| Service Usage Technology | Azure Storage Table Service | | Yes ✅ | | Snapshot | Azure Snapshot | Azure Snapshot | Yes ✅ | | Storage Bucket | Azure Storage Blob Container | | Yes ✅ | -| Storage Bucket | Azure Storage Blob Service | Azure Storage Blob Service | Yes ✅ | -| Storage Bucket | Azure Storage File Service | | Yes ✅ | -| Storage Bucket | Azure Storage File Share | | Yes ✅ | | Volume | Azure Disk | Azure Disk | Yes ✅ | | Web Service | Azure App Service | Azure App Service | Yes ✅ | diff --git a/internal/inventory/asset.go b/internal/inventory/asset.go index 7c7b3e65d1..da105d6ccf 100644 --- a/internal/inventory/asset.go +++ b/internal/inventory/asset.go @@ -29,6 +29,7 @@ const ( CategoryContainerService AssetCategory = "Container Service" CategoryDatabase AssetCategory = "Database" CategoryFaaS AssetCategory = "FaaS" + CategoryFileSystemService AssetCategory = "File System Service" CategoryFirewall AssetCategory = "Firewall" CategoryGateway AssetCategory = "Gateway" CategoryHost AssetCategory = "Host" @@ -105,13 +106,13 @@ var ( AssetClassificationAzureSnapshot = AssetClassification{CategorySnapshot, "Azure Snapshot"} AssetClassificationAzureStorageAccount = AssetClassification{CategoryPrivateEndpoint, "Azure Storage Account"} AssetClassificationAzureStorageBlobContainer = AssetClassification{CategoryStorageBucket, "Azure Storage Blob Container"} - AssetClassificationAzureStorageBlobService = AssetClassification{CategoryStorageBucket, "Azure Storage Blob Service"} - AssetClassificationAzureStorageFileService = AssetClassification{CategoryStorageBucket, "Azure Storage File Service"} - AssetClassificationAzureStorageFileShare = AssetClassification{CategoryStorageBucket, "Azure Storage File Share"} + AssetClassificationAzureStorageBlobService = AssetClassification{CategoryServiceUsageTechnology, "Azure Storage Blob Service"} + AssetClassificationAzureStorageFileService = AssetClassification{CategoryFileSystemService, "Azure Storage File Service"} + AssetClassificationAzureStorageFileShare = AssetClassification{CategoryFileSystemService, "Azure Storage File Share"} AssetClassificationAzureStorageQueue = AssetClassification{CategoryMessagingService, "Azure Storage Queue"} AssetClassificationAzureStorageQueueService = AssetClassification{CategoryMessagingService, "Azure Storage Queue Service"} AssetClassificationAzureStorageTable = AssetClassification{CategoryDatabase, "Azure Storage Table"} - AssetClassificationAzureStorageTableService = AssetClassification{CategoryDatabase, "Azure Storage Table Service"} + AssetClassificationAzureStorageTableService = AssetClassification{CategoryServiceUsageTechnology, "Azure Storage Table Service"} AssetClassificationAzureSubscription = AssetClassification{CategoryAccessManagement, "Azure Subscription"} AssetClassificationAzureTenant = AssetClassification{CategoryAccessManagement, "Azure Tenant"} AssetClassificationAzureVirtualMachine = AssetClassification{CategoryHost, "Azure Virtual Machine"} diff --git a/internal/inventory/cloud_assets.xlsx b/internal/inventory/cloud_assets.xlsx index 36cea349390ba820aabd5bcc4ccbfba1f599e9de..a595e36c7b2f34408d4d1549a72cd0529aa163e5 100644 GIT binary patch delta 100247 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
    ii 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 z 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 J6@!4F{{USnNACat delta 99076 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

    aRy+%xb{$=SOAGBDSx@o=lnnzjwK_`%$ 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 From 68355c44686dfdf23835a848d0496a0939b17382 Mon Sep 17 00:00:00 2001 From: kubasobon Date: Mon, 27 Jan 2025 16:53:07 +0100 Subject: [PATCH 21/21] fix it test case categories --- .../tests/data/azure_asset_inventory/test_cases.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/product/tests/data/azure_asset_inventory/test_cases.py b/tests/product/tests/data/azure_asset_inventory/test_cases.py index 15c14ea268..9b35abfb8c 100644 --- a/tests/product/tests/data/azure_asset_inventory/test_cases.py +++ b/tests/product/tests/data/azure_asset_inventory/test_cases.py @@ -78,15 +78,15 @@ type_="Azure Storage Blob Container", ), "[Asset Inventory][Azure][Azure Storage Blob Service] assets found": AssetInventoryCase( - category="Storage Bucket", + category="Service Usage Technology", type_="Azure Storage Blob Service", ), "[Asset Inventory][Azure][Azure Storage File Service] assets found": AssetInventoryCase( - category="Storage Bucket", + category="File System Service", type_="Azure Storage File Service", ), "[Asset Inventory][Azure][Azure Storage File Share] assets found": AssetInventoryCase( - category="Storage Bucket", + category="File System Service", type_="Azure Storage File Share", ), "[Asset Inventory][Azure][Azure Table] assets found": AssetInventoryCase( @@ -94,7 +94,7 @@ type_="Azure Storage Table", ), "[Asset Inventory][Azure][Azure Table Service] assets found": AssetInventoryCase( - category="Database", + category="Service Usage Technology", type_="Azure Storage Table Service", ), }