From 966b15ea9a0f9fc08b972ec11f8a6966f6240310 Mon Sep 17 00:00:00 2001 From: cmendible <266546+cmendible@users.noreply.github.com> Date: Tue, 21 May 2024 12:03:55 +0200 Subject: [PATCH] feat: added Subscription Name and Recommendation Id to the results #239. Added exclusions filter #238 --- README.md | 32 ++++++- cmd/azqr/rules.go | 6 +- cmd/azqr/scan.go | 3 + docs/content/en/docs/Overview/_index.md | 7 +- docs/content/en/docs/Usage/_index.md | 27 +++++- go.mod | 1 + go.sum | 1 + internal/embeded/azqr.pbit | Bin 102486 -> 107777 bytes internal/renderers/excel/recommendations.go | 3 +- internal/renderers/report_data.go | 13 ++- internal/scan.go | 69 ++++++++++---- internal/scanners/adf/adf.go | 13 +-- internal/scanners/advisor.go | 5 +- internal/scanners/afd/afd.go | 13 +-- internal/scanners/afw/afw.go | 1 + internal/scanners/agw/agw.go | 13 +-- internal/scanners/aks/aks.go | 13 +-- internal/scanners/amg/amg.go | 13 +-- internal/scanners/apim/apim.go | 1 + internal/scanners/appcs/appcs.go | 1 + internal/scanners/appi/appi.go | 13 +-- internal/scanners/as/as.go | 13 +-- internal/scanners/asp/asp.go | 56 ++++++----- internal/scanners/ca/ca.go | 13 +-- internal/scanners/cae/cae.go | 13 +-- internal/scanners/ci/ci.go | 13 +-- internal/scanners/cog/cog.go | 13 +-- internal/scanners/cosmos/cosmos.go | 1 + internal/scanners/cost.go | 11 ++- internal/scanners/cr/cr.go | 1 + internal/scanners/dbw/dbw.go | 13 +-- internal/scanners/dec/dec.go | 13 +-- internal/scanners/defender.go | 11 ++- internal/scanners/diagnostics_settings.go | 9 +- internal/scanners/evgd/evgd.go | 13 +-- internal/scanners/evh/evh.go | 13 +-- internal/scanners/kv/kv.go | 13 +-- internal/scanners/lb/lb.go | 13 +-- internal/scanners/logic/logic.go | 13 +-- internal/scanners/maria/maria.go | 13 +-- internal/scanners/mysql/mysql.go | 13 +-- internal/scanners/mysql/mysqlf.go | 13 +-- internal/scanners/psql/psql.go | 13 +-- internal/scanners/psql/psqlf.go | 13 +-- internal/scanners/redis/redis.go | 13 +-- internal/scanners/sb/sb.go | 13 +-- internal/scanners/scanner.go | 100 ++++++++++++++++++-- internal/scanners/sigr/sigr.go | 13 +-- internal/scanners/sql/sql.go | 26 ++--- internal/scanners/st/st.go | 13 +-- internal/scanners/synw/synw.go | 39 ++++---- internal/scanners/traf/traf.go | 1 + internal/scanners/vgw/vgw.go | 15 +-- internal/scanners/vm/vm.go | 13 +-- internal/scanners/vmss/vmss.go | 13 +-- internal/scanners/vnet/vnet.go | 13 +-- internal/scanners/vwan/vwan.go | 13 +-- internal/scanners/wps/wps.go | 13 +-- 58 files changed, 547 insertions(+), 309 deletions(-) diff --git a/README.md b/README.md index 72ad4e20..20964577 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ The output generated by **Azure Quick Review (azqr)** is presented by default in * **azqr-YYYY-MM-DD-HH-MM-SS.services.csv:** This file contains the details of the Azure services scanned by the tool, including: * Subscription: The unique identifier for the Azure subscription under which the resource is deployed. + * Subscription Name: The name of the Azure subscription. * Resource Group: The resource group where the resource is deployed. * Location: The geographical region where the resource is deployed. * Type: The specific type or category of the Azure resource. @@ -27,13 +28,16 @@ The output generated by **Azure Quick Review (azqr)** is presented by default in * Recommendation: The specific recommendation or best practice. * Result: The result or value resulting from the evaluation of the recommendation (i.e. Service SLA or SKU). * Learn: A link to additional information or documentation related to the recommendation. + * RId: The Recommendation Id. * **azqr-YYYY-MM-DD-HH-MM-SS.defender.csv:** * Subscription: The unique identifier for the Azure subscription under which the resource is deployed. + * Subscription Name: The name of the Azure subscription. * Name: Microsoft Defender for Cloud plan name. * Tier: The tier of the plan. * Deprecated: a Boolean value indicating whether the plan is deprecated. * **azqr-YYYY-MM-DD-HH-MM-SS.advisor.csv:** * Subscription: The unique identifier for the Azure subscription under which the resource is deployed. + * Subscription Name: The name of the Azure subscription. * Name: The name of the resource identified by Advisor. * Type: The resource type of the resource identified by Advisor. * Category: The category of the recommendation. @@ -45,11 +49,12 @@ The output generated by **Azure Quick Review (azqr)** is presented by default in * From: the start date of the cost analysis period. * To: the end date of the cost analysis period. * Subscription: The unique identifier for the Azure subscription under which the resource is deployed. + * Subscription Name: The name of the Azure subscription. * ServiceName: The type of the Azure service for which the cost is calculated. * Value: The cost value associated with the service. * Currency: The currency in which the cost is calculated. -> By default, Azure Quick Review (azqr) masks the Subscription Ids in the spreadsheet, ensuring that they are not directly visible in the output. This helps protect sensitive information and maintain data privacy and security. To view the Subscription Ids, you can use the `--mask=false` flag when running the tool. +> By default, Azure Quick Review (azqr) masks the Subscription Ids, ensuring that they are not directly visible in the output. This helps protect sensitive information and maintain data privacy and security. To unmask the Subscription Ids, you can use the `--mask=false` flag when running the tool. > Azure Quick Review can also generate an Excel file with the same information as the CSV files. To generate the Excel file, you can use the `--excel` (or `-x`) flag when running the tool. @@ -183,6 +188,31 @@ For information on available commands and help run: ./azqr -h ``` +### Excluding Recommendations and more + +To prevent Azure Quick Review from scanning specific subscriptions, resource groups, services or recommendations, create a `yaml` file with the following format: + +```yaml +azqr: + exclude: + subscriptions: + - # format: + resourceGroups: + - # format: /subscriptions//resourceGroups/ + services: + - # format: /subscriptions//resourceGroups//providers// + recommendations: + - # format: +``` + +Then run the scan with the `--exclude` flag: + +```bash +./azqr scan --exclude +``` + +> Check the [rules](https://azure.github.io/azqr/docs/recommendations/) to get the recommendation ids. + ## Troubleshooting If you encounter any issue while using **Azure Quick Review (azqr)**, please set the `AZURE_SDK_GO_LOGGING` environment variable to `all`, run the tool with the `--debug` flag and then share the console output with us by filing a new [issue](https://github.com/Azure/azqr/issues). diff --git a/cmd/azqr/rules.go b/cmd/azqr/rules.go index 3b185108..b9ea07f2 100644 --- a/cmd/azqr/rules.go +++ b/cmd/azqr/rules.go @@ -24,8 +24,8 @@ var rulesCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { serviceScanners := internal.GetScanners() - fmt.Println("# | Category | Impact | Recommendation | More Info") - fmt.Println("---|---|---|---|---") + fmt.Println("# | Id | Category | Impact | Recommendation | More Info") + fmt.Println("---|---|---|---|---|---") i := 0 for _, scanner := range serviceScanners { @@ -45,7 +45,7 @@ var rulesCmd = &cobra.Command{ for _, k := range keys { rule := rules[k] i++ - fmt.Printf("%s | %s | %s | %s | [Learn](%s)", fmt.Sprint(i), rule.Category, rule.Impact, rule.Recommendation, rule.Url) + fmt.Printf("%s | %s | %s | %s | %s | [Learn](%s)", fmt.Sprint(i), rule.Id, rule.Category, rule.Impact, rule.Recommendation, rule.Url) fmt.Println() } } diff --git a/cmd/azqr/scan.go b/cmd/azqr/scan.go index 1a4348a3..ee98bd9a 100644 --- a/cmd/azqr/scan.go +++ b/cmd/azqr/scan.go @@ -21,6 +21,7 @@ func init() { scanCmd.PersistentFlags().BoolP("mask", "m", true, "Mask the subscription id in the report") scanCmd.PersistentFlags().BoolP("azure-cli-credential", "f", false, "Force the use of Azure CLI Credential") scanCmd.PersistentFlags().BoolP("debug", "", false, "Set log level to debug") + scanCmd.PersistentFlags().StringP("exclusions", "e", "", "Exclusions file (YAML format)") rootCmd.AddCommand(scanCmd) } @@ -47,6 +48,7 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) { mask, _ := cmd.Flags().GetBool("mask") debug, _ := cmd.Flags().GetBool("debug") forceAzureCliCredential, _ := cmd.Flags().GetBool("azure-cli-credential") + exclusionFile, _ := cmd.Flags().GetString("exclusions") params := internal.ScanParams{ SubscriptionID: subscriptionID, @@ -60,6 +62,7 @@ func scan(cmd *cobra.Command, serviceScanners []scanners.IAzureScanner) { Debug: debug, ServiceScanners: serviceScanners, ForceAzureCliCredential: forceAzureCliCredential, + ExclusionsFile: exclusionFile, } internal.Scan(¶ms) diff --git a/docs/content/en/docs/Overview/_index.md b/docs/content/en/docs/Overview/_index.md index c815638f..a9aa5238 100644 --- a/docs/content/en/docs/Overview/_index.md +++ b/docs/content/en/docs/Overview/_index.md @@ -12,6 +12,7 @@ The output generated by **Azure Quick Review (azqr)** is presented by default in * **azqr-YYYY-MM-DD-HH-MM-SS.services.csv:** This file contains the details of the Azure services scanned by the tool, including: * Subscription: The unique identifier for the Azure subscription under which the resource is deployed. + * Subscription Name: The name of the Azure subscription. * Resource Group: The resource group where the resource is deployed. * Location: The geographical region where the resource is deployed. * Type: The specific type or category of the Azure resource. @@ -22,13 +23,16 @@ The output generated by **Azure Quick Review (azqr)** is presented by default in * Recommendation: The specific recommendation or best practice. * Result: The result or value resulting from the evaluation of the recommendation (i.e. Service SLA or SKU). * Learn: A link to additional information or documentation related to the recommendation. + * RId: The Recommendation Id. * **azqr-YYYY-MM-DD-HH-MM-SS.defender.csv:** * Subscription: The unique identifier for the Azure subscription under which the resource is deployed. + * Subscription Name: The name of the Azure subscription. * Name: Microsoft Defender for Cloud plan name. * Tier: The tier of the plan. * Deprecated: a Boolean value indicating whether the plan is deprecated. * **azqr-YYYY-MM-DD-HH-MM-SS.advisor.csv:** * Subscription: The unique identifier for the Azure subscription under which the resource is deployed. + * Subscription Name: The name of the Azure subscription. * Name: The name of the resource identified by Advisor. * Type: The resource type of the resource identified by Advisor. * Category: The category of the recommendation. @@ -40,11 +44,12 @@ The output generated by **Azure Quick Review (azqr)** is presented by default in * From: the start date of the cost analysis period. * To: the end date of the cost analysis period. * Subscription: The unique identifier for the Azure subscription under which the resource is deployed. + * Subscription Name: The name of the Azure subscription. * ServiceName: The type of the Azure service for which the cost is calculated. * Value: The cost value associated with the service. * Currency: The currency in which the cost is calculated. -> By default, Azure Quick Review (azqr) masks the Subscription Ids in the spreadsheet, ensuring that they are not directly visible in the output. This helps protect sensitive information and maintain data privacy and security. To view the Subscription Ids, you can use the `--mask=false` flag when running the tool. +> By default, Azure Quick Review (azqr) masks the Subscription Ids, ensuring that they are not directly visible in the output. This helps protect sensitive information and maintain data privacy and security. To unmask the Subscription Ids, you can use the `--mask=false` flag when running the tool. > Azure Quick Review can also generate an Excel file with the same information as the CSV files. To generate the Excel file, you can use the `--excel` (or `-x`) flag when running the tool. diff --git a/docs/content/en/docs/Usage/_index.md b/docs/content/en/docs/Usage/_index.md index 0aadd29f..cddbbc2a 100644 --- a/docs/content/en/docs/Usage/_index.md +++ b/docs/content/en/docs/Usage/_index.md @@ -44,4 +44,29 @@ For information on available commands and help run: ```bash ./azqr -h -``` \ No newline at end of file +``` + +## Excluding Recommendations and more + +To prevent Azure Quick Review from scanning specific subscriptions, resource groups, services or recommendations, create a `yaml` file with the following format: + +```yaml +azqr: + exclude: + subscriptions: + - # format: + resourceGroups: + - # format: /subscriptions//resourceGroups/ + services: + - # format: /subscriptions//resourceGroups//providers// + recommendations: + - # format: +``` + +Then run the scan with the `--exclude` flag: + +```bash +./azqr scan --exclude +``` + +> Check the [rules](https://azure.github.io/azqr/docs/recommendations/) to get the recommendation ids. \ No newline at end of file diff --git a/go.mod b/go.mod index e1ccbf56..ddb432fa 100644 --- a/go.mod +++ b/go.mod @@ -50,6 +50,7 @@ require ( github.com/rs/zerolog v1.32.0 github.com/spf13/cobra v1.8.0 github.com/xuri/excelize/v2 v2.8.1 + gopkg.in/yaml.v3 v3.0.1 ) require ( diff --git a/go.sum b/go.sum index 0ff7290a..f68aabd4 100644 --- a/go.sum +++ b/go.sum @@ -152,6 +152,7 @@ golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/internal/embeded/azqr.pbit b/internal/embeded/azqr.pbit index 81291521c0f764f7e5add304bc0f75ac8c13c928..99394e36cff62fbf271f929371eab5008d96d6e0 100644 GIT binary patch delta 25371 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 delta 20065 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