From 6f89fb894c18f12c8d811e62a9eccafc167a229d Mon Sep 17 00:00:00 2001 From: ariklin Date: Wed, 30 Mar 2022 18:33:31 +0300 Subject: [PATCH 1/6] Security-solutions --- .../security/_client_factory.py | 3 +++ .../cli/command_modules/security/_help.py | 18 ++++++++++++++++++ .../cli/command_modules/security/_params.py | 4 ++-- .../cli/command_modules/security/commands.py | 17 +++++++++++++++-- .../cli/command_modules/security/custom.py | 16 ++++++++++++++++ 5 files changed, 54 insertions(+), 4 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..aa606d5a0da 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,6 @@ 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(cli_ctx, _): + return _cf_security(cli_ctx) \ No newline at end of file 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 3fc2e8703e3..e71325b864d 100644 --- a/src/azure-cli/azure/cli/command_modules/security/_help.py +++ b/src/azure-cli/azure/cli/command_modules/security/_help.py @@ -997,3 +997,21 @@ text: > az security secure-score-control-definitions list """ + +helps['security security_solutions list'] = """ +type: command +short-summary: List all security solutions. +examples: + - name: List security solutions. + text: > + az security security_solutions list +""" + +helps['security security_solutions show'] = """ +type: command +short-summary: Shows a security solution. +examples: + - name: Get a security solution. + text: > + az security security_solutions show --resource-name aad_defaultworks --resource-group defaultresourcegroup-eus +""" \ No newline at end of file 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 cefcb1afab0..0d6ebce0fe3 100644 --- a/src/azure-cli/azure/cli/command_modules/security/_params.py +++ b/src/azure-cli/azure/cli/command_modules/security/_params.py @@ -123,8 +123,8 @@ def load_arguments(self, _): 'secure-scores', 'secure-score-controls', 'secure-score-control-definitions', - 'setting' - ]: + 'setting', + 'security-solution']: 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 c1e3a82a8da..8e6067b1404 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) # pylint: disable=line-too-long @@ -218,6 +219,12 @@ def load_command_table(self, _): client_factory=cf_security_iot_recommendations ) + security_security_solutions_sdk = CliCommandType( + operations_tmpl='azure.mgmt.security.operations#SecuritySolutionsOperations.{}', + client_factory=cf_security_security_solutions, + operation_group='security_security_solutions' + ) + with self.command_group('security secure-scores', security_secure_scores_sdk, client_factory=cf_security_secure_scores) as g: @@ -428,5 +435,11 @@ def load_command_table(self, _): g.custom_command('list', 'list_security_iot_recommendations') g.custom_show_command('show', 'show_security_iot_recommendations') + with self.command_group('security security_solutions', + security_security_solutions_sdk, + client_factory=cf_security_security_solutions) as g: + g.custom_command('list', 'list_security_security_solutions') + g.custom_command('show', 'get_security_security_solutions') + with self.command_group('security'): - pass + pass \ No newline at end of file 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 40c7a264301..898caf017bb 100644 --- a/src/azure-cli/azure/cli/command_modules/security/custom.py +++ b/src/azure-cli/azure/cli/command_modules/security/custom.py @@ -212,6 +212,22 @@ def get_security_discovered_security_solution(client, resource_name, resource_gr return client.discovered_security_solutions.get(resource_group_name, resource_name) +# -------------------------------------------------------------------------------------------- +# Security Solutions +# -------------------------------------------------------------------------------------------- + +def list_security_security_solutions(client): + + return client.security_solutions.list() + +def get_security_security_solutions(client, resource_name, resource_group_name): + + for loc in client.locations.list(): + client._config.asc_location = loc.name + + return client.security_solutions.get(resource_group_name, resource_name) + + # -------------------------------------------------------------------------------------------- # External Security Solutions # -------------------------------------------------------------------------------------------- From 795959afbb4b7812debe4485105e13a0cc8ffbed Mon Sep 17 00:00:00 2001 From: ariklin Date: Mon, 25 Jul 2022 19:37:28 +0300 Subject: [PATCH 2/6] dada --- .../azure/cli/command_modules/security/_client_factory.py | 3 --- 1 file changed, 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 f81187564f5..983104b0090 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,5 @@ 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(cli_ctx, _): - return _cf_security(cli_ctx) - def cf_security_automations(cli_ctx, _): return _cf_security(cli_ctx).automations From 12492e8f2ce62aa9c8d998ef30b8daec3901bf60 Mon Sep 17 00:00:00 2001 From: ariklin Date: Tue, 26 Jul 2022 20:17:22 +0300 Subject: [PATCH 3/6] Introducing securitySolutions CLI --- .../security/_client_factory.py | 5 + .../cli/command_modules/security/commands.py | 17 +++- .../cli/command_modules/security/custom.py | 7 -- .../test_security_security_solutions.yaml | 94 +++++++++++++++++++ .../test_security_solutions_scenario.py | 18 ++++ 5 files changed, 132 insertions(+), 9 deletions(-) create mode 100644 src/azure-cli/azure/cli/command_modules/security/tests/latest/recordings/test_security_security_solutions.yaml create mode 100644 src/azure-cli/azure/cli/command_modules/security/tests/latest/test_security_solutions_scenario.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 983104b0090..b6dc36fdfef 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,5 +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_automations(cli_ctx, _): return _cf_security(cli_ctx).automations + + +def cf_security_security_solutions(cli_ctx, _): + return _cf_security(cli_ctx) 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 edda5d23784..c0a305ffe14 100644 --- a/src/azure-cli/azure/cli/command_modules/security/commands.py +++ b/src/azure-cli/azure/cli/command_modules/security/commands.py @@ -37,7 +37,8 @@ cf_security_secure_scores, cf_security_secure_score_controls, cf_security_secure_score_control_definitions, - cf_security_automations) + cf_security_automations, + cf_security_security_solutions) # pylint: disable=line-too-long @@ -232,6 +233,11 @@ def load_command_table(self, _): operation_group='security_automations' ) + security_solutions_sdk = CliCommandType( + operations_tmpl='azure.mgmt.security.operations#SecuritySolutionsOperations.{}', + client_factory=cf_security_security_solutions + ) + with self.command_group('security secure-scores', security_secure_scores_sdk, client_factory=cf_security_secure_scores) as g: @@ -485,15 +491,22 @@ def load_command_table(self, _): with self.command_group('security automation-action-logic-app', security_automations_sdk, client_factory=cf_security_automations) as g: + g.custom_command('create', 'create_security_automation_action_logic_app') with self.command_group('security automation-action-event-hub', security_automations_sdk, client_factory=cf_security_automations) as g: + g.custom_command('create', 'create_security_automation_action_event_hub') with self.command_group('security automation-action-workspace', security_automations_sdk, client_factory=cf_security_automations) as g: g.custom_command('create', 'create_security_automation_action_workspace') + with self.command_group('security security_solutions', + security_solutions_sdk, + client_factory=cf_security_security_solutions) as g: + g.custom_command('list', 'list_security_security_solutions') + with self.command_group('security'): - pass \ No newline at end of file + pass 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 3a1f0f67312..3bfabae55ac 100644 --- a/src/azure-cli/azure/cli/command_modules/security/custom.py +++ b/src/azure-cli/azure/cli/command_modules/security/custom.py @@ -333,13 +333,6 @@ def list_security_security_solutions(client): return client.security_solutions.list() -def get_security_security_solutions(client, resource_name, resource_group_name): - - for loc in client.locations.list(): - client._config.asc_location = loc.name - - return client.security_solutions.get(resource_group_name, resource_name) - # -------------------------------------------------------------------------------------------- # External Security Solutions diff --git a/src/azure-cli/azure/cli/command_modules/security/tests/latest/recordings/test_security_security_solutions.yaml b/src/azure-cli/azure/cli/command_modules/security/tests/latest/recordings/test_security_security_solutions.yaml new file mode 100644 index 00000000000..17790e8ed35 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/security/tests/latest/recordings/test_security_security_solutions.yaml @@ -0,0 +1,94 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - security security_solutions list + Connection: + - keep-alive + User-Agent: + - AZURECLI/2.38.0 azsdk-python-mgmt-security/2.0.0b1 Python/3.7.8rc1 (Windows-10-10.0.22000-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Security/securitySolutions?api-version=2020-01-01 + response: + body: + string: '{"value":[{"properties":{"securityFamily":"Va","integrationLevel":"SemiIntegrated","protectionStatus":"Good","template":"qualys.qualysAgent","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"http://www.qualys.com/","creationDate":"2017-10-09T12:37:15.9527562Z","provisioningState":"Succeeded","clusterId":"67931ECFB2B86BFFE512B04C745D307FE7F15FF4","configurations":{"AutoUpdate":false}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/QualysLICTest/providers/Microsoft.Security/locations/centralus/securitySolutions/QualysLICTest","name":"QualysLICTest","type":"Microsoft.Security/locations/securitySolutions","location":"westcentralus"},{"properties":{"securityFamily":"SaasWaf","integrationLevel":"SemiIntegrated","protectionStatus":"Good","template":"Microsoft.ApplicationGateway-ARM","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"https://portal.azure.com#resource/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/OfriWafTest/providers/Microsoft.Network/applicationGateways/OfriWafTest/overview","creationDate":"2020-10-05T11:01:57.6339395Z","provisioningState":"Succeeded","clusterId":"9C29D374728B41DC6923D87B1E159EFCB0BF2768"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/OfriWafTest/providers/Microsoft.Security/locations/centralus/securitySolutions/OfriWafTest","name":"OfriWafTest","type":"Microsoft.Security/locations/securitySolutions","location":"eastus"},{"properties":{"securityFamily":"SaasWaf","integrationLevel":"SemiIntegrated","protectionStatus":"UnReported","template":"microsoft.ApplicationGateway-ARM","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"https://portal.azure.com#resource/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/waf155/providers/Microsoft.Network/applicationGateways/waf155vm/overview","creationDate":"2020-07-22T11:45:47.9115946Z","provisioningState":"Succeeded","clusterId":"2C8995EFB1500186BC1958C032CC360BAC33C5BC"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/waf155/providers/Microsoft.Security/locations/centralus/securitySolutions/waf155vm","name":"waf155vm","type":"Microsoft.Security/locations/securitySolutions","location":"westcentralus"},{"properties":{"securityFamily":"SaasWaf","integrationLevel":"SemiIntegrated","protectionStatus":"Good","template":"microsoft.ApplicationGateway-ARM","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"https://portal.azure.com#resource/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/solutionsProdTest/providers/Microsoft.Network/applicationGateways/msWafProdTest/overview","creationDate":"2020-12-22T12:36:21.3564505Z","provisioningState":"Succeeded","clusterId":"DF6A40AD0A3A9FEDA4635882E1D15AEF63E2CAF9"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/solutionsProdTest/providers/Microsoft.Security/locations/centralus/securitySolutions/msWafProdTest","name":"msWafProdTest","type":"Microsoft.Security/locations/securitySolutions","location":"westus"},{"properties":{"securityFamily":"SaasWaf","integrationLevel":"SemiIntegrated","protectionStatus":"Good","template":"microsoft.ApplicationGateway-ARM","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"https://portal.azure.com#resource/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/waf-rg2/providers/Microsoft.Network/applicationGateways/Ofri-WAF/overview","creationDate":"2021-08-16T15:07:07.0095098Z","provisioningState":"Succeeded","clusterId":"8E21D225069917B73D65FB806785076F443F4530"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/waf-rg2/providers/Microsoft.Security/locations/centralus/securitySolutions/Ofri-WAF","name":"Ofri-WAF","type":"Microsoft.Security/locations/securitySolutions","location":"eastus"},{"properties":{"securityFamily":"Va","integrationLevel":"SemiIntegrated","protectionStatus":"UnReported","template":"qualys.qualysAgent","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"http://www.qualys.com/","creationDate":"2021-03-09T10:40:18.7014776Z","provisioningState":"Succeeded","clusterId":"FDE9EB85DB07E8354B3AFF34DA84B0929F14F222","configurations":{"AutoUpdate":false}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/tryNomisolutions/providers/Microsoft.Security/locations/centralus/securitySolutions/DedicatedEHTest3","name":"DedicatedEHTest3","type":"Microsoft.Security/locations/securitySolutions","location":"westcentralus"},{"properties":{"securityFamily":"Va","integrationLevel":"SemiIntegrated","protectionStatus":"Good","template":"qualys.qualysAgent","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"http://www.qualys.com/","creationDate":"2017-10-01T14:51:37.5457917Z","provisioningState":"Succeeded","clusterId":"3120660E864F689F9166DB122386B71E27C2D565","configurations":{"AutoUpdate":false}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/QualysLinuxTest/providers/Microsoft.Security/locations/centralus/securitySolutions/Qualys1","name":"Qualys1","type":"Microsoft.Security/locations/securitySolutions","location":"westcentralus"},{"properties":{"securityFamily":"Va","integrationLevel":"SemiIntegrated","protectionStatus":"NotReporting","template":"rapid7.insightplatform","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"","creationDate":"2018-06-11T13:24:27.1314378Z","provisioningState":"Succeeded","clusterId":"1A54F1A20AB90FDAD835897B4A413B1F40473DD9","configurations":{"AutoUpdate":false}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Rapid7Va/providers/Microsoft.Security/locations/centralus/securitySolutions/Rapid7VaRome3","name":"Rapid7VaRome3","type":"Microsoft.Security/locations/securitySolutions","location":"centralus"},{"properties":{"securityFamily":"SaasWaf","integrationLevel":"SemiIntegrated","protectionStatus":"Good","template":"microsoft.ApplicationGateway-ARM","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"https://portal.azure.com#resource/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MatanWafTest/providers/Microsoft.Network/applicationGateways/MatanWAFtEST/overview","creationDate":"2021-08-16T15:06:32.3284944Z","provisioningState":"Succeeded","clusterId":"B95CAE8386CD79955A26A6E2AF0D62B7331D17D5"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MatanWafTest/providers/Microsoft.Security/locations/centralus/securitySolutions/MatanWAFtEST","name":"MatanWAFtEST","type":"Microsoft.Security/locations/securitySolutions","location":"eastus2"}]}' + headers: + cache-control: + - no-cache + content-length: + - '6739' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 26 Jul 2022 17:09:12 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: + - '747' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - security security_solutions list + Connection: + - keep-alive + User-Agent: + - AZURECLI/2.38.0 azsdk-python-mgmt-security/2.0.0b1 Python/3.7.8rc1 (Windows-10-10.0.22000-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Security/securitySolutions?api-version=2020-01-01 + response: + body: + string: '{"value":[{"properties":{"securityFamily":"Va","integrationLevel":"SemiIntegrated","protectionStatus":"Good","template":"qualys.qualysAgent","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"http://www.qualys.com/","creationDate":"2017-10-09T12:37:15.9527562Z","provisioningState":"Succeeded","clusterId":"67931ECFB2B86BFFE512B04C745D307FE7F15FF4","configurations":{"AutoUpdate":false}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/QualysLICTest/providers/Microsoft.Security/locations/centralus/securitySolutions/QualysLICTest","name":"QualysLICTest","type":"Microsoft.Security/locations/securitySolutions","location":"westcentralus"},{"properties":{"securityFamily":"SaasWaf","integrationLevel":"SemiIntegrated","protectionStatus":"Good","template":"Microsoft.ApplicationGateway-ARM","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"https://portal.azure.com#resource/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/OfriWafTest/providers/Microsoft.Network/applicationGateways/OfriWafTest/overview","creationDate":"2020-10-05T11:01:57.6339395Z","provisioningState":"Succeeded","clusterId":"9C29D374728B41DC6923D87B1E159EFCB0BF2768"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/OfriWafTest/providers/Microsoft.Security/locations/centralus/securitySolutions/OfriWafTest","name":"OfriWafTest","type":"Microsoft.Security/locations/securitySolutions","location":"eastus"},{"properties":{"securityFamily":"SaasWaf","integrationLevel":"SemiIntegrated","protectionStatus":"UnReported","template":"microsoft.ApplicationGateway-ARM","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"https://portal.azure.com#resource/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/waf155/providers/Microsoft.Network/applicationGateways/waf155vm/overview","creationDate":"2020-07-22T11:45:47.9115946Z","provisioningState":"Succeeded","clusterId":"2C8995EFB1500186BC1958C032CC360BAC33C5BC"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/waf155/providers/Microsoft.Security/locations/centralus/securitySolutions/waf155vm","name":"waf155vm","type":"Microsoft.Security/locations/securitySolutions","location":"westcentralus"},{"properties":{"securityFamily":"SaasWaf","integrationLevel":"SemiIntegrated","protectionStatus":"Good","template":"microsoft.ApplicationGateway-ARM","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"https://portal.azure.com#resource/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/solutionsProdTest/providers/Microsoft.Network/applicationGateways/msWafProdTest/overview","creationDate":"2020-12-22T12:36:21.3564505Z","provisioningState":"Succeeded","clusterId":"DF6A40AD0A3A9FEDA4635882E1D15AEF63E2CAF9"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/solutionsProdTest/providers/Microsoft.Security/locations/centralus/securitySolutions/msWafProdTest","name":"msWafProdTest","type":"Microsoft.Security/locations/securitySolutions","location":"westus"},{"properties":{"securityFamily":"SaasWaf","integrationLevel":"SemiIntegrated","protectionStatus":"Good","template":"microsoft.ApplicationGateway-ARM","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"https://portal.azure.com#resource/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/waf-rg2/providers/Microsoft.Network/applicationGateways/Ofri-WAF/overview","creationDate":"2021-08-16T15:07:07.0095098Z","provisioningState":"Succeeded","clusterId":"8E21D225069917B73D65FB806785076F443F4530"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/waf-rg2/providers/Microsoft.Security/locations/centralus/securitySolutions/Ofri-WAF","name":"Ofri-WAF","type":"Microsoft.Security/locations/securitySolutions","location":"eastus"},{"properties":{"securityFamily":"Va","integrationLevel":"SemiIntegrated","protectionStatus":"UnReported","template":"qualys.qualysAgent","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"http://www.qualys.com/","creationDate":"2021-03-09T10:40:18.7014776Z","provisioningState":"Succeeded","clusterId":"FDE9EB85DB07E8354B3AFF34DA84B0929F14F222","configurations":{"AutoUpdate":false}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/tryNomisolutions/providers/Microsoft.Security/locations/centralus/securitySolutions/DedicatedEHTest3","name":"DedicatedEHTest3","type":"Microsoft.Security/locations/securitySolutions","location":"westcentralus"},{"properties":{"securityFamily":"Va","integrationLevel":"SemiIntegrated","protectionStatus":"Good","template":"qualys.qualysAgent","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"http://www.qualys.com/","creationDate":"2017-10-01T14:51:37.5457917Z","provisioningState":"Succeeded","clusterId":"3120660E864F689F9166DB122386B71E27C2D565","configurations":{"AutoUpdate":false}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/QualysLinuxTest/providers/Microsoft.Security/locations/centralus/securitySolutions/Qualys1","name":"Qualys1","type":"Microsoft.Security/locations/securitySolutions","location":"westcentralus"},{"properties":{"securityFamily":"Va","integrationLevel":"SemiIntegrated","protectionStatus":"NotReporting","template":"rapid7.insightplatform","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"","creationDate":"2018-06-11T13:24:27.1314378Z","provisioningState":"Succeeded","clusterId":"1A54F1A20AB90FDAD835897B4A413B1F40473DD9","configurations":{"AutoUpdate":false}},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Rapid7Va/providers/Microsoft.Security/locations/centralus/securitySolutions/Rapid7VaRome3","name":"Rapid7VaRome3","type":"Microsoft.Security/locations/securitySolutions","location":"centralus"},{"properties":{"securityFamily":"SaasWaf","integrationLevel":"SemiIntegrated","protectionStatus":"Good","template":"microsoft.ApplicationGateway-ARM","protectedResourcesStates":[],"protectedResourcesTypes":[],"managementUrl":"https://portal.azure.com#resource/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MatanWafTest/providers/Microsoft.Network/applicationGateways/MatanWAFtEST/overview","creationDate":"2021-08-16T15:06:32.3284944Z","provisioningState":"Succeeded","clusterId":"B95CAE8386CD79955A26A6E2AF0D62B7331D17D5"},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MatanWafTest/providers/Microsoft.Security/locations/centralus/securitySolutions/MatanWAFtEST","name":"MatanWAFtEST","type":"Microsoft.Security/locations/securitySolutions","location":"eastus2"}]}' + headers: + cache-control: + - no-cache + content-length: + - '6739' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 26 Jul 2022 17:09:13 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: + - '746' + status: + code: 200 + message: OK +version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_security_solutions_scenario.py b/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_security_solutions_scenario.py new file mode 100644 index 00000000000..e45edb8ecca --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_security_solutions_scenario.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.cli.testsdk.scenario_tests import AllowLargeResponse + + +class SecuritySoluytionsTests(ScenarioTest): + + def test_security_security_solutions(self): + + security_solutions = self.cmd('az security security_solutions list').get_output_in_json() + + assert len(security_solutions) >= 0 + + self.cmd('az security security_solutions list') From 1effb59816985f1d6ea0e501a69835a2329d03d3 Mon Sep 17 00:00:00 2001 From: ariklin Date: Thu, 28 Jul 2022 11:50:24 +0300 Subject: [PATCH 4/6] update help --- .../azure/cli/command_modules/security/_help.py | 14 ++++++++++++++ 1 file changed, 14 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 77d7321a6ac..f7524f87e71 100644 --- a/src/azure-cli/azure/cli/command_modules/security/_help.py +++ b/src/azure-cli/azure/cli/command_modules/security/_help.py @@ -1210,6 +1210,20 @@ short-summary: Creates security automation event hub action. """ +helps['security security_solutions'] = """ +type: group +short-summary: Display all security solutions at the subscription level. +""" + +helps['security security_solutions list'] = """ +type: command +short-summary: Display all security solutions at the subscription level. +examples: + - name: Display all security solutions. + text: > + az security security_solutions list +""" + helps['security automation-action-event-hub create'] = """ type: command short-summary: Creates security automation event hub action. From 310cb1349fa54702e7ed0b5c2046a80f525e4771 Mon Sep 17 00:00:00 2001 From: ariklin Date: Sun, 7 Aug 2022 16:07:24 +0300 Subject: [PATCH 5/6] Update to security-solutions --- src/azure-cli/azure/cli/command_modules/security/commands.py | 2 +- .../latest/recordings/test_security_security_solutions.yaml | 4 ++-- .../security/tests/latest/test_security_solutions_scenario.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) 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 c0a305ffe14..4c24be66b90 100644 --- a/src/azure-cli/azure/cli/command_modules/security/commands.py +++ b/src/azure-cli/azure/cli/command_modules/security/commands.py @@ -503,7 +503,7 @@ def load_command_table(self, _): client_factory=cf_security_automations) as g: g.custom_command('create', 'create_security_automation_action_workspace') - with self.command_group('security security_solutions', + with self.command_group('security security-solutions', security_solutions_sdk, client_factory=cf_security_security_solutions) as g: g.custom_command('list', 'list_security_security_solutions') diff --git a/src/azure-cli/azure/cli/command_modules/security/tests/latest/recordings/test_security_security_solutions.yaml b/src/azure-cli/azure/cli/command_modules/security/tests/latest/recordings/test_security_security_solutions.yaml index 17790e8ed35..5c04b59763c 100644 --- a/src/azure-cli/azure/cli/command_modules/security/tests/latest/recordings/test_security_security_solutions.yaml +++ b/src/azure-cli/azure/cli/command_modules/security/tests/latest/recordings/test_security_security_solutions.yaml @@ -7,7 +7,7 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - security security_solutions list + - security security-solutions list Connection: - keep-alive User-Agent: @@ -53,7 +53,7 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - security security_solutions list + - security security-solutions list Connection: - keep-alive User-Agent: diff --git a/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_security_solutions_scenario.py b/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_security_solutions_scenario.py index e45edb8ecca..80f51c2e7ad 100644 --- a/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_security_solutions_scenario.py +++ b/src/azure-cli/azure/cli/command_modules/security/tests/latest/test_security_solutions_scenario.py @@ -11,8 +11,8 @@ class SecuritySoluytionsTests(ScenarioTest): def test_security_security_solutions(self): - security_solutions = self.cmd('az security security_solutions list').get_output_in_json() + security_solutions = self.cmd('az security security-solutions list').get_output_in_json() assert len(security_solutions) >= 0 - self.cmd('az security security_solutions list') + self.cmd('az security security-solutions list') From cb727f32dec35bd9c072e19439ca1b9a0a7ecb38 Mon Sep 17 00:00:00 2001 From: ariklin Date: Mon, 8 Aug 2022 09:42:03 +0300 Subject: [PATCH 6/6] update help --- src/azure-cli/azure/cli/command_modules/security/_help.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 f7524f87e71..72bc4c31bff 100644 --- a/src/azure-cli/azure/cli/command_modules/security/_help.py +++ b/src/azure-cli/azure/cli/command_modules/security/_help.py @@ -1210,18 +1210,18 @@ short-summary: Creates security automation event hub action. """ -helps['security security_solutions'] = """ +helps['security security-solutions'] = """ type: group short-summary: Display all security solutions at the subscription level. """ -helps['security security_solutions list'] = """ +helps['security security-solutions list'] = """ type: command short-summary: Display all security solutions at the subscription level. examples: - name: Display all security solutions. text: > - az security security_solutions list + az security security-solutions list """ helps['security automation-action-event-hub create'] = """