From 1738d546de42be9423ceeac71231b116e29491ed Mon Sep 17 00:00:00 2001 From: Nicolas Teyan Date: Mon, 8 Jul 2024 11:56:08 +0200 Subject: [PATCH] Overview update (#765) Co-authored-by: Nicolas Teyan --- src/workbooks/governance/workbook.json | 546 ++++++++++++++++++------- 1 file changed, 409 insertions(+), 137 deletions(-) diff --git a/src/workbooks/governance/workbook.json b/src/workbooks/governance/workbook.json index 5a1dc3292..5f74cc834 100644 --- a/src/workbooks/governance/workbook.json +++ b/src/workbooks/governance/workbook.json @@ -134,7 +134,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["value::tenant"], + "crossComponentResources": [ + "value::tenant" + ], "parameters": [ { "id": "5704765e-092d-41cb-b856-e5d1d5337ac5", @@ -143,7 +145,9 @@ "label": "Management group", "type": 2, "query": "resourcecontainers\r\n| where type == \"microsoft.management/managementgroups\"\r\n| extend name = properties.displayName\r\n| project name", - "crossComponentResources": ["value::tenant"], + "crossComponentResources": [ + "value::tenant" + ], "typeSettings": { "additionalResourceOptions": [], "showDefault": false @@ -165,9 +169,13 @@ "quote": "'", "delimiter": ",", "query": "resourcecontainers\r\n| where type == \"microsoft.resources/subscriptions\"\r\n| where properties['managementGroupAncestorsChain'] contains '{ManagementGroup:label}'", - "crossComponentResources": ["value::tenant"], + "crossComponentResources": [ + "value::tenant" + ], "typeSettings": { - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "showDefault": false }, "timeContext": { @@ -235,7 +243,7 @@ { "type": 1, "content": { - "json": "The objective of this workbook is to provide a comprehensive overview of the governance posture of your Azure environment. It offers the standard metrics aligned with the Cloud Adoption Framework for all the disciplines and has the capability to identify and apply recommendations to identify non compliance. This workbook is part of the [FinOps toolkit](https://aka.ms/finops/toolkit).\r\n\r\n## Overview of the Cloud Adoption Framework\r\n\r\n* With any cloud platform, there are common governance disciplines that help inform policies and align toolchains. These disciplines guide decisions about the proper level of automation and enforcement of corporate policy across cloud platforms.\r\n\r\n|Discipline|Description|\r\n|---|---|\r\n| [Cost Management](https://learn.microsoft.com/azure/cloud-adoption-framework/govern/cost-management/) | Cost is a primary concern for cloud users. Develop policies for cost control for all cloud platforms.\r\n| [Security Baseline](https://learn.microsoft.com/azure/cloud-adoption-framework/govern/security-baseline/) | Security is a complex subject, unique to each company. Once security requirements are established, cloud governance policies and enforcement apply those requirements across network, data, and asset configurations.\r\n| [Identity Baseline](https://learn.microsoft.com/azure/cloud-adoption-framework/govern/identity-baseline/) | Inconsistencies in the application of identity requirements can increase the risk of breach. The Identity Baseline discipline focuses on ensuring that identity is consistently applied across cloud adoption efforts.\r\n| [Resource Consistency](https://learn.microsoft.com/azure/cloud-adoption-framework/govern/resource-consistency/) | Cloud operations depend on consistent resource configuration. Through governance tooling, resources can be configured consistently to manage risks related to onboarding, drift, discoverability, and recovery.\r\n| [Deployment Acceleration](https://learn.microsoft.com/azure/cloud-adoption-framework/govern/deployment-acceleration/) | Centralization, standardization, and consistency in approaches to deployment and configuration improve governance practices. When provided through cloud-based governance tooling, they create a cloud factor that can accelerate deployment activities.\r\n\r\n* To assess your transformation journey, try the [governance benchmark tool](https://learn.microsoft.com/en-us/assessments/b1891add-7646-4d60-a875-32a4ab26327e).\r\n\r\n\r\n\r\n\r\n" + "json": "The objective of this workbook is to provide a comprehensive overview of the governance posture of your Azure environment. It offers the standard metrics aligned with the Cloud Adoption Framework and has the capability to identify and apply recommendations to identify non compliance. This workbook is part of the [FinOps toolkit](https://aka.ms/finops/toolkit).\r\n\r\n## Overview of the Cloud Adoption Framework\r\n\r\n* The CAF Govern methodology provides a structured approach for establishing and optimizing cloud governance in Azure. The guidance is relevant for organizations across any industry. It covers essential categories of cloud governance, such as regulatory compliance, security, operations, cost, data, resource management, and artificial intelligence (AI).\r\n\r\n* Cloud governance is how you control cloud use across your organization. Cloud governance sets up guardrails that regulate cloud interactions. These guardrails are a framework of policies, procedures, and tools you use to establish control. Policies define acceptable and unacceptable cloud activity, and the procedures and tools you use ensure all cloud usage aligns with those policies. Successful cloud governance prevents all unauthorized or unmanaged cloud usage.\r\n\r\n* To assess your transformation journey, try the [governance benchmark tool](https://learn.microsoft.com/assessments/b1891add-7646-4d60-a875-32a4ab26327e/).\r\n\r\n\r\n\r\n\r\n" }, "name": "text - Overview" }, @@ -261,7 +269,9 @@ "title": "Count of all resources", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "tiles", "tileSettings": { "titleContent": { @@ -287,7 +297,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "tiles", "gridSettings": { "formatters": [ @@ -307,7 +319,9 @@ "rowLimit": 10, "hierarchySettings": { "treeType": 1, - "groupBy": ["subscriptionId"], + "groupBy": [ + "subscriptionId" + ], "expandTopLevel": true }, "labelSettings": [ @@ -367,7 +381,9 @@ }, "chartSettings": { "xAxis": "subscriptionId", - "yAxis": ["Count"], + "yAxis": [ + "Count" + ], "showLegend": true, "seriesLabelSettings": [ { @@ -402,7 +418,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "tiles", "tileSettings": { "showBorder": false, @@ -438,7 +456,9 @@ "title": "Resource number by location", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "map", "mapSettings": { "locInfo": "AzureLoc", @@ -504,7 +524,9 @@ "showRefreshButton": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "tiles", "tileSettings": { "showBorder": false, @@ -541,7 +563,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "barchart", "tileSettings": { "showBorder": false, @@ -598,7 +622,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"] + "crossComponentResources": [ + "{Subscription}" + ] }, "name": "query - virtual machine scale set capacity and size" }, @@ -613,7 +639,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "table", "gridSettings": { "formatters": [ @@ -676,7 +704,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "table", "gridSettings": { "formatters": [ @@ -735,7 +765,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "parameters": [ { "id": "ec135d58-9c6b-4998-bd1e-75871c540d7f", @@ -749,9 +781,13 @@ "quote": "'", "delimiter": ",", "query": "where type =~ 'microsoft.operationalinsights/workspaces' | project id", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "showDefault": false }, "timeContext": { @@ -780,7 +816,9 @@ }, "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", - "crossComponentResources": ["{laworkspace}"], + "crossComponentResources": [ + "{laworkspace}" + ], "visualization": "table", "gridSettings": { "formatters": [ @@ -866,7 +904,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"] + "crossComponentResources": [ + "{Subscription}" + ] }, "customWidth": "100", "name": "Underused assets" @@ -912,7 +952,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -995,7 +1037,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -1058,7 +1102,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "parameters": [ { "id": "98d786aa-8835-493f-9fe4-fe5da150392b", @@ -1067,7 +1113,9 @@ "label": "Virtual machine state", "type": 2, "query": "resources\r\n| where type == \"microsoft.compute/virtualmachines\"\r\n| extend state = properties['extended']['instanceView']['powerState']['displayStatus']\r\n| summarize by tostring(state)", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { "additionalResourceOptions": [], "showDefault": false @@ -1107,7 +1155,9 @@ "showRefreshButton": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "tiles", "tileSettings": { "titleContent": { @@ -1163,7 +1213,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -1296,7 +1348,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "tiles", "gridSettings": { "formatters": [ @@ -1319,7 +1373,9 @@ ], "hierarchySettings": { "treeType": 1, - "groupBy": ["subscriptionId"], + "groupBy": [ + "subscriptionId" + ], "expandTopLevel": true, "finalBy": "Resource" } @@ -1362,7 +1418,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -1395,7 +1453,9 @@ "filter": true, "hierarchySettings": { "treeType": 1, - "groupBy": ["subscriptionId"], + "groupBy": [ + "subscriptionId" + ], "expandTopLevel": true, "finalBy": "Resource" } @@ -1419,17 +1479,23 @@ "quote": "'", "delimiter": ",", "query": "where type =~ 'microsoft.storage/storageaccounts'\n| order by name asc\n| extend Rank = row_number()\n| project value = id, label = id, selected = Rank <= 5", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { "resourceTypeFilter": { "microsoft.storage/storageaccounts": true }, - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "showDefault": false }, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "value": ["value::all"] + "value": [ + "value::all" + ] }, { "id": "c4b69c01-2263-4ada-8d9c-43433b739ff3", @@ -1523,7 +1589,9 @@ "name": "Message", "type": 1, "query": "where type == 'microsoft.storage/storageaccounts' \n| summarize Selected = countif(id in ({Resources:value})), Total = count()\n| extend Selected = iff(Selected > 200, 200, Selected)\n| project Message = strcat('# ', Selected, ' / ', Total)", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "isHiddenWhenLocked": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources" @@ -1621,7 +1689,9 @@ "resourceType": "microsoft.storage/storageaccounts", "metricScope": 0, "resourceParameter": "Resources", - "resourceIds": ["{Resources}"], + "resourceIds": [ + "{Resources}" + ], "timeContextFromParameter": "TimeRange", "timeContext": { "durationMs": 172800000 @@ -1802,7 +1872,9 @@ "filter": true, "hierarchySettings": { "treeType": 1, - "groupBy": ["Subscription"], + "groupBy": [ + "Subscription" + ], "expandTopLevel": true, "finalBy": "Name" }, @@ -1884,7 +1956,9 @@ "resourceType": "microsoft.storage/storageaccounts", "metricScope": 0, "resourceParameter": "Resources", - "resourceIds": ["{Resources}"], + "resourceIds": [ + "{Resources}" + ], "timeContextFromParameter": "TimeRange", "timeContext": { "durationMs": 172800000 @@ -2012,7 +2086,9 @@ "filter": true, "hierarchySettings": { "treeType": 1, - "groupBy": ["Subscription"], + "groupBy": [ + "Subscription" + ], "expandTopLevel": true, "finalBy": "Name" }, @@ -2122,7 +2198,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "parameters": [ { "id": "2373a24f-ad32-4909-a7f6-59b373dcde6c", @@ -2136,7 +2214,9 @@ "quote": "'", "delimiter": ",", "query": "where type =~ 'microsoft.operationalinsights/workspaces' | project id", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { "additionalResourceOptions": [], "showDefault": false @@ -2158,7 +2238,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["{Workspaces}"], + "crossComponentResources": [ + "{Workspaces}" + ], "parameters": [ { "id": "2965ad33-1401-47c9-8f4b-9b7126f87014", @@ -2210,9 +2292,13 @@ "quote": "", "delimiter": ",", "query": "let RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet VaultSubscriptionList = \"*\";\r\nlet VaultLocationList = \"*\";\r\nlet VaultList = \"*\";\r\nlet VaultTypeList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet DisplayAllFields = false;\r\n_AzureBackup_GetBackupInstances(RangeStart, RangeEnd, VaultSubscriptionList, VaultLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, ProtectionInfoList, DatasourceSetName, BackupInstanceName, DisplayAllFields)\r\n| distinct tostring(split(tostring(todynamic(DatasourceResourceId)),\"/\")[2])", - "crossComponentResources": ["{Workspaces}"], + "crossComponentResources": [ + "{Workspaces}" + ], "typeSettings": { - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "selectAllValue": "*", "showDefault": false }, @@ -2232,15 +2318,21 @@ "quote": "", "delimiter": ",", "query": "let RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet VaultSubscriptionList = todynamic( replace(\"/subscriptions/\", \"\", @\"{DataSourceSubscription}\"));\r\nlet VaultLocationList = \"*\";\r\nlet VaultList = \"*\";\r\nlet VaultTypeList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet DisplayAllFields = false;\r\n_AzureBackup_GetBackupInstances(RangeStart, RangeEnd, VaultSubscriptionList, VaultLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, ProtectionInfoList, DatasourceSetName, BackupInstanceName, DisplayAllFields)\r\n| distinct VaultLocation", - "crossComponentResources": ["{Workspaces}"], + "crossComponentResources": [ + "{Workspaces}" + ], "typeSettings": { - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "selectAllValue": "*", "showDefault": false }, "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", - "value": ["value::all"] + "value": [ + "value::all" + ] }, { "id": "16ad110f-4ea3-44d6-826b-4ea3bbd68c93", @@ -2254,12 +2346,16 @@ "quote": "", "delimiter": ",", "typeSettings": { - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "selectAllValue": "*", "showDefault": false }, "jsonData": "\r\n[ \r\n{ \"value\": \"Backup\", \t\t\t\t\t\t\"label\": \"Backup\" },\r\n{ \"value\": \"Restore\", \t\t\t\t\t\t\"label\": \"Restore\" }\r\n]", - "value": ["value::all"] + "value": [ + "value::all" + ] }, { "id": "6a6222bf-a28a-4c98-9d74-838e74497167", @@ -2273,12 +2369,16 @@ "quote": "", "delimiter": ",", "typeSettings": { - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "selectAllValue": "*", "showDefault": false }, "jsonData": "\r\n[ \r\n{ \"value\": \"Completed\", \t\t\t\t\t\t\"label\": \"Completed\" },\r\n{ \"value\": \"Failed\", \t\t\t\"label\": \"Failed\" },\r\n\r\n{ \"value\": \"CompletedWithWarnings\", \t\t\t\t\t\t\"label\": \"CompletedWithWarnings\" },\r\n{ \"value\": \"Cancelled\", \"label\": \"Cancelled\" }\r\n]", - "value": ["value::all"] + "value": [ + "value::all" + ] }, { "id": "849a6401-cbaf-44b9-a733-0819f8923791", @@ -2323,7 +2423,9 @@ "showRefreshButton": true, "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", - "crossComponentResources": ["{Workspaces}"], + "crossComponentResources": [ + "{Workspaces}" + ], "visualization": "piechart", "tileSettings": { "showBorder": false, @@ -2361,7 +2463,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["{Workspaces}"], + "crossComponentResources": [ + "{Workspaces}" + ], "parameters": [ { "id": "7a64467f-eec7-495b-9099-233fb7bceb08", @@ -2384,7 +2488,9 @@ "description": "Page number", "isRequired": true, "query": "\r\nlet RangeStart = startofday({TimeRange:start});\r\nlet RangeEnd = iff(startofday({TimeRange:end}) == startofday(now()) ,startofday({TimeRange:end}) - 1d , startofday({TimeRange:end}));\r\nlet DataSourceSubscriptionList = todynamic( replace(\"/subscriptions/\", \"\", @\"{DataSourceSubscription}\"));\r\nlet DataSourceLocationList = todynamic( @\"{DataSourceLocation}\"); \r\nlet VaultTypeList = \"*\";\r\nlet VaultList = \"*\";\r\nlet ExcludeLegacyEvent = true;\r\nlet BackupSolutionList = \"*\";\r\nlet ProtectionInfoList = \"*\";\r\nlet Item_search = \"*;*\";\r\nlet ItemArray = split(Item_search, \";\");\r\nlet ItemArray_length = array_length(ItemArray);\r\nlet BackupInstanceName = iff(ItemArray_length == 2, ItemArray[1], ItemArray[0] );\r\nlet DatasourceSetName = iff(ItemArray_length == 2, ItemArray[0], \"\");\r\nlet JobOperationList = todynamic( @\"{JobOperation}\"); \r\nlet JobStatusList = todynamic( @\"{JobStatus}\");\r\nlet JobFailureCodeList = \"*\";\r\nlet ExcludeLog = true; \r\nlet backupItem = '{SearchItem}';\r\n_AzureBackup_GetJobs(RangeStart, RangeEnd, DataSourceSubscriptionList, DataSourceLocationList, VaultList, VaultTypeList, ExcludeLegacyEvent, BackupSolutionList, JobOperationList, JobStatusList, JobFailureCodeList, DatasourceSetName, BackupInstanceName, ExcludeLog)\r\n| where BackupInstanceFriendlyName contains backupItem\r\n| summarize c=count()\r\n| project num = (c-1)/toint('{RowsPerPage}') + 1\r\n| project nums = range(1,num,1), num\r\n| mvexpand nums\r\n| project nums = tostring(nums), num = strcat(tostring(nums),\" of \",tostring(num))\r\n\r\n", - "crossComponentResources": ["{Workspaces}"], + "crossComponentResources": [ + "{Workspaces}" + ], "typeSettings": { "additionalResourceOptions": [], "showDefault": false @@ -2418,7 +2524,9 @@ "showExportToExcel": true, "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", - "crossComponentResources": ["{Workspaces}"], + "crossComponentResources": [ + "{Workspaces}" + ], "visualization": "table", "gridSettings": { "formatters": [ @@ -2617,7 +2725,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "tiles", "tileSettings": { "showBorder": false, @@ -2698,7 +2808,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "filter": true }, @@ -2716,7 +2828,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -2790,7 +2904,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "table", "gridSettings": { "formatters": [ @@ -2824,7 +2940,9 @@ "filter": true, "hierarchySettings": { "treeType": 1, - "groupBy": ["subscriptionId"], + "groupBy": [ + "subscriptionId" + ], "expandTopLevel": true, "finalBy": "Resource" } @@ -2879,7 +2997,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"] + "crossComponentResources": [ + "{Subscription}" + ] }, "name": "query - Application Gateways" }, @@ -2930,7 +3050,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -3019,7 +3141,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -3080,7 +3204,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -3121,7 +3247,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -3179,7 +3307,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "parameters": [ { "id": "bae67738-90ef-4698-9020-5e1f91d67f82", @@ -3189,7 +3319,9 @@ "type": 2, "isRequired": true, "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { "additionalResourceOptions": [], "showDefault": false @@ -3213,7 +3345,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "parameters": [ { "id": "cb0ae78d-a49b-457b-baed-d83c97a2c934", @@ -3222,7 +3356,9 @@ "label": "Tag value", "type": 2, "query": "Resources\r\n| extend TagValue = tostring(tags.{TagName})\r\n| project TagValue\r\n| distinct TagValue", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { "additionalResourceOptions": [], "showDefault": false @@ -3288,7 +3424,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "filter": true, "labelSettings": [ @@ -3322,7 +3460,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "table", "gridSettings": { "filter": true, @@ -3357,7 +3497,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -3390,7 +3532,9 @@ "title": "Subscription list", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -3425,7 +3569,9 @@ "title": "Resource groups list", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -3483,7 +3629,9 @@ "title": "Security Scores by Subscription", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -3536,7 +3684,9 @@ "title": "Security Scores by Control", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -3632,7 +3782,9 @@ ], "hierarchySettings": { "treeType": 1, - "groupBy": ["subscriptionId"], + "groupBy": [ + "subscriptionId" + ], "expandTopLevel": true, "finalBy": "SecureControl" }, @@ -3724,7 +3876,9 @@ ], "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "piechart", "gridSettings": { "formatters": [ @@ -3735,7 +3889,9 @@ ] }, "chartSettings": { - "yAxis": ["Count"], + "yAxis": [ + "Count" + ], "seriesLabelSettings": [ { "seriesName": "Medium", @@ -3766,7 +3922,9 @@ "exportParameterName": "resourceGroupFilter", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "piechart" }, "customWidth": "33", @@ -3781,7 +3939,9 @@ "title": "Tag", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "piechart" }, "customWidth": "30", @@ -3812,7 +3972,9 @@ ], "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "table", "gridSettings": { "formatters": [ @@ -3869,7 +4031,9 @@ ], "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "table", "gridSettings": { "sortBy": [ @@ -3918,7 +4082,9 @@ ], "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -3995,7 +4161,9 @@ ], "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -4325,7 +4493,9 @@ "size": 0, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "barchart", "tileSettings": { "showBorder": false, @@ -4414,7 +4584,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "parameters": [ { "id": "1ffc8fe9-a919-4c9e-8489-a92f0a7d79e1", @@ -4426,9 +4598,13 @@ "quote": "'", "delimiter": ",", "query": "securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend Prop = parse_json(properties)\r\n | extend ResourceIdentifiers = Prop.[\"ResourceIdentifiers\"]\r\n | project ResourceIdentifiers\r\n | mv-expand ResourceIdentifiers\r\n | extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n //| where isnotempty(ResourceId )\r\n | extend Resource = tolower(tostring(ResourceId))\r\n | summarize count() by Resource\r\n | project Resource\r\n //| order by Resource asc\r\n", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "showDefault": false }, "timeContext": { @@ -4437,7 +4613,9 @@ "defaultValue": "value::all", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "value": ["value::all"] + "value": [ + "value::all" + ] }, { "id": "e9522d87-143f-408b-93ea-b8f07223995e", @@ -4448,9 +4626,13 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "value": ["value::all"], + "value": [ + "value::all" + ], "typeSettings": { - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "showDefault": false }, "jsonData": "[\r\n\r\n{\"value\": \"High\", \"label\":\"High\"},\r\n{\"value\": \"Medium\", \"label\":\"Medium\"},\r\n{\"value\": \"Low\", \"label\":\"Low\"},\r\n{\"value\": \"Informational\", \"label\":\"Informational\"}\r\n]\r\n \r\n ", @@ -4469,9 +4651,13 @@ "quote": "'", "delimiter": ",", "query": " securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend resourceGroup = iif(isempty(resourceGroup),\" \",resourceGroup)\r\n| summarize Count =count() by resourceGroup\r\n | project resourceGroup", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "showDefault": false }, "timeContext": { @@ -4480,7 +4666,9 @@ "defaultValue": "value::all", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "value": ["value::all"] + "value": [ + "value::all" + ] }, { "id": "48a8dd7e-43ab-413e-88f8-a433100d92ce", @@ -4492,9 +4680,13 @@ "quote": "'", "delimiter": ",", "query": " securityresources\r\n | where type =~ 'microsoft.security/locations/alerts'\r\n | extend Prop = parse_json(properties)\r\n | extend AlertDisplayName = Prop.[\"AlertDisplayName\"]\r\n | distinct tostring(AlertDisplayName)\r\n | order by AlertDisplayName asc\r\n ", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "showDefault": false }, "defaultValue": "value::all", @@ -4511,9 +4703,13 @@ "quote": "'", "delimiter": ",", "query": "securityresources\r\n | where type =~ \"microsoft.security/locations/alerts\"\r\n | extend isAzure = tostring(properties.ResourceIdentifiers) matches regex '\"Type\"\\\\s*:\\\\s*\"AzureResource\"'\r\n | extend Details = parse_json(properties)\r\n| extend IsIncident = Details.[\"IsIncident\"]\r\n| extend AlertDisplayName = Details.[\"AlertDisplayName\"]\r\n| extend SystemAlertId = Details.[\"SystemAlertId\"]\r\n| extend Severity = Details.[\"Severity\"]\r\n| extend AlertUri = Details.[\"AlertUri\"]\r\n| extend Status = Details.[\"Status\"]\r\n| extend Tactics = Details.[\"Intent\"]\r\n| parse AlertUri with * '/subscriptionId/' SubscriptionId '/' *\r\n| parse AlertUri with * '/resourceGroup/' ResourceGroup '/' *\r\n| parse AlertUri with * '/location/' Location \r\n | extend affectedResourceId = extract('\"AzureResourceId\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.ResourceIdentifiers))\r\n | extend hostName = iff(isAzure, \"\", extract('\"HostName\"\\\\s*:\\\\s*\"([^\"]*)\"', 1, tostring(properties.Entities)))\r\n | extend splitAffectedResourceId = split(affectedResourceId, \"/\")\r\n | extend resourceNameIndex = iff(array_length(splitAffectedResourceId) > 1, array_length(splitAffectedResourceId) - 1, 0)\r\n | extend affectedResourceName = iff(isAzure, splitAffectedResourceId[resourceNameIndex], iff(isempty(hostName), \"Non-Azure\", hostName))| project-away resourceNameIndex, splitAffectedResourceId, hostName\r\n | extend ResourceIdentifiers = Details.[\"ResourceIdentifiers\"]\r\n | mv-expand ResourceIdentifiers\r\n | extend ResourceId = parse_json(ResourceIdentifiers).[\"AzureResourceId\"]\r\n | extend Resource = tolower(tostring(ResourceId))\r\n | project alertId = id, subscriptionId, alertProperties = properties, affectedResourceId = tolower(affectedResourceId),tostring(Severity), SystemAlertId, AlertDisplayName,IsIncident = iif(IsIncident==\"true\",\"Incident\",\"Alert\"),AlertUri,Status,Tactics,SubscriptionId,ResourceGroup,Location, ResourceIdentifier=Details.[\"ResourceIdentifiers\"],Resource\r\n | join kind=leftouter (\r\n resources\r\n | project id = tolower(id), tags\r\n ) on $left.affectedResourceId == $right.id\r\n | extend Tag = parse_json(tags)\r\n | mv-expand Tag\r\n | parse Tag with * ':\"' TagValue '\"}'\r\n | extend TagValue = iif(isempty(TagValue),\" \",TagValue)\r\n | project TagValue, alertId\r\n | distinct TagValue\r\n ", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "showDefault": false }, "defaultValue": "value::all", @@ -4573,7 +4769,9 @@ ], "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -4897,7 +5095,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "parameters": [ { "id": "8724f927-b766-4814-a895-8c55565fb7f8", @@ -4908,9 +5108,13 @@ "quote": "'", "delimiter": ",", "query": "resources\r\n| where type contains \"solution\"\r\n| where name contains \"security\"\r\n| project id = tostring(properties.workspaceResourceId)\r\n| distinct id", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { - "additionalResourceOptions": ["value::all"], + "additionalResourceOptions": [ + "value::all" + ], "showDefault": false }, "timeContext": { @@ -4960,7 +5164,9 @@ "exportToExcelOptions": "all", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "map", "mapSettings": { "locInfo": "AzureResource", @@ -5018,7 +5224,9 @@ ], "queryType": 0, "resourceType": "microsoft.operationalinsights/workspaces", - "crossComponentResources": ["{Workspace}"], + "crossComponentResources": [ + "{Workspace}" + ], "visualization": "table", "gridSettings": { "formatters": [ @@ -5449,7 +5657,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "parameters": [ { "id": "6cc7fc26-1a56-41cb-ad43-301e0f9f8903", @@ -5459,7 +5669,9 @@ "type": 2, "isRequired": true, "query": "Resources\r\n| where tags != '' and tags != '[]'\r\n| mvexpand tags\r\n| extend tagName = tostring(bag_keys(tags)[0])\r\n| distinct tagName\r\n| sort by tagName asc", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { "additionalResourceOptions": [], "showDefault": false @@ -5479,7 +5691,9 @@ "type": 2, "isRequired": true, "query": "Resources\r\n| extend TagValue = tostring(tags.{TagName})\r\n| project TagValue\r\n| distinct TagValue", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { "additionalResourceOptions": [], "showDefault": false @@ -5590,7 +5804,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["value::tenant"], + "crossComponentResources": [ + "value::tenant" + ], "parameters": [ { "id": "f967854d-c31e-46a6-b8b0-6b9fff7ce582", @@ -5599,7 +5815,9 @@ "label": "Management group", "type": 2, "query": "resourcecontainers\r\n| where type == \"microsoft.management/managementgroups\"\r\n| extend name = properties.displayName\r\n| project name", - "crossComponentResources": ["value::tenant"], + "crossComponentResources": [ + "value::tenant" + ], "typeSettings": { "additionalResourceOptions": [], "showDefault": false @@ -5618,7 +5836,9 @@ "type": 6, "isRequired": true, "query": "resourcecontainers\r\n| where type == \"microsoft.resources/subscriptions\"\r\n| where properties['managementGroupAncestorsChain'] contains '{ManagementGroup:label}'", - "crossComponentResources": ["value::tenant"], + "crossComponentResources": [ + "value::tenant" + ], "typeSettings": { "additionalResourceOptions": [], "showDefault": false @@ -5666,7 +5886,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resources/tenants", - "crossComponentResources": ["value::tenant"], + "crossComponentResources": [ + "value::tenant" + ], "visualization": "table", "gridSettings": { "formatters": [ @@ -5808,7 +6030,9 @@ }, "queryType": 0, "resourceType": "microsoft.resources/subscriptions", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "piechart", "tileSettings": { "showBorder": false, @@ -5866,7 +6090,9 @@ }, "queryType": 0, "resourceType": "microsoft.resources/subscriptions", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "piechart", "tileSettings": { "showBorder": false, @@ -5924,7 +6150,9 @@ }, "queryType": 0, "resourceType": "microsoft.resources/subscriptions", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "piechart", "tileSettings": { "showBorder": false, @@ -5982,7 +6210,9 @@ "showExportToExcel": true, "queryType": 0, "resourceType": "microsoft.resources/subscriptions", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -6042,7 +6272,9 @@ "type": 9, "content": { "version": "KqlParameterItem/1.0", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "parameters": [ { "id": "4168a8b2-a522-4f0d-9575-893d70d9239d", @@ -6051,7 +6283,9 @@ "type": 1, "description": "Count of the governance rule, when there is no rules, empty state will be shown", "query": "securityresources\r\n| where type == \"microsoft.security/governancerules\"\r\n| where tostring(properties.isDisabled) == \"false\"\r\n| count", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "isHiddenWhenLocked": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources" @@ -6098,7 +6332,9 @@ "noDataMessage": "No unhealthy resources found", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "piechart", "tileSettings": { "titleContent": { @@ -6197,7 +6433,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -6409,7 +6647,9 @@ "noDataMessage": "No unhealthy resources found", "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "piechart", "gridSettings": { "rowLimit": 10000 @@ -6500,7 +6740,9 @@ ], "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -6590,7 +6832,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -6886,7 +7130,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -7215,7 +7461,9 @@ "type": 2, "isRequired": true, "query": "resources\r\n| summarize by location\r\n| where location != \"global\"", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "typeSettings": { "additionalResourceOptions": [], "showDefault": false @@ -7396,7 +7644,9 @@ "showRefreshButton": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "tiles", "tileSettings": { "showBorder": false, @@ -7434,7 +7684,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -7467,7 +7719,9 @@ "filter": true, "hierarchySettings": { "treeType": 1, - "groupBy": ["subscriptionId"], + "groupBy": [ + "subscriptionId" + ], "expandTopLevel": true, "finalBy": "Resource" } @@ -7525,7 +7779,9 @@ "showRefreshButton": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "tiles", "gridSettings": { "formatters": [ @@ -7548,7 +7804,9 @@ ], "hierarchySettings": { "treeType": 1, - "groupBy": ["subscriptionId"], + "groupBy": [ + "subscriptionId" + ], "expandTopLevel": true, "finalBy": "Resource" } @@ -7590,7 +7848,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -7623,7 +7883,9 @@ "filter": true, "hierarchySettings": { "treeType": 1, - "groupBy": ["subscriptionId"], + "groupBy": [ + "subscriptionId" + ], "expandTopLevel": true, "finalBy": "Resource" } @@ -7681,7 +7943,9 @@ "showRefreshButton": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "visualization": "tiles", "gridSettings": { "formatters": [ @@ -7704,7 +7968,9 @@ ], "hierarchySettings": { "treeType": 1, - "groupBy": ["subscriptionId"], + "groupBy": [ + "subscriptionId" + ], "expandTopLevel": true, "finalBy": "Resource" } @@ -7747,7 +8013,9 @@ "showExportToExcel": true, "queryType": 1, "resourceType": "microsoft.resourcegraph/resources", - "crossComponentResources": ["{Subscription}"], + "crossComponentResources": [ + "{Subscription}" + ], "gridSettings": { "formatters": [ { @@ -7790,7 +8058,9 @@ "rowLimit": 1000, "hierarchySettings": { "treeType": 1, - "groupBy": ["subscriptionId"], + "groupBy": [ + "subscriptionId" + ], "expandTopLevel": true, "finalBy": "Resource" } @@ -7895,6 +8165,8 @@ "name": "Azure Governance Workbook" } ], - "fallbackResourceIds": ["azure monitor"], + "fallbackResourceIds": [ + "azure monitor" + ], "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json" }