From 88d66716517283960922712fcf5f50887c32d971 Mon Sep 17 00:00:00 2001 From: ariklin Date: Wed, 30 Mar 2022 22:44:30 +0300 Subject: [PATCH 1/6] solutions_reference_data --- .../command_modules/security/_client_factory.py | 4 ++++ .../azure/cli/command_modules/security/_params.py | 4 ++-- .../azure/cli/command_modules/security/commands.py | 14 +++++++++++++- .../azure/cli/command_modules/security/custom.py | 12 ++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/security/_client_factory.py b/src/azure-cli/azure/cli/command_modules/security/_client_factory.py index 5c26f7120d9..692e12e61c7 100644 --- a/src/azure-cli/azure/cli/command_modules/security/_client_factory.py +++ b/src/azure-cli/azure/cli/command_modules/security/_client_factory.py @@ -144,3 +144,7 @@ def cf_security_secure_score_controls(cli_ctx, _): def cf_security_secure_score_control_definitions(cli_ctx, _): return _cf_security(cli_ctx).secure_score_control_definitions + + +def cf_security_security_solutions_reference_data(cli_ctx, _): + return _cf_security(cli_ctx) diff --git a/src/azure-cli/azure/cli/command_modules/security/_params.py b/src/azure-cli/azure/cli/command_modules/security/_params.py index 41c9f6e8f5b..7e14cf8359a 100644 --- a/src/azure-cli/azure/cli/command_modules/security/_params.py +++ b/src/azure-cli/azure/cli/command_modules/security/_params.py @@ -120,8 +120,8 @@ def load_arguments(self, _): 'allowed_connections', 'secure-scores', 'secure-score-controls', - 'secure-score-control-definitions' - ]: + 'secure-score-control-definitions', + 'solutions_reference_data']: with self.argument_context('security {}'.format(scope)) as c: c.argument( 'resource_group_name', diff --git a/src/azure-cli/azure/cli/command_modules/security/commands.py b/src/azure-cli/azure/cli/command_modules/security/commands.py index dd87bf132fd..621a02c7bd5 100644 --- a/src/azure-cli/azure/cli/command_modules/security/commands.py +++ b/src/azure-cli/azure/cli/command_modules/security/commands.py @@ -35,7 +35,8 @@ cf_security_regulatory_compliance_assessment, cf_security_secure_scores, cf_security_secure_score_controls, - cf_security_secure_score_control_definitions) + cf_security_secure_score_control_definitions, + cf_security_security_solutions_reference_data) # pylint: disable=line-too-long @@ -73,6 +74,12 @@ def load_command_table(self, _): client_factory=cf_security_regulatory_compliance_assessment ) + security_solutions_reference_data_sdk = CliCommandType( + operations_tmpl='azure.mgmt.security.operations#SecuritySolutionsReferenceDataOperations.{}', + client_factory=cf_security_security_solutions_reference_data, + operation_group='security_solutions_reference_data' + ) + security_tasks_sdk = CliCommandType( operations_tmpl='azure.mgmt.security.operations#TasksOperations.{}', client_factory=cf_security_tasks, @@ -241,6 +248,11 @@ def load_command_table(self, _): g.custom_command('list', 'list_regulatory_compliance_standards') g.custom_show_command('show', 'get_regulatory_compliance_standard') + with self.command_group('security security_solutions_reference_data', + security_solutions_reference_data_sdk, + client_factory=cf_security_security_solutions_reference_data) as g: + g.custom_command('list', 'list_security_security_solutions_reference_data') + with self.command_group('security regulatory-compliance-controls', security_regulatory_compliance_controls_sdk, client_factory=cf_security_regulatory_compliance_control) as g: diff --git a/src/azure-cli/azure/cli/command_modules/security/custom.py b/src/azure-cli/azure/cli/command_modules/security/custom.py index d8055e25703..0978778e872 100644 --- a/src/azure-cli/azure/cli/command_modules/security/custom.py +++ b/src/azure-cli/azure/cli/command_modules/security/custom.py @@ -253,6 +253,18 @@ def get_security_location(client, resource_name): client.config.asc_location = resource_name return client.get() + + +# -------------------------------------------------------------------------------------------- +# securitySolutionsReferenceData +# -------------------------------------------------------------------------------------------- + +def list_security_security_solutions_reference_data(client): + + for loc in client.locations.list(): + client.config.asc_location = loc.name + + return client.security_solutions_reference_data.list() # -------------------------------------------------------------------------------------------- From 84f5f31dcc075cfc7ebbd8f451c0637210f1c652 Mon Sep 17 00:00:00 2001 From: ariklin Date: Tue, 26 Jul 2022 17:50:00 +0300 Subject: [PATCH 2/6] Introducing securitySolutionsReferenceData CLI --- .../security/_client_factory.py | 2 +- .../cli/command_modules/security/_help.py | 9 +++++++++ .../cli/command_modules/security/_params.py | 2 +- .../cli/command_modules/security/commands.py | 11 +++++------ .../cli/command_modules/security/custom.py | 9 +++------ .../test_securitySolutionsReferenceData.py | 18 ++++++++++++++++++ 6 files changed, 37 insertions(+), 14 deletions(-) create mode 100644 src/azure-cli/azure/cli/command_modules/security/tests/latest/test_securitySolutionsReferenceData.py diff --git a/src/azure-cli/azure/cli/command_modules/security/_client_factory.py b/src/azure-cli/azure/cli/command_modules/security/_client_factory.py index 692e12e61c7..d154c2a412e 100644 --- a/src/azure-cli/azure/cli/command_modules/security/_client_factory.py +++ b/src/azure-cli/azure/cli/command_modules/security/_client_factory.py @@ -147,4 +147,4 @@ def cf_security_secure_score_control_definitions(cli_ctx, _): def cf_security_security_solutions_reference_data(cli_ctx, _): - return _cf_security(cli_ctx) + return _cf_security(cli_ctx).security_solutions_reference_data diff --git a/src/azure-cli/azure/cli/command_modules/security/_help.py b/src/azure-cli/azure/cli/command_modules/security/_help.py index 87000916e2d..a4c86fcc8e9 100644 --- a/src/azure-cli/azure/cli/command_modules/security/_help.py +++ b/src/azure-cli/azure/cli/command_modules/security/_help.py @@ -983,3 +983,12 @@ text: > az security secure-score-control-definitions list """ + +helps['security security_solutions_reference_data list'] = """ +type: command +short-summary: Display all security solutions reference data at the subscription level. +examples: + - name: Display all security solutions reference data. + text: > + az security security_solutions_reference_data list +""" diff --git a/src/azure-cli/azure/cli/command_modules/security/_params.py b/src/azure-cli/azure/cli/command_modules/security/_params.py index 7e14cf8359a..cf35e516491 100644 --- a/src/azure-cli/azure/cli/command_modules/security/_params.py +++ b/src/azure-cli/azure/cli/command_modules/security/_params.py @@ -121,7 +121,7 @@ def load_arguments(self, _): 'secure-scores', 'secure-score-controls', 'secure-score-control-definitions', - 'solutions_reference_data']: + 'security_solutions_reference_data']: with self.argument_context('security {}'.format(scope)) as c: c.argument( 'resource_group_name', diff --git a/src/azure-cli/azure/cli/command_modules/security/commands.py b/src/azure-cli/azure/cli/command_modules/security/commands.py index 621a02c7bd5..173da4af653 100644 --- a/src/azure-cli/azure/cli/command_modules/security/commands.py +++ b/src/azure-cli/azure/cli/command_modules/security/commands.py @@ -74,10 +74,9 @@ def load_command_table(self, _): client_factory=cf_security_regulatory_compliance_assessment ) - security_solutions_reference_data_sdk = CliCommandType( + security_security_solutions_reference_data_sdk = CliCommandType( operations_tmpl='azure.mgmt.security.operations#SecuritySolutionsReferenceDataOperations.{}', - client_factory=cf_security_security_solutions_reference_data, - operation_group='security_solutions_reference_data' + client_factory=cf_security_security_solutions_reference_data ) security_tasks_sdk = CliCommandType( @@ -249,10 +248,10 @@ def load_command_table(self, _): g.custom_show_command('show', 'get_regulatory_compliance_standard') with self.command_group('security security_solutions_reference_data', - security_solutions_reference_data_sdk, + security_security_solutions_reference_data_sdk, client_factory=cf_security_security_solutions_reference_data) as g: - g.custom_command('list', 'list_security_security_solutions_reference_data') - + g.custom_command('list', 'list_security_solutions_reference_data') + with self.command_group('security regulatory-compliance-controls', security_regulatory_compliance_controls_sdk, client_factory=cf_security_regulatory_compliance_control) as g: diff --git a/src/azure-cli/azure/cli/command_modules/security/custom.py b/src/azure-cli/azure/cli/command_modules/security/custom.py index 0978778e872..57dca9f7f9b 100644 --- a/src/azure-cli/azure/cli/command_modules/security/custom.py +++ b/src/azure-cli/azure/cli/command_modules/security/custom.py @@ -253,18 +253,15 @@ def get_security_location(client, resource_name): client.config.asc_location = resource_name return client.get() - + # -------------------------------------------------------------------------------------------- # securitySolutionsReferenceData # -------------------------------------------------------------------------------------------- -def list_security_security_solutions_reference_data(client): +def list_security_solutions_reference_data(client): - for loc in client.locations.list(): - client.config.asc_location = loc.name - - return client.security_solutions_reference_data.list() + return client.list() # -------------------------------------------------------------------------------------------- diff --git a/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_securitySolutionsReferenceData.py b/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_securitySolutionsReferenceData.py new file mode 100644 index 00000000000..595393a2524 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_securitySolutionsReferenceData.py @@ -0,0 +1,18 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- + +from azure.cli.testsdk import ScenarioTest +from azure_devtools.scenario_tests import AllowLargeResponse + + +class securitySolutionsReferenceDataTests(ScenarioTest): + + def test_security_securitySolutionsReferenceData(self): + + SolutionsReferenceData = self.cmd('az security security_solutions_reference_data list').get_output_in_json() + + assert len(SolutionsReferenceData) >= 0 + + self.cmd('az security security_solutions_reference_data list') From bc8938fb497e9c84e1e2dcfd9efea700b6fc9a96 Mon Sep 17 00:00:00 2001 From: ariklin Date: Tue, 26 Jul 2022 19:25:11 +0300 Subject: [PATCH 3/6] Add recording --- ...curity_securitySolutionsReferenceData.yaml | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/azure-cli/azure/cli/command_modules/security/tests/latest/recordings/test_security_securitySolutionsReferenceData.yaml diff --git a/src/azure-cli/azure/cli/command_modules/security/tests/latest/recordings/test_security_securitySolutionsReferenceData.yaml b/src/azure-cli/azure/cli/command_modules/security/tests/latest/recordings/test_security_securitySolutionsReferenceData.yaml new file mode 100644 index 00000000000..effa4cf6bfe --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/security/tests/latest/recordings/test_security_securitySolutionsReferenceData.yaml @@ -0,0 +1,114 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - security security_solutions_reference_data list + Connection: + - keep-alive + User-Agent: + - python/3.7.8rc1 (Windows-10-10.0.22000-SP0) msrest/0.6.21 msrest_azure/0.6.3 + azure-mgmt-security/0.6.0 Azure-SDK-For-Python AZURECLI/2.20.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Security/securitySolutionsReferenceData?api-version=2020-01-01 + response: + body: + string: '{"value":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Security/locations/centralus/securitySolutionsReferenceData/rapid7.insightplatform","name":"rapid7.insightplatform","type":"Microsoft.Security/locations/securitySolutionsReferenceData","properties":{"alertVendorName":"Rapid7","securityFamily":"Va","packageInfoUrl":"www.azure.com","productName":"Vulnerability + Assessment","provisionType":"SemiIntegrated","publisher":"rapid7","publisherDisplayName":"Rapid7 + Inc.","template":"rapid7/insightplatform"}},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Security/locations/centralus/securitySolutionsReferenceData/qualys.qualysAgent","name":"qualys.qualysAgent","type":"Microsoft.Security/locations/securitySolutionsReferenceData","properties":{"alertVendorName":"Qualys + VA","securityFamily":"Va","packageInfoUrl":"http://www.qualys.com/","productName":"Vulnerability + Assessment","provisionType":"SemiIntegrated","publisher":"qualys","publisherDisplayName":"Qualys, + Inc.","template":"qualys/qualysAgent","templateAdministrationExpression":"http://www.qualys.com/"}},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Security/locations/centralus/securitySolutionsReferenceData/microsoft.ApplicationGateway-ARM","name":"microsoft.ApplicationGateway-ARM","type":"Microsoft.Security/locations/securitySolutionsReferenceData","properties":{"alertVendorName":"Microsoft","securityFamily":"SaasWaf","packageInfoUrl":"www.azure.com","productName":"Web + Application Firewall","provisionType":"SemiIntegrated","publisher":"microsoft","publisherDisplayName":"Microsoft + Inc.","template":"microsoft/ApplicationGateway-ARM","templateAdministrationExpression":"https://portal.azure.com#resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Network/applicationGateways/{name}/overview"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '1903' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 26 Jul 2022 14:35:43 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - '' + - '' + - '' + x-ms-ratelimit-remaining-subscription-resource-requests: + - '749' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - security security_solutions_reference_data list + Connection: + - keep-alive + User-Agent: + - python/3.7.8rc1 (Windows-10-10.0.22000-SP0) msrest/0.6.21 msrest_azure/0.6.3 + azure-mgmt-security/0.6.0 Azure-SDK-For-Python AZURECLI/2.20.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Security/securitySolutionsReferenceData?api-version=2020-01-01 + response: + body: + string: '{"value":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Security/locations/centralus/securitySolutionsReferenceData/rapid7.insightplatform","name":"rapid7.insightplatform","type":"Microsoft.Security/locations/securitySolutionsReferenceData","properties":{"alertVendorName":"Rapid7","securityFamily":"Va","packageInfoUrl":"www.azure.com","productName":"Vulnerability + Assessment","provisionType":"SemiIntegrated","publisher":"rapid7","publisherDisplayName":"Rapid7 + Inc.","template":"rapid7/insightplatform"}},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Security/locations/centralus/securitySolutionsReferenceData/qualys.qualysAgent","name":"qualys.qualysAgent","type":"Microsoft.Security/locations/securitySolutionsReferenceData","properties":{"alertVendorName":"Qualys + VA","securityFamily":"Va","packageInfoUrl":"http://www.qualys.com/","productName":"Vulnerability + Assessment","provisionType":"SemiIntegrated","publisher":"qualys","publisherDisplayName":"Qualys, + Inc.","template":"qualys/qualysAgent","templateAdministrationExpression":"http://www.qualys.com/"}},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Security/locations/centralus/securitySolutionsReferenceData/microsoft.ApplicationGateway-ARM","name":"microsoft.ApplicationGateway-ARM","type":"Microsoft.Security/locations/securitySolutionsReferenceData","properties":{"alertVendorName":"Microsoft","securityFamily":"SaasWaf","packageInfoUrl":"www.azure.com","productName":"Web + Application Firewall","provisionType":"SemiIntegrated","publisher":"microsoft","publisherDisplayName":"Microsoft + Inc.","template":"microsoft/ApplicationGateway-ARM","templateAdministrationExpression":"https://portal.azure.com#resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Network/applicationGateways/{name}/overview"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '1903' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 26 Jul 2022 14:35:44 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-original-request-ids: + - '' + - '' + - '' + x-ms-ratelimit-remaining-subscription-resource-requests: + - '749' + status: + code: 200 + message: OK +version: 1 From a8b5e0a05a2224167416c47e593224c093e58e96 Mon Sep 17 00:00:00 2001 From: ariklin Date: Wed, 27 Jul 2022 13:50:49 +0300 Subject: [PATCH 4/6] fix style check --- .../azure/cli/command_modules/security/_client_factory.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/azure-cli/azure/cli/command_modules/security/_client_factory.py b/src/azure-cli/azure/cli/command_modules/security/_client_factory.py index eb24fc0a34d..882d91bcf92 100644 --- a/src/azure-cli/azure/cli/command_modules/security/_client_factory.py +++ b/src/azure-cli/azure/cli/command_modules/security/_client_factory.py @@ -149,8 +149,10 @@ def cf_security_secure_score_controls(cli_ctx, _): def cf_security_secure_score_control_definitions(cli_ctx, _): return _cf_security(cli_ctx).secure_score_control_definitions + def cf_security_security_solutions_reference_data(cli_ctx, _): return _cf_security(cli_ctx).security_solutions_reference_data + def cf_security_automations(cli_ctx, _): return _cf_security(cli_ctx).automations From a89c71b71ef41554d13d8bc9cd8bc42927408742 Mon Sep 17 00:00:00 2001 From: ariklin Date: Wed, 27 Jul 2022 18:09:13 +0300 Subject: [PATCH 5/6] Update help --- src/azure-cli/azure/cli/command_modules/security/_help.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/azure-cli/azure/cli/command_modules/security/_help.py b/src/azure-cli/azure/cli/command_modules/security/_help.py index daf77ad0e9a..c655b5008a2 100644 --- a/src/azure-cli/azure/cli/command_modules/security/_help.py +++ b/src/azure-cli/azure/cli/command_modules/security/_help.py @@ -1083,6 +1083,11 @@ az security secure-score-control-definitions list """ +helps['security security_solutions_reference_data'] = """ +type: group +short-summary: Display all security solutions reference data at the subscription level. +""" + helps['security security_solutions_reference_data list'] = """ type: command short-summary: Display all security solutions reference data at the subscription level. From fb72482c3659e5a7590e8aef145ca500f1ddf05a Mon Sep 17 00:00:00 2001 From: ariklin Date: Thu, 4 Aug 2022 12:06:22 +0300 Subject: [PATCH 6/6] update test module --- .../tests/latest/test_securitySolutionsReferenceData.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_securitySolutionsReferenceData.py b/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_securitySolutionsReferenceData.py index 595393a2524..26bcebfd3b6 100644 --- a/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_securitySolutionsReferenceData.py +++ b/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_securitySolutionsReferenceData.py @@ -4,7 +4,7 @@ # -------------------------------------------------------------------------------------------- from azure.cli.testsdk import ScenarioTest -from azure_devtools.scenario_tests import AllowLargeResponse +from azure.cli.testsdk.scenario_tests import AllowLargeResponse class securitySolutionsReferenceDataTests(ScenarioTest):