From 2a74a051d87a72cdf68243450ae7ba123582fe60 Mon Sep 17 00:00:00 2001 From: Shrey Sonar Date: Mon, 1 Jun 2026 08:32:45 +0530 Subject: [PATCH 1/9] implement CCF for SSC ratings --- ...curityScorecardFactor_API_FunctionApp.json | 6 +- .../SecurityScorecardFactor_DCR.json | 59 + ...orecardFactor_DataConnectorDefinition.json | 114 + ...SecurityScorecardFactor_PollingConfig.json | 119 + .../SecurityScorecardFactor_tables.json | 41 + ...urityScorecardFactor_poller_connector.json | 582 ++++ ...ecurityScorecardIssue_API_FunctionApp.json | 6 +- .../SecurityScorecardIssue_DCR.json | 91 + ...corecardIssue_DataConnectorDefinition.json | 110 + .../SecurityScorecardIssue_PollingConfig.json | 119 + .../SecurityScorecardIssue_tables.json | 73 + ...curityScorecardIssue_poller_connector.json | 646 ++++ ...urityScorecardRatings_API_FunctionApp.json | 6 +- .../SecurityScorecardRatings_DCR.json | 59 + ...recardRatings_DataConnectorDefinition.json | 114 + ...ecurityScorecardRatings_PollingConfig.json | 119 + .../SecurityScorecardRatings_tables.json | 41 + ...rityScorecardRatings_poller_connector.json | 582 ++++ .../Data/Solution_SecurityScorecard.json | 44 +- .../Package/3.0.0.zip | Bin 0 -> 27977 bytes .../Package/createUiDefinition.json | 67 +- .../Package/mainTemplate.json | 2873 ++++++++++++++++- .../Package/testParameters.json | 46 + .../Parsers/SecurityScorecardFactor.yaml | 109 + .../Parsers/SecurityScorecardIssue.yaml | 86 + .../Parsers/SecurityScorecardRatings.yaml | 87 + .../ReleaseNotes.md | 8 + .../SolutionMetadata.json | 6 +- .../Workbooks/SecurityScorecardWorkbook.json | 76 +- Workbooks/WorkbooksMetadata.json | 12 +- 30 files changed, 6066 insertions(+), 235 deletions(-) create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DCR.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_tables.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/azuredeploy_SecurityScorecardFactor_poller_connector.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DCR.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_tables.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/azuredeploy_SecurityScorecardIssue_poller_connector.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DCR.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_tables.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/azuredeploy_SecurityScorecardRatings_poller_connector.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Package/testParameters.json create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardRatings.yaml create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/ReleaseNotes.md diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor/SecurityScorecardFactor_API_FunctionApp.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor/SecurityScorecardFactor_API_FunctionApp.json index 3902ff6aecf..1c44632ee06 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor/SecurityScorecardFactor_API_FunctionApp.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor/SecurityScorecardFactor_API_FunctionApp.json @@ -1,8 +1,8 @@ { "id": "SecurityScorecardFactorAzureFunctions", - "title": "SecurityScorecard Factor", + "title": "[DEPRECATED] SecurityScorecard Factor (using Azure Function)", "publisher": "SecurityScorecard", - "descriptionMarkdown": "SecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Factors data connector provides the ability for Sentinel to import SecurityScorecard factor ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when factor scores change or drop. SecurityScorecard factor ratings are updated daily based on evidence collected across the web.", + "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Factors (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Factors data connector provides the ability for Microsoft Sentinel to import SecurityScorecard factor ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when factor scores change or drop. SecurityScorecard factor ratings are updated daily based on evidence collected across the web.", "graphQueries": [ { "metricName": "Total Factor data received", @@ -32,7 +32,7 @@ ], "availability": { "status": 1, - "isPreview": true + "isPreview": false }, "permissions": { "resourceProvider": [ diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DCR.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DCR.json new file mode 100644 index 00000000000..66436a8e4c4 --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DCR.json @@ -0,0 +1,59 @@ +{ + "name": "SecurityScorecardFactorDCR", + "apiVersion": "2021-09-01-preview", + "type": "Microsoft.Insights/dataCollectionRules", + "location": "{{location}}", + "properties": { + "dataCollectionEndpointId": "{{dataCollectionEndpointId}}", + "streamDeclarations": { + "Custom-SecurityScorecardFactorHistory_CL": { + "columns": [ + { + "name": "date", + "type": "datetime" + }, + { + "name": "factors", + "type": "dynamic" + }, + { + "name": "company_domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + } + ] + } + }, + "destinations": { + "logAnalytics": [ + { + "workspaceResourceId": "{{workspaceResourceId}}", + "name": "clv2ws1" + } + ] + }, + "dataFlows": [ + { + "streams": [ + "Custom-SecurityScorecardFactorHistory_CL" + ], + "destinations": [ + "clv2ws1" + ], + "transformKql": "source | extend TimeGenerated = ['date'], score_date = ['date'], domain = company_domain | project-away ['date'], company_domain", + "outputStream": "Custom-SecurityScorecardFactorHistory_CL" + } + ] + } +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json new file mode 100644 index 00000000000..0c75661ac1c --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json @@ -0,0 +1,114 @@ +{ + "name": "SecurityScorecardFactorCCPDefinition", + "apiVersion": "2022-09-01-preview", + "type": "Microsoft.SecurityInsights/dataConnectorDefinitions", + "location": "{{location}}", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "SecurityScorecardFactorCCPDefinition", + "title": "SecurityScorecard Factors (Codeless)", + "publisher": "SecurityScorecard", + "descriptionMarkdown": "The SecurityScorecard Factors (Codeless) connector ingests company factor-score history into Microsoft Sentinel using the Codeless Connector Framework. Raw rows land in `SecurityScorecardFactorHistory_CL`; query via the `SecurityScorecardFactor` parser to get day-over-day deltas with factor metadata, matching the legacy Function App schema.", + "graphQueriesTableName": "SecurityScorecardFactorHistory_CL", + "graphQueries": [ + { + "metricName": "Total Factor history rows received", + "legend": "SecurityScorecard factor history", + "baseQuery": "{{graphQueriesTableName}}" + } + ], + "sampleQueries": [ + { + "description": "Day-over-day factor change (parser)", + "query": "SecurityScorecardFactor\n | sort by TimeGenerated desc" + }, + { + "description": "Raw factor history", + "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "{{graphQueriesTableName}}", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ], + "customs": [ + { + "name": "SecurityScorecard API token", + "description": "A SecurityScorecard API token is required." + } + ] + }, + "instructionSteps": [ + { + "title": "STEP 1 - Create a SecurityScorecard API token", + "description": "As an administrator, create a bot user with Read Only permission and generate the API token." + }, + { + "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", + "description": "Enter the base URL, API token, and one or more portfolio IDs (comma-separated). At least one portfolio ID is required — the connector fetches all portfolios and ingests factor scores only for those matching the provided IDs.", + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio IDs (comma-separated)", + "placeholder": "comma-separated, no spaces: portfolio-id-1,portfolio-id-2", + "type": "text", + "name": "PortfolioIds" + } + }, + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "connect", + "name": "connect" + } + } + ] + } + ] + } + } +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json new file mode 100644 index 00000000000..18f6ab8be93 --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json @@ -0,0 +1,119 @@ +[ + { + "name": "SecurityScorecardFactorPoller", + "apiVersion": "2024-09-01", + "type": "Microsoft.SecurityInsights/dataConnectors", + "location": "{{location}}", + "kind": "RestApiPoller", + "properties": { + "connectorDefinitionName": "SecurityScorecardFactorCCPDefinition", + "dataType": "SecurityScorecardFactorHistory_CL", + "dcrConfig": { + "streamName": "Custom-SecurityScorecardFactorHistory_CL", + "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", + "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" + }, + "auth": { + "type": "APIKey", + "ApiKey": "{{ApiToken}}", + "ApiKeyName": "Authorization", + "ApiKeyIdentifier": "Token" + }, + "request": { + "apiEndpoint": "{{BaseUrl}}/portfolios", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + }, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "portfolioCompanies", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + } + ] + }, + "stepCollectorConfigs": { + "portfolioCompanies": { + "shouldJoinNestedData": false, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "factorHistory", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain']), industry = tostring(res['industry'])" + } + ] + }, + "request": { + "apiEndpoint": "{{BaseUrl}}/portfolios/$portfolio_id$/companies", + "httpMethod": "GET", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + }, + "factorHistory": { + "shouldJoinNestedData": true, + "request": { + "apiEndpoint": "{{BaseUrl}}/companies/$company_domain$/history/factors/score", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "from": "{_QueryWindowStartTime}", + "to": "{_QueryWindowEndTime}", + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + } + } + } + } +] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_tables.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_tables.json new file mode 100644 index 00000000000..f5c7cc4ea11 --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_tables.json @@ -0,0 +1,41 @@ +{ + "name": "SecurityScorecardFactorHistory_CL", + "apiVersion": "2022-10-01", + "type": "Microsoft.OperationalInsights/workspaces/tables", + "location": "{{location}}", + "properties": { + "schema": { + "name": "SecurityScorecardFactorHistory_CL", + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "score_date", + "type": "datetime" + }, + { + "name": "factors", + "type": "dynamic" + }, + { + "name": "domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + } + ] + } + } +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/azuredeploy_SecurityScorecardFactor_poller_connector.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/azuredeploy_SecurityScorecardFactor_poller_connector.json new file mode 100644 index 00000000000..374331c85d3 --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/azuredeploy_SecurityScorecardFactor_poller_connector.json @@ -0,0 +1,582 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "location": { + "defaultValue": "[resourceGroup().location]", + "minLength": 1, + "type": "string", + "metadata": { + "description": "Not used, but needed to pass arm-ttk test `Location-Should-Not-Be-Hardcoded`. We instead use `workspace-location` derived from the LA workspace." + } + }, + "workspace": { + "defaultValue": "", + "type": "string", + "metadata": { + "description": "Workspace name for Log Analytics where Microsoft Sentinel is set up" + } + } + }, + "variables": { + "_solutionName": "SecurityScorecard Cybersecurity Ratings", + "_solutionVersion": "3.0.1", + "_solutionAuthor": "SecurityScorecard", + "_solutionPublisher": "SecurityScorecard", + "_solutionTier": "Partner", + "solutionId": "azuresentinel.azure-sentinel-solution-securityscorecard", + "_solutionId": "[variables('solutionId')]", + "dataConnectorVersionConnections": "3.0.1", + "_dataConnectorContentIdConnectorDefinition": "SecurityScorecardFactorCCPDefinition", + "dataConnectorTemplateNameConnectorDefinition": "[format('contentTemplate-{0}', uniquestring(variables('_dataConnectorContentIdConnectorDefinition')))]", + "_dataConnectorContentIdConnections": "SecurityScorecardFactorCCPDefinitionConnections", + "dataConnectorTemplateNameConnections": "[format('{0}-dc-{1}', parameters('workspace'), uniquestring(variables('_dataConnectorContentIdConnections')))]", + "_solutioncontentProductId": "[concat(take(variables('_solutionId'),50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]" + }, + "resources": [ + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/{1}-v{2}', parameters('workspace'), variables('dataConnectorTemplateNameConnectorDefinition'), variables('dataConnectorVersionConnections'))]", + "location": "[parameters('location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "displayName": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "contentKind": "DataConnector", + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition'),'-', variables('dataConnectorVersionConnections'))))]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "version": "[variables('dataConnectorVersionConnections')]", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorVersionConnections')]", + "parameters": {}, + "variables": {}, + "resources": [ + { + "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]", + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorVersionConnections')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "[variables('_solutionAuthor')]" + }, + "support": { + "name": "[variables('_solutionAuthor')]", + "tier": "[variables('_solutionTier')]" + }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorVersionConnections')]", + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "kind": "ResourcesDataConnector" + } + ] + } + } + }, + { + "type": "Microsoft.Insights/dataCollectionRules", + "apiVersion": "2021-09-01-preview", + "name": "SecurityScorecardFactorDCR", + "location": "[parameters('location')]", + "properties": { + "dataCollectionEndpointId": "[format('{0}/providers/Microsoft.Insights/dataCollectionEndpoints/{1}', resourceGroup().id, parameters('workspace'))]", + "streamDeclarations": { + "Custom-SecurityScorecardFactorHistory_CL": { + "columns": [ + { + "name": "date", + "type": "datetime" + }, + { + "name": "factors", + "type": "dynamic" + }, + { + "name": "company_domain", + "type": "string" + } + ] + } + }, + "destinations": { + "logAnalytics": [ + { + "workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace'))]", + "name": "clv2ws1" + } + ] + }, + "dataFlows": [ + { + "streams": [ + "Custom-SecurityScorecardFactorHistory_CL" + ], + "destinations": [ + "clv2ws1" + ], + "outputStream": "Custom-SecurityScorecardFactorHistory_CL", + "transformKql": "source | extend TimeGenerated = ['date'], score_date = ['date'], domain = company_domain | project-away ['date'], company_domain" + } + ] + } + }, + { + "name": "SecurityScorecardFactorHistory_CL", + "apiVersion": "2022-10-01", + "type": "Microsoft.OperationalInsights/workspaces/tables", + "location": "[parameters('location')]", + "kind": null, + "properties": { + "schema": { + "name": "SecurityScorecardFactorHistory_CL", + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "score_date", + "type": "datetime" + }, + { + "name": "factors", + "type": "dynamic" + }, + { + "name": "domain", + "type": "string" + } + ] + } + } + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions", + "apiVersion": "2022-09-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", + "location": "[parameters('location')]", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "title": "SecurityScorecard Factors (Codeless)", + "publisher": "[variables('_solutionPublisher')]", + "descriptionMarkdown": "Ingest SecurityScorecard factor-score history into Microsoft Sentinel via CCF. Raw rows land in `SecurityScorecardFactorHistory_CL`; query with the `SecurityScorecardFactor` parser.", + "graphQueriesTableName": "SecurityScorecardFactorHistory_CL", + "graphQueries": [ + { + "metricName": "Total Factor history rows received", + "legend": "SecurityScorecard factor history", + "baseQuery": "{{graphQueriesTableName}}" + } + ], + "sampleQueries": [ + { + "description": "Day-over-day factor change (parser)", + "query": "SecurityScorecardFactor\n | sort by TimeGenerated desc" + }, + { + "description": "Raw factor history", + "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "SecurityScorecardFactorHistory_CL", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ], + "customs": [ + { + "name": "SecurityScorecard API token", + "description": "A SecurityScorecard API token is required." + } + ] + }, + "instructionSteps": [ + { + "title": "STEP 1 - Create a SecurityScorecard API token", + "description": "As an administrator, create a bot user with Read Only permission and generate the API token." + }, + { + "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", + "description": "Enter the base URL, API token, and portfolio ID below.", + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio IDs (comma-separated)", + "placeholder": "e.g. portfolio-id-1, portfolio-id-2", + "type": "text", + "name": "PortfolioIds" + } + }, + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "connect", + "name": "connect" + } + } + ] + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "apiVersion": "2022-01-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]", + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorVersionConnections')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "[variables('_solutionAuthor')]" + }, + "support": { + "name": "[variables('_solutionAuthor')]", + "tier": "[variables('_solutionTier')]" + }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorVersionConnections')]", + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "kind": "ResourcesDataConnector" + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/{1}{2}', parameters('workspace'), variables('dataConnectorTemplateNameConnections'), variables('dataConnectorVersionConnections'))]", + "location": "[parameters('location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "displayName": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "contentKind": "ResourcesDataConnector", + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections'),'-', variables('dataConnectorVersionConnections'))))]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "version": "[variables('dataConnectorVersionConnections')]", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorVersionConnections')]", + "parameters": { + "BaseUrl": { + "defaultValue": "https://api.securityscorecard.io", + "type": "string", + "minLength": 1 + }, + "ApiToken": { + "defaultValue": "-NA-", + "type": "securestring", + "minLength": 1 + }, + "PortfolioIds": { + "defaultValue": "-NA-", + "type": "string", + "minLength": 1 + }, + "connectorDefinitionName": { + "defaultValue": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "type": "string", + "minLength": 1 + }, + "workspace": { + "defaultValue": "[parameters('workspace')]", + "type": "string" + }, + "dcrConfig": { + "defaultValue": { + "dataCollectionEndpoint": "data collection Endpoint", + "dataCollectionRuleImmutableId": "data collection rule immutableId" + }, + "type": "object" + } + }, + "variables": { + "_dataConnectorContentIdConnections": "[variables('_dataConnectorContentIdConnections')]" + }, + "resources": [ + { + "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnections'))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections'))]", + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "kind": "ResourcesDataConnector", + "version": "[variables('dataConnectorVersionConnections')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "[variables('_solutionAuthor')]" + }, + "support": { + "name": "[variables('_solutionAuthor')]", + "tier": "[variables('_solutionTier')]" + } + } + }, + { + "name": "[format('{0}/Microsoft.SecurityInsights/SecurityScorecardFactorPoller', parameters('workspace'))]", + "apiVersion": "2024-09-01", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", + "location": "[parameters('location')]", + "kind": "RestApiPoller", + "properties": { + "connectorDefinitionName": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "dataType": "SecurityScorecardFactorHistory_CL", + "dcrConfig": { + "streamName": "Custom-SecurityScorecardFactorHistory_CL", + "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", + "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" + }, + "auth": { + "type": "APIKey", + "ApiKey": "[[parameters('ApiToken')]", + "ApiKeyName": "Authorization", + "ApiKeyIdentifier": "Token" + }, + "request": { + "apiEndpoint": "[[format('{0}/portfolios', parameters('BaseUrl'))]", + "httpMethod": "GET", + "queryWindowInMin": 1440, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQps": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + }, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "portfolioCompanies", + "stepPlaceholdersParsingKql": "[[concat('let userInput = ''', parameters('PortfolioIds'), '''; let allowedIds = split(userInput, '',''); source | project res = parse_json(data) | extend p_id = tostring(res[''id'']) | where userInput != '''' and p_id in (allowedIds) | project portfolio_id = p_id')]" + } + ] + }, + "stepCollectorConfigs": { + "portfolioCompanies": { + "shouldJoinNestedData": false, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "factorHistory", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain'])" + } + ] + }, + "request": { + "apiEndpoint": "[[format('{0}/portfolios/$portfolio_id$/companies', parameters('BaseUrl'))]", + "httpMethod": "GET", + "rateLimitQps": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + }, + "factorHistory": { + "shouldJoinNestedData": true, + "request": { + "apiEndpoint": "[[format('{0}/companies/$company_domain$/history/factors/score', parameters('BaseUrl'))]", + "httpMethod": "GET", + "queryWindowInMin": 1440, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQps": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "from": "{_QueryWindowStartTime}", + "to": "{_QueryWindowEndTime}", + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + } + } + } + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages", + "apiVersion": "2023-04-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/{1}', parameters('workspace'), variables('_solutionId'))]", + "location": "[parameters('location')]", + "properties": { + "version": "[variables('_solutionVersion')]", + "kind": "Solution", + "contentSchemaVersion": "3.0.0", + "displayName": "[variables('_solutionName')]", + "publisherDisplayName": "[variables('_solutionPublisher')]", + "descriptionHtml": "SecurityScorecard Cybersecurity Ratings \u2014 Factors (Codeless) connector", + "contentKind": "Solution", + "contentProductId": "[variables('_solutioncontentProductId')]", + "id": "[variables('_solutioncontentProductId')]", + "contentId": "[variables('_solutionId')]", + "parentId": "[variables('_solutionId')]", + "source": { + "kind": "Solution", + "name": "SecurityScorecard Cybersecurity Ratings", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "[variables('_solutionAuthor')]" + }, + "support": { + "name": "[variables('_solutionAuthor')]", + "tier": "[variables('_solutionTier')]" + }, + "dependencies": { + "operator": "AND", + "criteria": [ + { + "kind": "DataConnector", + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "version": "[variables('dataConnectorVersionConnections')]" + } + ] + }, + "firstPublishDate": "2022-10-01", + "providers": [ + "SecurityScorecard" + ], + "categories": { + "domains": [ + "Security", + "Security - Network", + "Security - Vulnerability Management" + ] + } + } + } + ], + "outputs": {} +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue/SecurityScorecardIssue_API_FunctionApp.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue/SecurityScorecardIssue_API_FunctionApp.json index be57877172a..e8e2e4f01b4 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue/SecurityScorecardIssue_API_FunctionApp.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue/SecurityScorecardIssue_API_FunctionApp.json @@ -1,8 +1,8 @@ { "id": "SecurityScorecardIssueAzureFunctions", - "title": "SecurityScorecard Issue", + "title": "[DEPRECATED] SecurityScorecard Issue (using Azure Function)", "publisher": "SecurityScorecard", - "descriptionMarkdown": "SecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Issues data connector provides the ability for Sentinel to import SecurityScorecard issue data as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when new cybersecurity issues are discovered.", + "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Issues (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Issues data connector provides the ability for Microsoft Sentinel to import SecurityScorecard issue data as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when new cybersecurity issues are discovered.", "graphQueries": [ { "metricName": "Total Issue data received", @@ -32,7 +32,7 @@ ], "availability": { "status": 1, - "isPreview": true + "isPreview": false }, "permissions": { "resourceProvider": [ diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DCR.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DCR.json new file mode 100644 index 00000000000..51a0d88426c --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DCR.json @@ -0,0 +1,91 @@ +{ + "name": "SecurityScorecardIssueDCR", + "apiVersion": "2021-09-01-preview", + "type": "Microsoft.Insights/dataCollectionRules", + "location": "{{location}}", + "properties": { + "dataCollectionEndpointId": "{{dataCollectionEndpointId}}", + "streamDeclarations": { + "Custom-SecurityScorecardIssuesHistory_CL": { + "columns": [ + { + "name": "id", + "type": "long" + }, + { + "name": "date", + "type": "datetime" + }, + { + "name": "event_type", + "type": "string" + }, + { + "name": "group_status", + "type": "string" + }, + { + "name": "issue_count", + "type": "long" + }, + { + "name": "total_score_impact", + "type": "real" + }, + { + "name": "issue_type", + "type": "string" + }, + { + "name": "severity", + "type": "string" + }, + { + "name": "factor", + "type": "string" + }, + { + "name": "detail_url", + "type": "string" + }, + { + "name": "company_domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + } + ] + } + }, + "destinations": { + "logAnalytics": [ + { + "workspaceResourceId": "{{workspaceResourceId}}", + "name": "clv2ws1" + } + ] + }, + "dataFlows": [ + { + "streams": [ + "Custom-SecurityScorecardIssuesHistory_CL" + ], + "destinations": [ + "clv2ws1" + ], + "transformKql": "source | where issue_type != 'breach' | extend TimeGenerated = ['date'], issue_date = ['date'], domain = company_domain | project-away ['date'], company_domain", + "outputStream": "Custom-SecurityScorecardIssuesHistory_CL" + } + ] + } +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json new file mode 100644 index 00000000000..a2ac69d012b --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json @@ -0,0 +1,110 @@ +{ + "name": "SecurityScorecardIssueCCPDefinition", + "apiVersion": "2022-09-01-preview", + "type": "Microsoft.SecurityInsights/dataConnectorDefinitions", + "location": "{{location}}", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "SecurityScorecardIssueCCPDefinition", + "title": "SecurityScorecard Issues (Codeless)", + "publisher": "SecurityScorecard", + "descriptionMarkdown": "The SecurityScorecard Issues (Codeless) connector ingests issue history events from SecurityScorecard companies in a chosen portfolio into Microsoft Sentinel using the Codeless Connector Framework. Replaces the Function App connector.", + "graphQueriesTableName": "SecurityScorecardIssuesHistory_CL", + "graphQueries": [ + { + "metricName": "Total Issue data received", + "legend": "SecurityScorecard issues", + "baseQuery": "{{graphQueriesTableName}}" + } + ], + "sampleQueries": [ + { + "description": "All SecurityScorecard issues", + "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "{{graphQueriesTableName}}", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ], + "customs": [ + { + "name": "SecurityScorecard API token", + "description": "A SecurityScorecard API token is required. See [SecurityScorecard docs](https://securityscorecard.readme.io/) for how to provision a bot user token." + } + ] + }, + "instructionSteps": [ + { + "title": "STEP 1 - Create a SecurityScorecard API token", + "description": "As an administrator in SecurityScorecard, navigate to My Settings then Users, create a bot user with Read Only permission, and generate the API token." + }, + { + "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", + "description": "Enter the base URL, API token, and one or more portfolio IDs (comma-separated). At least one portfolio ID is required — the connector fetches all portfolios and ingests issue events only for those matching the provided IDs.", + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio IDs (comma-separated)", + "placeholder": "comma-separated, no spaces: portfolio-id-1,portfolio-id-2", + "type": "text", + "name": "PortfolioIds" + } + }, + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "connect", + "name": "connect" + } + } + ] + } + ] + } + } +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json new file mode 100644 index 00000000000..ba82ebf8623 --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json @@ -0,0 +1,119 @@ +[ + { + "name": "SecurityScorecardIssuesPoller", + "apiVersion": "2024-09-01", + "type": "Microsoft.SecurityInsights/dataConnectors", + "location": "{{location}}", + "kind": "RestApiPoller", + "properties": { + "connectorDefinitionName": "SecurityScorecardIssueCCPDefinition", + "dataType": "SecurityScorecardIssuesHistory_CL", + "dcrConfig": { + "streamName": "Custom-SecurityScorecardIssuesHistory_CL", + "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", + "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" + }, + "auth": { + "type": "APIKey", + "ApiKey": "{{ApiToken}}", + "ApiKeyName": "Authorization", + "ApiKeyIdentifier": "Token" + }, + "request": { + "apiEndpoint": "{{BaseUrl}}/portfolios", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + }, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "portfolioCompanies", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + } + ] + }, + "stepCollectorConfigs": { + "portfolioCompanies": { + "shouldJoinNestedData": false, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "issueDetails", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain']), industry = tostring(res['industry'])" + } + ] + }, + "request": { + "apiEndpoint": "{{BaseUrl}}/portfolios/$portfolio_id$/companies", + "httpMethod": "GET", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + }, + "issueDetails": { + "shouldJoinNestedData": true, + "request": { + "apiEndpoint": "{{BaseUrl}}/companies/$company_domain$/history/events", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "date_from": "{_QueryWindowStartTime}", + "date_to": "{_QueryWindowEndTime}", + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + } + } + } + } +] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_tables.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_tables.json new file mode 100644 index 00000000000..e8a1a7af35e --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_tables.json @@ -0,0 +1,73 @@ +{ + "name": "SecurityScorecardIssuesHistory_CL", + "apiVersion": "2022-10-01", + "type": "Microsoft.OperationalInsights/workspaces/tables", + "location": "{{location}}", + "properties": { + "schema": { + "name": "SecurityScorecardIssuesHistory_CL", + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "id", + "type": "long" + }, + { + "name": "issue_date", + "type": "datetime" + }, + { + "name": "event_type", + "type": "string" + }, + { + "name": "group_status", + "type": "string" + }, + { + "name": "issue_count", + "type": "long" + }, + { + "name": "total_score_impact", + "type": "real" + }, + { + "name": "issue_type", + "type": "string" + }, + { + "name": "severity", + "type": "string" + }, + { + "name": "factor", + "type": "string" + }, + { + "name": "detail_url", + "type": "string" + }, + { + "name": "domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + } + ] + } + } +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/azuredeploy_SecurityScorecardIssue_poller_connector.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/azuredeploy_SecurityScorecardIssue_poller_connector.json new file mode 100644 index 00000000000..11283de7e26 --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/azuredeploy_SecurityScorecardIssue_poller_connector.json @@ -0,0 +1,646 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "location": { + "defaultValue": "[resourceGroup().location]", + "minLength": 1, + "type": "string", + "metadata": { + "description": "Not used, but needed to pass arm-ttk test `Location-Should-Not-Be-Hardcoded`. We instead use `workspace-location` derived from the LA workspace." + } + }, + "workspace": { + "defaultValue": "", + "type": "string", + "metadata": { + "description": "Workspace name for Log Analytics where Microsoft Sentinel is set up" + } + } + }, + "variables": { + "_solutionName": "SecurityScorecard Cybersecurity Ratings", + "_solutionVersion": "3.0.1", + "_solutionAuthor": "SecurityScorecard", + "_solutionPublisher": "SecurityScorecard", + "_solutionTier": "Partner", + "solutionId": "azuresentinel.azure-sentinel-solution-securityscorecard", + "_solutionId": "[variables('solutionId')]", + "dataConnectorVersionConnections": "3.0.1", + "_dataConnectorContentIdConnectorDefinition": "SecurityScorecardIssueCCPDefinition", + "dataConnectorTemplateNameConnectorDefinition": "[format('contentTemplate-{0}', uniquestring(variables('_dataConnectorContentIdConnectorDefinition')))]", + "_dataConnectorContentIdConnections": "SecurityScorecardIssueCCPDefinitionConnections", + "dataConnectorTemplateNameConnections": "[format('{0}-dc-{1}', parameters('workspace'), uniquestring(variables('_dataConnectorContentIdConnections')))]", + "_solutioncontentProductId": "[concat(take(variables('_solutionId'),50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]" + }, + "resources": [ + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/{1}-v{2}', parameters('workspace'), variables('dataConnectorTemplateNameConnectorDefinition'), variables('dataConnectorVersionConnections'))]", + "location": "[parameters('location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "displayName": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "contentKind": "DataConnector", + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition'),'-', variables('dataConnectorVersionConnections'))))]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "version": "[variables('dataConnectorVersionConnections')]", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorVersionConnections')]", + "parameters": {}, + "variables": {}, + "resources": [ + { + "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]", + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorVersionConnections')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "[variables('_solutionAuthor')]" + }, + "support": { + "name": "[variables('_solutionAuthor')]", + "tier": "[variables('_solutionTier')]" + }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorVersionConnections')]", + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "kind": "ResourcesDataConnector" + } + ] + } + } + }, + { + "type": "Microsoft.Insights/dataCollectionRules", + "apiVersion": "2021-09-01-preview", + "name": "SecurityScorecardIssueDCR", + "location": "[parameters('location')]", + "properties": { + "dataCollectionEndpointId": "[format('{0}/providers/Microsoft.Insights/dataCollectionEndpoints/{1}', resourceGroup().id, parameters('workspace'))]", + "streamDeclarations": { + "Custom-SecurityScorecardIssuesHistory_CL": { + "columns": [ + { + "name": "id", + "type": "long" + }, + { + "name": "date", + "type": "datetime" + }, + { + "name": "event_type", + "type": "string" + }, + { + "name": "group_status", + "type": "string" + }, + { + "name": "issue_count", + "type": "long" + }, + { + "name": "total_score_impact", + "type": "real" + }, + { + "name": "issue_type", + "type": "string" + }, + { + "name": "severity", + "type": "string" + }, + { + "name": "factor", + "type": "string" + }, + { + "name": "detail_url", + "type": "string" + }, + { + "name": "company_domain", + "type": "string" + } + ] + } + }, + "destinations": { + "logAnalytics": [ + { + "workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace'))]", + "name": "clv2ws1" + } + ] + }, + "dataFlows": [ + { + "streams": [ + "Custom-SecurityScorecardIssuesHistory_CL" + ], + "destinations": [ + "clv2ws1" + ], + "outputStream": "Custom-SecurityScorecardIssuesHistory_CL", + "transformKql": "source | where issue_type != 'breach' | extend TimeGenerated = ['date'], issue_date = ['date'], domain = company_domain | project-away ['date'], company_domain" + } + ] + } + }, + { + "name": "SecurityScorecardIssuesHistory_CL", + "apiVersion": "2022-10-01", + "type": "Microsoft.OperationalInsights/workspaces/tables", + "location": "[parameters('location')]", + "kind": null, + "properties": { + "schema": { + "name": "SecurityScorecardIssuesHistory_CL", + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "id", + "type": "long" + }, + { + "name": "issue_date", + "type": "datetime" + }, + { + "name": "event_type", + "type": "string" + }, + { + "name": "group_status", + "type": "string" + }, + { + "name": "issue_count", + "type": "long" + }, + { + "name": "total_score_impact", + "type": "real" + }, + { + "name": "issue_type", + "type": "string" + }, + { + "name": "severity", + "type": "string" + }, + { + "name": "factor", + "type": "string" + }, + { + "name": "detail_url", + "type": "string" + }, + { + "name": "domain", + "type": "string" + } + ] + } + } + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions", + "apiVersion": "2022-09-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", + "location": "[parameters('location')]", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "title": "SecurityScorecard Issues (Codeless)", + "publisher": "[variables('_solutionPublisher')]", + "descriptionMarkdown": "The SecurityScorecard Issues (Codeless) connector ingests issue history events from SecurityScorecard companies in a chosen portfolio into Microsoft Sentinel using the Codeless Connector Framework. Replaces the Function App connector.", + "graphQueriesTableName": "SecurityScorecardIssuesHistory_CL", + "graphQueries": [ + { + "metricName": "Total Issue data received", + "legend": "SecurityScorecard issues", + "baseQuery": "{{graphQueriesTableName}}" + } + ], + "sampleQueries": [ + { + "description": "All SecurityScorecard issues", + "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "SecurityScorecardIssuesHistory_CL", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ], + "customs": [ + { + "name": "SecurityScorecard API token", + "description": "A SecurityScorecard API token is required." + } + ] + }, + "instructionSteps": [ + { + "title": "STEP 1 - Create a SecurityScorecard API token", + "description": "As an administrator in SecurityScorecard, navigate to My Settings then Users, create a bot user with Read Only permission, and generate the API token." + }, + { + "title": "STEP 2 - Identify the Portfolio ID", + "description": "Find the portfolio ID(s) you want to ingest from the SecurityScorecard portal. One connector instance ingests one portfolio." + }, + { + "title": "STEP 3 - Connect SecurityScorecard to Microsoft Sentinel", + "description": "Enter the base URL, API token, and portfolio ID below.", + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio IDs (comma-separated)", + "placeholder": "e.g. portfolio-id-1, portfolio-id-2", + "type": "text", + "name": "PortfolioIds" + } + }, + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "connect", + "name": "connect" + } + } + ] + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "apiVersion": "2022-01-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]", + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorVersionConnections')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "[variables('_solutionAuthor')]" + }, + "support": { + "name": "[variables('_solutionAuthor')]", + "tier": "[variables('_solutionTier')]" + }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorVersionConnections')]", + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "kind": "ResourcesDataConnector" + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/{1}{2}', parameters('workspace'), variables('dataConnectorTemplateNameConnections'), variables('dataConnectorVersionConnections'))]", + "location": "[parameters('location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "displayName": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "contentKind": "ResourcesDataConnector", + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections'),'-', variables('dataConnectorVersionConnections'))))]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "version": "[variables('dataConnectorVersionConnections')]", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorVersionConnections')]", + "parameters": { + "BaseUrl": { + "defaultValue": "https://api.securityscorecard.io", + "type": "string", + "minLength": 1 + }, + "ApiToken": { + "defaultValue": "-NA-", + "type": "securestring", + "minLength": 1 + }, + "PortfolioIds": { + "defaultValue": "-NA-", + "type": "string", + "minLength": 1 + }, + "connectorDefinitionName": { + "defaultValue": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "type": "string", + "minLength": 1 + }, + "workspace": { + "defaultValue": "[parameters('workspace')]", + "type": "string" + }, + "dcrConfig": { + "defaultValue": { + "dataCollectionEndpoint": "data collection Endpoint", + "dataCollectionRuleImmutableId": "data collection rule immutableId" + }, + "type": "object" + } + }, + "variables": { + "_dataConnectorContentIdConnections": "[variables('_dataConnectorContentIdConnections')]" + }, + "resources": [ + { + "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnections'))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections'))]", + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "kind": "ResourcesDataConnector", + "version": "[variables('dataConnectorVersionConnections')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "[variables('_solutionAuthor')]" + }, + "support": { + "name": "[variables('_solutionAuthor')]", + "tier": "[variables('_solutionTier')]" + } + } + }, + { + "name": "[format('{0}/Microsoft.SecurityInsights/SecurityScorecardIssuesPoller', parameters('workspace'))]", + "apiVersion": "2024-09-01", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", + "location": "[parameters('location')]", + "kind": "RestApiPoller", + "properties": { + "connectorDefinitionName": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "dataType": "SecurityScorecardIssuesHistory_CL", + "dcrConfig": { + "streamName": "Custom-SecurityScorecardIssuesHistory_CL", + "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", + "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" + }, + "auth": { + "type": "APIKey", + "ApiKey": "[[parameters('ApiToken')]", + "ApiKeyName": "Authorization", + "ApiKeyIdentifier": "Token" + }, + "request": { + "apiEndpoint": "[[format('{0}/portfolios', parameters('BaseUrl'))]", + "httpMethod": "GET", + "queryWindowInMin": 1440, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "rateLimitQps": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + }, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "portfolioCompanies", + "stepPlaceholdersParsingKql": "[[concat('let userInput = ''', parameters('PortfolioIds'), '''; let allowedIds = split(userInput, '',''); source | project res = parse_json(data) | extend p_id = tostring(res[''id'']) | where userInput != '''' and p_id in (allowedIds) | project portfolio_id = p_id')]" + } + ] + }, + "stepCollectorConfigs": { + "portfolioCompanies": { + "shouldJoinNestedData": false, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "issueDetails", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain'])" + } + ] + }, + "request": { + "apiEndpoint": "[[format('{0}/portfolios/$portfolio_id$/companies', parameters('BaseUrl'))]", + "httpMethod": "GET", + "rateLimitQps": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + }, + "issueDetails": { + "shouldJoinNestedData": true, + "request": { + "apiEndpoint": "[[format('{0}/companies/$company_domain$/history/events', parameters('BaseUrl'))]", + "httpMethod": "GET", + "queryWindowInMin": 1440, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "rateLimitQps": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "date_from": "{_QueryWindowStartTime}", + "date_to": "{_QueryWindowEndTime}", + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + } + } + } + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages", + "apiVersion": "2023-04-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/{1}', parameters('workspace'), variables('_solutionId'))]", + "location": "[parameters('location')]", + "properties": { + "version": "[variables('_solutionVersion')]", + "kind": "Solution", + "contentSchemaVersion": "3.0.0", + "displayName": "[variables('_solutionName')]", + "publisherDisplayName": "[variables('_solutionPublisher')]", + "descriptionHtml": "SecurityScorecard Cybersecurity Ratings \u2014 Issues (Codeless) connector", + "contentKind": "Solution", + "contentProductId": "[variables('_solutioncontentProductId')]", + "id": "[variables('_solutioncontentProductId')]", + "contentId": "[variables('_solutionId')]", + "parentId": "[variables('_solutionId')]", + "source": { + "kind": "Solution", + "name": "SecurityScorecard Cybersecurity Ratings", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "[variables('_solutionAuthor')]" + }, + "support": { + "name": "[variables('_solutionAuthor')]", + "tier": "[variables('_solutionTier')]" + }, + "dependencies": { + "operator": "AND", + "criteria": [ + { + "kind": "DataConnector", + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "version": "[variables('dataConnectorVersionConnections')]" + } + ] + }, + "firstPublishDate": "2022-10-01", + "providers": [ + "SecurityScorecard" + ], + "categories": { + "domains": [ + "Security", + "Security - Network", + "Security - Vulnerability Management" + ] + } + } + } + ], + "outputs": {} +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings/SecurityScorecardRatings_API_FunctionApp.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings/SecurityScorecardRatings_API_FunctionApp.json index 6e06281635a..7acf80d6c9a 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings/SecurityScorecardRatings_API_FunctionApp.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings/SecurityScorecardRatings_API_FunctionApp.json @@ -1,8 +1,8 @@ { "id": "SecurityScorecardRatingsAzureFunctions", - "title": "SecurityScorecard Cybersecurity Ratings", + "title": "[DEPRECATED] SecurityScorecard Cybersecurity Ratings (using Azure Function)", "publisher": "SecurityScorecard", - "descriptionMarkdown": "SecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) data connector provides the ability for Sentinel to import SecurityScorecard ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when scores change or drop. SecurityScorecard ratings are updated daily based on evidence collected across the web.", + "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Ratings (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) data connector provides the ability for Microsoft Sentinel to import SecurityScorecard ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when scores change or drop. SecurityScorecard ratings are updated daily based on evidence collected across the web.", "graphQueries": [ { "metricName": "Total Ratings data received", @@ -32,7 +32,7 @@ ], "availability": { "status": 1, - "isPreview": true + "isPreview": false }, "permissions": { "resourceProvider": [ diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DCR.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DCR.json new file mode 100644 index 00000000000..336c7b2974f --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DCR.json @@ -0,0 +1,59 @@ +{ + "name": "SecurityScorecardRatingsDCR", + "apiVersion": "2021-09-01-preview", + "type": "Microsoft.Insights/dataCollectionRules", + "location": "{{location}}", + "properties": { + "dataCollectionEndpointId": "{{dataCollectionEndpointId}}", + "streamDeclarations": { + "Custom-SecurityScorecardRatingsHistory_CL": { + "columns": [ + { + "name": "date", + "type": "datetime" + }, + { + "name": "score", + "type": "long" + }, + { + "name": "company_domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + } + ] + } + }, + "destinations": { + "logAnalytics": [ + { + "workspaceResourceId": "{{workspaceResourceId}}", + "name": "clv2ws1" + } + ] + }, + "dataFlows": [ + { + "streams": [ + "Custom-SecurityScorecardRatingsHistory_CL" + ], + "destinations": [ + "clv2ws1" + ], + "transformKql": "source | extend TimeGenerated = ['date'], score_date = ['date'], domain = company_domain | project-away ['date'], company_domain", + "outputStream": "Custom-SecurityScorecardRatingsHistory_CL" + } + ] + } +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json new file mode 100644 index 00000000000..71a9f9497dc --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json @@ -0,0 +1,114 @@ +{ + "name": "SecurityScorecardRatingsCCPDefinition", + "apiVersion": "2022-09-01-preview", + "type": "Microsoft.SecurityInsights/dataConnectorDefinitions", + "location": "{{location}}", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "SecurityScorecardRatingsCCPDefinition", + "title": "SecurityScorecard Ratings (Codeless)", + "publisher": "SecurityScorecard", + "descriptionMarkdown": "The SecurityScorecard Ratings (Codeless) connector ingests overall company score history into Microsoft Sentinel using the Codeless Connector Framework. Raw daily score rows land in `SecurityScorecardRatingsHistory_CL`; query via the `SecurityScorecardRatings` parser for day-over-day deltas matching the legacy Function App schema.", + "graphQueriesTableName": "SecurityScorecardRatingsHistory_CL", + "graphQueries": [ + { + "metricName": "Total Ratings history rows received", + "legend": "SecurityScorecard ratings history", + "baseQuery": "{{graphQueriesTableName}}" + } + ], + "sampleQueries": [ + { + "description": "Day-over-day rating change (parser)", + "query": "SecurityScorecardRatings\n | sort by TimeGenerated desc" + }, + { + "description": "Raw ratings history", + "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "{{graphQueriesTableName}}", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ], + "customs": [ + { + "name": "SecurityScorecard API token", + "description": "A SecurityScorecard API token is required." + } + ] + }, + "instructionSteps": [ + { + "title": "STEP 1 - Create a SecurityScorecard API token", + "description": "As an administrator in SecurityScorecard, navigate to My Settings then Users, create a bot user with Read Only permission, and generate the API token." + }, + { + "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", + "description": "Enter the base URL, API token, and one or more portfolio IDs (comma-separated). At least one portfolio ID is required — the connector fetches all portfolios and ingests only those matching the provided IDs.", + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio IDs (comma-separated)", + "placeholder": "comma-separated, no spaces: portfolio-id-1,portfolio-id-2", + "type": "text", + "name": "PortfolioIds" + } + }, + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "connect", + "name": "connect" + } + } + ] + } + ] + } + } +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json new file mode 100644 index 00000000000..36be1dec061 --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json @@ -0,0 +1,119 @@ +[ + { + "name": "SecurityScorecardRatingsPoller", + "apiVersion": "2024-09-01", + "type": "Microsoft.SecurityInsights/dataConnectors", + "location": "{{location}}", + "kind": "RestApiPoller", + "properties": { + "connectorDefinitionName": "SecurityScorecardRatingsCCPDefinition", + "dataType": "SecurityScorecardRatingsHistory_CL", + "dcrConfig": { + "streamName": "Custom-SecurityScorecardRatingsHistory_CL", + "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", + "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" + }, + "auth": { + "type": "APIKey", + "ApiKey": "{{ApiToken}}", + "ApiKeyName": "Authorization", + "ApiKeyIdentifier": "Token" + }, + "request": { + "apiEndpoint": "{{BaseUrl}}/portfolios", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + }, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "portfolioCompanies", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + } + ] + }, + "stepCollectorConfigs": { + "portfolioCompanies": { + "shouldJoinNestedData": false, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "ratingsHistory", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain']), industry = tostring(res['industry'])" + } + ] + }, + "request": { + "apiEndpoint": "{{BaseUrl}}/portfolios/$portfolio_id$/companies", + "httpMethod": "GET", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + }, + "ratingsHistory": { + "shouldJoinNestedData": true, + "request": { + "apiEndpoint": "{{BaseUrl}}/companies/$company_domain$/history/score", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "from": "{_QueryWindowStartTime}", + "to": "{_QueryWindowEndTime}", + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + } + } + } + } +] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_tables.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_tables.json new file mode 100644 index 00000000000..f3430c85ac0 --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_tables.json @@ -0,0 +1,41 @@ +{ + "name": "SecurityScorecardRatingsHistory_CL", + "apiVersion": "2022-10-01", + "type": "Microsoft.OperationalInsights/workspaces/tables", + "location": "{{location}}", + "properties": { + "schema": { + "name": "SecurityScorecardRatingsHistory_CL", + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "score_date", + "type": "datetime" + }, + { + "name": "score", + "type": "long" + }, + { + "name": "domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + } + ] + } + } +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/azuredeploy_SecurityScorecardRatings_poller_connector.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/azuredeploy_SecurityScorecardRatings_poller_connector.json new file mode 100644 index 00000000000..7d4e6488240 --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/azuredeploy_SecurityScorecardRatings_poller_connector.json @@ -0,0 +1,582 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "location": { + "defaultValue": "[resourceGroup().location]", + "minLength": 1, + "type": "string", + "metadata": { + "description": "Not used, but needed to pass arm-ttk test `Location-Should-Not-Be-Hardcoded`. We instead use `workspace-location` derived from the LA workspace." + } + }, + "workspace": { + "defaultValue": "", + "type": "string", + "metadata": { + "description": "Workspace name for Log Analytics where Microsoft Sentinel is set up" + } + } + }, + "variables": { + "_solutionName": "SecurityScorecard Cybersecurity Ratings", + "_solutionVersion": "3.0.1", + "_solutionAuthor": "SecurityScorecard", + "_solutionPublisher": "SecurityScorecard", + "_solutionTier": "Partner", + "solutionId": "azuresentinel.azure-sentinel-solution-securityscorecard", + "_solutionId": "[variables('solutionId')]", + "dataConnectorVersionConnections": "3.0.1", + "_dataConnectorContentIdConnectorDefinition": "SecurityScorecardRatingsCCPDefinition", + "dataConnectorTemplateNameConnectorDefinition": "[format('contentTemplate-{0}', uniquestring(variables('_dataConnectorContentIdConnectorDefinition')))]", + "_dataConnectorContentIdConnections": "SecurityScorecardRatingsCCPDefinitionConnections", + "dataConnectorTemplateNameConnections": "[format('{0}-dc-{1}', parameters('workspace'), uniquestring(variables('_dataConnectorContentIdConnections')))]", + "_solutioncontentProductId": "[concat(take(variables('_solutionId'),50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]" + }, + "resources": [ + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/{1}-v{2}', parameters('workspace'), variables('dataConnectorTemplateNameConnectorDefinition'), variables('dataConnectorVersionConnections'))]", + "location": "[parameters('location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "displayName": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "contentKind": "DataConnector", + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition'),'-', variables('dataConnectorVersionConnections'))))]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "version": "[variables('dataConnectorVersionConnections')]", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorVersionConnections')]", + "parameters": {}, + "variables": {}, + "resources": [ + { + "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]", + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorVersionConnections')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "[variables('_solutionAuthor')]" + }, + "support": { + "name": "[variables('_solutionAuthor')]", + "tier": "[variables('_solutionTier')]" + }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorVersionConnections')]", + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "kind": "ResourcesDataConnector" + } + ] + } + } + }, + { + "type": "Microsoft.Insights/dataCollectionRules", + "apiVersion": "2021-09-01-preview", + "name": "SecurityScorecardRatingsDCR", + "location": "[parameters('location')]", + "properties": { + "dataCollectionEndpointId": "[format('{0}/providers/Microsoft.Insights/dataCollectionEndpoints/{1}', resourceGroup().id, parameters('workspace'))]", + "streamDeclarations": { + "Custom-SecurityScorecardRatingsHistory_CL": { + "columns": [ + { + "name": "date", + "type": "datetime" + }, + { + "name": "score", + "type": "long" + }, + { + "name": "company_domain", + "type": "string" + } + ] + } + }, + "destinations": { + "logAnalytics": [ + { + "workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace'))]", + "name": "clv2ws1" + } + ] + }, + "dataFlows": [ + { + "streams": [ + "Custom-SecurityScorecardRatingsHistory_CL" + ], + "destinations": [ + "clv2ws1" + ], + "outputStream": "Custom-SecurityScorecardRatingsHistory_CL", + "transformKql": "source | extend TimeGenerated = ['date'], score_date = ['date'], domain = company_domain | project-away ['date'], company_domain" + } + ] + } + }, + { + "name": "SecurityScorecardRatingsHistory_CL", + "apiVersion": "2022-10-01", + "type": "Microsoft.OperationalInsights/workspaces/tables", + "location": "[parameters('location')]", + "kind": null, + "properties": { + "schema": { + "name": "SecurityScorecardRatingsHistory_CL", + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "score_date", + "type": "datetime" + }, + { + "name": "score", + "type": "long" + }, + { + "name": "domain", + "type": "string" + } + ] + } + } + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions", + "apiVersion": "2022-09-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", + "location": "[parameters('location')]", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "title": "SecurityScorecard Ratings (Codeless)", + "publisher": "[variables('_solutionPublisher')]", + "descriptionMarkdown": "Ingest SecurityScorecard overall score history into Microsoft Sentinel via CCF. Raw rows land in `SecurityScorecardRatingsHistory_CL`; query with the `SecurityScorecardRatings` parser.", + "graphQueriesTableName": "SecurityScorecardRatingsHistory_CL", + "graphQueries": [ + { + "metricName": "Total Ratings history rows received", + "legend": "SecurityScorecard ratings history", + "baseQuery": "{{graphQueriesTableName}}" + } + ], + "sampleQueries": [ + { + "description": "Day-over-day rating change (parser)", + "query": "SecurityScorecardRatings\n | sort by TimeGenerated desc" + }, + { + "description": "Raw ratings history", + "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "SecurityScorecardRatingsHistory_CL", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ], + "customs": [ + { + "name": "SecurityScorecard API token", + "description": "A SecurityScorecard API token is required." + } + ] + }, + "instructionSteps": [ + { + "title": "STEP 1 - Create a SecurityScorecard API token", + "description": "As an administrator, create a bot user with Read Only permission and generate the API token." + }, + { + "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", + "description": "Enter the base URL, API token, and portfolio ID below.", + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio IDs (comma-separated)", + "placeholder": "e.g. portfolio-id-1, portfolio-id-2", + "type": "text", + "name": "PortfolioIds" + } + }, + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "connect", + "name": "connect" + } + } + ] + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "apiVersion": "2022-01-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]", + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorVersionConnections')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "[variables('_solutionAuthor')]" + }, + "support": { + "name": "[variables('_solutionAuthor')]", + "tier": "[variables('_solutionTier')]" + }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorVersionConnections')]", + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "kind": "ResourcesDataConnector" + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/{1}{2}', parameters('workspace'), variables('dataConnectorTemplateNameConnections'), variables('dataConnectorVersionConnections'))]", + "location": "[parameters('location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "displayName": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "contentKind": "ResourcesDataConnector", + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections'),'-', variables('dataConnectorVersionConnections'))))]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "version": "[variables('dataConnectorVersionConnections')]", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorVersionConnections')]", + "parameters": { + "BaseUrl": { + "defaultValue": "https://api.securityscorecard.io", + "type": "string", + "minLength": 1 + }, + "ApiToken": { + "defaultValue": "-NA-", + "type": "securestring", + "minLength": 1 + }, + "PortfolioIds": { + "defaultValue": "-NA-", + "type": "string", + "minLength": 1 + }, + "connectorDefinitionName": { + "defaultValue": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "type": "string", + "minLength": 1 + }, + "workspace": { + "defaultValue": "[parameters('workspace')]", + "type": "string" + }, + "dcrConfig": { + "defaultValue": { + "dataCollectionEndpoint": "data collection Endpoint", + "dataCollectionRuleImmutableId": "data collection rule immutableId" + }, + "type": "object" + } + }, + "variables": { + "_dataConnectorContentIdConnections": "[variables('_dataConnectorContentIdConnections')]" + }, + "resources": [ + { + "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnections'))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections'))]", + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "kind": "ResourcesDataConnector", + "version": "[variables('dataConnectorVersionConnections')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "[variables('_solutionAuthor')]" + }, + "support": { + "name": "[variables('_solutionAuthor')]", + "tier": "[variables('_solutionTier')]" + } + } + }, + { + "name": "[format('{0}/Microsoft.SecurityInsights/SecurityScorecardRatingsPoller', parameters('workspace'))]", + "apiVersion": "2024-09-01", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", + "location": "[parameters('location')]", + "kind": "RestApiPoller", + "properties": { + "connectorDefinitionName": "[variables('_dataConnectorContentIdConnectorDefinition')]", + "dataType": "SecurityScorecardRatingsHistory_CL", + "dcrConfig": { + "streamName": "Custom-SecurityScorecardRatingsHistory_CL", + "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", + "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" + }, + "auth": { + "type": "APIKey", + "ApiKey": "[[parameters('ApiToken')]", + "ApiKeyName": "Authorization", + "ApiKeyIdentifier": "Token" + }, + "request": { + "apiEndpoint": "[[format('{0}/portfolios', parameters('BaseUrl'))]", + "httpMethod": "GET", + "queryWindowInMin": 1440, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQps": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + }, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "portfolioCompanies", + "stepPlaceholdersParsingKql": "[[concat('let userInput = ''', parameters('PortfolioIds'), '''; let allowedIds = split(userInput, '',''); source | project res = parse_json(data) | extend p_id = tostring(res[''id'']) | where userInput != '''' and p_id in (allowedIds) | project portfolio_id = p_id')]" + } + ] + }, + "stepCollectorConfigs": { + "portfolioCompanies": { + "shouldJoinNestedData": false, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "ratingsHistory", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain'])" + } + ] + }, + "request": { + "apiEndpoint": "[[format('{0}/portfolios/$portfolio_id$/companies', parameters('BaseUrl'))]", + "httpMethod": "GET", + "rateLimitQps": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + }, + "ratingsHistory": { + "shouldJoinNestedData": true, + "request": { + "apiEndpoint": "[[format('{0}/companies/$company_domain$/history/score', parameters('BaseUrl'))]", + "httpMethod": "GET", + "queryWindowInMin": 1440, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQps": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "from": "{_QueryWindowStartTime}", + "to": "{_QueryWindowEndTime}", + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + } + } + } + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages", + "apiVersion": "2023-04-01-preview", + "name": "[format('{0}/Microsoft.SecurityInsights/{1}', parameters('workspace'), variables('_solutionId'))]", + "location": "[parameters('location')]", + "properties": { + "version": "[variables('_solutionVersion')]", + "kind": "Solution", + "contentSchemaVersion": "3.0.0", + "displayName": "[variables('_solutionName')]", + "publisherDisplayName": "[variables('_solutionPublisher')]", + "descriptionHtml": "SecurityScorecard Cybersecurity Ratings \u2014 Ratings (Codeless) connector", + "contentKind": "Solution", + "contentProductId": "[variables('_solutioncontentProductId')]", + "id": "[variables('_solutioncontentProductId')]", + "contentId": "[variables('_solutionId')]", + "parentId": "[variables('_solutionId')]", + "source": { + "kind": "Solution", + "name": "SecurityScorecard Cybersecurity Ratings", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "[variables('_solutionAuthor')]" + }, + "support": { + "name": "[variables('_solutionAuthor')]", + "tier": "[variables('_solutionTier')]" + }, + "dependencies": { + "operator": "AND", + "criteria": [ + { + "kind": "DataConnector", + "contentId": "[variables('_dataConnectorContentIdConnections')]", + "version": "[variables('dataConnectorVersionConnections')]" + } + ] + }, + "firstPublishDate": "2022-10-01", + "providers": [ + "SecurityScorecard" + ], + "categories": { + "domains": [ + "Security", + "Security - Network", + "Security - Vulnerability Management" + ] + } + } + } + ], + "outputs": {} +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data/Solution_SecurityScorecard.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data/Solution_SecurityScorecard.json index dcabd081f9e..e407239357c 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data/Solution_SecurityScorecard.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data/Solution_SecurityScorecard.json @@ -1,19 +1,27 @@ { - "Name": "SecurityScorecard Cybersecurity Ratings", - "Author": "SecurityScorecard - integrations@securityscorecard.io", - "Logo": "", - "Description": "This package includes three data connectors and an associated workbook for the SecurityScorecard offering within Microsoft Sentinel. These connectors are able to import 11 company scores from SecurityScorecard (overall score and 10 factor scores) as well as new issue events.", - "Workbooks": [ - "Workbooks/SecurityScorecardWorkbook.json" - ], - "Data Connectors": [ - "Data Connectors/SecurityScorecardRatings/SecurityScorecardRatings_API_FunctionApp.json", - "Data Connectors/SecurityScorecardFactor/SecurityScorecardFactor_API_FunctionApp.json", - "Data Connectors/SecurityScorecardIssue/SecurityScorecardIssue_API_FunctionApp.json" - ], - "BasePath": "C:\\Azure-Sentinel\\Solutions\\SecurityScorecard Cybersecurity Ratings", - "Version": "2.0.0", - "Metadata": "SolutionMetadata.json", - "TemplateSpec": true, - "Is1PConnector": false -} \ No newline at end of file + "Name": "SecurityScorecard Cybersecurity Ratings", + "Author": "SecurityScorecard - integrations@securityscorecard.io", + "Logo": "", + "Description": "This package includes three Codeless Connector Framework (CCF) data connectors, three KQL parsers, and an associated workbook for the SecurityScorecard offering within Microsoft Sentinel. The CCF connectors ingest 11 company scores from SecurityScorecard (overall score and 10 factor scores) as well as new issue events without requiring an Azure Function deployment. The legacy Function App connectors are retained but marked Deprecated.", + "Workbooks": [ + "Workbooks/SecurityScorecardWorkbook.json" + ], + "Data Connectors": [ + "Data Connectors/SecurityScorecardRatings/SecurityScorecardRatings_API_FunctionApp.json", + "Data Connectors/SecurityScorecardFactor/SecurityScorecardFactor_API_FunctionApp.json", + "Data Connectors/SecurityScorecardIssue/SecurityScorecardIssue_API_FunctionApp.json", + "Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json", + "Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json", + "Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json" + ], + "Parsers": [ + "Parsers/SecurityScorecardIssue.yaml", + "Parsers/SecurityScorecardRatings.yaml", + "Parsers/SecurityScorecardFactor.yaml" + ], + "BasePath": "C:\\Azure-Sentinel\\Solutions\\SecurityScorecard Cybersecurity Ratings", + "Version": "3.0.0", + "Metadata": "SolutionMetadata.json", + "TemplateSpec": true, + "Is1PConnector": false +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..b41d5d33adeaf50a0d0a9cf4c693ebcf2954f4d5 GIT binary patch literal 27977 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\n\n**Note:** _There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing._\n\nThis package includes three data connectors and an associated workbook for the SecurityScorecard offering within Microsoft Sentinel. These connectors are able to import 11 company scores from SecurityScorecard (overall score and 10 factor scores) as well as new issue events.\n\n**Data Connectors:** 3, **Workbooks:** 1\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)", + "description": "\n\n**Note:** Please refer to the following before installing the solution: \n\n• Review the solution [Release Notes](https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/SecurityScorecard%20Cybersecurity%20Ratings/ReleaseNotes.md)\n\n • There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing.\n\nThis package includes three Codeless Connector Framework (CCF) data connectors, three KQL parsers, and an associated workbook for the SecurityScorecard offering within Microsoft Sentinel. The CCF connectors ingest 11 company scores from SecurityScorecard (overall score and 10 factor scores) as well as new issue events without requiring an Azure Function deployment. The legacy Function App connectors are retained but marked Deprecated.\n\n**Data Connectors:** 6, **Parsers:** 3, **Workbooks:** 1\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)", "subscription": { "resourceProviders": [ "Microsoft.OperationsManagement/solutions", @@ -60,25 +60,66 @@ "name": "dataconnectors1-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "This Solution installs the data connector for SecurityScorecard Cybersecurity Ratings. You can get SecurityScorecard Cybersecurity Ratings custom log data in your Microsoft Sentinel workspace. Configure and enable this data connector in the Data Connector gallery after this Solution deploys. This data connector creates custom log table(s) SecurityScorecardRatings_CL in your Microsoft Sentinel / Azure Log Analytics workspace." + "text": "This Solution installs the data connector for SecurityScorecard Cybersecurity Ratings. You can get SecurityScorecard Cybersecurity Ratings custom log data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." } }, { "name": "dataconnectors2-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "This Solution installs the data connector for SecurityScorecard Cybersecurity Ratings. You can get SecurityScorecard Cybersecurity Ratings custom log data in your Microsoft Sentinel workspace. Configure and enable this data connector in the Data Connector gallery after this Solution deploys. This data connector creates custom log table(s) SecurityScorecardFactor_CL in your Microsoft Sentinel / Azure Log Analytics workspace." + "text": "This Solution installs the data connector for SecurityScorecard Cybersecurity Ratings. You can get SecurityScorecard Cybersecurity Ratings custom log data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." } }, { "name": "dataconnectors3-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "This Solution installs the data connector for SecurityScorecard Cybersecurity Ratings. You can get SecurityScorecard Cybersecurity Ratings custom log data in your Microsoft Sentinel workspace. Configure and enable this data connector in the Data Connector gallery after this Solution deploys. This data connector creates custom log table(s) SecurityScorecardIssues_CL in your Microsoft Sentinel / Azure Log Analytics workspace." + "text": "This Solution installs the data connector for SecurityScorecard Cybersecurity Ratings. You can get SecurityScorecard Cybersecurity Ratings custom log data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." } }, { - "name": "dataconnectors-link2", + "name": "dataconnectors4-text", + "type": "Microsoft.Common.TextBlock", + "options": { + "text": "This Solution installs the data connector for SecurityScorecard Issues (Codeless). You can get SecurityScorecard Issues (Codeless) data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." + } + }, + { + "name": "dataconnectors-link4", + "type": "Microsoft.Common.TextBlock", + "options": { + "link": { + "label": "Learn more about connecting data sources", + "uri": "https://docs.microsoft.com/azure/sentinel/connect-data-sources" + } + } + }, + { + "name": "dataconnectors5-text", + "type": "Microsoft.Common.TextBlock", + "options": { + "text": "This Solution installs the data connector for SecurityScorecard Ratings (Codeless). You can get SecurityScorecard Ratings (Codeless) data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." + } + }, + { + "name": "dataconnectors-link5", + "type": "Microsoft.Common.TextBlock", + "options": { + "link": { + "label": "Learn more about connecting data sources", + "uri": "https://docs.microsoft.com/azure/sentinel/connect-data-sources" + } + } + }, + { + "name": "dataconnectors6-text", + "type": "Microsoft.Common.TextBlock", + "options": { + "text": "This Solution installs the data connector for SecurityScorecard Factors (Codeless). You can get SecurityScorecard Factors (Codeless) data in your Microsoft Sentinel workspace. After installing the solution, configure and enable this data connector by following guidance in Manage solution view." + } + }, + { + "name": "dataconnectors-link6", "type": "Microsoft.Common.TextBlock", "options": { "link": { @@ -102,7 +143,7 @@ "name": "workbooks-text", "type": "Microsoft.Common.TextBlock", "options": { - "text": "This Microsoft Sentinel Solution installs workbooks. Workbooks provide a flexible canvas for data monitoring, analysis, and the creation of rich visual reports within the Azure portal. They allow you to tap into one or many data sources from Microsoft Sentinel and combine them into unified interactive experiences." + "text": "This solution installs workbook(s) to help you gain insights into the telemetry collected in Microsoft Sentinel. After installing the solution, start using the workbook in Manage solution view." } }, { @@ -114,6 +155,20 @@ "uri": "https://docs.microsoft.com/azure/sentinel/tutorial-monitor-your-data" } } + }, + { + "name": "workbook1", + "type": "Microsoft.Common.Section", + "label": "SecurityScorecard", + "elements": [ + { + "name": "workbook1-text", + "type": "Microsoft.Common.TextBlock", + "options": { + "text": "This Workbook provides immediate insight into the data coming from SecurityScorecard's data connectors within Microsoft Sentinel: SecurityScorecard Cybersecurity Ratings, SecurityScorecard Cybersecurity Ratings - Factors, and SecurityScorecard Cybersecurity Ratings - Issues." + } + } + ] } ] } diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json index c31c9d34a9a..49cbc27393b 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json @@ -35,73 +35,114 @@ "metadata": { "description": "Name for the workbook" } + }, + "resourceGroupName": { + "type": "string", + "defaultValue": "[resourceGroup().name]", + "metadata": { + "description": "resource group name where Microsoft Sentinel is setup" + } + }, + "subscription": { + "type": "string", + "defaultValue": "[last(split(subscription().id, '/'))]", + "metadata": { + "description": "subscription id where Microsoft Sentinel is setup" + } } }, "variables": { - "solutionId": "SecurityScorecard.SecurityScorecard", - "_solutionId": "[variables('solutionId')]", "email": "integrations@securityscorecard.io", "_email": "[variables('email')]", + "_solutionName": "SecurityScorecard Cybersecurity Ratings", + "_solutionVersion": "3.0.0", + "solutionId": "securityscorecard.securityscorecard", + "_solutionId": "[variables('solutionId')]", "workbookVersion1": "1.0.0", "workbookContentId1": "SecurityScorecardWorkbook", "workbookId1": "[resourceId('Microsoft.Insights/workbooks', variables('workbookContentId1'))]", - "workbookTemplateSpecName1": "[concat(parameters('workspace'),'-wb-',uniquestring(variables('_workbookContentId1')))]", + "workbookTemplateSpecName1": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-wb-',uniquestring(variables('_workbookContentId1'))))]", "_workbookContentId1": "[variables('workbookContentId1')]", "workspaceResourceId": "[resourceId('microsoft.OperationalInsights/Workspaces', parameters('workspace'))]", + "_workbookcontentProductId1": "[concat(take(variables('_solutionId'),50),'-','wb','-', uniqueString(concat(variables('_solutionId'),'-','Workbook','-',variables('_workbookContentId1'),'-', variables('workbookVersion1'))))]", "uiConfigId1": "SecurityScorecardRatingsAzureFunctions", "_uiConfigId1": "[variables('uiConfigId1')]", "dataConnectorContentId1": "SecurityScorecardRatingsAzureFunctions", "_dataConnectorContentId1": "[variables('dataConnectorContentId1')]", "dataConnectorId1": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", "_dataConnectorId1": "[variables('dataConnectorId1')]", - "dataConnectorTemplateSpecName1": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentId1')))]", + "dataConnectorTemplateSpecName1": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentId1'))))]", "dataConnectorVersion1": "1.0.0", + "_dataConnectorcontentProductId1": "[concat(take(variables('_solutionId'),50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentId1'),'-', variables('dataConnectorVersion1'))))]", "uiConfigId2": "SecurityScorecardFactorAzureFunctions", "_uiConfigId2": "[variables('uiConfigId2')]", "dataConnectorContentId2": "SecurityScorecardFactorAzureFunctions", "_dataConnectorContentId2": "[variables('dataConnectorContentId2')]", "dataConnectorId2": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId2'))]", "_dataConnectorId2": "[variables('dataConnectorId2')]", - "dataConnectorTemplateSpecName2": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentId2')))]", + "dataConnectorTemplateSpecName2": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentId2'))))]", "dataConnectorVersion2": "1.0.0", + "_dataConnectorcontentProductId2": "[concat(take(variables('_solutionId'),50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentId2'),'-', variables('dataConnectorVersion2'))))]", "uiConfigId3": "SecurityScorecardIssueAzureFunctions", "_uiConfigId3": "[variables('uiConfigId3')]", "dataConnectorContentId3": "SecurityScorecardIssueAzureFunctions", "_dataConnectorContentId3": "[variables('dataConnectorContentId3')]", "dataConnectorId3": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId3'))]", "_dataConnectorId3": "[variables('dataConnectorId3')]", - "dataConnectorTemplateSpecName3": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentId3')))]", - "dataConnectorVersion3": "1.0.0" + "dataConnectorTemplateSpecName3": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentId3'))))]", + "dataConnectorVersion3": "1.0.0", + "_dataConnectorcontentProductId3": "[concat(take(variables('_solutionId'),50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentId3'),'-', variables('dataConnectorVersion3'))))]", + "dataConnectorCCPVersion": "3.0.0", + "_dataConnectorContentIdConnectorDefinition4": "SecurityScorecardIssueCCPDefinition", + "dataConnectorTemplateNameConnectorDefinition4": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentIdConnectorDefinition4')))]", + "_dataConnectorContentIdConnections4": "SecurityScorecardIssueCCPDefinitionConnections", + "dataConnectorTemplateNameConnections4": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentIdConnections4')))]", + "dataCollectionEndpointId4": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]", + "blanks": "[replace('b', 'b', '')]", + "_dataConnectorContentIdConnectorDefinition5": "SecurityScorecardRatingsCCPDefinition", + "dataConnectorTemplateNameConnectorDefinition5": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentIdConnectorDefinition5')))]", + "_dataConnectorContentIdConnections5": "SecurityScorecardRatingsCCPDefinitionConnections", + "dataConnectorTemplateNameConnections5": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentIdConnections5')))]", + "dataCollectionEndpointId5": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]", + "_dataConnectorContentIdConnectorDefinition6": "SecurityScorecardFactorCCPDefinition", + "dataConnectorTemplateNameConnectorDefinition6": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentIdConnectorDefinition6')))]", + "_dataConnectorContentIdConnections6": "SecurityScorecardFactorCCPDefinitionConnections", + "dataConnectorTemplateNameConnections6": "[concat(parameters('workspace'),'-dc-',uniquestring(variables('_dataConnectorContentIdConnections6')))]", + "dataCollectionEndpointId6": "[concat('/subscriptions/',parameters('subscription'),'/resourceGroups/',parameters('resourceGroupName'),'/providers/Microsoft.Insights/dataCollectionEndpoints/',parameters('workspace'))]", + "parserObject1": { + "_parserName1": "[concat(parameters('workspace'),'/','SecurityScorecardIssue')]", + "_parserId1": "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches', parameters('workspace'), 'SecurityScorecardIssue')]", + "parserTemplateSpecName1": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-pr-',uniquestring('SecurityScorecardIssue-Parser')))]", + "parserVersion1": "2.0.2", + "parserContentId1": "SecurityScorecardIssue-Parser" + }, + "parserObject2": { + "_parserName2": "[concat(parameters('workspace'),'/','SecurityScorecardRatings')]", + "_parserId2": "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches', parameters('workspace'), 'SecurityScorecardRatings')]", + "parserTemplateSpecName2": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-pr-',uniquestring('SecurityScorecardRatings-Parser')))]", + "parserVersion2": "2.0.2", + "parserContentId2": "SecurityScorecardRatings-Parser" + }, + "parserObject3": { + "_parserName3": "[concat(parameters('workspace'),'/','SecurityScorecardFactor')]", + "_parserId3": "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches', parameters('workspace'), 'SecurityScorecardFactor')]", + "parserTemplateSpecName3": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat(parameters('workspace'),'-pr-',uniquestring('SecurityScorecardFactor-Parser')))]", + "parserVersion3": "2.0.2", + "parserContentId3": "SecurityScorecardFactor-Parser" + }, + "_solutioncontentProductId": "[concat(take(variables('_solutionId'),50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]" }, "resources": [ { - "type": "Microsoft.Resources/templateSpecs", - "apiVersion": "2021-05-01", + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", "name": "[variables('workbookTemplateSpecName1')]", "location": "[parameters('workspace-location')]", - "tags": { - "hidden-sentinelWorkspaceId": "[variables('workspaceResourceId')]", - "hidden-sentinelContentType": "Workbook" - }, - "properties": { - "description": "SecurityScorecard Cybersecurity Ratings Workbook with template", - "displayName": "SecurityScorecard Cybersecurity Ratings workbook template" - } - }, - { - "type": "Microsoft.Resources/templateSpecs/versions", - "apiVersion": "2021-05-01", - "name": "[concat(variables('workbookTemplateSpecName1'),'/',variables('workbookVersion1'))]", - "location": "[parameters('workspace-location')]", - "tags": { - "hidden-sentinelWorkspaceId": "[variables('workspaceResourceId')]", - "hidden-sentinelContentType": "Workbook" - }, "dependsOn": [ - "[resourceId('Microsoft.Resources/templateSpecs', variables('workbookTemplateSpecName1'))]" + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "SecurityScorecardWorkbookWorkbook Workbook with template version 2.0.0", + "description": "SecurityScorecardWorkbook Workbook with template version 3.0.0", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('workbookVersion1')]", @@ -115,11 +156,11 @@ "kind": "shared", "apiVersion": "2021-08-01", "metadata": { - "description": "This Workbook provides immediate insight into the data coming from SecurityScorecard’s three Sentinel data connectors: SecurityScorecard Cybersecurity Ratings, SecurityScorecard Cybersecurity Ratings - Factors, and SecurityScorecard Cybersecurity Ratings - Issues." + "description": "This Workbook provides immediate insight into the data coming from SecurityScorecard's data connectors within Microsoft Sentinel: SecurityScorecard Cybersecurity Ratings, SecurityScorecard Cybersecurity Ratings - Factors, and SecurityScorecard Cybersecurity Ratings - Issues." }, "properties": { "displayName": "[parameters('workbook1-name')]", - "serializedData": "{\"version\":\"Notebook/1.0\",\"items\":[{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":11,\"content\":{\"version\":\"LinkItem/1.0\",\"style\":\"tabs\",\"links\":[{\"id\":\"06ba5a8f-fe93-4285-9bb4-15fd5c96befe\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"My Scorecard\",\"subTarget\":\"My Scorecard\",\"style\":\"link\"},{\"id\":\"ce6e0294-f130-4450-9005-8aa9924e6b86\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Vendor Scores\",\"subTarget\":\"Vendor Scores\",\"style\":\"link\"},{\"id\":\"26959e65-a53f-4468-8d14-d0b43d1b899d\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Active Issues\",\"subTarget\":\"Active Issues\",\"style\":\"link\"},{\"id\":\"97757d2a-eba1-4ee9-909b-47e9653e1407\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Issues per Vendor (CVE)\",\"subTarget\":\"Issues per Vendor (CVE)\",\"style\":\"link\"},{\"id\":\"73e85106-4dde-4c92-8479-c8720d8604de\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Issues per Vendor (Ransomware)\",\"subTarget\":\"Issues per Vendor (Ransomware)\",\"style\":\"link\"},{\"id\":\"c915da0c-4bfc-4595-8e1a-700a602f3412\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Spotlight\",\"subTarget\":\"Spotlight\",\"style\":\"link\"}]},\"name\":\"Tabs\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# My Scorecard\",\"style\":\"{setTab}\"},\"name\":\"text - 1\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"309cabc5-5a32-4c1a-b905-cb578ee0e667\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ac778abc-2101-4e66-92da-d11d4b4a8629\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":1,\"description\":\"Provide your company name\",\"isRequired\":true,\"query\":\"SecurityScorecardRatings_CL\\r\\n| where portfolioName_s == \\\"NA\\\"\\r\\n| distinct subject_s\\r\\n| limit 1\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"value\":\"cisco.com\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 9\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 3\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings_CL\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(ingestion_time(),*)\\r\\n| extend gradeToday = case((scoreToday_d>=90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project gradeToday, scoreToday_d, Details\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Grade\"}]}},\"leftContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Grade\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings_CL\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(ingestion_time(), *) by subject_s \\r\\n| extend Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project scoreToday_d, subject_s, Details\\r\\n| limit 1\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Score\"}]}},\"leftContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Score\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings_CL\\r\\n| where body_s == 'OverAll'and subject_s == '{Domain}'\\r\\n| project-rename Date = dateToday_s , Score = scoreToday_d \\r\\n| summarize arg_max(ingestion_time(), *) by Date \\r\\n| project Date=format_datetime(todatetime(Date), 'yyyy-MM-dd'), Score\\r\\n| sort by Date asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Score Trend\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"linechart\",\"chartSettings\":{\"showMetrics\":false,\"customThresholdLine\":\"{Score}\",\"customThresholdLineStyle\":4,\"showDataPoints\":true,\"ySettings\":{\"numberFormatSettings\":{\"unit\":0,\"options\":{\"style\":\"decimal\",\"useGrouping\":true}},\"max\":100}}},\"customWidth\":\"50\",\"name\":\"Score Trend\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor_CL\\r\\n| where body_s == 'Factor' and subject_s == '{Domain}'\\r\\n| summarize arg_max(ingestion_time(),*) by dateToday_s, factorDescription_s\\r\\n| summarize arg_max(dateToday_s,*) by factorDescription_s\\r\\n| extend gradeToday=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), gradeYesterday=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\") \\r\\n| project Factor_Name_s, factorDescription_s, gradeToday, scoreToday_d, scoreChange_d, gradeYesterday, scoreYesterday_d, dateToday_s \\r\\n| project-rename Description =factorDescription_s, [\\\"Current Grade\\\"] = gradeToday, [\\\"Current Score\\\"] = scoreToday_d, [\\\"Latest Score Change\\\"] = scoreChange_d, [\\\"Last Updated Grade\\\"] = gradeYesterday, [\\\"Last Updated Score\\\"] = scoreYesterday_d, [\\\"Date of Current Score\\\"] = dateToday_s, Factor = Factor_Name_s \",\"size\":0,\"showAnalytics\":true,\"title\":\"My Scorecard Factors\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Date of Current Score\",\"formatter\":6}],\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"name\":\"My Scorecard Factors\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| summarize [\\\"Issue Count\\\"]= count() by Factor \",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Count by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"barchart\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend issue_name=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5)\\r\\n| summarize count() by severity_value_s, serverity_priority\\r\\n| sort by serverity_priority asc\\r\\n| project-away serverity_priority\\r\\n| render barchart\\r\\n\",\"size\":0,\"title\":\"Issue Types by Severity\",\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"graphSettings\":{\"type\":0,\"topContent\":{\"columnMatch\":\"severity_value_s\",\"formatter\":1},\"centerContent\":{\"columnMatch\":\"adware installation\",\"formatter\":1,\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}},\"chartSettings\":{\"showLegend\":true,\"seriesLabelSettings\":[{\"seriesName\":\"high\",\"label\":\"High\"},{\"seriesName\":\"medium\",\"label\":\"Medium\"},{\"seriesName\":\"low\",\"label\":\"Low\"},{\"seriesName\":\"info\",\"label\":\"Info\"},{\"seriesName\":\"positive\",\"label\":\"Positive\"}],\"customThresholdLine\":\"{issue_name}\",\"customThresholdLineStyle\":0},\"mapSettings\":{\"locInfo\":\"LatLong\",\"sizeSettings\":\"adware installation\",\"sizeAggregation\":\"Sum\",\"legendMetric\":\"adware installation\",\"legendAggregation\":\"Sum\",\"itemColorSettings\":{\"type\":\"heatmap\",\"colorAggregation\":\"Sum\",\"nodeColorField\":\"adware installation\",\"heatmapPalette\":\"greenRed\"}}},\"name\":\"Issue Types by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"My Scorecard\"},\"name\":\"My Scorecard\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Vendor Scores\",\"style\":\"{setTab}\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8ebc23fe-ade3-4318-8635-24bb841f718b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"72d22203-f3dd-4557-9605-5b6ca4a4e6c0\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":1,\"description\":\"Provide your company name\",\"isRequired\":true,\"query\":\"SecurityScorecardRatings_CL\\r\\n| where portfolioName_s == \\\"NA\\\"\\r\\n| distinct subject_s\\r\\n| limit 1\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"value\":\"cisco.com\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 13\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"624e2391-ad46-416c-9af4-f735c1114b84\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings_CL\\r\\n| where isnotempty(portfolioId_g)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"91c18b81-401d-4b6a-a9ba-e6780c6fee61\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c603e74f-d591-4788-b95b-1370a2b98024\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings_CL\\r\\n| where body_s == \\\"OverAll\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and subject_s != '{Domain}'\\r\\n| summarize arg_max(ingestion_time(), *) by dateToday_s, subject_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, portfolioName_s \\r\\n| extend [\\\"Current Grade\\\"]=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), [\\\"Last Updated Grade\\\"]=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\"), Industry=strcat_array(split(industry_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors')\\r\\n| project subject_s, portfolioName_s, Industry, [\\\"Date of Current Score\\\"] = format_datetime(todatetime(dateToday_s), 'yyyy-MM-dd'), scoreToday_d, [\\\"Current Grade\\\"], scoreYesterday_d, ['Last Updated Grade'], Details \\r\\n| project-rename Company = subject_s , [\\\"Current Score\\\"] = scoreToday_d, [\\\"Last Updated Score\\\"] = scoreYesterday_d \\r\\n| sort by Company asc, portfolioName_s asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Company\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\",\"linkIsContextBlade\":false}}],\"rowLimit\":10000,\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"name\":\"Top Level Grade and Score by Company\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a38a4cff-47df-431d-a31e-e5a7b9739786\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardFactor_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct Factor_Name_s\\r\\n| sort by Factor_Name_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 11\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0fe3d2b0-fcbd-4c3f-80e6-29e39f047743\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Grade\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"A\\\", \\\"label\\\":\\\"A\\\"},\\r\\n { \\\"value\\\":\\\"B\\\", \\\"label\\\":\\\"B\\\"},\\r\\n { \\\"value\\\":\\\"C\\\", \\\"label\\\":\\\"C\\\"},\\r\\n { \\\"value\\\":\\\"D\\\", \\\"label\\\":\\\"D\\\" },\\r\\n { \\\"value\\\":\\\"F\\\", \\\"label\\\":\\\"F\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":86400000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 12\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor_CL\\r\\n| where body_s == \\\"Factor\\\" and subject_s != '{Domain}' and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(ingestion_time(), *) by dateToday_s, subject_s, Factor_Name_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, Factor_Name_s, portfolioName_s\\r\\n| extend [\\\"Current Grade\\\"] = case(scoreToday_d>=90, \\\"A\\\", scoreToday_d>=80 and scoreToday_d<=89, \\\"B\\\", scoreToday_d>=70 and scoreToday_d<=79, \\\"C\\\", scoreToday_d>=60 and scoreToday_d<=69, \\\"D\\\", \\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors') \\r\\n| where ('*' in ({Factor}) or Factor_Name_s in ({Factor})) and [\\\"Current Grade\\\"] in ({Grade})\\r\\n| project subject_s, portfolioName_s, Factor_Name_s, factorDescription_s , scoreToday_d, [\\\"Current Grade\\\"], Details \\r\\n| project-rename Company = subject_s, Factor = Factor_Name_s, Description = factorDescription_s, [\\\"Current Score\\\"] = scoreToday_d\\r\\n| sort by Factor asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000}},\"name\":\"Top Level Grade and Score by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"f952c797-c056-446e-8ce1-4495673c337d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"IssueType\",\"label\":\"Issue Type\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend issue_type = strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") \\r\\n| distinct issue_type\\r\\n| sort by issue_type asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 9\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73302a85-fb1b-43cf-8c7f-dfbebd6eb167\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and subject_s != '{Domain}' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(issueName_s), src = arg_max(date_s,Factor_s) by issueType_s, subject_s, severity_value_s\\r\\n| extend [\\\"Issue Type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") , Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| where ('*' in ({IssueType}) or [\\\"Issue Type\\\"] in ({IssueType})) \\r\\n| project subject_s, Severity, [\\\"Issue Type\\\"], [\\\"Findings Count\\\"], [\\\"Issue Count\\\"], Details \\r\\n| order by [\\\"Issue Type\\\"] asc, subject_s asc\\r\\n| project-rename Company=subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true,\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Vendor Scores\"},\"name\":\"Vendor Scores\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Active Issues\",\"style\":\"{setTab}\"},\"name\":\"Active Issues\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"6239b6b6-1b0c-4d82-9599-bcb3155a8869\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"99a0579a-77d5-4693-a099-c1b7dd688c0d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where isnotempty(portfolioId_g)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e6981875-d72c-486f-baea-52e1e762143f\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"95c35610-dd13-45f0-bdf4-dae3008215a7\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| distinct value=Factor_s, lable=factor\\r\\n| sort by lable asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"34f6058c-86eb-45e1-8684-ad1db584019a\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"bd48be36-fe76-4b7d-be98-fc3ac56f6759\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":86400000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 11\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Active Issues will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 11\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and ('*' in ({Severity}) or severity_value_s in ({Severity}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize arg_max(date_s,*), src = arg_max(date_s,Factor_s),[\\\"Findings Count\\\"] = sum(findingsCount_d), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s\\r\\n| join kind=leftouter (SecurityScorecardFactor_CL \\r\\n | distinct Factor_s,factorDescription_s\\r\\n | project Factor_s, factorDescription_s) on Factor_s\\r\\n| extend severity_index=case((severity_value_s == \\\"high\\\"),1,(severity_value_s == \\\"medium\\\"),2,(severity_value_s == \\\"low\\\"),3,(severity_value_s == \\\"info\\\"),4,5), severity_value_s=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"), [\\\"Issue type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s)\\r\\n| sort by severity_index asc, findingsCount_d desc\\r\\n| project [\\\"Issue type\\\"], Factor, severity_value_s, factorDescription_s, [\\\"Findings Count\\\"], Active, Resolved, Details\\r\\n| project-rename Description = factorDescription_s, Severity = severity_value_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Active Issues\",\"timeContextFromParameter\":\"Timer\",\"exportParameterName\":\"activeissues\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"Sevirity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000}},\"name\":\"Active Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Issue Count\\\"] = count(issueType_s) by Factor_s \\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| project Factor, [\\\"Issue Count\\\"] \\r\\n\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Types by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize count() by severity_value_s \\r\\n| extend severity_value_s = case((severity_value_s == 'info'), \\\"Info\\\",(severity_value_s == 'low'), \\\"Low\\\",(severity_value_s == 'medium'), \\\"Medium\\\",(severity_value_s == 'high'), \\\"High\\\", (severity_value_s == 'positive'), \\\"Positive\\\", severity_value_s)\\r\\n| render piechart\",\"size\":3,\"showAnalytics\":true,\"title\":\"Count by Severity\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\"},\"name\":\"Count by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Active Issues\"},\"name\":\"Active Issues\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (CVE)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a30af542-54cd-4a92-ac85-e094c9cc1c43\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a3195f85-f04f-422c-b233-f9bd8a357b8b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"CVE\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"service_vuln_host_high\\\", \\\"label\\\":\\\"Service Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"service_vuln_host_low\\\", \\\"label\\\":\\\"Service Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_high\\\", \\\"label\\\":\\\"Patching Cadence High\\\" },\\r\\n { \\\"value\\\":\\\"patching_cadence_low\\\", \\\"label\\\":\\\"Patching Cadence Low\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_medium\\\", \\\"label\\\":\\\"Patching Cadence Medium\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_high\\\", \\\"label\\\":\\\"Web Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"web_vuln_host_low\\\", \\\"label\\\":\\\"Web Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_medium\\\", \\\"label\\\":\\\"Web Vuln Host Medium\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":86400000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"CVE\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0f2ad534-e343-44c2-a3ff-0d1d2c7916c5\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where isnotempty(portfolioId_g)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"55320f6b-3583-440d-977f-33ceffc07d94\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"070f384d-1ff0-49c9-8f3f-f121e78811a2\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and issueType_s in ({CVE}) and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s\\r\\n| extend CVE=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), severity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\", severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s), Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| sort by CVE asc, severity_priority asc, subject_s asc\\r\\n| project subject_s, CVE, Factor, Severity, ['Findings Count'], [\\\"Issue Count\\\"], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"turquoise\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (CVE)\"},\"name\":\"Issues per Vendor (CVE)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (Ransomware)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c9b54d32-38cd-4b08-8dd6-4be29b019c80\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"168555cd-afbe-457a-81c1-a68663c51823\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Ransomware\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"tls_weal_cipher\\\", \\\"label\\\":\\\"Tls Weal Cipher\\\"},\\r\\n { \\\"value\\\":\\\"exposed_personal_information_info\\\", \\\"label\\\":\\\"Exposed Personal Information Info\\\" },\\r\\n { \\\"value\\\":\\\"outdated_browser\\\", \\\"label\\\":\\\"Outdated Browser\\\"},\\r\\n { \\\"value\\\":\\\"csp_no_policy_v2\\\", \\\"label\\\":\\\"Csp No Policy V2\\\" },\\r\\n { \\\"value\\\":\\\"exposed_personal_information\\\", \\\"label\\\":\\\"Exposed Personal Information\\\"},\\r\\n { \\\"value\\\":\\\"ip_count_means\\\", \\\"label\\\":\\\"Ip Count Means\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"hsts_incorrect_v2\\\", \\\"label\\\":\\\"Hsts Incorrect V2\\\" },\\r\\n { \\\"value\\\":\\\"unsafe_sri_v2\\\", \\\"label\\\":\\\"Unsafe Sri V2\\\"},\\r\\n { \\\"value\\\":\\\"leaked_credentials\\\", \\\"label\\\":\\\"Leaked Credentials\\\"},\\r\\n { \\\"value\\\":\\\"x_frame_options_incorrect_v2\\\", \\\"label\\\":\\\"X Frame Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_xss_protection_incorrect_v2\\\", \\\"label\\\":\\\"X Xss Protection Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_content_type_options_incorrect_v2\\\", \\\"label\\\":\\\"X Content Type Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_no_revocation\\\", \\\"label\\\":\\\"Tlscert No Revocation\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_expired\\\", \\\"label\\\":\\\"Tlscert Expired\\\"},\\r\\n { \\\"value\\\":\\\"outdated_os\\\", \\\"label\\\":\\\"Outdated Os\\\"},\\r\\n { \\\"value\\\":\\\"tls_weak_protocol\\\", \\\"label\\\":\\\"Tls Weak Protocol\\\"},\\r\\n { \\\"value\\\":\\\"domain_missing_https_v2\\\", \\\"label\\\":\\\"Domain Missing Https V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_excessive_expiration\\\", \\\"label\\\":\\\"Tlscert Excessive Expiration\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Ransomware\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"7bf4c309-6e2b-4619-9253-e85808486e75\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where isnotempty(portfolioId_g)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ee929211-b34e-4369-905b-cb4d87bf6364\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8d9dcdcc-8c93-4b47-a2e1-880ffea2a31e\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and issueType_s in ({Ransomware})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d),[\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s \\r\\n| extend Ransomware=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| project subject_s, Ransomware, Severity, ['Findings Count'], ['Issue Count'], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\\r\\n| sort by Ransomware asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"drilldown_url\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"details\"}}],\"rowLimit\":10000}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (Ransomware)\"},\"name\":\"Issues per Vendor (Ransomware)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Spotlight\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73978413-5a37-4814-b4fc-4143999f13ec\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73bc33a2-eb41-4433-9b1d-59930d7ddf3d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings_CL\\r\\n| where isnotempty(portfolioId_g)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ae9eff1e-6b7b-4d64-9516-30ea5bc5fb17\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"d9274665-9d9c-417b-9d3f-03162538cf92\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend label = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"),value = Factor_s\\r\\n| distinct value, label\\r\\n| sort by label asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"485b4de7-9cd5-4e5e-b2d4-da7f921ff61c\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings_CL\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings_CL\\r\\n| where body_s =='OverAll' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(dateToday_s,*) by subject_s\\r\\n| extend Grade = case((scoreToday_d >= 90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\") \\r\\n| project Grade, subject_s, scoreToday_d\\r\\n| project-rename Company = subject_s, Score = scoreToday_d\\r\\n| sort by Score asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Worst Performing Companies\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"40\",\"name\":\"Worst Performing Companies\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssues_CL\\r\\n| where body_s == 'Issue' and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*), [\\\"Company Count\\\"] = dcount(subject_s,4) by issueName_s, severity_value_s, issueType_s, Factor_s\\r\\n| extend serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), severity_value=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s) \\r\\n| extend Issues=trim(@\\\"'\\\",issueName_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| sort by serverity_priority asc, [\\\"Company Count\\\"] desc\\r\\n| project Severity = severity_value, Issues, Factor = Factor, [\\\"Company Count\\\"]\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Critical Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"60\",\"name\":\"Most Critical Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e316e111-37ee-404b-8feb-920a6147bf30\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":86400000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssues_CL \\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend totalcount = toscalar(SecurityScorecardIssues_CL | summarize dcount(subject_s))\\r\\n| summarize subject = dcount(subject_s), totalCount = max(totalcount) by issueName_s, issueType_s, Factor_s\\r\\n| extend [\\\"% of Portfolio Affected\\\"] = round((todouble(subject)/todouble(totalCount))*100,0)\\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| project Factor, issueName_s, [\\\"% of Portfolio Affected\\\"]\\r\\n| sort by [\\\"% of Portfolio Affected\\\"] desc\\r\\n| project-rename Issues = issueName_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Common Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"% of Portfolio Affected\",\"formatter\":3,\"formatOptions\":{\"min\":0,\"max\":100,\"palette\":\"redDark\"}}]}},\"name\":\"Most Common Issues\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Spotlight\"},\"name\":\"Spotlight\"}]},\"name\":\"Main\",\"styleSettings\":{\"showBorder\":true}}],\"fromTemplateId\":\"sentinel-SecurityScorecardWorkbook\",\"$schema\":\"https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json\"}\r\n", + "serializedData": "{\"version\":\"Notebook/1.0\",\"items\":[{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":11,\"content\":{\"version\":\"LinkItem/1.0\",\"style\":\"tabs\",\"links\":[{\"id\":\"06ba5a8f-fe93-4285-9bb4-15fd5c96befe\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"My Scorecard\",\"subTarget\":\"My Scorecard\",\"style\":\"link\"},{\"id\":\"ce6e0294-f130-4450-9005-8aa9924e6b86\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Vendor Scores\",\"subTarget\":\"Vendor Scores\",\"style\":\"link\"},{\"id\":\"26959e65-a53f-4468-8d14-d0b43d1b899d\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Active Issues\",\"subTarget\":\"Active Issues\",\"style\":\"link\"},{\"id\":\"97757d2a-eba1-4ee9-909b-47e9653e1407\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Issues per Vendor (CVE)\",\"subTarget\":\"Issues per Vendor (CVE)\",\"style\":\"link\"},{\"id\":\"73e85106-4dde-4c92-8479-c8720d8604de\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Issues per Vendor (Ransomware)\",\"subTarget\":\"Issues per Vendor (Ransomware)\",\"style\":\"link\"},{\"id\":\"c915da0c-4bfc-4595-8e1a-700a602f3412\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Spotlight\",\"subTarget\":\"Spotlight\",\"style\":\"link\"}]},\"name\":\"Tabs\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# My Scorecard\",\"style\":\"{setTab}\"},\"name\":\"text - 1\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"309cabc5-5a32-4c1a-b905-cb578ee0e667\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ac778abc-2101-4e66-92da-d11d4b4a8629\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":1,\"description\":\"Provide your company name\",\"isRequired\":true,\"query\":\"SecurityScorecardRatings\\r\\n| where portfolioName_s == \\\"NA\\\"\\r\\n| distinct subject_s\\r\\n| limit 1\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"value\":\"cisco.com\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 9\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 3\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(ingestion_time(),*)\\r\\n| extend gradeToday = case((scoreToday_d>=90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project gradeToday, scoreToday_d, Details\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Grade\"}]}},\"leftContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Grade\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(ingestion_time(), *) by subject_s \\r\\n| extend Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project scoreToday_d, subject_s, Details\\r\\n| limit 1\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Score\"}]}},\"leftContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Score\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll'and subject_s == '{Domain}'\\r\\n| project-rename Date = dateToday_s , Score = scoreToday_d \\r\\n| summarize arg_max(ingestion_time(), *) by Date \\r\\n| project Date=format_datetime(todatetime(Date), 'yyyy-MM-dd'), Score\\r\\n| sort by Date asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Score Trend\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"linechart\",\"chartSettings\":{\"showMetrics\":false,\"customThresholdLine\":\"{Score}\",\"customThresholdLineStyle\":4,\"showDataPoints\":true,\"ySettings\":{\"numberFormatSettings\":{\"unit\":0,\"options\":{\"style\":\"decimal\",\"useGrouping\":true}},\"max\":100}}},\"customWidth\":\"50\",\"name\":\"Score Trend\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == 'Factor' and subject_s == '{Domain}'\\r\\n| summarize arg_max(ingestion_time(),*) by dateToday_s, factorDescription_s\\r\\n| summarize arg_max(dateToday_s,*) by factorDescription_s\\r\\n| extend gradeToday=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), gradeYesterday=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\") \\r\\n| project Factor_Name_s, factorDescription_s, gradeToday, scoreToday_d, scoreChange_d, gradeYesterday, scoreYesterday_d, dateToday_s \\r\\n| project-rename Description =factorDescription_s, [\\\"Current Grade\\\"] = gradeToday, [\\\"Current Score\\\"] = scoreToday_d, [\\\"Latest Score Change\\\"] = scoreChange_d, [\\\"Last Updated Grade\\\"] = gradeYesterday, [\\\"Last Updated Score\\\"] = scoreYesterday_d, [\\\"Date of Current Score\\\"] = dateToday_s, Factor = Factor_Name_s \",\"size\":0,\"showAnalytics\":true,\"title\":\"My Scorecard Factors\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Date of Current Score\",\"formatter\":6}],\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"name\":\"My Scorecard Factors\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| summarize [\\\"Issue Count\\\"]= count() by Factor \",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Count by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"barchart\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend issue_name=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5)\\r\\n| summarize count() by severity_value_s, serverity_priority\\r\\n| sort by serverity_priority asc\\r\\n| project-away serverity_priority\\r\\n| render barchart\\r\\n\",\"size\":0,\"title\":\"Issue Types by Severity\",\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"graphSettings\":{\"type\":0,\"topContent\":{\"columnMatch\":\"severity_value_s\",\"formatter\":1},\"centerContent\":{\"columnMatch\":\"adware installation\",\"formatter\":1,\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}},\"chartSettings\":{\"showLegend\":true,\"seriesLabelSettings\":[{\"seriesName\":\"high\",\"label\":\"High\"},{\"seriesName\":\"medium\",\"label\":\"Medium\"},{\"seriesName\":\"low\",\"label\":\"Low\"},{\"seriesName\":\"info\",\"label\":\"Info\"},{\"seriesName\":\"positive\",\"label\":\"Positive\"}],\"customThresholdLine\":\"{issue_name}\",\"customThresholdLineStyle\":0},\"mapSettings\":{\"locInfo\":\"LatLong\",\"sizeSettings\":\"adware installation\",\"sizeAggregation\":\"Sum\",\"legendMetric\":\"adware installation\",\"legendAggregation\":\"Sum\",\"itemColorSettings\":{\"type\":\"heatmap\",\"colorAggregation\":\"Sum\",\"nodeColorField\":\"adware installation\",\"heatmapPalette\":\"greenRed\"}}},\"name\":\"Issue Types by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"My Scorecard\"},\"name\":\"My Scorecard\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Vendor Scores\",\"style\":\"{setTab}\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8ebc23fe-ade3-4318-8635-24bb841f718b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"72d22203-f3dd-4557-9605-5b6ca4a4e6c0\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":1,\"description\":\"Provide your company name\",\"isRequired\":true,\"query\":\"SecurityScorecardRatings\\r\\n| where portfolioName_s == \\\"NA\\\"\\r\\n| distinct subject_s\\r\\n| limit 1\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"value\":\"cisco.com\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 13\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"624e2391-ad46-416c-9af4-f735c1114b84\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"91c18b81-401d-4b6a-a9ba-e6780c6fee61\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c603e74f-d591-4788-b95b-1370a2b98024\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == \\\"OverAll\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and subject_s != '{Domain}'\\r\\n| summarize arg_max(ingestion_time(), *) by dateToday_s, subject_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, portfolioName_s \\r\\n| extend [\\\"Current Grade\\\"]=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), [\\\"Last Updated Grade\\\"]=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\"), Industry=strcat_array(split(industry_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors')\\r\\n| project subject_s, portfolioName_s, Industry, [\\\"Date of Current Score\\\"] = format_datetime(todatetime(dateToday_s), 'yyyy-MM-dd'), scoreToday_d, [\\\"Current Grade\\\"], scoreYesterday_d, ['Last Updated Grade'], Details \\r\\n| project-rename Company = subject_s , [\\\"Current Score\\\"] = scoreToday_d, [\\\"Last Updated Score\\\"] = scoreYesterday_d \\r\\n| sort by Company asc, portfolioName_s asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Company\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\",\"linkIsContextBlade\":false}}],\"rowLimit\":10000,\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"name\":\"Top Level Grade and Score by Company\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a38a4cff-47df-431d-a31e-e5a7b9739786\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardFactor\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct Factor_Name_s\\r\\n| sort by Factor_Name_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 11\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0fe3d2b0-fcbd-4c3f-80e6-29e39f047743\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Grade\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"A\\\", \\\"label\\\":\\\"A\\\"},\\r\\n { \\\"value\\\":\\\"B\\\", \\\"label\\\":\\\"B\\\"},\\r\\n { \\\"value\\\":\\\"C\\\", \\\"label\\\":\\\"C\\\"},\\r\\n { \\\"value\\\":\\\"D\\\", \\\"label\\\":\\\"D\\\" },\\r\\n { \\\"value\\\":\\\"F\\\", \\\"label\\\":\\\"F\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":86400000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 12\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == \\\"Factor\\\" and subject_s != '{Domain}' and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(ingestion_time(), *) by dateToday_s, subject_s, Factor_Name_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, Factor_Name_s, portfolioName_s\\r\\n| extend [\\\"Current Grade\\\"] = case(scoreToday_d>=90, \\\"A\\\", scoreToday_d>=80 and scoreToday_d<=89, \\\"B\\\", scoreToday_d>=70 and scoreToday_d<=79, \\\"C\\\", scoreToday_d>=60 and scoreToday_d<=69, \\\"D\\\", \\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors') \\r\\n| where ('*' in ({Factor}) or Factor_Name_s in ({Factor})) and [\\\"Current Grade\\\"] in ({Grade})\\r\\n| project subject_s, portfolioName_s, Factor_Name_s, factorDescription_s , scoreToday_d, [\\\"Current Grade\\\"], Details \\r\\n| project-rename Company = subject_s, Factor = Factor_Name_s, Description = factorDescription_s, [\\\"Current Score\\\"] = scoreToday_d\\r\\n| sort by Factor asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000}},\"name\":\"Top Level Grade and Score by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"f952c797-c056-446e-8ce1-4495673c337d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"IssueType\",\"label\":\"Issue Type\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend issue_type = strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") \\r\\n| distinct issue_type\\r\\n| sort by issue_type asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 9\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73302a85-fb1b-43cf-8c7f-dfbebd6eb167\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and subject_s != '{Domain}' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(issueName_s), src = arg_max(date_s,Factor_s) by issueType_s, subject_s, severity_value_s\\r\\n| extend [\\\"Issue Type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") , Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| where ('*' in ({IssueType}) or [\\\"Issue Type\\\"] in ({IssueType})) \\r\\n| project subject_s, Severity, [\\\"Issue Type\\\"], [\\\"Findings Count\\\"], [\\\"Issue Count\\\"], Details \\r\\n| order by [\\\"Issue Type\\\"] asc, subject_s asc\\r\\n| project-rename Company=subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true,\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Vendor Scores\"},\"name\":\"Vendor Scores\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Active Issues\",\"style\":\"{setTab}\"},\"name\":\"Active Issues\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"6239b6b6-1b0c-4d82-9599-bcb3155a8869\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"99a0579a-77d5-4693-a099-c1b7dd688c0d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e6981875-d72c-486f-baea-52e1e762143f\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"95c35610-dd13-45f0-bdf4-dae3008215a7\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| distinct value=Factor_s, lable=factor\\r\\n| sort by lable asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"34f6058c-86eb-45e1-8684-ad1db584019a\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"bd48be36-fe76-4b7d-be98-fc3ac56f6759\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":86400000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 11\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Active Issues will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 11\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and ('*' in ({Severity}) or severity_value_s in ({Severity}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize arg_max(date_s,*), src = arg_max(date_s,Factor_s),[\\\"Findings Count\\\"] = sum(findingsCount_d), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s\\r\\n| join kind=leftouter (SecurityScorecardFactor \\r\\n | distinct Factor_s,factorDescription_s\\r\\n | project Factor_s, factorDescription_s) on Factor_s\\r\\n| extend severity_index=case((severity_value_s == \\\"high\\\"),1,(severity_value_s == \\\"medium\\\"),2,(severity_value_s == \\\"low\\\"),3,(severity_value_s == \\\"info\\\"),4,5), severity_value_s=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"), [\\\"Issue type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s)\\r\\n| sort by severity_index asc, findingsCount_d desc\\r\\n| project [\\\"Issue type\\\"], Factor, severity_value_s, factorDescription_s, [\\\"Findings Count\\\"], Active, Resolved, Details\\r\\n| project-rename Description = factorDescription_s, Severity = severity_value_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Active Issues\",\"timeContextFromParameter\":\"Timer\",\"exportParameterName\":\"activeissues\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"Sevirity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000}},\"name\":\"Active Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Issue Count\\\"] = count(issueType_s) by Factor_s \\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| project Factor, [\\\"Issue Count\\\"] \\r\\n\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Types by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize count() by severity_value_s \\r\\n| extend severity_value_s = case((severity_value_s == 'info'), \\\"Info\\\",(severity_value_s == 'low'), \\\"Low\\\",(severity_value_s == 'medium'), \\\"Medium\\\",(severity_value_s == 'high'), \\\"High\\\", (severity_value_s == 'positive'), \\\"Positive\\\", severity_value_s)\\r\\n| render piechart\",\"size\":3,\"showAnalytics\":true,\"title\":\"Count by Severity\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\"},\"name\":\"Count by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Active Issues\"},\"name\":\"Active Issues\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (CVE)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a30af542-54cd-4a92-ac85-e094c9cc1c43\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a3195f85-f04f-422c-b233-f9bd8a357b8b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"CVE\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"service_vuln_host_high\\\", \\\"label\\\":\\\"Service Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"service_vuln_host_low\\\", \\\"label\\\":\\\"Service Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_high\\\", \\\"label\\\":\\\"Patching Cadence High\\\" },\\r\\n { \\\"value\\\":\\\"patching_cadence_low\\\", \\\"label\\\":\\\"Patching Cadence Low\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_medium\\\", \\\"label\\\":\\\"Patching Cadence Medium\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_high\\\", \\\"label\\\":\\\"Web Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"web_vuln_host_low\\\", \\\"label\\\":\\\"Web Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_medium\\\", \\\"label\\\":\\\"Web Vuln Host Medium\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":86400000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"CVE\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0f2ad534-e343-44c2-a3ff-0d1d2c7916c5\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"55320f6b-3583-440d-977f-33ceffc07d94\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"070f384d-1ff0-49c9-8f3f-f121e78811a2\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and issueType_s in ({CVE}) and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s\\r\\n| extend CVE=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), severity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\", severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s), Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| sort by CVE asc, severity_priority asc, subject_s asc\\r\\n| project subject_s, CVE, Factor, Severity, ['Findings Count'], [\\\"Issue Count\\\"], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"turquoise\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (CVE)\"},\"name\":\"Issues per Vendor (CVE)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (Ransomware)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c9b54d32-38cd-4b08-8dd6-4be29b019c80\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"168555cd-afbe-457a-81c1-a68663c51823\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Ransomware\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"tls_weal_cipher\\\", \\\"label\\\":\\\"Tls Weal Cipher\\\"},\\r\\n { \\\"value\\\":\\\"exposed_personal_information_info\\\", \\\"label\\\":\\\"Exposed Personal Information Info\\\" },\\r\\n { \\\"value\\\":\\\"outdated_browser\\\", \\\"label\\\":\\\"Outdated Browser\\\"},\\r\\n { \\\"value\\\":\\\"csp_no_policy_v2\\\", \\\"label\\\":\\\"Csp No Policy V2\\\" },\\r\\n { \\\"value\\\":\\\"exposed_personal_information\\\", \\\"label\\\":\\\"Exposed Personal Information\\\"},\\r\\n { \\\"value\\\":\\\"ip_count_means\\\", \\\"label\\\":\\\"Ip Count Means\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"hsts_incorrect_v2\\\", \\\"label\\\":\\\"Hsts Incorrect V2\\\" },\\r\\n { \\\"value\\\":\\\"unsafe_sri_v2\\\", \\\"label\\\":\\\"Unsafe Sri V2\\\"},\\r\\n { \\\"value\\\":\\\"leaked_credentials\\\", \\\"label\\\":\\\"Leaked Credentials\\\"},\\r\\n { \\\"value\\\":\\\"x_frame_options_incorrect_v2\\\", \\\"label\\\":\\\"X Frame Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_xss_protection_incorrect_v2\\\", \\\"label\\\":\\\"X Xss Protection Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_content_type_options_incorrect_v2\\\", \\\"label\\\":\\\"X Content Type Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_no_revocation\\\", \\\"label\\\":\\\"Tlscert No Revocation\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_expired\\\", \\\"label\\\":\\\"Tlscert Expired\\\"},\\r\\n { \\\"value\\\":\\\"outdated_os\\\", \\\"label\\\":\\\"Outdated Os\\\"},\\r\\n { \\\"value\\\":\\\"tls_weak_protocol\\\", \\\"label\\\":\\\"Tls Weak Protocol\\\"},\\r\\n { \\\"value\\\":\\\"domain_missing_https_v2\\\", \\\"label\\\":\\\"Domain Missing Https V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_excessive_expiration\\\", \\\"label\\\":\\\"Tlscert Excessive Expiration\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Ransomware\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"7bf4c309-6e2b-4619-9253-e85808486e75\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ee929211-b34e-4369-905b-cb4d87bf6364\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8d9dcdcc-8c93-4b47-a2e1-880ffea2a31e\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and issueType_s in ({Ransomware})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d),[\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s \\r\\n| extend Ransomware=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| project subject_s, Ransomware, Severity, ['Findings Count'], ['Issue Count'], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\\r\\n| sort by Ransomware asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"drilldown_url\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"details\"}}],\"rowLimit\":10000}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (Ransomware)\"},\"name\":\"Issues per Vendor (Ransomware)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Spotlight\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73978413-5a37-4814-b4fc-4143999f13ec\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73bc33a2-eb41-4433-9b1d-59930d7ddf3d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ae9eff1e-6b7b-4d64-9516-30ea5bc5fb17\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"d9274665-9d9c-417b-9d3f-03162538cf92\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend label = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"),value = Factor_s\\r\\n| distinct value, label\\r\\n| sort by label asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"485b4de7-9cd5-4e5e-b2d4-da7f921ff61c\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s =='OverAll' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(dateToday_s,*) by subject_s\\r\\n| extend Grade = case((scoreToday_d >= 90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\") \\r\\n| project Grade, subject_s, scoreToday_d\\r\\n| project-rename Company = subject_s, Score = scoreToday_d\\r\\n| sort by Score asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Worst Performing Companies\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"40\",\"name\":\"Worst Performing Companies\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*), [\\\"Company Count\\\"] = dcount(subject_s,4) by issueName_s, severity_value_s, issueType_s, Factor_s\\r\\n| extend serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), severity_value=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s) \\r\\n| extend Issues=trim(@\\\"'\\\",issueName_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| sort by serverity_priority asc, [\\\"Company Count\\\"] desc\\r\\n| project Severity = severity_value, Issues, Factor = Factor, [\\\"Company Count\\\"]\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Critical Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"60\",\"name\":\"Most Critical Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e316e111-37ee-404b-8feb-920a6147bf30\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":86400000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue \\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend totalcount = toscalar(SecurityScorecardIssue | summarize dcount(subject_s))\\r\\n| summarize subject = dcount(subject_s), totalCount = max(totalcount) by issueName_s, issueType_s, Factor_s\\r\\n| extend [\\\"% of Portfolio Affected\\\"] = round((todouble(subject)/todouble(totalCount))*100,0)\\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| project Factor, issueName_s, [\\\"% of Portfolio Affected\\\"]\\r\\n| sort by [\\\"% of Portfolio Affected\\\"] desc\\r\\n| project-rename Issues = issueName_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Common Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"% of Portfolio Affected\",\"formatter\":3,\"formatOptions\":{\"min\":0,\"max\":100,\"palette\":\"redDark\"}}]}},\"name\":\"Most Common Issues\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Spotlight\"},\"name\":\"Spotlight\"}]},\"name\":\"Main\",\"styleSettings\":{\"showBorder\":true}}],\"fromTemplateId\":\"sentinel-SecurityScorecardWorkbook\",\"$schema\":\"https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json\"}\n", "version": "1.0", "sourceId": "[variables('workspaceResourceId')]", "category": "sentinel" @@ -130,7 +171,7 @@ "apiVersion": "2022-01-01-preview", "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('Workbook-', last(split(variables('workbookId1'),'/'))))]", "properties": { - "description": "@{workbookKey=SecurityScorecardWorkbook; logoFileName=; description=This Workbook provides immediate insight into the data coming from SecurityScorecard’s three Sentinel data connectors: SecurityScorecard Cybersecurity Ratings, SecurityScorecard Cybersecurity Ratings - Factors, and SecurityScorecard Cybersecurity Ratings - Issues.; dataTypesDependencies=System.Object[]; dataConnectorsDependencies=System.Object[]; previewImagesFileNames=System.Object[]; version=1.0.0; title=SecurityScorecard; templateRelativePath=SecurityScorecardWorkbook.json; subtitle=; provider=SecurityScorecard}.description", + "description": "@{workbookKey=SecurityScorecardWorkbook; logoFileName=SecurityScorecard-Cybersecurity-Ratings.svg; description=This Workbook provides immediate insight into the data coming from SecurityScorecard's data connectors within Microsoft Sentinel: SecurityScorecard Cybersecurity Ratings, SecurityScorecard Cybersecurity Ratings - Factors, and SecurityScorecard Cybersecurity Ratings - Issues.; dataTypesDependencies=System.Object[]; dataConnectorsDependencies=System.Object[]; previewImagesFileNames=System.Object[]; version=1.0.0; title=SecurityScorecard; templateRelativePath=SecurityScorecardWorkbook.json; subtitle=; provider=SecurityScorecard}.description", "parentId": "[variables('workbookId1')]", "contentId": "[variables('_workbookContentId1')]", "kind": "Workbook", @@ -165,6 +206,18 @@ "contentId": "SecurityScorecardRatings_CL", "kind": "DataType" }, + { + "contentId": "SecurityScorecardFactorHistory_CL", + "kind": "DataType" + }, + { + "contentId": "SecurityScorecardIssuesHistory_CL", + "kind": "DataType" + }, + { + "contentId": "SecurityScorecardRatingsHistory_CL", + "kind": "DataType" + }, { "contentId": "SecurityScorecardFactorAzureFunctions", "kind": "DataConnector" @@ -176,43 +229,48 @@ { "contentId": "SecurityScorecardRatingsAzureFunctions", "kind": "DataConnector" + }, + { + "contentId": "SecurityScorecardFactorCCPDefinition", + "kind": "DataConnector" + }, + { + "contentId": "SecurityScorecardIssueCCPDefinition", + "kind": "DataConnector" + }, + { + "contentId": "SecurityScorecardRatingsCCPDefinition", + "kind": "DataConnector" } ] } } } ] - } + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "contentId": "[variables('_workbookContentId1')]", + "contentKind": "Workbook", + "displayName": "[parameters('workbook1-name')]", + "contentProductId": "[variables('_workbookcontentProductId1')]", + "id": "[variables('_workbookcontentProductId1')]", + "version": "[variables('workbookVersion1')]" } }, { - "type": "Microsoft.Resources/templateSpecs", - "apiVersion": "2021-05-01", + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", "name": "[variables('dataConnectorTemplateSpecName1')]", "location": "[parameters('workspace-location')]", - "tags": { - "hidden-sentinelWorkspaceId": "[variables('workspaceResourceId')]", - "hidden-sentinelContentType": "DataConnector" - }, - "properties": { - "description": "SecurityScorecard Cybersecurity Ratings data connector with template", - "displayName": "SecurityScorecard Cybersecurity Ratings template" - } - }, - { - "type": "Microsoft.Resources/templateSpecs/versions", - "apiVersion": "2021-05-01", - "name": "[concat(variables('dataConnectorTemplateSpecName1'),'/',variables('dataConnectorVersion1'))]", - "location": "[parameters('workspace-location')]", - "tags": { - "hidden-sentinelWorkspaceId": "[variables('workspaceResourceId')]", - "hidden-sentinelContentType": "DataConnector" - }, "dependsOn": [ - "[resourceId('Microsoft.Resources/templateSpecs', variables('dataConnectorTemplateSpecName1'))]" + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "SecurityScorecard Cybersecurity Ratings data connector with template version 2.0.0", + "description": "SecurityScorecard Cybersecurity Ratings data connector with template version 3.0.0", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('dataConnectorVersion1')]", @@ -228,9 +286,9 @@ "properties": { "connectorUiConfig": { "id": "[variables('_uiConfigId1')]", - "title": "SecurityScorecard Cybersecurity Ratings (using Azure Function)", + "title": "[DEPRECATED] SecurityScorecard Cybersecurity Ratings (using Azure Function) (using Azure Functions)", "publisher": "SecurityScorecard", - "descriptionMarkdown": "SecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) data connector provides the ability for Sentinel to import SecurityScorecard ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when scores change or drop. SecurityScorecard ratings are updated daily based on evidence collected across the web.", + "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Ratings (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) data connector provides the ability for Microsoft Sentinel to import SecurityScorecard ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when scores change or drop. SecurityScorecard ratings are updated daily based on evidence collected across the web.", "graphQueries": [ { "metricName": "Total Ratings data received", @@ -349,7 +407,7 @@ }, { "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2022-01-01-preview", + "apiVersion": "2023-04-01-preview", "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId1'),'/'))))]", "properties": { "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId1'))]", @@ -374,12 +432,23 @@ } } ] - } + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "contentId": "[variables('_dataConnectorContentId1')]", + "contentKind": "DataConnector", + "displayName": "[DEPRECATED] SecurityScorecard Cybersecurity Ratings (using Azure Function) (using Azure Functions)", + "contentProductId": "[variables('_dataConnectorcontentProductId1')]", + "id": "[variables('_dataConnectorcontentProductId1')]", + "version": "[variables('dataConnectorVersion1')]" } }, { "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2022-01-01-preview", + "apiVersion": "2023-04-01-preview", "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId1'),'/'))))]", "dependsOn": [ "[variables('_dataConnectorId1')]" @@ -415,9 +484,9 @@ "kind": "GenericUI", "properties": { "connectorUiConfig": { - "title": "SecurityScorecard Cybersecurity Ratings (using Azure Function)", + "title": "[DEPRECATED] SecurityScorecard Cybersecurity Ratings (using Azure Function) (using Azure Functions)", "publisher": "SecurityScorecard", - "descriptionMarkdown": "SecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) data connector provides the ability for Sentinel to import SecurityScorecard ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when scores change or drop. SecurityScorecard ratings are updated daily based on evidence collected across the web.", + "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Ratings (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) data connector provides the ability for Microsoft Sentinel to import SecurityScorecard ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when scores change or drop. SecurityScorecard ratings are updated daily based on evidence collected across the web.", "graphQueries": [ { "metricName": "Total Ratings data received", @@ -536,33 +605,15 @@ } }, { - "type": "Microsoft.Resources/templateSpecs", - "apiVersion": "2021-05-01", + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", "name": "[variables('dataConnectorTemplateSpecName2')]", "location": "[parameters('workspace-location')]", - "tags": { - "hidden-sentinelWorkspaceId": "[variables('workspaceResourceId')]", - "hidden-sentinelContentType": "DataConnector" - }, - "properties": { - "description": "SecurityScorecard Cybersecurity Ratings data connector with template", - "displayName": "SecurityScorecard Cybersecurity Ratings template" - } - }, - { - "type": "Microsoft.Resources/templateSpecs/versions", - "apiVersion": "2021-05-01", - "name": "[concat(variables('dataConnectorTemplateSpecName2'),'/',variables('dataConnectorVersion2'))]", - "location": "[parameters('workspace-location')]", - "tags": { - "hidden-sentinelWorkspaceId": "[variables('workspaceResourceId')]", - "hidden-sentinelContentType": "DataConnector" - }, "dependsOn": [ - "[resourceId('Microsoft.Resources/templateSpecs', variables('dataConnectorTemplateSpecName2'))]" + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "SecurityScorecard Cybersecurity Ratings data connector with template version 2.0.0", + "description": "SecurityScorecard Cybersecurity Ratings data connector with template version 3.0.0", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('dataConnectorVersion2')]", @@ -578,9 +629,9 @@ "properties": { "connectorUiConfig": { "id": "[variables('_uiConfigId2')]", - "title": "SecurityScorecard Factor (using Azure Function)", + "title": "[DEPRECATED] SecurityScorecard Factor (using Azure Function) (using Azure Functions)", "publisher": "SecurityScorecard", - "descriptionMarkdown": "SecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Factors data connector provides the ability for Sentinel to import SecurityScorecard factor ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when factor scores change or drop. SecurityScorecard factor ratings are updated daily based on evidence collected across the web.", + "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Factors (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Factors data connector provides the ability for Microsoft Sentinel to import SecurityScorecard factor ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when factor scores change or drop. SecurityScorecard factor ratings are updated daily based on evidence collected across the web.", "graphQueries": [ { "metricName": "Total Factor data received", @@ -699,7 +750,7 @@ }, { "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2022-01-01-preview", + "apiVersion": "2023-04-01-preview", "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId2'),'/'))))]", "properties": { "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId2'))]", @@ -724,12 +775,23 @@ } } ] - } + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "contentId": "[variables('_dataConnectorContentId2')]", + "contentKind": "DataConnector", + "displayName": "[DEPRECATED] SecurityScorecard Factor (using Azure Function) (using Azure Functions)", + "contentProductId": "[variables('_dataConnectorcontentProductId2')]", + "id": "[variables('_dataConnectorcontentProductId2')]", + "version": "[variables('dataConnectorVersion2')]" } }, { "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2022-01-01-preview", + "apiVersion": "2023-04-01-preview", "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId2'),'/'))))]", "dependsOn": [ "[variables('_dataConnectorId2')]" @@ -765,9 +827,9 @@ "kind": "GenericUI", "properties": { "connectorUiConfig": { - "title": "SecurityScorecard Factor (using Azure Function)", + "title": "[DEPRECATED] SecurityScorecard Factor (using Azure Function) (using Azure Functions)", "publisher": "SecurityScorecard", - "descriptionMarkdown": "SecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Factors data connector provides the ability for Sentinel to import SecurityScorecard factor ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when factor scores change or drop. SecurityScorecard factor ratings are updated daily based on evidence collected across the web.", + "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Factors (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Factors data connector provides the ability for Microsoft Sentinel to import SecurityScorecard factor ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when factor scores change or drop. SecurityScorecard factor ratings are updated daily based on evidence collected across the web.", "graphQueries": [ { "metricName": "Total Factor data received", @@ -886,33 +948,15 @@ } }, { - "type": "Microsoft.Resources/templateSpecs", - "apiVersion": "2021-05-01", + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", "name": "[variables('dataConnectorTemplateSpecName3')]", "location": "[parameters('workspace-location')]", - "tags": { - "hidden-sentinelWorkspaceId": "[variables('workspaceResourceId')]", - "hidden-sentinelContentType": "DataConnector" - }, - "properties": { - "description": "SecurityScorecard Cybersecurity Ratings data connector with template", - "displayName": "SecurityScorecard Cybersecurity Ratings template" - } - }, - { - "type": "Microsoft.Resources/templateSpecs/versions", - "apiVersion": "2021-05-01", - "name": "[concat(variables('dataConnectorTemplateSpecName3'),'/',variables('dataConnectorVersion3'))]", - "location": "[parameters('workspace-location')]", - "tags": { - "hidden-sentinelWorkspaceId": "[variables('workspaceResourceId')]", - "hidden-sentinelContentType": "DataConnector" - }, "dependsOn": [ - "[resourceId('Microsoft.Resources/templateSpecs', variables('dataConnectorTemplateSpecName3'))]" + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" ], "properties": { - "description": "SecurityScorecard Cybersecurity Ratings data connector with template version 2.0.0", + "description": "SecurityScorecard Cybersecurity Ratings data connector with template version 3.0.0", "mainTemplate": { "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "[variables('dataConnectorVersion3')]", @@ -928,9 +972,9 @@ "properties": { "connectorUiConfig": { "id": "[variables('_uiConfigId3')]", - "title": "SecurityScorecard Issue (using Azure Function)", + "title": "[DEPRECATED] SecurityScorecard Issue (using Azure Function) (using Azure Functions)", "publisher": "SecurityScorecard", - "descriptionMarkdown": "SecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Issues data connector provides the ability for Sentinel to import SecurityScorecard issue data as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when new cybersecurity issues are discovered.", + "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Issues (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Issues data connector provides the ability for Microsoft Sentinel to import SecurityScorecard issue data as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when new cybersecurity issues are discovered.", "graphQueries": [ { "metricName": "Total Issue data received", @@ -1049,7 +1093,7 @@ }, { "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2022-01-01-preview", + "apiVersion": "2023-04-01-preview", "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId3'),'/'))))]", "properties": { "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentId3'))]", @@ -1074,12 +1118,23 @@ } } ] - } + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "contentId": "[variables('_dataConnectorContentId3')]", + "contentKind": "DataConnector", + "displayName": "[DEPRECATED] SecurityScorecard Issue (using Azure Function) (using Azure Functions)", + "contentProductId": "[variables('_dataConnectorcontentProductId3')]", + "id": "[variables('_dataConnectorcontentProductId3')]", + "version": "[variables('dataConnectorVersion3')]" } }, { "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2022-01-01-preview", + "apiVersion": "2023-04-01-preview", "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', last(split(variables('_dataConnectorId3'),'/'))))]", "dependsOn": [ "[variables('_dataConnectorId3')]" @@ -1115,9 +1170,9 @@ "kind": "GenericUI", "properties": { "connectorUiConfig": { - "title": "SecurityScorecard Issue (using Azure Function)", + "title": "[DEPRECATED] SecurityScorecard Issue (using Azure Function) (using Azure Functions)", "publisher": "SecurityScorecard", - "descriptionMarkdown": "SecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Issues data connector provides the ability for Sentinel to import SecurityScorecard issue data as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when new cybersecurity issues are discovered.", + "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Issues (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Issues data connector provides the ability for Microsoft Sentinel to import SecurityScorecard issue data as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when new cybersecurity issues are discovered.", "graphQueries": [ { "metricName": "Total Issue data received", @@ -1236,52 +1291,2554 @@ } }, { - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnectorDefinition4'), variables('dataConnectorCCPVersion'))]", "location": "[parameters('workspace-location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], "properties": { - "version": "2.0.0", - "kind": "Solution", - "contentSchemaVersion": "2.0.0", - "contentId": "[variables('_solutionId')]", - "parentId": "[variables('_solutionId')]", - "source": { - "kind": "Solution", - "name": "SecurityScorecard Cybersecurity Ratings", - "sourceId": "[variables('_solutionId')]" - }, - "author": { - "name": "SecurityScorecard", - "email": "[variables('_email')]" - }, - "support": { - "name": "SecurityScorecard", - "email": "support@securityscorecard.io", - "tier": "Partner", - "link": "https://support.securityscorecard.com/hc/en-us/requests/new" - }, - "dependencies": { - "operator": "AND", - "criteria": [ + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition4')]", + "displayName": "SecurityScorecard Issues (Codeless)", + "contentKind": "DataConnector", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorCCPVersion')]", + "parameters": {}, + "variables": {}, + "resources": [ { - "kind": "Workbook", - "contentId": "[variables('_workbookContentId1')]", - "version": "[variables('workbookVersion1')]" + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentIdConnectorDefinition4'))]", + "apiVersion": "2022-09-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions", + "location": "[parameters('workspace-location')]", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "SecurityScorecardIssueCCPDefinition", + "title": "SecurityScorecard Issues (Codeless)", + "publisher": "SecurityScorecard", + "descriptionMarkdown": "The SecurityScorecard Issues (Codeless) connector ingests issue history events from SecurityScorecard companies in a chosen portfolio into Microsoft Sentinel using the Codeless Connector Framework. Replaces the Function App connector.", + "graphQueriesTableName": "SecurityScorecardIssuesHistory_CL", + "graphQueries": [ + { + "metricName": "Total Issue data received", + "legend": "SecurityScorecard issues", + "baseQuery": "{{graphQueriesTableName}}" + } + ], + "sampleQueries": [ + { + "description": "All SecurityScorecard issues", + "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "{{graphQueriesTableName}}", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ], + "customs": [ + { + "name": "SecurityScorecard API token", + "description": "A SecurityScorecard API token is required. See [SecurityScorecard docs](https://securityscorecard.readme.io/) for how to provision a bot user token." + } + ] + }, + "instructionSteps": [ + { + "title": "STEP 1 - Create a SecurityScorecard API token", + "description": "As an administrator in SecurityScorecard, navigate to My Settings then Users, create a bot user with Read Only permission, and generate the API token." + }, + { + "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", + "description": "Enter the base URL, API token, and one or more portfolio IDs (comma-separated). At least one portfolio ID is required — the connector fetches all portfolios and ingests issue events only for those matching the provided IDs.", + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio IDs (comma-separated)", + "placeholder": "comma-separated, no spaces: portfolio-id-1,portfolio-id-2", + "type": "text", + "name": "PortfolioIds" + } + }, + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "connect", + "name": "connect" + } + } + ] + } + ] + } + } }, { - "kind": "DataConnector", - "contentId": "[variables('_dataConnectorContentId1')]", - "version": "[variables('dataConnectorVersion1')]" + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition4')))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition4'))]", + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition4')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorCCPVersion')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorCCPVersion')]", + "contentId": "[variables('_dataConnectorContentIdConnections4')]", + "kind": "ResourcesDataConnector" + } + ] + } + } }, { - "kind": "DataConnector", - "contentId": "[variables('_dataConnectorContentId2')]", - "version": "[variables('dataConnectorVersion2')]" + "name": "SecurityScorecardIssueDCR", + "apiVersion": "2022-06-01", + "type": "Microsoft.Insights/dataCollectionRules", + "location": "[parameters('workspace-location')]", + "kind": "[variables('blanks')]", + "properties": { + "dataCollectionEndpointId": "[variables('dataCollectionEndpointId4')]", + "streamDeclarations": { + "Custom-SecurityScorecardIssuesHistory_CL": { + "columns": [ + { + "name": "id", + "type": "long" + }, + { + "name": "date", + "type": "datetime" + }, + { + "name": "event_type", + "type": "string" + }, + { + "name": "group_status", + "type": "string" + }, + { + "name": "issue_count", + "type": "long" + }, + { + "name": "total_score_impact", + "type": "real" + }, + { + "name": "issue_type", + "type": "string" + }, + { + "name": "severity", + "type": "string" + }, + { + "name": "factor", + "type": "string" + }, + { + "name": "detail_url", + "type": "string" + }, + { + "name": "company_domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + } + ] + } + }, + "destinations": { + "logAnalytics": [ + { + "workspaceResourceId": "[variables('workspaceResourceId')]", + "name": "clv2ws1" + } + ] + }, + "dataFlows": [ + { + "streams": [ + "Custom-SecurityScorecardIssuesHistory_CL" + ], + "destinations": [ + "clv2ws1" + ], + "transformKql": "source | where issue_type != 'breach' | extend TimeGenerated = ['date'], issue_date = ['date'], domain = company_domain | project-away ['date'], company_domain", + "outputStream": "Custom-SecurityScorecardIssuesHistory_CL" + } + ] + } }, { - "kind": "DataConnector", - "contentId": "[variables('_dataConnectorContentId3')]", - "version": "[variables('dataConnectorVersion3')]" + "name": "SecurityScorecardIssuesHistory_CL", + "apiVersion": "2022-10-01", + "type": "Microsoft.OperationalInsights/workspaces/tables", + "location": "[parameters('workspace-location')]", + "kind": null, + "properties": { + "schema": { + "name": "SecurityScorecardIssuesHistory_CL", + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "id", + "type": "long" + }, + { + "name": "issue_date", + "type": "datetime" + }, + { + "name": "event_type", + "type": "string" + }, + { + "name": "group_status", + "type": "string" + }, + { + "name": "issue_count", + "type": "long" + }, + { + "name": "total_score_impact", + "type": "real" + }, + { + "name": "issue_type", + "type": "string" + }, + { + "name": "severity", + "type": "string" + }, + { + "name": "factor", + "type": "string" + }, + { + "name": "detail_url", + "type": "string" + }, + { + "name": "domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + } + ] + } + } + }, + { + "name": "SecurityScorecardFactorHistory_CL", + "apiVersion": "2022-10-01", + "type": "Microsoft.OperationalInsights/workspaces/tables", + "location": "[parameters('workspace-location')]", + "kind": null, + "properties": { + "schema": { + "name": "SecurityScorecardFactorHistory_CL", + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "score_date", + "type": "datetime" + }, + { + "name": "factors", + "type": "dynamic" + }, + { + "name": "domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + } + ] + } + } + }, + { + "name": "SecurityScorecardRatingsHistory_CL", + "apiVersion": "2022-10-01", + "type": "Microsoft.OperationalInsights/workspaces/tables", + "location": "[parameters('workspace-location')]", + "kind": null, + "properties": { + "schema": { + "name": "SecurityScorecardRatingsHistory_CL", + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "score_date", + "type": "datetime" + }, + { + "name": "score", + "type": "long" + }, + { + "name": "domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + } + ] + } + } + } + ] + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition4'),'-', variables('dataConnectorCCPVersion'))))]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "version": "[variables('dataConnectorCCPVersion')]" + } + }, + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentIdConnectorDefinition4'))]", + "apiVersion": "2022-09-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions", + "location": "[parameters('workspace-location')]", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "SecurityScorecardIssueCCPDefinition", + "title": "SecurityScorecard Issues (Codeless)", + "publisher": "SecurityScorecard", + "descriptionMarkdown": "The SecurityScorecard Issues (Codeless) connector ingests issue history events from SecurityScorecard companies in a chosen portfolio into Microsoft Sentinel using the Codeless Connector Framework. Replaces the Function App connector.", + "graphQueriesTableName": "SecurityScorecardIssuesHistory_CL", + "graphQueries": [ + { + "metricName": "Total Issue data received", + "legend": "SecurityScorecard issues", + "baseQuery": "{{graphQueriesTableName}}" + } + ], + "sampleQueries": [ + { + "description": "All SecurityScorecard issues", + "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "{{graphQueriesTableName}}", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ], + "customs": [ + { + "name": "SecurityScorecard API token", + "description": "A SecurityScorecard API token is required. See [SecurityScorecard docs](https://securityscorecard.readme.io/) for how to provision a bot user token." + } + ] + }, + "instructionSteps": [ + { + "title": "STEP 1 - Create a SecurityScorecard API token", + "description": "As an administrator in SecurityScorecard, navigate to My Settings then Users, create a bot user with Read Only permission, and generate the API token." + }, + { + "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", + "description": "Enter the base URL, API token, and one or more portfolio IDs (comma-separated). At least one portfolio ID is required — the connector fetches all portfolios and ingests issue events only for those matching the provided IDs.", + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio IDs (comma-separated)", + "placeholder": "comma-separated, no spaces: portfolio-id-1,portfolio-id-2", + "type": "text", + "name": "PortfolioIds" + } + }, + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "connect", + "name": "connect" + } + } + ] + } + ] + } + } + }, + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition4')))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition4'))]", + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition4')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorCCPVersion')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorCCPVersion')]", + "contentId": "[variables('_dataConnectorContentIdConnections4')]", + "kind": "ResourcesDataConnector" + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnections4'), variables('dataConnectorCCPVersion'))]", + "location": "[parameters('workspace-location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "contentId": "[variables('_dataConnectorContentIdConnections4')]", + "displayName": "SecurityScorecard Issues (Codeless)", + "contentKind": "ResourcesDataConnector", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorCCPVersion')]", + "parameters": { + "guidValue": { + "defaultValue": "[[newGuid()]", + "type": "securestring" + }, + "innerWorkspace": { + "defaultValue": "[parameters('workspace')]", + "type": "securestring" + }, + "connectorDefinitionName": { + "defaultValue": "SecurityScorecard Issues (Codeless)", + "type": "securestring", + "minLength": 1 + }, + "workspace": { + "defaultValue": "[parameters('workspace')]", + "type": "securestring" + }, + "dcrConfig": { + "defaultValue": { + "dataCollectionEndpoint": "data collection Endpoint", + "dataCollectionRuleImmutableId": "data collection rule immutableId" + }, + "type": "object" + }, + "BaseUrl": { + "defaultValue": "BaseUrl", + "type": "securestring", + "minLength": 1 + }, + "ApiToken": { + "defaultValue": "ApiToken", + "type": "securestring", + "minLength": 1 + }, + "PortfolioIds": { + "defaultValue": "PortfolioIds", + "type": "securestring", + "minLength": 1 + } + }, + "variables": { + "_dataConnectorContentIdConnections4": "[variables('_dataConnectorContentIdConnections4')]" + }, + "resources": [ + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnections4')))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections4'))]", + "contentId": "[variables('_dataConnectorContentIdConnections4')]", + "kind": "ResourcesDataConnector", + "version": "[variables('dataConnectorCCPVersion')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + } + } + }, + { + "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'SecurityScorecardIssuesPoller', parameters('guidValue'))]", + "apiVersion": "2023-02-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", + "location": "[parameters('workspace-location')]", + "kind": "RestApiPoller", + "properties": { + "connectorDefinitionName": "SecurityScorecardIssueCCPDefinition", + "dataType": "SecurityScorecardIssuesHistory_CL", + "dcrConfig": { + "streamName": "Custom-SecurityScorecardIssuesHistory_CL", + "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", + "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" + }, + "auth": { + "type": "APIKey", + "ApiKey": "[[parameters('ApiToken')]", + "ApiKeyName": "Authorization", + "ApiKeyIdentifier": "Token" + }, + "request": { + "apiEndpoint": "[[concat(parameters('BaseUrl'),'/portfolios')]", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + }, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "portfolioCompanies", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + } + ] + }, + "stepCollectorConfigs": { + "portfolioCompanies": { + "shouldJoinNestedData": false, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "issueDetails", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain']), industry = tostring(res['industry'])" + } + ] + }, + "request": { + "apiEndpoint": "[[concat(parameters('BaseUrl'),'/portfolios/$portfolio_id$/companies')]", + "httpMethod": "GET", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + }, + "issueDetails": { + "shouldJoinNestedData": true, + "request": { + "apiEndpoint": "[[concat(parameters('BaseUrl'),'/companies/$company_domain$/history/events')]", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "date_from": "{_QueryWindowStartTime}", + "date_to": "{_QueryWindowEndTime}", + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + } + } + } + } + ] + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections4'),'-', variables('dataConnectorCCPVersion'))))]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "version": "[variables('dataConnectorCCPVersion')]" + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnectorDefinition5'), variables('dataConnectorCCPVersion'))]", + "location": "[parameters('workspace-location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition5')]", + "displayName": "SecurityScorecard Ratings (Codeless)", + "contentKind": "DataConnector", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorCCPVersion')]", + "parameters": {}, + "variables": {}, + "resources": [ + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentIdConnectorDefinition5'))]", + "apiVersion": "2022-09-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions", + "location": "[parameters('workspace-location')]", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "SecurityScorecardRatingsCCPDefinition", + "title": "SecurityScorecard Ratings (Codeless)", + "publisher": "SecurityScorecard", + "descriptionMarkdown": "The SecurityScorecard Ratings (Codeless) connector ingests overall company score history into Microsoft Sentinel using the Codeless Connector Framework. Raw daily score rows land in `SecurityScorecardRatingsHistory_CL`; query via the `SecurityScorecardRatings` parser for day-over-day deltas matching the legacy Function App schema.", + "graphQueriesTableName": "SecurityScorecardRatingsHistory_CL", + "graphQueries": [ + { + "metricName": "Total Ratings history rows received", + "legend": "SecurityScorecard ratings history", + "baseQuery": "{{graphQueriesTableName}}" + } + ], + "sampleQueries": [ + { + "description": "Day-over-day rating change (parser)", + "query": "SecurityScorecardRatings\n | sort by TimeGenerated desc" + }, + { + "description": "Raw ratings history", + "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "{{graphQueriesTableName}}", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ], + "customs": [ + { + "name": "SecurityScorecard API token", + "description": "A SecurityScorecard API token is required." + } + ] + }, + "instructionSteps": [ + { + "title": "STEP 1 - Create a SecurityScorecard API token", + "description": "As an administrator in SecurityScorecard, navigate to My Settings then Users, create a bot user with Read Only permission, and generate the API token." + }, + { + "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", + "description": "Enter the base URL, API token, and one or more portfolio IDs (comma-separated). At least one portfolio ID is required — the connector fetches all portfolios and ingests only those matching the provided IDs.", + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio IDs (comma-separated)", + "placeholder": "comma-separated, no spaces: portfolio-id-1,portfolio-id-2", + "type": "text", + "name": "PortfolioIds" + } + }, + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "connect", + "name": "connect" + } + } + ] + } + ] + } + } + }, + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition5')))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition5'))]", + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition5')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorCCPVersion')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorCCPVersion')]", + "contentId": "[variables('_dataConnectorContentIdConnections5')]", + "kind": "ResourcesDataConnector" + } + ] + } + } + }, + { + "name": "SecurityScorecardRatingsDCR", + "apiVersion": "2022-06-01", + "type": "Microsoft.Insights/dataCollectionRules", + "location": "[parameters('workspace-location')]", + "kind": "[variables('blanks')]", + "properties": { + "dataCollectionEndpointId": "[variables('dataCollectionEndpointId5')]", + "streamDeclarations": { + "Custom-SecurityScorecardRatingsHistory_CL": { + "columns": [ + { + "name": "date", + "type": "datetime" + }, + { + "name": "score", + "type": "long" + }, + { + "name": "company_domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + } + ] + } + }, + "destinations": { + "logAnalytics": [ + { + "workspaceResourceId": "[variables('workspaceResourceId')]", + "name": "clv2ws1" + } + ] + }, + "dataFlows": [ + { + "streams": [ + "Custom-SecurityScorecardRatingsHistory_CL" + ], + "destinations": [ + "clv2ws1" + ], + "transformKql": "source | extend TimeGenerated = ['date'], score_date = ['date'], domain = company_domain | project-away ['date'], company_domain", + "outputStream": "Custom-SecurityScorecardRatingsHistory_CL" + } + ] + } + }, + { + "name": "SecurityScorecardRatingsHistory_CL", + "apiVersion": "2022-10-01", + "type": "Microsoft.OperationalInsights/workspaces/tables", + "location": "[parameters('workspace-location')]", + "kind": null, + "properties": { + "schema": { + "name": "SecurityScorecardRatingsHistory_CL", + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "score_date", + "type": "datetime" + }, + { + "name": "score", + "type": "long" + }, + { + "name": "domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + } + ] + } + } + } + ] + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition5'),'-', variables('dataConnectorCCPVersion'))))]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "version": "[variables('dataConnectorCCPVersion')]" + } + }, + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentIdConnectorDefinition5'))]", + "apiVersion": "2022-09-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions", + "location": "[parameters('workspace-location')]", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "SecurityScorecardRatingsCCPDefinition", + "title": "SecurityScorecard Ratings (Codeless)", + "publisher": "SecurityScorecard", + "descriptionMarkdown": "The SecurityScorecard Ratings (Codeless) connector ingests overall company score history into Microsoft Sentinel using the Codeless Connector Framework. Raw daily score rows land in `SecurityScorecardRatingsHistory_CL`; query via the `SecurityScorecardRatings` parser for day-over-day deltas matching the legacy Function App schema.", + "graphQueriesTableName": "SecurityScorecardRatingsHistory_CL", + "graphQueries": [ + { + "metricName": "Total Ratings history rows received", + "legend": "SecurityScorecard ratings history", + "baseQuery": "{{graphQueriesTableName}}" + } + ], + "sampleQueries": [ + { + "description": "Day-over-day rating change (parser)", + "query": "SecurityScorecardRatings\n | sort by TimeGenerated desc" + }, + { + "description": "Raw ratings history", + "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "{{graphQueriesTableName}}", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ], + "customs": [ + { + "name": "SecurityScorecard API token", + "description": "A SecurityScorecard API token is required." + } + ] + }, + "instructionSteps": [ + { + "title": "STEP 1 - Create a SecurityScorecard API token", + "description": "As an administrator in SecurityScorecard, navigate to My Settings then Users, create a bot user with Read Only permission, and generate the API token." + }, + { + "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", + "description": "Enter the base URL, API token, and one or more portfolio IDs (comma-separated). At least one portfolio ID is required — the connector fetches all portfolios and ingests only those matching the provided IDs.", + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio IDs (comma-separated)", + "placeholder": "comma-separated, no spaces: portfolio-id-1,portfolio-id-2", + "type": "text", + "name": "PortfolioIds" + } + }, + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "connect", + "name": "connect" + } + } + ] + } + ] + } + } + }, + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition5')))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition5'))]", + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition5')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorCCPVersion')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorCCPVersion')]", + "contentId": "[variables('_dataConnectorContentIdConnections5')]", + "kind": "ResourcesDataConnector" + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnections5'), variables('dataConnectorCCPVersion'))]", + "location": "[parameters('workspace-location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "contentId": "[variables('_dataConnectorContentIdConnections5')]", + "displayName": "SecurityScorecard Ratings (Codeless)", + "contentKind": "ResourcesDataConnector", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorCCPVersion')]", + "parameters": { + "guidValue": { + "defaultValue": "[[newGuid()]", + "type": "securestring" + }, + "innerWorkspace": { + "defaultValue": "[parameters('workspace')]", + "type": "securestring" + }, + "connectorDefinitionName": { + "defaultValue": "SecurityScorecard Ratings (Codeless)", + "type": "securestring", + "minLength": 1 + }, + "workspace": { + "defaultValue": "[parameters('workspace')]", + "type": "securestring" + }, + "dcrConfig": { + "defaultValue": { + "dataCollectionEndpoint": "data collection Endpoint", + "dataCollectionRuleImmutableId": "data collection rule immutableId" + }, + "type": "object" + }, + "BaseUrl": { + "defaultValue": "BaseUrl", + "type": "securestring", + "minLength": 1 + }, + "ApiToken": { + "defaultValue": "ApiToken", + "type": "securestring", + "minLength": 1 + }, + "PortfolioIds": { + "defaultValue": "PortfolioIds", + "type": "securestring", + "minLength": 1 + } + }, + "variables": { + "_dataConnectorContentIdConnections5": "[variables('_dataConnectorContentIdConnections5')]" + }, + "resources": [ + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnections5')))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections5'))]", + "contentId": "[variables('_dataConnectorContentIdConnections5')]", + "kind": "ResourcesDataConnector", + "version": "[variables('dataConnectorCCPVersion')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + } + } + }, + { + "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'SecurityScorecardRatingsPoller', parameters('guidValue'))]", + "apiVersion": "2023-02-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", + "location": "[parameters('workspace-location')]", + "kind": "RestApiPoller", + "properties": { + "connectorDefinitionName": "SecurityScorecardRatingsCCPDefinition", + "dataType": "SecurityScorecardRatingsHistory_CL", + "dcrConfig": { + "streamName": "Custom-SecurityScorecardRatingsHistory_CL", + "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", + "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" + }, + "auth": { + "type": "APIKey", + "ApiKey": "[[parameters('ApiToken')]", + "ApiKeyName": "Authorization", + "ApiKeyIdentifier": "Token" + }, + "request": { + "apiEndpoint": "[[concat(parameters('BaseUrl'),'/portfolios')]", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + }, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "portfolioCompanies", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + } + ] + }, + "stepCollectorConfigs": { + "portfolioCompanies": { + "shouldJoinNestedData": false, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "ratingsHistory", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain']), industry = tostring(res['industry'])" + } + ] + }, + "request": { + "apiEndpoint": "[[concat(parameters('BaseUrl'),'/portfolios/$portfolio_id$/companies')]", + "httpMethod": "GET", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + }, + "ratingsHistory": { + "shouldJoinNestedData": true, + "request": { + "apiEndpoint": "[[concat(parameters('BaseUrl'),'/companies/$company_domain$/history/score')]", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "from": "{_QueryWindowStartTime}", + "to": "{_QueryWindowEndTime}", + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + } + } + } + } + ] + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections5'),'-', variables('dataConnectorCCPVersion'))))]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "version": "[variables('dataConnectorCCPVersion')]" + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnectorDefinition6'), variables('dataConnectorCCPVersion'))]", + "location": "[parameters('workspace-location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition6')]", + "displayName": "SecurityScorecard Factors (Codeless)", + "contentKind": "DataConnector", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorCCPVersion')]", + "parameters": {}, + "variables": {}, + "resources": [ + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentIdConnectorDefinition6'))]", + "apiVersion": "2022-09-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions", + "location": "[parameters('workspace-location')]", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "SecurityScorecardFactorCCPDefinition", + "title": "SecurityScorecard Factors (Codeless)", + "publisher": "SecurityScorecard", + "descriptionMarkdown": "The SecurityScorecard Factors (Codeless) connector ingests company factor-score history into Microsoft Sentinel using the Codeless Connector Framework. Raw rows land in `SecurityScorecardFactorHistory_CL`; query via the `SecurityScorecardFactor` parser to get day-over-day deltas with factor metadata, matching the legacy Function App schema.", + "graphQueriesTableName": "SecurityScorecardFactorHistory_CL", + "graphQueries": [ + { + "metricName": "Total Factor history rows received", + "legend": "SecurityScorecard factor history", + "baseQuery": "{{graphQueriesTableName}}" + } + ], + "sampleQueries": [ + { + "description": "Day-over-day factor change (parser)", + "query": "SecurityScorecardFactor\n | sort by TimeGenerated desc" + }, + { + "description": "Raw factor history", + "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "{{graphQueriesTableName}}", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ], + "customs": [ + { + "name": "SecurityScorecard API token", + "description": "A SecurityScorecard API token is required." + } + ] + }, + "instructionSteps": [ + { + "title": "STEP 1 - Create a SecurityScorecard API token", + "description": "As an administrator, create a bot user with Read Only permission and generate the API token." + }, + { + "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", + "description": "Enter the base URL, API token, and one or more portfolio IDs (comma-separated). At least one portfolio ID is required — the connector fetches all portfolios and ingests factor scores only for those matching the provided IDs.", + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio IDs (comma-separated)", + "placeholder": "comma-separated, no spaces: portfolio-id-1,portfolio-id-2", + "type": "text", + "name": "PortfolioIds" + } + }, + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "connect", + "name": "connect" + } + } + ] + } + ] + } + } + }, + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition6')))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition6'))]", + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition6')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorCCPVersion')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorCCPVersion')]", + "contentId": "[variables('_dataConnectorContentIdConnections6')]", + "kind": "ResourcesDataConnector" + } + ] + } + } + }, + { + "name": "SecurityScorecardFactorDCR", + "apiVersion": "2022-06-01", + "type": "Microsoft.Insights/dataCollectionRules", + "location": "[parameters('workspace-location')]", + "kind": "[variables('blanks')]", + "properties": { + "dataCollectionEndpointId": "[variables('dataCollectionEndpointId6')]", + "streamDeclarations": { + "Custom-SecurityScorecardFactorHistory_CL": { + "columns": [ + { + "name": "date", + "type": "datetime" + }, + { + "name": "factors", + "type": "dynamic" + }, + { + "name": "company_domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + } + ] + } + }, + "destinations": { + "logAnalytics": [ + { + "workspaceResourceId": "[variables('workspaceResourceId')]", + "name": "clv2ws1" + } + ] + }, + "dataFlows": [ + { + "streams": [ + "Custom-SecurityScorecardFactorHistory_CL" + ], + "destinations": [ + "clv2ws1" + ], + "transformKql": "source | extend TimeGenerated = ['date'], score_date = ['date'], domain = company_domain | project-away ['date'], company_domain", + "outputStream": "Custom-SecurityScorecardFactorHistory_CL" + } + ] + } + }, + { + "name": "SecurityScorecardFactorHistory_CL", + "apiVersion": "2022-10-01", + "type": "Microsoft.OperationalInsights/workspaces/tables", + "location": "[parameters('workspace-location')]", + "kind": null, + "properties": { + "schema": { + "name": "SecurityScorecardFactorHistory_CL", + "columns": [ + { + "name": "TimeGenerated", + "type": "datetime" + }, + { + "name": "score_date", + "type": "datetime" + }, + { + "name": "factors", + "type": "dynamic" + }, + { + "name": "domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + } + ] + } + } + } + ] + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition6'),'-', variables('dataConnectorCCPVersion'))))]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "version": "[variables('dataConnectorCCPVersion')]" + } + }, + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',variables('_dataConnectorContentIdConnectorDefinition6'))]", + "apiVersion": "2022-09-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions", + "location": "[parameters('workspace-location')]", + "kind": "Customizable", + "properties": { + "connectorUiConfig": { + "id": "SecurityScorecardFactorCCPDefinition", + "title": "SecurityScorecard Factors (Codeless)", + "publisher": "SecurityScorecard", + "descriptionMarkdown": "The SecurityScorecard Factors (Codeless) connector ingests company factor-score history into Microsoft Sentinel using the Codeless Connector Framework. Raw rows land in `SecurityScorecardFactorHistory_CL`; query via the `SecurityScorecardFactor` parser to get day-over-day deltas with factor metadata, matching the legacy Function App schema.", + "graphQueriesTableName": "SecurityScorecardFactorHistory_CL", + "graphQueries": [ + { + "metricName": "Total Factor history rows received", + "legend": "SecurityScorecard factor history", + "baseQuery": "{{graphQueriesTableName}}" + } + ], + "sampleQueries": [ + { + "description": "Day-over-day factor change (parser)", + "query": "SecurityScorecardFactor\n | sort by TimeGenerated desc" + }, + { + "description": "Raw factor history", + "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" + } + ], + "dataTypes": [ + { + "name": "{{graphQueriesTableName}}", + "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" + } + ], + "connectivityCriteria": [ + { + "type": "HasDataConnectors" + } + ], + "availability": { + "isPreview": false + }, + "permissions": { + "resourceProvider": [ + { + "provider": "Microsoft.OperationalInsights/workspaces", + "permissionsDisplayText": "Read and Write permissions are required.", + "providerDisplayName": "Workspace", + "scope": "Workspace", + "requiredPermissions": { + "write": true, + "read": true, + "delete": true + } + } + ], + "customs": [ + { + "name": "SecurityScorecard API token", + "description": "A SecurityScorecard API token is required." + } + ] + }, + "instructionSteps": [ + { + "title": "STEP 1 - Create a SecurityScorecard API token", + "description": "As an administrator, create a bot user with Read Only permission and generate the API token." + }, + { + "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", + "description": "Enter the base URL, API token, and one or more portfolio IDs (comma-separated). At least one portfolio ID is required — the connector fetches all portfolios and ingests factor scores only for those matching the provided IDs.", + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken" + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio IDs (comma-separated)", + "placeholder": "comma-separated, no spaces: portfolio-id-1,portfolio-id-2", + "type": "text", + "name": "PortfolioIds" + } + }, + { + "type": "ConnectionToggleButton", + "parameters": { + "connectLabel": "connect", + "name": "connect" + } + } + ] + } + ] + } + } + }, + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnectorDefinition6')))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition6'))]", + "contentId": "[variables('_dataConnectorContentIdConnectorDefinition6')]", + "kind": "DataConnector", + "version": "[variables('dataConnectorCCPVersion')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + }, + "dependencies": { + "criteria": [ + { + "version": "[variables('dataConnectorCCPVersion')]", + "contentId": "[variables('_dataConnectorContentIdConnections6')]", + "kind": "ResourcesDataConnector" + } + ] + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/', variables('dataConnectorTemplateNameConnections6'), variables('dataConnectorCCPVersion'))]", + "location": "[parameters('workspace-location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "contentId": "[variables('_dataConnectorContentIdConnections6')]", + "displayName": "SecurityScorecard Factors (Codeless)", + "contentKind": "ResourcesDataConnector", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('dataConnectorCCPVersion')]", + "parameters": { + "guidValue": { + "defaultValue": "[[newGuid()]", + "type": "securestring" + }, + "innerWorkspace": { + "defaultValue": "[parameters('workspace')]", + "type": "securestring" + }, + "connectorDefinitionName": { + "defaultValue": "SecurityScorecard Factors (Codeless)", + "type": "securestring", + "minLength": 1 + }, + "workspace": { + "defaultValue": "[parameters('workspace')]", + "type": "securestring" + }, + "dcrConfig": { + "defaultValue": { + "dataCollectionEndpoint": "data collection Endpoint", + "dataCollectionRuleImmutableId": "data collection rule immutableId" + }, + "type": "object" + }, + "BaseUrl": { + "defaultValue": "BaseUrl", + "type": "securestring", + "minLength": 1 + }, + "ApiToken": { + "defaultValue": "ApiToken", + "type": "securestring", + "minLength": 1 + }, + "PortfolioIds": { + "defaultValue": "PortfolioIds", + "type": "securestring", + "minLength": 1 + } + }, + "variables": { + "_dataConnectorContentIdConnections6": "[variables('_dataConnectorContentIdConnections6')]" + }, + "resources": [ + { + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('DataConnector-', variables('_dataConnectorContentIdConnections6')))]", + "apiVersion": "2022-01-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "properties": { + "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections6'))]", + "contentId": "[variables('_dataConnectorContentIdConnections6')]", + "kind": "ResourcesDataConnector", + "version": "[variables('dataConnectorCCPVersion')]", + "source": { + "sourceId": "[variables('_solutionId')]", + "name": "[variables('_solutionName')]", + "kind": "Solution" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + } + } + }, + { + "name": "[[concat(parameters('innerWorkspace'),'/Microsoft.SecurityInsights/', 'SecurityScorecardFactorPoller', parameters('guidValue'))]", + "apiVersion": "2023-02-01-preview", + "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", + "location": "[parameters('workspace-location')]", + "kind": "RestApiPoller", + "properties": { + "connectorDefinitionName": "SecurityScorecardFactorCCPDefinition", + "dataType": "SecurityScorecardFactorHistory_CL", + "dcrConfig": { + "streamName": "Custom-SecurityScorecardFactorHistory_CL", + "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", + "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" + }, + "auth": { + "type": "APIKey", + "ApiKey": "[[parameters('ApiToken')]", + "ApiKeyName": "Authorization", + "ApiKeyIdentifier": "Token" + }, + "request": { + "apiEndpoint": "[[concat(parameters('BaseUrl'),'/portfolios')]", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + }, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "portfolioCompanies", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + } + ] + }, + "stepCollectorConfigs": { + "portfolioCompanies": { + "shouldJoinNestedData": false, + "stepInfo": { + "stepType": "Nested", + "nextSteps": [ + { + "stepId": "factorHistory", + "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain']), industry = tostring(res['industry'])" + } + ] + }, + "request": { + "apiEndpoint": "[[concat(parameters('BaseUrl'),'/portfolios/$portfolio_id$/companies')]", + "httpMethod": "GET", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + }, + "factorHistory": { + "shouldJoinNestedData": true, + "request": { + "apiEndpoint": "[[concat(parameters('BaseUrl'),'/companies/$company_domain$/history/factors/score')]", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": true, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "from": "{_QueryWindowStartTime}", + "to": "{_QueryWindowEndTime}", + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + } + } + } + } + ] + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections6'),'-', variables('dataConnectorCCPVersion'))))]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "version": "[variables('dataConnectorCCPVersion')]" + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[variables('parserObject1').parserTemplateSpecName1]", + "location": "[parameters('workspace-location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "description": "SecurityScorecardIssue Data Parser with template version 3.0.0", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('parserObject1').parserVersion1]", + "parameters": {}, + "variables": {}, + "resources": [ + { + "name": "[variables('parserObject1')._parserName1]", + "apiVersion": "2025-07-01", + "type": "Microsoft.OperationalInsights/workspaces/savedSearches", + "location": "[parameters('workspace-location')]", + "properties": { + "eTag": "*", + "displayName": "Parser for SecurityScorecard Issues", + "category": "Microsoft Sentinel Parser", + "functionAlias": "SecurityScorecardIssue", + "query": "let SecurityScorecardIssueLegacy = view () {\n SecurityScorecardIssues_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Issue\")),\n eventID_d = todouble(column_ifexists(\"eventID_d\", real(null))),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n date_s = tostring(column_ifexists(\"date_s\", \"\")),\n issueType_s = tostring(column_ifexists(\"issueType_s\", \"\")),\n issueName_s = tostring(column_ifexists(\"issueName_s\", \"\")),\n findingsCount_d = todouble(column_ifexists(\"findingsCount_d\", real(null))),\n groupStatus_s = tostring(column_ifexists(\"groupStatus_s\", \"\")),\n totalScoreImpact_d = todouble(column_ifexists(\"totalScoreImpact_d\", real(null))),\n severity_value_s = tostring(column_ifexists(\"severity_value_s\", \"\")),\n detail_url_s = tostring(column_ifexists(\"detail_url_s\", \"\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"\"))\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardIssueCCF = view () {\n SecurityScorecardIssuesHistory_CL\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = tostring(issue_type),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", + "functionParameters": "", + "version": 2, + "tags": [ + { + "name": "description", + "value": "" + } + ] + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "apiVersion": "2022-01-01-preview", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('Parser-', last(split(variables('parserObject1')._parserId1,'/'))))]", + "dependsOn": [ + "[variables('parserObject1')._parserId1]" + ], + "properties": { + "parentId": "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches', parameters('workspace'), 'SecurityScorecardIssue')]", + "contentId": "[variables('parserObject1').parserContentId1]", + "kind": "Parser", + "version": "[variables('parserObject1').parserVersion1]", + "source": { + "name": "SecurityScorecard Cybersecurity Ratings", + "kind": "Solution", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + } + } + } + ] + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "contentId": "[variables('parserObject1').parserContentId1]", + "contentKind": "Parser", + "displayName": "Parser for SecurityScorecard Issues", + "contentProductId": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject1').parserContentId1,'-', '2.0.2')))]", + "id": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject1').parserContentId1,'-', '2.0.2')))]", + "version": "[variables('parserObject1').parserVersion1]" + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/savedSearches", + "apiVersion": "2025-07-01", + "name": "[variables('parserObject1')._parserName1]", + "location": "[parameters('workspace-location')]", + "properties": { + "eTag": "*", + "displayName": "Parser for SecurityScorecard Issues", + "category": "Microsoft Sentinel Parser", + "functionAlias": "SecurityScorecardIssue", + "query": "let SecurityScorecardIssueLegacy = view () {\n SecurityScorecardIssues_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Issue\")),\n eventID_d = todouble(column_ifexists(\"eventID_d\", real(null))),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n date_s = tostring(column_ifexists(\"date_s\", \"\")),\n issueType_s = tostring(column_ifexists(\"issueType_s\", \"\")),\n issueName_s = tostring(column_ifexists(\"issueName_s\", \"\")),\n findingsCount_d = todouble(column_ifexists(\"findingsCount_d\", real(null))),\n groupStatus_s = tostring(column_ifexists(\"groupStatus_s\", \"\")),\n totalScoreImpact_d = todouble(column_ifexists(\"totalScoreImpact_d\", real(null))),\n severity_value_s = tostring(column_ifexists(\"severity_value_s\", \"\")),\n detail_url_s = tostring(column_ifexists(\"detail_url_s\", \"\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"\"))\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardIssueCCF = view () {\n SecurityScorecardIssuesHistory_CL\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = tostring(issue_type),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", + "functionParameters": "", + "version": 2, + "tags": [ + { + "name": "description", + "value": "" + } + ] + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "apiVersion": "2022-01-01-preview", + "location": "[parameters('workspace-location')]", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('Parser-', last(split(variables('parserObject1')._parserId1,'/'))))]", + "dependsOn": [ + "[variables('parserObject1')._parserId1]" + ], + "properties": { + "parentId": "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches', parameters('workspace'), 'SecurityScorecardIssue')]", + "contentId": "[variables('parserObject1').parserContentId1]", + "kind": "Parser", + "version": "[variables('parserObject1').parserVersion1]", + "source": { + "kind": "Solution", + "name": "SecurityScorecard Cybersecurity Ratings", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[variables('parserObject2').parserTemplateSpecName2]", + "location": "[parameters('workspace-location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "description": "SecurityScorecardRatings Data Parser with template version 3.0.0", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('parserObject2').parserVersion2]", + "parameters": {}, + "variables": {}, + "resources": [ + { + "name": "[variables('parserObject2')._parserName2]", + "apiVersion": "2025-07-01", + "type": "Microsoft.OperationalInsights/workspaces/savedSearches", + "location": "[parameters('workspace-location')]", + "properties": { + "eTag": "*", + "displayName": "Parser for SecurityScorecard Ratings (day-over-day overall score change)", + "category": "Microsoft Sentinel Parser", + "functionAlias": "SecurityScorecardRatings", + "query": "let SecurityScorecardRatingsLegacy = view () {\n SecurityScorecardRatings_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"OverAll\")),\n src_s = tostring(column_ifexists(\"src_s\", \"OverallScore\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\")),\n severity_s = tostring(column_ifexists(\"severity_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n src_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s,\n severity_s\n};\nlet SecurityScorecardRatingsCCF = view () {\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain, score_date\n | sort by domain asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(score, 1)\n | extend has_prev = (domain == prev_domain)\n | extend\n body_s = \"OverAll\",\n src_s = \"OverallScore\",\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(score),\n scoreChange_d = iff(has_prev, todouble(score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(score - prev_score), real(null)),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name),\n severity_s = \"NA\"\n | project\n TimeGenerated,\n body_s,\n src_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s,\n severity_s\n};\nunion isfuzzy=true SecurityScorecardRatingsLegacy, SecurityScorecardRatingsCCF\n", + "functionParameters": "", + "version": 2, + "tags": [ + { + "name": "description", + "value": "" + } + ] + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "apiVersion": "2022-01-01-preview", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('Parser-', last(split(variables('parserObject2')._parserId2,'/'))))]", + "dependsOn": [ + "[variables('parserObject2')._parserId2]" + ], + "properties": { + "parentId": "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches', parameters('workspace'), 'SecurityScorecardRatings')]", + "contentId": "[variables('parserObject2').parserContentId2]", + "kind": "Parser", + "version": "[variables('parserObject2').parserVersion2]", + "source": { + "name": "SecurityScorecard Cybersecurity Ratings", + "kind": "Solution", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + } + } + } + ] + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "contentId": "[variables('parserObject2').parserContentId2]", + "contentKind": "Parser", + "displayName": "Parser for SecurityScorecard Ratings (day-over-day overall score change)", + "contentProductId": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject2').parserContentId2,'-', '2.0.2')))]", + "id": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject2').parserContentId2,'-', '2.0.2')))]", + "version": "[variables('parserObject2').parserVersion2]" + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/savedSearches", + "apiVersion": "2025-07-01", + "name": "[variables('parserObject2')._parserName2]", + "location": "[parameters('workspace-location')]", + "properties": { + "eTag": "*", + "displayName": "Parser for SecurityScorecard Ratings (day-over-day overall score change)", + "category": "Microsoft Sentinel Parser", + "functionAlias": "SecurityScorecardRatings", + "query": "let SecurityScorecardRatingsLegacy = view () {\n SecurityScorecardRatings_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"OverAll\")),\n src_s = tostring(column_ifexists(\"src_s\", \"OverallScore\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\")),\n severity_s = tostring(column_ifexists(\"severity_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n src_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s,\n severity_s\n};\nlet SecurityScorecardRatingsCCF = view () {\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain, score_date\n | sort by domain asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(score, 1)\n | extend has_prev = (domain == prev_domain)\n | extend\n body_s = \"OverAll\",\n src_s = \"OverallScore\",\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(score),\n scoreChange_d = iff(has_prev, todouble(score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(score - prev_score), real(null)),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name),\n severity_s = \"NA\"\n | project\n TimeGenerated,\n body_s,\n src_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s,\n severity_s\n};\nunion isfuzzy=true SecurityScorecardRatingsLegacy, SecurityScorecardRatingsCCF\n", + "functionParameters": "", + "version": 2, + "tags": [ + { + "name": "description", + "value": "" + } + ] + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "apiVersion": "2022-01-01-preview", + "location": "[parameters('workspace-location')]", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('Parser-', last(split(variables('parserObject2')._parserId2,'/'))))]", + "dependsOn": [ + "[variables('parserObject2')._parserId2]" + ], + "properties": { + "parentId": "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches', parameters('workspace'), 'SecurityScorecardRatings')]", + "contentId": "[variables('parserObject2').parserContentId2]", + "kind": "Parser", + "version": "[variables('parserObject2').parserVersion2]", + "source": { + "kind": "Solution", + "name": "SecurityScorecard Cybersecurity Ratings", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", + "apiVersion": "2023-04-01-preview", + "name": "[variables('parserObject3').parserTemplateSpecName3]", + "location": "[parameters('workspace-location')]", + "dependsOn": [ + "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" + ], + "properties": { + "description": "SecurityScorecardFactor Data Parser with template version 3.0.0", + "mainTemplate": { + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "[variables('parserObject3').parserVersion3]", + "parameters": {}, + "variables": {}, + "resources": [ + { + "name": "[variables('parserObject3')._parserName3]", + "apiVersion": "2025-07-01", + "type": "Microsoft.OperationalInsights/workspaces/savedSearches", + "location": "[parameters('workspace-location')]", + "properties": { + "eTag": "*", + "displayName": "Parser for SecurityScorecard Factor scores (day-over-day per-factor change with metadata)", + "category": "Microsoft Sentinel Parser", + "functionAlias": "SecurityScorecardFactor", + "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = coalesce(toint(factor[\"score\"]), tolong(toreal(factor[\"score\"])))\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date\n | sort by domain asc, factor_name asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", + "functionParameters": "", + "version": 2, + "tags": [ + { + "name": "description", + "value": "" + } + ] + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "apiVersion": "2022-01-01-preview", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('Parser-', last(split(variables('parserObject3')._parserId3,'/'))))]", + "dependsOn": [ + "[variables('parserObject3')._parserId3]" + ], + "properties": { + "parentId": "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches', parameters('workspace'), 'SecurityScorecardFactor')]", + "contentId": "[variables('parserObject3').parserContentId3]", + "kind": "Parser", + "version": "[variables('parserObject3').parserVersion3]", + "source": { + "name": "SecurityScorecard Cybersecurity Ratings", + "kind": "Solution", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + } + } + } + ] + }, + "packageKind": "Solution", + "packageVersion": "[variables('_solutionVersion')]", + "packageName": "[variables('_solutionName')]", + "packageId": "[variables('_solutionId')]", + "contentSchemaVersion": "3.0.0", + "contentId": "[variables('parserObject3').parserContentId3]", + "contentKind": "Parser", + "displayName": "Parser for SecurityScorecard Factor scores (day-over-day per-factor change with metadata)", + "contentProductId": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject3').parserContentId3,'-', '2.0.2')))]", + "id": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject3').parserContentId3,'-', '2.0.2')))]", + "version": "[variables('parserObject3').parserVersion3]" + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/savedSearches", + "apiVersion": "2025-07-01", + "name": "[variables('parserObject3')._parserName3]", + "location": "[parameters('workspace-location')]", + "properties": { + "eTag": "*", + "displayName": "Parser for SecurityScorecard Factor scores (day-over-day per-factor change with metadata)", + "category": "Microsoft Sentinel Parser", + "functionAlias": "SecurityScorecardFactor", + "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = coalesce(toint(factor[\"score\"]), tolong(toreal(factor[\"score\"])))\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date\n | sort by domain asc, factor_name asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", + "functionParameters": "", + "version": 2, + "tags": [ + { + "name": "description", + "value": "" + } + ] + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", + "apiVersion": "2022-01-01-preview", + "location": "[parameters('workspace-location')]", + "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/',concat('Parser-', last(split(variables('parserObject3')._parserId3,'/'))))]", + "dependsOn": [ + "[variables('parserObject3')._parserId3]" + ], + "properties": { + "parentId": "[resourceId('Microsoft.OperationalInsights/workspaces/savedSearches', parameters('workspace'), 'SecurityScorecardFactor')]", + "contentId": "[variables('parserObject3').parserContentId3]", + "kind": "Parser", + "version": "[variables('parserObject3').parserVersion3]", + "source": { + "kind": "Solution", + "name": "SecurityScorecard Cybersecurity Ratings", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + } + } + }, + { + "type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages", + "apiVersion": "2023-04-01-preview", + "location": "[parameters('workspace-location')]", + "properties": { + "version": "3.0.0", + "kind": "Solution", + "contentSchemaVersion": "3.0.0", + "displayName": "SecurityScorecard Cybersecurity Ratings", + "publisherDisplayName": "SecurityScorecard", + "descriptionHtml": "

Note: Please refer to the following before installing the solution:

\n

• Review the solution Release Notes

\n

• There may be known issues pertaining to this Solution, please refer to them before installing.

\n

This package includes three Codeless Connector Framework (CCF) data connectors, three KQL parsers, and an associated workbook for the SecurityScorecard offering within Microsoft Sentinel. The CCF connectors ingest 11 company scores from SecurityScorecard (overall score and 10 factor scores) as well as new issue events without requiring an Azure Function deployment. The legacy Function App connectors are retained but marked Deprecated.

\n

Data Connectors: 6, Parsers: 3, Workbooks: 1

\n

Learn more about Microsoft Sentinel | Learn more about Solutions

\n", + "contentKind": "Solution", + "contentProductId": "[variables('_solutioncontentProductId')]", + "id": "[variables('_solutioncontentProductId')]", + "icon": "", + "contentId": "[variables('_solutionId')]", + "parentId": "[variables('_solutionId')]", + "source": { + "kind": "Solution", + "name": "SecurityScorecard Cybersecurity Ratings", + "sourceId": "[variables('_solutionId')]" + }, + "author": { + "name": "SecurityScorecard", + "email": "[variables('_email')]" + }, + "support": { + "name": "SecurityScorecard", + "email": "support@securityscorecard.io", + "tier": "Partner", + "link": "https://support.securityscorecard.com/hc/en-us/requests/new" + }, + "dependencies": { + "operator": "AND", + "criteria": [ + { + "kind": "Workbook", + "contentId": "[variables('_workbookContentId1')]", + "version": "[variables('workbookVersion1')]" + }, + { + "kind": "DataConnector", + "contentId": "[variables('_dataConnectorContentId1')]", + "version": "[variables('dataConnectorVersion1')]" + }, + { + "kind": "DataConnector", + "contentId": "[variables('_dataConnectorContentId2')]", + "version": "[variables('dataConnectorVersion2')]" + }, + { + "kind": "DataConnector", + "contentId": "[variables('_dataConnectorContentId3')]", + "version": "[variables('dataConnectorVersion3')]" + }, + { + "kind": "DataConnector", + "contentId": "[variables('_dataConnectorContentIdConnections4')]", + "version": "[variables('dataConnectorCCPVersion')]" + }, + { + "kind": "DataConnector", + "contentId": "[variables('_dataConnectorContentIdConnections5')]", + "version": "[variables('dataConnectorCCPVersion')]" + }, + { + "kind": "DataConnector", + "contentId": "[variables('_dataConnectorContentIdConnections6')]", + "version": "[variables('dataConnectorCCPVersion')]" + }, + { + "kind": "Parser", + "contentId": "[variables('parserObject1').parserContentId1]", + "version": "[variables('parserObject1').parserVersion1]" + }, + { + "kind": "Parser", + "contentId": "[variables('parserObject2').parserContentId2]", + "version": "[variables('parserObject2').parserVersion2]" + }, + { + "kind": "Parser", + "contentId": "[variables('parserObject3').parserContentId3]", + "version": "[variables('parserObject3').parserVersion3]" } ] }, @@ -1292,7 +3849,7 @@ ], "categories": { "domains": [ - "Security", + "Security - Others", "Security - Network", "Security - Vulnerability Management" ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/testParameters.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/testParameters.json new file mode 100644 index 00000000000..537f125258d --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/testParameters.json @@ -0,0 +1,46 @@ +{ + "location": { + "type": "string", + "minLength": 1, + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "Not used, but needed to pass arm-ttk test `Location-Should-Not-Be-Hardcoded`. We instead use the `workspace-location` which is derived from the LA workspace" + } + }, + "workspace-location": { + "type": "string", + "defaultValue": "", + "metadata": { + "description": "[concat('Region to deploy solution resources -- separate from location selection',parameters('location'))]" + } + }, + "workspace": { + "defaultValue": "", + "type": "string", + "metadata": { + "description": "Workspace name for Log Analytics where Microsoft Sentinel is setup" + } + }, + "workbook1-name": { + "type": "string", + "defaultValue": "SecurityScorecard", + "minLength": 1, + "metadata": { + "description": "Name for the workbook" + } + }, + "resourceGroupName": { + "type": "string", + "defaultValue": "[resourceGroup().name]", + "metadata": { + "description": "resource group name where Microsoft Sentinel is setup" + } + }, + "subscription": { + "type": "string", + "defaultValue": "[last(split(subscription().id, '/'))]", + "metadata": { + "description": "subscription id where Microsoft Sentinel is setup" + } + } +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml new file mode 100644 index 00000000000..4f4eccab1d6 --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml @@ -0,0 +1,109 @@ +id: ee795930-e709-48fc-9fa7-d67708a3eeb5 +Function: + Title: Parser for SecurityScorecard Factor scores (day-over-day per-factor change with metadata) + Version: '2.0.2' + LastUpdated: '2026-05-28' +Category: Microsoft Sentinel Parser +FunctionName: SecurityScorecardFactor +FunctionAlias: SecurityScorecardFactor +FunctionQuery: | + let FactorMetadata = datatable(key:string, name:string, description:string) [ + "application_security", "Application Security", "Detects common website application vulnerabilities and security issues.", + "cubit_score", "Cubit Score", "Proprietary algorithms checking for implementation of security best practices.", + "dns_health", "DNS Health", "Detects DNS misconfigurations and proper configuration of email security.", + "endpoint_security", "Endpoint Security", "Detects measures used to protect employee workstations, laptops, mobile devices.", + "hacker_chatter", "Hacker Chatter", "Monitors hacker forums and chat rooms for company mentions.", + "ip_reputation", "IP Reputation", "Detects suspicious activity from company IP addresses, such as malware infections.", + "leaked_information", "Information Leak", "Identifies if information leaks have occurred on internet sites.", + "network_security", "Network Security", "Detects insecure network settings.", + "patching_cadence", "Patching Cadence", "Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.", + "social_engineering", "Social Engineering", "Determines an organization's susceptibility to a targeted social engineering attack." + ]; + let SecurityScorecardFactorLegacy = view () { + SecurityScorecardFactor_CL + | extend + body_s = tostring(column_ifexists("body_s", "Factor")), + Factor_s = tostring(column_ifexists("Factor_s", "")), + Factor_Name_s = tostring(column_ifexists("Factor_Name_s", "Not Available")), + subject_s = tostring(column_ifexists("subject_s", "")), + dateYesterday_s = tostring(column_ifexists("dateYesterday_s", "")), + dateToday_s = tostring(column_ifexists("dateToday_s", "")), + scoreYesterday_d = todouble(column_ifexists("scoreYesterday_d", real(null))), + scoreToday_d = todouble(column_ifexists("scoreToday_d", real(null))), + scoreChange_d = todouble(column_ifexists("scoreChange_d", real(null))), + diff_d = todouble(column_ifexists("diff_d", real(null))), + factorDescription_s = tostring(column_ifexists("factorDescription_s", "data is not there")), + ss_time_t = todatetime(column_ifexists("ss_time_t", column_ifexists("ss_time_s", ""))), + industry_s = tostring(column_ifexists("industry_s", "")), + portfolioId_g = toguid(column_ifexists("portfolioId_s", "")), + portfolioName_s = tostring(column_ifexists("portfolioName_s", "NA")) + | project + TimeGenerated, + body_s, + Factor_s, + Factor_Name_s, + subject_s, + dateYesterday_s, + dateToday_s, + scoreYesterday_d, + scoreToday_d, + scoreChange_d, + diff_d, + factorDescription_s, + ss_time_t, + industry_s, + portfolioId_g, + portfolioName_s + }; + let SecurityScorecardFactorCCF = view () { + SecurityScorecardFactorHistory_CL + | where TimeGenerated > ago(365d) + | mv-expand factor = factors + | extend + factor_name = tostring(factor["name"]), + factor_score = coalesce(toint(factor["score"]), tolong(toreal(factor["score"]))) + | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date + | sort by domain asc, factor_name asc, score_date asc + | serialize + | extend + prev_domain = prev(domain, 1), + prev_factor = prev(factor_name, 1), + prev_date = prev(score_date, 1), + prev_score = prev(factor_score, 1) + | extend has_prev = (domain == prev_domain and factor_name == prev_factor) + | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key + | extend + body_s = "Factor", + Factor_s = factor_name, + Factor_Name_s = coalesce(name, "Not Available"), + subject_s = domain, + dateYesterday_s = iff(has_prev, tostring(prev_date), ""), + dateToday_s = tostring(score_date), + scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)), + scoreToday_d = todouble(factor_score), + scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)), + diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)), + factorDescription_s = coalesce(description, "data is not there"), + ss_time_t = score_date, + industry_s = tostring(industry), + portfolioId_g = toguid(portfolio_id), + portfolioName_s = tostring(portfolio_name) + | project + TimeGenerated, + body_s, + Factor_s, + Factor_Name_s, + subject_s, + dateYesterday_s, + dateToday_s, + scoreYesterday_d, + scoreToday_d, + scoreChange_d, + diff_d, + factorDescription_s, + ss_time_t, + industry_s, + portfolioId_g, + portfolioName_s + }; + union isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml new file mode 100644 index 00000000000..80a6dd1d30c --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml @@ -0,0 +1,86 @@ +id: 5e71c965-6875-4348-b98e-5ba38186be2e +Function: + Title: Parser for SecurityScorecard Issues + Version: '2.0.2' + LastUpdated: '2026-05-28' +Category: Microsoft Sentinel Parser +FunctionName: SecurityScorecardIssue +FunctionAlias: SecurityScorecardIssue +FunctionQuery: | + let SecurityScorecardIssueLegacy = view () { + SecurityScorecardIssues_CL + | extend + body_s = tostring(column_ifexists("body_s", "Issue")), + eventID_d = todouble(column_ifexists("eventID_d", real(null))), + Factor_s = tostring(column_ifexists("Factor_s", "")), + subject_s = tostring(column_ifexists("subject_s", "")), + date_s = tostring(column_ifexists("date_s", "")), + issueType_s = tostring(column_ifexists("issueType_s", "")), + issueName_s = tostring(column_ifexists("issueName_s", "")), + findingsCount_d = todouble(column_ifexists("findingsCount_d", real(null))), + groupStatus_s = tostring(column_ifexists("groupStatus_s", "")), + totalScoreImpact_d = todouble(column_ifexists("totalScoreImpact_d", real(null))), + severity_value_s = tostring(column_ifexists("severity_value_s", "")), + detail_url_s = tostring(column_ifexists("detail_url_s", "")), + ss_time_t = todatetime(column_ifexists("ss_time_t", column_ifexists("ss_time_s", ""))), + industry_s = tostring(column_ifexists("industry_s", "")), + portfolioId_g = toguid(column_ifexists("portfolioId_s", "")), + portfolioName_s = tostring(column_ifexists("portfolioName_s", "")) + | project + TimeGenerated, + body_s, + eventID_d, + Factor_s, + subject_s, + date_s, + issueType_s, + issueName_s, + findingsCount_d, + groupStatus_s, + totalScoreImpact_d, + severity_value_s, + detail_url_s, + ss_time_t, + industry_s, + portfolioId_g, + portfolioName_s + }; + let SecurityScorecardIssueCCF = view () { + SecurityScorecardIssuesHistory_CL + | extend + body_s = "Issue", + eventID_d = todouble(id), + Factor_s = tostring(factor), + subject_s = tostring(domain), + date_s = tostring(issue_date), + issueType_s = tostring(issue_type), + issueName_s = tostring(issue_type), + findingsCount_d = todouble(issue_count), + groupStatus_s = tostring(group_status), + totalScoreImpact_d = todouble(total_score_impact), + severity_value_s = tostring(severity), + detail_url_s = tostring(detail_url), + ss_time_t = todatetime(issue_date), + industry_s = tostring(industry), + portfolioId_g = toguid(portfolio_id), + portfolioName_s = tostring(portfolio_name) + | project + TimeGenerated, + body_s, + eventID_d, + Factor_s, + subject_s, + date_s, + issueType_s, + issueName_s, + findingsCount_d, + groupStatus_s, + totalScoreImpact_d, + severity_value_s, + detail_url_s, + ss_time_t, + industry_s, + portfolioId_g, + portfolioName_s + }; + union isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardRatings.yaml b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardRatings.yaml new file mode 100644 index 00000000000..1db6de520a1 --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardRatings.yaml @@ -0,0 +1,87 @@ +id: d45021a4-1e09-4246-9739-1c37738df1aa +Function: + Title: Parser for SecurityScorecard Ratings (day-over-day overall score change) + Version: '2.0.2' + LastUpdated: '2026-05-28' +Category: Microsoft Sentinel Parser +FunctionName: SecurityScorecardRatings +FunctionAlias: SecurityScorecardRatings +FunctionQuery: | + let SecurityScorecardRatingsLegacy = view () { + SecurityScorecardRatings_CL + | extend + body_s = tostring(column_ifexists("body_s", "OverAll")), + src_s = tostring(column_ifexists("src_s", "OverallScore")), + subject_s = tostring(column_ifexists("subject_s", "")), + dateYesterday_s = tostring(column_ifexists("dateYesterday_s", "")), + dateToday_s = tostring(column_ifexists("dateToday_s", "")), + scoreYesterday_d = todouble(column_ifexists("scoreYesterday_d", real(null))), + scoreToday_d = todouble(column_ifexists("scoreToday_d", real(null))), + scoreChange_d = todouble(column_ifexists("scoreChange_d", real(null))), + diff_d = todouble(column_ifexists("diff_d", real(null))), + ss_time_t = todatetime(column_ifexists("ss_time_t", column_ifexists("ss_time_s", ""))), + industry_s = tostring(column_ifexists("industry_s", "")), + portfolioId_g = toguid(column_ifexists("portfolioId_s", "")), + portfolioName_s = tostring(column_ifexists("portfolioName_s", "NA")), + severity_s = tostring(column_ifexists("severity_s", "NA")) + | project + TimeGenerated, + body_s, + src_s, + subject_s, + dateYesterday_s, + dateToday_s, + scoreYesterday_d, + scoreToday_d, + scoreChange_d, + diff_d, + ss_time_t, + industry_s, + portfolioId_g, + portfolioName_s, + severity_s + }; + let SecurityScorecardRatingsCCF = view () { + SecurityScorecardRatingsHistory_CL + | where TimeGenerated > ago(365d) + | summarize arg_max(TimeGenerated, *) by domain, score_date + | sort by domain asc, score_date asc + | serialize + | extend + prev_domain = prev(domain, 1), + prev_date = prev(score_date, 1), + prev_score = prev(score, 1) + | extend has_prev = (domain == prev_domain) + | extend + body_s = "OverAll", + src_s = "OverallScore", + subject_s = domain, + dateYesterday_s = iff(has_prev, tostring(prev_date), ""), + dateToday_s = tostring(score_date), + scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)), + scoreToday_d = todouble(score), + scoreChange_d = iff(has_prev, todouble(score - prev_score), real(null)), + diff_d = iff(has_prev, todouble(score - prev_score), real(null)), + ss_time_t = score_date, + industry_s = tostring(industry), + portfolioId_g = toguid(portfolio_id), + portfolioName_s = tostring(portfolio_name), + severity_s = "NA" + | project + TimeGenerated, + body_s, + src_s, + subject_s, + dateYesterday_s, + dateToday_s, + scoreYesterday_d, + scoreToday_d, + scoreChange_d, + diff_d, + ss_time_t, + industry_s, + portfolioId_g, + portfolioName_s, + severity_s + }; + union isfuzzy=true SecurityScorecardRatingsLegacy, SecurityScorecardRatingsCCF diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/ReleaseNotes.md b/Solutions/SecurityScorecard Cybersecurity Ratings/ReleaseNotes.md new file mode 100644 index 00000000000..bf3ba44bd61 --- /dev/null +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/ReleaseNotes.md @@ -0,0 +1,8 @@ +| **Version** | **Date Modified (DD-MM-YYYY)** | **Change History** | +|-------------|--------------------------------|--------------------------------------------------------------------------------| +| 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | +| 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | +| 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | +| 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | +| 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | +| 3.0.0 | 27-05-2026 | Migrated to Codeless Connector Framework: added CCF data connectors for Ratings, Factor, and Issue; added KQL parsers unifying legacy and CCF data; deprecated Python Function App connectors | diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/SolutionMetadata.json b/Solutions/SecurityScorecard Cybersecurity Ratings/SolutionMetadata.json index 51f4861f2e1..5df9bc8c4e4 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/SolutionMetadata.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/SolutionMetadata.json @@ -1,11 +1,11 @@ { - "publisherId": "SecurityScorecard", - "offerId": "SecurityScorecard", + "publisherId": "securityscorecard", + "offerId": "securityscorecard", "firstPublishDate": "2022-10-01", "lastPublishDate": "2022-10-01", "providers": ["SecurityScorecard"], "categories": { - "domains" : ["Security", "Security - Network", "Security - Vulnerability Management"] + "domains" : ["Security - Others", "Security - Network", "Security - Vulnerability Management"] }, "support": { "name": "SecurityScorecard", diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json index 57ab68a078d..151d457106f 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json @@ -168,7 +168,7 @@ "type": 1, "description": "Provide your company name", "isRequired": true, - "query": "SecurityScorecardRatings_CL\r\n| where portfolioName_s == \"NA\"\r\n| distinct subject_s\r\n| limit 1", + "query": "SecurityScorecardRatings\r\n| where portfolioName_s == \"NA\"\r\n| distinct subject_s\r\n| limit 1", "timeContext": { "durationMs": 0 }, @@ -196,7 +196,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardRatings_CL\r\n| where body_s == 'OverAll' and subject_s == '{Domain}'\r\n| summarize arg_max(ingestion_time(),*)\r\n| extend gradeToday = case((scoreToday_d>=90), \"A\",(scoreToday_d>=80 and scoreToday_d<=89), \"B\",(scoreToday_d>=70 and scoreToday_d<=79), \"C\",(scoreToday_d>=60 and scoreToday_d<=69), \"D\",isempty(scoreToday_d),\"\",\"F\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \r\n| project gradeToday, scoreToday_d, Details", + "query": "SecurityScorecardRatings\r\n| where body_s == 'OverAll' and subject_s == '{Domain}'\r\n| summarize arg_max(ingestion_time(),*)\r\n| extend gradeToday = case((scoreToday_d>=90), \"A\",(scoreToday_d>=80 and scoreToday_d<=89), \"B\",(scoreToday_d>=70 and scoreToday_d<=79), \"C\",(scoreToday_d>=60 and scoreToday_d<=69), \"D\",isempty(scoreToday_d),\"\",\"F\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \r\n| project gradeToday, scoreToday_d, Details", "size": 4, "showAnalytics": true, "timeContextFromParameter": "Timer", @@ -286,7 +286,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardRatings_CL\r\n| where body_s == 'OverAll' and subject_s == '{Domain}'\r\n| summarize arg_max(ingestion_time(), *) by subject_s \r\n| extend Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \r\n| project scoreToday_d, subject_s, Details\r\n| limit 1", + "query": "SecurityScorecardRatings\r\n| where body_s == 'OverAll' and subject_s == '{Domain}'\r\n| summarize arg_max(ingestion_time(), *) by subject_s \r\n| extend Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \r\n| project scoreToday_d, subject_s, Details\r\n| limit 1", "size": 4, "showAnalytics": true, "timeContextFromParameter": "Timer", @@ -376,7 +376,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardRatings_CL\r\n| where body_s == 'OverAll'and subject_s == '{Domain}'\r\n| project-rename Date = dateToday_s , Score = scoreToday_d \r\n| summarize arg_max(ingestion_time(), *) by Date \r\n| project Date=format_datetime(todatetime(Date), 'yyyy-MM-dd'), Score\r\n| sort by Date asc\r\n| limit 10", + "query": "SecurityScorecardRatings\r\n| where body_s == 'OverAll'and subject_s == '{Domain}'\r\n| project-rename Date = dateToday_s , Score = scoreToday_d \r\n| summarize arg_max(ingestion_time(), *) by Date \r\n| project Date=format_datetime(todatetime(Date), 'yyyy-MM-dd'), Score\r\n| sort by Date asc\r\n| limit 10", "size": 0, "showAnalytics": true, "title": "Score Trend", @@ -412,7 +412,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardFactor_CL\r\n| where body_s == 'Factor' and subject_s == '{Domain}'\r\n| summarize arg_max(ingestion_time(),*) by dateToday_s, factorDescription_s\r\n| summarize arg_max(dateToday_s,*) by factorDescription_s\r\n| extend gradeToday=case((scoreToday_d >= 90),\"A\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\"B\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\"C\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\"D\",\"F\"), gradeYesterday=case((scoreYesterday_d >= 90),\"A\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\"B\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\"C\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\"D\",\"F\") \r\n| project Factor_Name_s, factorDescription_s, gradeToday, scoreToday_d, scoreChange_d, gradeYesterday, scoreYesterday_d, dateToday_s \r\n| project-rename Description =factorDescription_s, [\"Current Grade\"] = gradeToday, [\"Current Score\"] = scoreToday_d, [\"Latest Score Change\"] = scoreChange_d, [\"Last Updated Grade\"] = gradeYesterday, [\"Last Updated Score\"] = scoreYesterday_d, [\"Date of Current Score\"] = dateToday_s, Factor = Factor_Name_s ", + "query": "SecurityScorecardFactor\r\n| where body_s == 'Factor' and subject_s == '{Domain}'\r\n| summarize arg_max(ingestion_time(),*) by dateToday_s, factorDescription_s\r\n| summarize arg_max(dateToday_s,*) by factorDescription_s\r\n| extend gradeToday=case((scoreToday_d >= 90),\"A\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\"B\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\"C\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\"D\",\"F\"), gradeYesterday=case((scoreYesterday_d >= 90),\"A\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\"B\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\"C\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\"D\",\"F\") \r\n| project Factor_Name_s, factorDescription_s, gradeToday, scoreToday_d, scoreChange_d, gradeYesterday, scoreYesterday_d, dateToday_s \r\n| project-rename Description =factorDescription_s, [\"Current Grade\"] = gradeToday, [\"Current Score\"] = scoreToday_d, [\"Latest Score Change\"] = scoreChange_d, [\"Last Updated Grade\"] = gradeYesterday, [\"Last Updated Score\"] = scoreYesterday_d, [\"Date of Current Score\"] = dateToday_s, Factor = Factor_Name_s ", "size": 0, "showAnalytics": true, "title": "My Scorecard Factors", @@ -623,7 +623,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardIssues_CL\r\n| where subject_s == '{Domain}'\r\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| extend Factor=strcat_array(split(Factor_s,\"_\"),\" \") \r\n| summarize [\"Issue Count\"]= count() by Factor ", + "query": "SecurityScorecardIssue\r\n| where subject_s == '{Domain}'\r\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| extend Factor=strcat_array(split(Factor_s,\"_\"),\" \") \r\n| summarize [\"Issue Count\"]= count() by Factor ", "size": 0, "showAnalytics": true, "title": "Issue Count by Factor", @@ -645,7 +645,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardIssues_CL\r\n| where subject_s == '{Domain}'\r\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| extend issue_name=strcat_array(split(issueType_s,\"_\"),\" \"), serverity_priority = case(severity_value_s == \"high\",1,severity_value_s == \"medium\",2,severity_value_s == \"low\",3,severity_value_s == \"info\",4,5)\r\n| summarize count() by severity_value_s, serverity_priority\r\n| sort by serverity_priority asc\r\n| project-away serverity_priority\r\n| render barchart\r\n", + "query": "SecurityScorecardIssue\r\n| where subject_s == '{Domain}'\r\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| extend issue_name=strcat_array(split(issueType_s,\"_\"),\" \"), serverity_priority = case(severity_value_s == \"high\",1,severity_value_s == \"medium\",2,severity_value_s == \"low\",3,severity_value_s == \"info\",4,5)\r\n| summarize count() by severity_value_s, serverity_priority\r\n| sort by serverity_priority asc\r\n| project-away serverity_priority\r\n| render barchart\r\n", "size": 0, "title": "Issue Types by Severity", "timeContextFromParameter": "Timer", @@ -828,7 +828,7 @@ "type": 1, "description": "Provide your company name", "isRequired": true, - "query": "SecurityScorecardRatings_CL\r\n| where portfolioName_s == \"NA\"\r\n| distinct subject_s\r\n| limit 1", + "query": "SecurityScorecardRatings\r\n| where portfolioName_s == \"NA\"\r\n| distinct subject_s\r\n| limit 1", "timeContext": { "durationMs": 0 }, @@ -859,7 +859,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardRatings_CL\r\n| where isnotempty(portfolioId_g)\r\n| distinct portfolioName_s", + "query": "SecurityScorecardRatings\r\n| where isnotempty(portfolioName_s)\r\n| distinct portfolioName_s", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -897,7 +897,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardRatings_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\r\n| distinct subject_s\r\n| sort by subject_s asc", + "query": "SecurityScorecardRatings\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\r\n| distinct subject_s\r\n| sort by subject_s asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -935,7 +935,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardRatings_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| distinct industry_s\r\n| sort by industry_s asc", + "query": "SecurityScorecardRatings\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| distinct industry_s\r\n| sort by industry_s asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -970,7 +970,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardRatings_CL\r\n| where body_s == \"OverAll\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and subject_s != '{Domain}'\r\n| summarize arg_max(ingestion_time(), *) by dateToday_s, subject_s, portfolioName_s\r\n| summarize arg_max(dateToday_s, *) by subject_s, portfolioName_s \r\n| extend [\"Current Grade\"]=case((scoreToday_d >= 90),\"A\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\"B\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\"C\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\"D\",\"F\"), [\"Last Updated Grade\"]=case((scoreYesterday_d >= 90),\"A\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\"B\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\"C\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\"D\",\"F\"), Industry=strcat_array(split(industry_s,\"_\"),\" \"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors')\r\n| project subject_s, portfolioName_s, Industry, [\"Date of Current Score\"] = format_datetime(todatetime(dateToday_s), 'yyyy-MM-dd'), scoreToday_d, [\"Current Grade\"], scoreYesterday_d, ['Last Updated Grade'], Details \r\n| project-rename Company = subject_s , [\"Current Score\"] = scoreToday_d, [\"Last Updated Score\"] = scoreYesterday_d \r\n| sort by Company asc, portfolioName_s asc", + "query": "SecurityScorecardRatings\r\n| where body_s == \"OverAll\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and subject_s != '{Domain}'\r\n| summarize arg_max(ingestion_time(), *) by dateToday_s, subject_s, portfolioName_s\r\n| summarize arg_max(dateToday_s, *) by subject_s, portfolioName_s \r\n| extend [\"Current Grade\"]=case((scoreToday_d >= 90),\"A\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\"B\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\"C\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\"D\",\"F\"), [\"Last Updated Grade\"]=case((scoreYesterday_d >= 90),\"A\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\"B\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\"C\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\"D\",\"F\"), Industry=strcat_array(split(industry_s,\"_\"),\" \"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors')\r\n| project subject_s, portfolioName_s, Industry, [\"Date of Current Score\"] = format_datetime(todatetime(dateToday_s), 'yyyy-MM-dd'), scoreToday_d, [\"Current Grade\"], scoreYesterday_d, ['Last Updated Grade'], Details \r\n| project-rename Company = subject_s , [\"Current Score\"] = scoreToday_d, [\"Last Updated Score\"] = scoreYesterday_d \r\n| sort by Company asc, portfolioName_s asc", "size": 0, "showAnalytics": true, "title": "Top Level Grade and Score by Company", @@ -1200,7 +1200,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardFactor_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| distinct Factor_Name_s\r\n| sort by Factor_Name_s asc", + "query": "SecurityScorecardFactor\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| distinct Factor_Name_s\r\n| sort by Factor_Name_s asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -1262,7 +1262,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardFactor_CL\r\n| where body_s == \"Factor\" and subject_s != '{Domain}' and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| summarize arg_max(ingestion_time(), *) by dateToday_s, subject_s, Factor_Name_s, portfolioName_s\r\n| summarize arg_max(dateToday_s, *) by subject_s, Factor_Name_s, portfolioName_s\r\n| extend [\"Current Grade\"] = case(scoreToday_d>=90, \"A\", scoreToday_d>=80 and scoreToday_d<=89, \"B\", scoreToday_d>=70 and scoreToday_d<=79, \"C\", scoreToday_d>=60 and scoreToday_d<=69, \"D\", \"F\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors') \r\n| where ('*' in ({Factor}) or Factor_Name_s in ({Factor})) and [\"Current Grade\"] in ({Grade})\r\n| project subject_s, portfolioName_s, Factor_Name_s, factorDescription_s , scoreToday_d, [\"Current Grade\"], Details \r\n| project-rename Company = subject_s, Factor = Factor_Name_s, Description = factorDescription_s, [\"Current Score\"] = scoreToday_d\r\n| sort by Factor asc, Company asc", + "query": "SecurityScorecardFactor\r\n| where body_s == \"Factor\" and subject_s != '{Domain}' and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| summarize arg_max(ingestion_time(), *) by dateToday_s, subject_s, Factor_Name_s, portfolioName_s\r\n| summarize arg_max(dateToday_s, *) by subject_s, Factor_Name_s, portfolioName_s\r\n| extend [\"Current Grade\"] = case(scoreToday_d>=90, \"A\", scoreToday_d>=80 and scoreToday_d<=89, \"B\", scoreToday_d>=70 and scoreToday_d<=79, \"C\", scoreToday_d>=60 and scoreToday_d<=69, \"D\", \"F\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors') \r\n| where ('*' in ({Factor}) or Factor_Name_s in ({Factor})) and [\"Current Grade\"] in ({Grade})\r\n| project subject_s, portfolioName_s, Factor_Name_s, factorDescription_s , scoreToday_d, [\"Current Grade\"], Details \r\n| project-rename Company = subject_s, Factor = Factor_Name_s, Description = factorDescription_s, [\"Current Score\"] = scoreToday_d\r\n| sort by Factor asc, Company asc", "size": 0, "showAnalytics": true, "title": "Top Level Grade and Score by Factor", @@ -1392,7 +1392,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssues_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| extend issue_type = strcat_array(split(issueType_s,\"_\"),\" \") \r\n| distinct issue_type\r\n| sort by issue_type asc", + "query": "SecurityScorecardIssue\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| extend issue_type = strcat_array(split(issueType_s,\"_\"),\" \") \r\n| distinct issue_type\r\n| sort by issue_type asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -1456,7 +1456,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardIssues_CL\r\n| where body_s == 'Issue' and groupStatus_s == 'active' and subject_s != '{Domain}' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and severity_value_s in ({Severity})\r\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| summarize [\"Findings Count\"] = sum(findingsCount_d), [\"Issue Count\"] = count(issueName_s), src = arg_max(date_s,Factor_s) by issueType_s, subject_s, severity_value_s\r\n| extend [\"Issue Type\"]=strcat_array(split(issueType_s,\"_\"),\" \") , Severity=case((severity_value_s == \"info\"),\"Info\",(severity_value_s == \"low\"),\"Low\",(severity_value_s == \"medium\"),\"Medium\",(severity_value_s == \"high\"),\"High\",(severity_value_s == \"positive\"),\"Positive\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\r\n| where ('*' in ({IssueType}) or [\"Issue Type\"] in ({IssueType})) \r\n| project subject_s, Severity, [\"Issue Type\"], [\"Findings Count\"], [\"Issue Count\"], Details \r\n| order by [\"Issue Type\"] asc, subject_s asc\r\n| project-rename Company=subject_s", + "query": "SecurityScorecardIssue\r\n| where body_s == 'Issue' and groupStatus_s == 'active' and subject_s != '{Domain}' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and severity_value_s in ({Severity})\r\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| summarize [\"Findings Count\"] = sum(findingsCount_d), [\"Issue Count\"] = count(issueName_s), src = arg_max(date_s,Factor_s) by issueType_s, subject_s, severity_value_s\r\n| extend [\"Issue Type\"]=strcat_array(split(issueType_s,\"_\"),\" \") , Severity=case((severity_value_s == \"info\"),\"Info\",(severity_value_s == \"low\"),\"Low\",(severity_value_s == \"medium\"),\"Medium\",(severity_value_s == \"high\"),\"High\",(severity_value_s == \"positive\"),\"Positive\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\r\n| where ('*' in ({IssueType}) or [\"Issue Type\"] in ({IssueType})) \r\n| project subject_s, Severity, [\"Issue Type\"], [\"Findings Count\"], [\"Issue Count\"], Details \r\n| order by [\"Issue Type\"] asc, subject_s asc\r\n| project-rename Company=subject_s", "size": 0, "showAnalytics": true, "title": "Issues per Vendor", @@ -1655,7 +1655,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssues_CL\r\n| where isnotempty(portfolioId_g)\r\n| distinct portfolioName_s", + "query": "SecurityScorecardIssue\r\n| where isnotempty(portfolioName_s)\r\n| distinct portfolioName_s", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -1693,7 +1693,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssues_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\r\n| distinct subject_s\r\n| sort by subject_s asc", + "query": "SecurityScorecardIssue\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\r\n| distinct subject_s\r\n| sort by subject_s asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -1731,7 +1731,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssues_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\r\n| extend factor = strcat_array(split(Factor_s,\"_\"),\" \")\r\n| distinct value=Factor_s, lable=factor\r\n| sort by lable asc", + "query": "SecurityScorecardIssue\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\r\n| extend factor = strcat_array(split(Factor_s,\"_\"),\" \")\r\n| distinct value=Factor_s, lable=factor\r\n| sort by lable asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -1769,7 +1769,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssues_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\r\n| distinct industry_s\r\n| sort by industry_s asc", + "query": "SecurityScorecardIssue\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\r\n| distinct industry_s\r\n| sort by industry_s asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -1846,7 +1846,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardIssues_CL\r\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and ('*' in ({Severity}) or severity_value_s in ({Severity}))\r\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| summarize arg_max(date_s,*), src = arg_max(date_s,Factor_s),[\"Findings Count\"] = sum(findingsCount_d), Active = sumif(findingsCount_d, groupStatus_s == \"active\"), Resolved = sumif(findingsCount_d, groupStatus_s == \"resolved\") by issueType_s\r\n| join kind=leftouter (SecurityScorecardFactor_CL \r\n | distinct Factor_s,factorDescription_s\r\n | project Factor_s, factorDescription_s) on Factor_s\r\n| extend severity_index=case((severity_value_s == \"high\"),1,(severity_value_s == \"medium\"),2,(severity_value_s == \"low\"),3,(severity_value_s == \"info\"),4,5), severity_value_s=case((severity_value_s == \"info\"),\"Info\",(severity_value_s == \"low\"),\"Low\",(severity_value_s == \"medium\"),\"Medium\",(severity_value_s == \"high\"),\"High\",(severity_value_s == \"positive\"),\"Positive\",severity_value_s), Factor=strcat_array(split(Factor_s,\"_\"),\" \"), [\"Issue type\"]=strcat_array(split(issueType_s,\"_\"),\" \"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s)\r\n| sort by severity_index asc, findingsCount_d desc\r\n| project [\"Issue type\"], Factor, severity_value_s, factorDescription_s, [\"Findings Count\"], Active, Resolved, Details\r\n| project-rename Description = factorDescription_s, Severity = severity_value_s", + "query": "SecurityScorecardIssue\r\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and ('*' in ({Severity}) or severity_value_s in ({Severity}))\r\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| summarize arg_max(date_s,*), src = arg_max(date_s,Factor_s),[\"Findings Count\"] = sum(findingsCount_d), Active = sumif(findingsCount_d, groupStatus_s == \"active\"), Resolved = sumif(findingsCount_d, groupStatus_s == \"resolved\") by issueType_s\r\n| join kind=leftouter (SecurityScorecardFactor \r\n | distinct Factor_s,factorDescription_s\r\n | project Factor_s, factorDescription_s) on Factor_s\r\n| extend severity_index=case((severity_value_s == \"high\"),1,(severity_value_s == \"medium\"),2,(severity_value_s == \"low\"),3,(severity_value_s == \"info\"),4,5), severity_value_s=case((severity_value_s == \"info\"),\"Info\",(severity_value_s == \"low\"),\"Low\",(severity_value_s == \"medium\"),\"Medium\",(severity_value_s == \"high\"),\"High\",(severity_value_s == \"positive\"),\"Positive\",severity_value_s), Factor=strcat_array(split(Factor_s,\"_\"),\" \"), [\"Issue type\"]=strcat_array(split(issueType_s,\"_\"),\" \"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s)\r\n| sort by severity_index asc, findingsCount_d desc\r\n| project [\"Issue type\"], Factor, severity_value_s, factorDescription_s, [\"Findings Count\"], Active, Resolved, Details\r\n| project-rename Description = factorDescription_s, Severity = severity_value_s", "size": 0, "showAnalytics": true, "title": "Active Issues", @@ -1966,7 +1966,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardIssues_CL\r\n| where body_s == 'Issue' and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\r\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| summarize [\"Issue Count\"] = count(issueType_s) by Factor_s \r\n| extend Factor = strcat_array(split(Factor_s,\"_\"),\" \")\r\n| project Factor, [\"Issue Count\"] \r\n", + "query": "SecurityScorecardIssue\r\n| where body_s == 'Issue' and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\r\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| summarize [\"Issue Count\"] = count(issueType_s) by Factor_s \r\n| extend Factor = strcat_array(split(Factor_s,\"_\"),\" \")\r\n| project Factor, [\"Issue Count\"] \r\n", "size": 0, "showAnalytics": true, "title": "Issue Types by Factor", @@ -1988,7 +1988,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardIssues_CL\r\n| where body_s == \"Issue\" and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\r\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| summarize count() by severity_value_s \r\n| extend severity_value_s = case((severity_value_s == 'info'), \"Info\",(severity_value_s == 'low'), \"Low\",(severity_value_s == 'medium'), \"Medium\",(severity_value_s == 'high'), \"High\", (severity_value_s == 'positive'), \"Positive\", severity_value_s)\r\n| render piechart", + "query": "SecurityScorecardIssue\r\n| where body_s == \"Issue\" and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\r\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| summarize count() by severity_value_s \r\n| extend severity_value_s = case((severity_value_s == 'info'), \"Info\",(severity_value_s == 'low'), \"Low\",(severity_value_s == 'medium'), \"Medium\",(severity_value_s == 'high'), \"High\", (severity_value_s == 'positive'), \"Positive\", severity_value_s)\r\n| render piechart", "size": 3, "showAnalytics": true, "title": "Count by Severity", @@ -2150,7 +2150,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssues_CL\r\n| where isnotempty(portfolioId_g)\r\n| distinct portfolioName_s", + "query": "SecurityScorecardIssue\r\n| where isnotempty(portfolioName_s)\r\n| distinct portfolioName_s", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -2188,7 +2188,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssues_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\r\n| distinct subject_s\r\n| sort by subject_s asc", + "query": "SecurityScorecardIssue\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\r\n| distinct subject_s\r\n| sort by subject_s asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -2226,7 +2226,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssues_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| distinct industry_s\r\n| sort by industry_s asc", + "query": "SecurityScorecardIssue\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| distinct industry_s\r\n| sort by industry_s asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -2269,7 +2269,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardIssues_CL\r\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and issueType_s in ({CVE}) and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| summarize [\"Findings Count\"] = sum(findingsCount_d), [\"Issue Count\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \"active\"), Resolved = sumif(findingsCount_d, groupStatus_s == \"resolved\") by issueType_s, subject_s, severity_value_s\r\n| extend CVE=strcat_array(split(issueType_s,\"_\"),\" \"), severity_priority = case(severity_value_s == \"high\",1,severity_value_s == \"medium\",2,severity_value_s == \"low\",3,severity_value_s == \"info\",4,5), Severity=case((severity_value_s == \"info\"),\"Info\",(severity_value_s == \"low\"),\"Low\",(severity_value_s == \"medium\"),\"Medium\",(severity_value_s == \"high\"),\"High\",(severity_value_s == \"positive\"),\"Positive\", severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s), Factor = strcat_array(split(Factor_s,\"_\"),\" \")\r\n| sort by CVE asc, severity_priority asc, subject_s asc\r\n| project subject_s, CVE, Factor, Severity, ['Findings Count'], [\"Issue Count\"], Active, Resolved, Details\r\n| project-rename Company = subject_s", + "query": "SecurityScorecardIssue\r\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and issueType_s in ({CVE}) and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| summarize [\"Findings Count\"] = sum(findingsCount_d), [\"Issue Count\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \"active\"), Resolved = sumif(findingsCount_d, groupStatus_s == \"resolved\") by issueType_s, subject_s, severity_value_s\r\n| extend CVE=strcat_array(split(issueType_s,\"_\"),\" \"), severity_priority = case(severity_value_s == \"high\",1,severity_value_s == \"medium\",2,severity_value_s == \"low\",3,severity_value_s == \"info\",4,5), Severity=case((severity_value_s == \"info\"),\"Info\",(severity_value_s == \"low\"),\"Low\",(severity_value_s == \"medium\"),\"Medium\",(severity_value_s == \"high\"),\"High\",(severity_value_s == \"positive\"),\"Positive\", severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s), Factor = strcat_array(split(Factor_s,\"_\"),\" \")\r\n| sort by CVE asc, severity_priority asc, subject_s asc\r\n| project subject_s, CVE, Factor, Severity, ['Findings Count'], [\"Issue Count\"], Active, Resolved, Details\r\n| project-rename Company = subject_s", "size": 0, "showAnalytics": true, "title": "Issues per Vendor", @@ -2489,7 +2489,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssues_CL\r\n| where isnotempty(portfolioId_g)\r\n| distinct portfolioName_s", + "query": "SecurityScorecardIssue\r\n| where isnotempty(portfolioName_s)\r\n| distinct portfolioName_s", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -2527,7 +2527,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssues_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\r\n| distinct subject_s\r\n| sort by subject_s asc", + "query": "SecurityScorecardIssue\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\r\n| distinct subject_s\r\n| sort by subject_s asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -2565,7 +2565,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssues_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| distinct industry_s\r\n| sort by industry_s asc", + "query": "SecurityScorecardIssue\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| distinct industry_s\r\n| sort by industry_s asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -2608,7 +2608,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardIssues_CL\r\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and issueType_s in ({Ransomware})\r\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| summarize [\"Findings Count\"] = sum(findingsCount_d),[\"Issue Count\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \"active\"), Resolved = sumif(findingsCount_d, groupStatus_s == \"resolved\") by issueType_s, subject_s, severity_value_s \r\n| extend Ransomware=strcat_array(split(issueType_s,\"_\"),\" \"), Severity=case((severity_value_s == \"info\"),\"Info\",(severity_value_s == \"low\"),\"Low\",(severity_value_s == \"medium\"),\"Medium\",(severity_value_s == \"high\"),\"High\",(severity_value_s == \"positive\"),\"Positive\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\r\n| project subject_s, Ransomware, Severity, ['Findings Count'], ['Issue Count'], Active, Resolved, Details\r\n| project-rename Company = subject_s\r\n| sort by Ransomware asc, Company asc", + "query": "SecurityScorecardIssue\r\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and issueType_s in ({Ransomware})\r\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| summarize [\"Findings Count\"] = sum(findingsCount_d),[\"Issue Count\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \"active\"), Resolved = sumif(findingsCount_d, groupStatus_s == \"resolved\") by issueType_s, subject_s, severity_value_s \r\n| extend Ransomware=strcat_array(split(issueType_s,\"_\"),\" \"), Severity=case((severity_value_s == \"info\"),\"Info\",(severity_value_s == \"low\"),\"Low\",(severity_value_s == \"medium\"),\"Medium\",(severity_value_s == \"high\"),\"High\",(severity_value_s == \"positive\"),\"Positive\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\r\n| project subject_s, Ransomware, Severity, ['Findings Count'], ['Issue Count'], Active, Resolved, Details\r\n| project-rename Company = subject_s\r\n| sort by Ransomware asc, Company asc", "size": 0, "showAnalytics": true, "title": "Issues per Vendor", @@ -2800,7 +2800,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardRatings_CL\r\n| where isnotempty(portfolioId_g)\r\n| distinct portfolioName_s", + "query": "SecurityScorecardRatings\r\n| where isnotempty(portfolioName_s)\r\n| distinct portfolioName_s", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -2838,7 +2838,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardRatings_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\r\n| distinct subject_s\r\n| sort by subject_s asc", + "query": "SecurityScorecardRatings\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\r\n| distinct subject_s\r\n| sort by subject_s asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -2876,7 +2876,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssues_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| extend label = strcat_array(split(Factor_s,\"_\"),\" \"),value = Factor_s\r\n| distinct value, label\r\n| sort by label asc", + "query": "SecurityScorecardIssue\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| extend label = strcat_array(split(Factor_s,\"_\"),\" \"),value = Factor_s\r\n| distinct value, label\r\n| sort by label asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -2914,7 +2914,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardRatings_CL\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| distinct industry_s\r\n| sort by industry_s asc", + "query": "SecurityScorecardRatings\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| distinct industry_s\r\n| sort by industry_s asc", "typeSettings": { "additionalResourceOptions": [ "value::all" @@ -2949,7 +2949,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardRatings_CL\r\n| where body_s =='OverAll' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| summarize arg_max(dateToday_s,*) by subject_s\r\n| extend Grade = case((scoreToday_d >= 90), \"A\",(scoreToday_d>=80 and scoreToday_d<=89), \"B\",(scoreToday_d>=70 and scoreToday_d<=79), \"C\",(scoreToday_d>=60 and scoreToday_d<=69), \"D\",isempty(scoreToday_d),\"\",\"F\") \r\n| project Grade, subject_s, scoreToday_d\r\n| project-rename Company = subject_s, Score = scoreToday_d\r\n| sort by Score asc\r\n| limit 10", + "query": "SecurityScorecardRatings\r\n| where body_s =='OverAll' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| summarize arg_max(dateToday_s,*) by subject_s\r\n| extend Grade = case((scoreToday_d >= 90), \"A\",(scoreToday_d>=80 and scoreToday_d<=89), \"B\",(scoreToday_d>=70 and scoreToday_d<=79), \"C\",(scoreToday_d>=60 and scoreToday_d<=69), \"D\",isempty(scoreToday_d),\"\",\"F\") \r\n| project Grade, subject_s, scoreToday_d\r\n| project-rename Company = subject_s, Score = scoreToday_d\r\n| sort by Score asc\r\n| limit 10", "size": 0, "showAnalytics": true, "title": "Worst Performing Companies", @@ -3019,7 +3019,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardIssues_CL\r\n| where body_s == 'Issue' and groupStatus_s == \"active\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\r\n| summarize arg_max(date_s,*), [\"Company Count\"] = dcount(subject_s,4) by issueName_s, severity_value_s, issueType_s, Factor_s\r\n| extend serverity_priority = case(severity_value_s == \"high\",1,severity_value_s == \"medium\",2,severity_value_s == \"low\",3,severity_value_s == \"info\",4,5), severity_value=case((severity_value_s == \"info\"),\"Info\",(severity_value_s == \"low\"),\"Low\",(severity_value_s == \"medium\"),\"Medium\",(severity_value_s == \"high\"),\"High\",(severity_value_s == \"positive\"),\"Positive\",severity_value_s) \r\n| extend Issues=trim(@\"'\",issueName_s), Factor=strcat_array(split(Factor_s,\"_\"),\" \") \r\n| sort by serverity_priority asc, [\"Company Count\"] desc\r\n| project Severity = severity_value, Issues, Factor = Factor, [\"Company Count\"]", + "query": "SecurityScorecardIssue\r\n| where body_s == 'Issue' and groupStatus_s == \"active\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\r\n| summarize arg_max(date_s,*), [\"Company Count\"] = dcount(subject_s,4) by issueName_s, severity_value_s, issueType_s, Factor_s\r\n| extend serverity_priority = case(severity_value_s == \"high\",1,severity_value_s == \"medium\",2,severity_value_s == \"low\",3,severity_value_s == \"info\",4,5), severity_value=case((severity_value_s == \"info\"),\"Info\",(severity_value_s == \"low\"),\"Low\",(severity_value_s == \"medium\"),\"Medium\",(severity_value_s == \"high\"),\"High\",(severity_value_s == \"positive\"),\"Positive\",severity_value_s) \r\n| extend Issues=trim(@\"'\",issueName_s), Factor=strcat_array(split(Factor_s,\"_\"),\" \") \r\n| sort by serverity_priority asc, [\"Company Count\"] desc\r\n| project Severity = severity_value, Issues, Factor = Factor, [\"Company Count\"]", "size": 0, "showAnalytics": true, "title": "Most Critical Issues", @@ -3122,7 +3122,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardIssues_CL \r\n| where body_s == \"Issue\" and groupStatus_s == \"active\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and severity_value_s in ({Severity})\r\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| extend totalcount = toscalar(SecurityScorecardIssues_CL | summarize dcount(subject_s))\r\n| summarize subject = dcount(subject_s), totalCount = max(totalcount) by issueName_s, issueType_s, Factor_s\r\n| extend [\"% of Portfolio Affected\"] = round((todouble(subject)/todouble(totalCount))*100,0)\r\n| extend Factor = strcat_array(split(Factor_s,\"_\"),\" \") \r\n| project Factor, issueName_s, [\"% of Portfolio Affected\"]\r\n| sort by [\"% of Portfolio Affected\"] desc\r\n| project-rename Issues = issueName_s", + "query": "SecurityScorecardIssue \r\n| where body_s == \"Issue\" and groupStatus_s == \"active\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and severity_value_s in ({Severity})\r\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\r\n| extend totalcount = toscalar(SecurityScorecardIssue | summarize dcount(subject_s))\r\n| summarize subject = dcount(subject_s), totalCount = max(totalcount) by issueName_s, issueType_s, Factor_s\r\n| extend [\"% of Portfolio Affected\"] = round((todouble(subject)/todouble(totalCount))*100,0)\r\n| extend Factor = strcat_array(split(Factor_s,\"_\"),\" \") \r\n| project Factor, issueName_s, [\"% of Portfolio Affected\"]\r\n| sort by [\"% of Portfolio Affected\"] desc\r\n| project-rename Issues = issueName_s", "size": 0, "showAnalytics": true, "title": "Most Common Issues", diff --git a/Workbooks/WorkbooksMetadata.json b/Workbooks/WorkbooksMetadata.json index 5fe1cb19c7b..7609cd23bff 100644 --- a/Workbooks/WorkbooksMetadata.json +++ b/Workbooks/WorkbooksMetadata.json @@ -6071,16 +6071,22 @@ { "workbookKey": "SecurityScorecardWorkbook", "logoFileName": "SecurityScorecard-Cybersecurity-Ratings.svg", - "description": "This Workbook provides immediate insight into the data coming from SecurityScorecard's three Sentinel data connectors: SecurityScorecard Cybersecurity Ratings, SecurityScorecard Cybersecurity Ratings - Factors, and SecurityScorecard Cybersecurity Ratings - Issues.", + "description": "This Workbook provides immediate insight into the data coming from SecurityScorecard's data connectors within Microsoft Sentinel: SecurityScorecard Cybersecurity Ratings, SecurityScorecard Cybersecurity Ratings - Factors, and SecurityScorecard Cybersecurity Ratings - Issues.", "dataTypesDependencies": [ "SecurityScorecardFactor_CL", "SecurityScorecardIssues_CL", - "SecurityScorecardRatings_CL" + "SecurityScorecardRatings_CL", + "SecurityScorecardFactorHistory_CL", + "SecurityScorecardIssuesHistory_CL", + "SecurityScorecardRatingsHistory_CL" ], "dataConnectorsDependencies": [ "SecurityScorecardFactorAzureFunctions", "SecurityScorecardIssueAzureFunctions", - "SecurityScorecardRatingsAzureFunctions" + "SecurityScorecardRatingsAzureFunctions", + "SecurityScorecardFactorCCPDefinition", + "SecurityScorecardIssueCCPDefinition", + "SecurityScorecardRatingsCCPDefinition" ], "previewImagesFileNames": [ "SecurityScorecardBlack1.png", From 56c62abbaf01832431231139dc8962962c878092 Mon Sep 17 00:00:00 2001 From: Shrey Sonar Date: Mon, 1 Jun 2026 18:03:45 +0530 Subject: [PATCH 2/9] remove portfolio id filters, fix lookups, nested attributes --- .../SecurityScorecardFactor_DCR.json | 22 +-- ...SecurityScorecardFactor_PollingConfig.json | 6 +- ...urityScorecardFactor_poller_connector.json | 2 +- .../SecurityScorecardIssue_DCR.json | 18 +-- .../SecurityScorecardIssue_PollingConfig.json | 6 +- ...curityScorecardIssue_poller_connector.json | 2 +- .../SecurityScorecardRatings_DCR.json | 16 +-- ...ecurityScorecardRatings_PollingConfig.json | 48 +------ ...rityScorecardRatings_poller_connector.json | 2 +- .../Package/3.0.0.zip | Bin 27977 -> 28198 bytes .../Package/mainTemplate.json | 126 ++++-------------- .../Parsers/SecurityScorecardFactor.yaml | 12 +- .../Parsers/SecurityScorecardIssue.yaml | 12 +- .../ReleaseNotes.md | 2 + .../Workbooks/SecurityScorecardWorkbook.json | 62 +++++---- 15 files changed, 100 insertions(+), 236 deletions(-) diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DCR.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DCR.json index 66436a8e4c4..2ab39baba3d 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DCR.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DCR.json @@ -9,28 +9,16 @@ "Custom-SecurityScorecardFactorHistory_CL": { "columns": [ { - "name": "date", - "type": "datetime" + "name": "domain", + "type": "string" }, { "name": "factors", "type": "dynamic" }, { - "name": "company_domain", - "type": "string" - }, - { - "name": "industry", - "type": "string" - }, - { - "name": "portfolio_id", - "type": "string" - }, - { - "name": "portfolio_name", - "type": "string" + "name": "date", + "type": "datetime" } ] } @@ -51,7 +39,7 @@ "destinations": [ "clv2ws1" ], - "transformKql": "source | extend TimeGenerated = ['date'], score_date = ['date'], domain = company_domain | project-away ['date'], company_domain", + "transformKql": "source | extend TimeGenerated = todatetime(['date']), score_date = todatetime(['date']), domain = tostring(domain), factors = todynamic(factors) | project TimeGenerated, score_date, factors, domain", "outputStream": "Custom-SecurityScorecardFactorHistory_CL" } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json index 18f6ab8be93..5238f9d126d 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json @@ -46,19 +46,18 @@ "nextSteps": [ { "stepId": "portfolioCompanies", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project portfolio_id = tostring(res['id'])" } ] }, "stepCollectorConfigs": { "portfolioCompanies": { - "shouldJoinNestedData": false, "stepInfo": { "stepType": "Nested", "nextSteps": [ { "stepId": "factorHistory", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain']), industry = tostring(res['industry'])" + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project company_domain = tostring(res['domain'])" } ] }, @@ -84,7 +83,6 @@ } }, "factorHistory": { - "shouldJoinNestedData": true, "request": { "apiEndpoint": "{{BaseUrl}}/companies/$company_domain$/history/factors/score", "httpMethod": "GET", diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/azuredeploy_SecurityScorecardFactor_poller_connector.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/azuredeploy_SecurityScorecardFactor_poller_connector.json index 374331c85d3..2c6b9e2d21a 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/azuredeploy_SecurityScorecardFactor_poller_connector.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/azuredeploy_SecurityScorecardFactor_poller_connector.json @@ -579,4 +579,4 @@ } ], "outputs": {} -} +} \ No newline at end of file diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DCR.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DCR.json index 51a0d88426c..252dd6e868e 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DCR.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DCR.json @@ -47,22 +47,6 @@ { "name": "detail_url", "type": "string" - }, - { - "name": "company_domain", - "type": "string" - }, - { - "name": "industry", - "type": "string" - }, - { - "name": "portfolio_id", - "type": "string" - }, - { - "name": "portfolio_name", - "type": "string" } ] } @@ -83,7 +67,7 @@ "destinations": [ "clv2ws1" ], - "transformKql": "source | where issue_type != 'breach' | extend TimeGenerated = ['date'], issue_date = ['date'], domain = company_domain | project-away ['date'], company_domain", + "transformKql": "source | where tostring(issue_type) != 'breach' | extend TimeGenerated = todatetime(['date']), issue_date = todatetime(['date']), domain = extract('companies/([^/]+)/', 1, tostring(detail_url)) | project TimeGenerated, id, issue_date, event_type, group_status, issue_count, total_score_impact, issue_type, severity, factor, detail_url, domain", "outputStream": "Custom-SecurityScorecardIssuesHistory_CL" } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json index ba82ebf8623..1fa715e8225 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json @@ -46,19 +46,18 @@ "nextSteps": [ { "stepId": "portfolioCompanies", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project portfolio_id = tostring(res['id'])" } ] }, "stepCollectorConfigs": { "portfolioCompanies": { - "shouldJoinNestedData": false, "stepInfo": { "stepType": "Nested", "nextSteps": [ { "stepId": "issueDetails", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain']), industry = tostring(res['industry'])" + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project company_domain = tostring(res['domain'])" } ] }, @@ -84,7 +83,6 @@ } }, "issueDetails": { - "shouldJoinNestedData": true, "request": { "apiEndpoint": "{{BaseUrl}}/companies/$company_domain$/history/events", "httpMethod": "GET", diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/azuredeploy_SecurityScorecardIssue_poller_connector.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/azuredeploy_SecurityScorecardIssue_poller_connector.json index 11283de7e26..db038d15a06 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/azuredeploy_SecurityScorecardIssue_poller_connector.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/azuredeploy_SecurityScorecardIssue_poller_connector.json @@ -643,4 +643,4 @@ } ], "outputs": {} -} +} \ No newline at end of file diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DCR.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DCR.json index 336c7b2974f..00b5e5373bc 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DCR.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DCR.json @@ -9,21 +9,17 @@ "Custom-SecurityScorecardRatingsHistory_CL": { "columns": [ { - "name": "date", - "type": "datetime" - }, - { - "name": "score", - "type": "long" - }, - { - "name": "company_domain", + "name": "domain", "type": "string" }, { "name": "industry", "type": "string" }, + { + "name": "score", + "type": "long" + }, { "name": "portfolio_id", "type": "string" @@ -51,7 +47,7 @@ "destinations": [ "clv2ws1" ], - "transformKql": "source | extend TimeGenerated = ['date'], score_date = ['date'], domain = company_domain | project-away ['date'], company_domain", + "transformKql": "source | extend TimeGenerated = now(), score_date = now(), domain = tostring(domain), industry = tostring(industry) | project TimeGenerated, score_date, score, domain, industry, portfolio_id, portfolio_name", "outputStream": "Custom-SecurityScorecardRatingsHistory_CL" } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json index 36be1dec061..9e4a4cabaa4 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json @@ -8,6 +8,10 @@ "properties": { "connectorDefinitionName": "SecurityScorecardRatingsCCPDefinition", "dataType": "SecurityScorecardRatingsHistory_CL", + "addOnAttributes": { + "portfolio_id": "$portfolio_id$", + "portfolio_name": "$portfolio_name$" + }, "dcrConfig": { "streamName": "Custom-SecurityScorecardRatingsHistory_CL", "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", @@ -22,8 +26,6 @@ "request": { "apiEndpoint": "{{BaseUrl}}/portfolios", "httpMethod": "GET", - "queryWindowInMin": 10080, - "queryTimeFormat": "yyyy-MM-dd", "rateLimitQPS": 1, "retryCount": 3, "timeoutInSeconds": 60, @@ -46,22 +48,12 @@ "nextSteps": [ { "stepId": "portfolioCompanies", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" } ] }, "stepCollectorConfigs": { "portfolioCompanies": { - "shouldJoinNestedData": false, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "ratingsHistory", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain']), industry = tostring(res['industry'])" - } - ] - }, "request": { "apiEndpoint": "{{BaseUrl}}/portfolios/$portfolio_id$/companies", "httpMethod": "GET", @@ -82,36 +74,6 @@ "$.entries" ] } - }, - "ratingsHistory": { - "shouldJoinNestedData": true, - "request": { - "apiEndpoint": "{{BaseUrl}}/companies/$company_domain$/history/score", - "httpMethod": "GET", - "queryWindowInMin": 10080, - "queryTimeFormat": "yyyy-MM-dd", - "rateLimitQPS": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "logResponseContent": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - }, - "queryParameters": { - "from": "{_QueryWindowStartTime}", - "to": "{_QueryWindowEndTime}", - "timing": "daily" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - } } } } diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/azuredeploy_SecurityScorecardRatings_poller_connector.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/azuredeploy_SecurityScorecardRatings_poller_connector.json index 7d4e6488240..5175e1a1444 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/azuredeploy_SecurityScorecardRatings_poller_connector.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/azuredeploy_SecurityScorecardRatings_poller_connector.json @@ -579,4 +579,4 @@ } ], "outputs": {} -} +} \ No newline at end of file diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip index b41d5d33adeaf50a0d0a9cf4c693ebcf2954f4d5..a7deee6da58e04a6bda03e097a9018fe1c0a0d4e 100644 GIT binary patch delta 25923 zcmV)rK$*YE+5x8A0S!<~0|XQR000O8K#0My4dw?9K#0LycOUG+bY%blh0Bux2p)eo z`u~0kjCRkG?Ga_&Ev4I8MYroXt>9hd0XHIRl(+b3fe z`=(=i|L*YuUQnQJI<#5Z?-YjQ(S{sr4mFU^2Z%4 zB7Z{AKkps)i#NkM(Skw#6WvcteS%C68N@a3h=E3~Go{7fo}sV;P!;}sqyJ0ki%=!o zUKzTkDYzt^KIx9FWB;J~fs84WIEb+{@&djImc&DvhCBj{089iE3kH9RJYo?Y{#LC; zjB-#7zE=+qKNn0oK3Dmiq})|zuD=I;AsbKGHhAld(V2~{g>UK}x}Ol2pm(P3I-WD~ z(KWGs(#;BA%Jks@J=U_WL1!1B1 z_e+D4C^O*9FPWBE&G;muFR_^fn}83b8J@`L0_W`DzBHP``Tl<%Y^GE-UOwCim&QRg zT-*Ak?V00=?;Quly=o1`hMes@#$aI|fu3iPJIPloe1qIT}C2Arubvl+0Azd?Mo`&;#KO>Cyu@z1+ z6#YPQ$utGy<@$fymFpODJsdWtmXE)X1R3HiSL-%_Zq-`#epsb{L5zIYjC{NeX?0pP zU^CW05ye?A0-6Tgo?MiFFMA=~V6bQpP^T)(|A)xntWz z_Z_!jd*yeX(^7mGl47zU1uc-TKCyvZ5w9JHx3h@P?#qAhSq)Wlc4J~xDG4E)dxCj| z(~=P;ha!(6Xbe41(8#ABBS4~%RMIEg+QddT^p!XIMSLvT-7cMWX3GobF5CAl;pTgT zp>E-}Z^^fPt8m+|&~r{h#k*cQqM(I+-1V)zU7t^w9EzlOeQQ^DeXDrax0c-Xtv%TF zt&+PwMV^0XceaIl@6z+;q;S)><(s};xapVgIH#TBJue+l(850M`F7r(&nHX{Mbdk| zy{mh^UA*VpOYZsh9_;yc$vvM(p7Zl7+4Wn}Yxv6r8JV^T^XSO8@cH>wR4$jxfWu^M zf7%M$h}D!Gmlj%ON6lbtxlfyl9+!qD{gVa?Q7eZIVMy{jHP-Uw^+f( zj*l+>jf#YX1u$JYV`QXNX0CH*8pQQt@+2i9(_>6GEWE@IEo^_GFCd>>GPAHw4yway z4YB{k&0D3Jrki(LU3&v`A9MqBm)rp5=f2_=*#7isFQv9X_i1c_^4!qNxsa{R*u4j3 z?B0Kpj9q%_EAsXBXHR=6#n-*3!PhhFdc=J{{4b*W&G^gCE&H;BwW?aHicj_EfQZ`7 zH}B`)5{^B5M~rKNU44>wXQ-hv17hQO6bs$VO*5)wz}giZWSlX>k;lz)t$L&0N*5@w z5XU>HBp&_ZywQ^IMr(E6;0KXtjTt z@0>Ps$(>2=qmtZxM))wCIqMSK9P^l}d=heA=v0-cXOJ1O4ez}j(t`f{__o1-^RWH} zk7+xy^^ZKOK1UnCb!No%&6szH$QecI*MP#m+?)O+@*KQl>xkm!Biis3n|825i7vPA zWEu98b+#1oQS>Mlu|Xg-Vh)bq65oFk&Nj(U+1(WUi4#GxyRsf3i7^#!3emH6tm=xp zBCP+#w3$cF1iQq@e$VXerq<|djb^r_&^JoPmLDgk7jYmLF&;9fQ(~CFh9)B$_`^EX zxeb~|x-&KHF>_4JaCX%T3I+Cd%G#za@V$Cb);qRVwjk0FJ8rxh!nUzQHL8E;di7w7 z2Y(Vgn78F48k^qC!i&I#E5ioolOrK1>o63t%f89{tzp1=vwrV%QM!l)LkhDN=kzq5`5%43ce^Vib>BBCN z_R!4h;jL+Zx%A02Y~1q~(AIy8n~INz9{tHO?Jq&2ra`|odPCgB{gE~zgSOUb^}E_& zIP7T6?#SrsgWiyg*no6mS=4`!R`ZDe5f8&gKVo-GU{E)aun9lD#Y1AzZ|@c;& z`7l;B`#GEfv~yGWR*MF%lOAcb1|4nGY&Wz{r`ym5jYe1NV>}qNI;4L$?DsY{@ZX4S zfNMF7&J&DW@I7bft=^zJAib`JyX}$I>Gb+q-)MF;qcQBXjpndF7#JHH`kC&VcZBaY z!O#WYbA~=RIq9AlEv%6tZfYGu2HK!87;2ppGU#>Nq}gelY;5RkOlU@2#0h+G{@d$A z!6b4^=1k|LP5Rwtqo;p$41;JLebCbSos)s4_fJ|4qu*SkZYroMcUR06G}0`FE5fl>TC*`Ub;|&A=yLeWZV(W^xvTyh;50hjkSY zHzCBMvn(mL+l_&ahk94*;&w~x=uNB*2aT?#54$IQLK>vkWBagFFA?$0X|THC%EE8x z1GdMEe0(|`prrSK{4qCO0%P*sIf4E-AN_SxG3M<0@D9e_YjpYz`16goaZP-x39zy( z$^zDiGGZ{>L=%5)UO)Z&K=OMt=rGezPgbMTk$ma2TaquW?tpy~wRh6$7gfuCijgYQ zV5>2Z4ZhWB4ptdtx7qK=zMY($u?&L4B)F8FS3)NaC?N4S9_7icHCl$zN~DcgUEIvwHfrr}SRjw4|5m@M1g zF2(xENgoe&t<`M6Y1!*(gO-6cquDe%!w&BET7wmK>4gKA()ex!2^qU;FsVzo6k0fQ z7cLMpY%h=z)f8=Bx(>Xu*ywn3r6vZrR3KpS!y@fHexcQp+V}1lpbI|3|(~m zQhY+SlZ~_sct636%d*PQF&4KTIz2_z_jklSv#ct;FGf57pZ;R3{jD0Z%6vM-uK6cH z*d5>+|0c_pfHBC2u{R5=$_>4~cJf+`oZis|u<6)SXDgHQA` z{O1k)=dgw@h>uOnL#N2|UHbkRSfjwAG;-W&HqNMSI>&!M4*z*vtwl?5hytR{TnB!N zQMG@T7Vb{g2M;uR2vk;v#A@dk*BT>CNHh zPm8gwVOsnf{4J@Z_@-~M;RicJcdYr;eusUXZP|!Uv{*&OI&q0N zaV*1&ex?mOE+0o&;76C9D{#QDxjBq*7c76ekCt}H%q1SN{b)*5^?pUwGH8y;)|<*l zXNKOAJ7S?9VboL+2Pt8Zk-zClf~J2?o8beFm?m|{_|>&ivtF4jr>Dt+(G}-RMyjz( zh@B+UUyW~nHK~eUzWrCS_7?;+sP#KImv!K{k)pm%2N$vqTw=U(!@JyCeZ0x(qilcc zan{ckXE)3FbV%GclqnfE&TSL^);y^}YcV#B4tay<<`gqloZ_$MbUuCKV(QOvVUA6o zYPQk0YjbRyBU8t=AAW9squU8&*(=92=>FhBj0?(}%4lv`Hdb%N{`r?Y^TLAB@yE+s=G64z=C4jeuq4H(wom6F zQtEB0qXGm(WBZ7w|fK3NO7})Oe`IrVPhkOah^0j@99UHJm>0;KzScCbhsp zm%zR4z<0vG!gp}0x2U8Z6EAA$s>}#Q8GoSk#}SCxk|<+`_Uyf z*A937E@_!I(I?ntQi1+0W%Zso_wR`BvKf!C<&lu(KL(=Vt!eY;21BLhloaD72CP1o%US11QLS%$HcYJKo8C*_hSf>R%az|idx768{wr?AA z&v)td3@$_?$1)V1OXGH&vc0fDp0a1kTkN`c!Lu-vo)|9-F~kKH*SBO$O^lJDli3(0 ze}%?f1Ji>7dP1d%Ii64}TC*lA0s(vTDJ|5J76Qc)O0=aVOncs5!`OXsL)d`O9ty~TEsKvh-PUqGO?e(l zdCpDW_@hk;849dGT$6Y-94J;8G#B;-L<5~6-CD^2lb`5MRCcBc^G%j4{*M1Bsu0}N zqS9~S7g15V^O9vR=})4-ccX-DV`-sZaF#|e;mCK z`EMO~XyZFDR#MJDQ1EO#cF8!}2G;>;=~}XP$lOL)L0L1PqMm~ZO1O<~DiebJDV{L` zKsi}Mwqp?5&>NFjM(&7sn^)K(zE2{5l@Fl!f6G1F6N0JS=}z@)-LVatGz(k5nVvZ` zE!qfF2|e^fzKO-s(GU#R4E*v<9`E%Zb8LNNJQzexrDI^F3jHoc$mIpU=7-2Nwi$er zml_}r5IGh7_AH~{N(DzgyAYGb8X$iPky9aZONGca+uP*ZUaLb|?Lkw+MyIEBnmt_` z;88~#owU1pv)Swn`<)f|_A0mt#}AU0OE#G8eo^cC{!!@BQZNnhcxGfXQMq+1;TkGwJU4{N>q@BDtgKM#0BMx7Z{==s6?cbJd39(I0}DFO`++Q zdC+~^XdG!AIgNgb5A8|DnZ{Ufd)sHw)SLZbzo~T^O+)JpdsxGRA=XImq~FkcBSL!3 z6}Hbgi*w$o&2vyasv^@y2Y-c>{dR~PH@#CbW!8(NR$Fd=wp_@z+uLw@uhAwaosnjA z2TiSW((h}-L3gM%+b0d&8V-N@jn*pX)g?FLK9L>A+$+QCd|g=OXpbeoWw&W$*-r1% z=!@E@`*=1+?7n{Xh5n;tUx3F39)&{RNRkX6%#U$=j9XJ*(;MYM_F2l|{$Ey&B~5$W z$KJlu%4;ddd)}tJnRL9W#F_btyW{71Q9oPf{2B^2mGE&hdLos)ZEk-i^f_YP>M?V_ z_o|1P7-%VfN0TVy%bpWf7TZ~Fq2&% zmXjnm5J0(Ht1LNN4N8C62)8PyY?a31fn!%T&$mj{Dp9-pqBfoxDDDP$BF`%%NFJ0- z)_rc7`WNIo2taC(k;*-E>2dY{l|{q9__G={!MV=;Td>cvybg^rV`AS%k%+em zt^BsVblk&=?a4Bz$!|bQ`+9FUYjC@dJNjs(bxw>CI4&6)Za064M!NW9I5=q!PB^l` za;EyYAOFJ}>P0y<9@|czh@Veiz>~rC>RD|cto7Yoe~_&v zw0?v1wAO&M2ct&k+7VcbvlD?@1(7_+b6~ZXf>dB& z6m$Amb~k@P`iMum#w5}?03||&dAWoRDC=(8F&dJg(Idm=N{E`t{1-cG!^_53<%L%*W7`WeoCvI3G^arcD_f99 zMbHG~cPL|Ni{)z(w8C>rlo(2w8b;7c@U3t#VLE>aNkd^?iRFxdNsQGE#JBCF6aeUe z2THUQOZrZ~GBaQz7ZUvlxl``=*K!8LJ#e&7XDp(H0&x}@jGjuisZ?gQH@weSay4p% znjWM^6L_|#Q?Y?@lV)#<4HmqZT^*gKNfl6rQY=A<7^N~vhLUTJ7UqEQyJrSS5eldTK-F)h|!b&P&X8*~Q)ZK!__ z+s$ql_xnBes-n`F@oZt8jwG*Fr@cz1u;xiimY7VXGgIlzcwU~0< zXluAJ7-)KPcw!j6eqV1G`s3Np;S_+%^q>2H|RI}Ctb}rY3W+0-y3N|Ot98% zktR9mwVIvwX#bKzZS)0BrG$DWS=fIbASKkGtGBzoW=aJjxWX zdpp0~8TA_7zOMCqWTr>rZMdHJB{W5?_n~yo!R>;6WlY+1h;?LZ8|hM z{UK@hv=KS!X`SJTp$*BPuZ{FJ*1Nq??}R(jDwh=HlCqmFDLWXKRxUbpwVaNhYtje2rM()4^E+>7Qw?nZy(xB?#=Sas`;7}dkQbEU}*+Y&}>MKvOa8`@8SQ_d6i z%E`>5$d{(Jv>y-Ol=QPXN*72GAn+hzOv^(7KX4{pvWtX&zL>Ug zYLSue%zfgb14+Cqie!B@-GNsVM8?G{1im2=X9y}BBF7F(r0%@oI-7sCLB1CF5Jet4 z&2p|ltrGr4?OF++C4k(^GNp2P%D6nO3|pFT4f5A=O53jERX7cq_f>?b7-wzfw3OQ8 z$RHWtB_SOG*((x^^59jW2NsiDk^Bj%CGnvu5h)uSDnM@$yx}qqSJ`*Rwr*0bG+ib9Y=CAJgG*Q?7vd4u_j^Yuvu`=T==Bg&U+e zLRR8jwj-G0tAx5d**kdQ?Gx?oHM&Hs3Rit&N$@fV7GVaKl^->emrPj(56!b zgAU+>6o;TyE$2QcnHzmpW%j0^Y*FA@6>L~R;V|Y5iOU8LEkXH2yjf=Ip}cg74bf9G zlTc|87m4jMB9X3g2KRjT#bGqzgn$!IXLrIMGGPJbLIxf;{2>!lf)37qdwuu_*zLI8 zz@u)brFA>Hp>==oprv8G-_=NC(9s9F-qcshrn)|MdohBy0(gI}5fRT0yB)WigYF1Y zrZhSutnES_*dy+psgv8gxn?8}lb>%T+f#q}3@kIS|C#pqR>uahb&^ZD zD_$6#v%(?a(9+%H5H8aTr`ytfW9>D-fHNoM<<3|C;ZWcxX^N;Y4X!II7A zlPTFljIs9GZK)_;0EFf?)7!VO(QS7$((bgiPDgKPxIG$a4Wns5LcL~B@2a@AttI0+ z3a?>;b0>eFl{c0Q>Pfos#sVw1w|TnVcB?V!4YhW+51Xf9XoHiJk=AbOWHiznC&pkE z>~$5_#xiiL4Yx-d?g8T38YhiWyWcUi=4jN=Is<*6^+)ZIHfpw-XQj?*|Jl7*8cbij`98d_KSayz4#!$e}8-ZZLfUhpRN!4hBHeR zyTI?JOZzfuEzf^@y`sNx*zn9X9q!4>;D!o3(QD0Gu^)P^B`p*fKibj~VNPV`g08Y{ z%3ePo$?Lne0SA{r6FUFxHP3CC;m5+1m+^ga{@d%wVLXB{=96(u-MR~JkzcAmcmJ3>rl(SE#+}jjDD7oA7mA!xJM0Vc0o$H4y~i$j z43`jnFzj}Wc1vsb!6jta=xcq$fV2ptH5fLU1HI20P%a@^M~Ak|t3oBoR4yT#+@;N4 zzuWEVhK5H&qIJ3_SnD_SriOd{UazfpoBe;*Dvn!`=y~#gH@hT-hV{ zN6SOM6KtXLuvpO>Is{XC#JHUi*Mk||!Zj3hQHc1=gXsa+PmdVridRIJQAPUqQcw8K z+z0!FaXWOKdrv;I_q-f>6_qP$TlZ$SwsSjkEK^_H-nC?HpL;X(i-WFcIrLkr)WCo9 z=(Y;U%1p?d-BKIR?UZ2Kll5{rV;4O1E-1BAo;nlH_ijyFcU%{4kMd>t$@4vQ85AtL zE_2(%BXaAxW=_+;(n9FkHF>jzSW^UlA;zul5`);jiQ#%Ifu5oz(Rs3DQTtzSMoZ0?8%U-xX-VicRPP`9iQlYx0mVkKRgdzg_Tz5m7gmVfN#kOQ*Q;^ zr!g!m&)c^=owz=T2AAA9dhV9}$O?me_>d@EwiohsM$e&w_FqTEN{dX#E0mV+OK~4R zUA|CeaCFBiIA6X{1_%lkwQf+btJ|sRdEnJXEp<7o%&@W0J60V11jUzJS@M5XC!S~C z5k~z|3;a5$!yg$_>-3rfZP4nrHPY|)8~skd zM^2QNnDP?ayVvjs@e(6s&>FOwO>Nlj5Utbh4YWa{JJj@H$LOC7N4<7Wd5NVQP@;#4 zbe^8XtBUdx+p`V#0A6B!V_<*ihOTRUebClA!_J9@TaXC3-x!SuZsB&585^E+4rJve zro5+>m)O(u65A6`u#86={T|(Ao-zvY(#~Q}#aC<@XR&nVh=?^-bQ)8xSUU%NEbxVj zmbuUsiV4l=hfO#^rS2NhXqZP=P$jr|D1WKFf+j9-0(#}bjYc_5J?VdJemj}&(r``7 zGMsz+cFr5y)G!LrkN4gMOYXT;TzFR;vaV;2PZ|9Ye6LR0gOh%z+19$aeWG>x&5kzg zjC8Hj?6e1i!Km3L?5I<|SIYNFrQ>;|bUY{Rq26xemPUr1rq=1S+uC5*G_>wu&~6wf zhB0dICHC+K%nlWWKCFMTG;A}Q6&aAxs7bWm@MNfUj9y0@belb`-5|I-)Vrf$^JM?B zGzd43!XH+NQ6B#V&KR^#I=x<38yEx7B~OOhz-W)OM!VT-b=!S?G-y3@{NZ)p-?&MX z`arD`$XKISDs-Abc}n6DQy60KvdZ8O6H7h5?_=(V?c)!3`rUtF#~>%#KsUNthjfWH zY#D$&eli-gnxj##sqf+2`-ab2_4=+}-yiAqeN*q*!W|L5Xjk9g5%!)brOtGp6b zIT2Mk396ins`QiGDinX`Yxbm@e#)csPd@C%+9>}LS3{K3;3q--KowzSV%Zg_P)E(i z(yw#BJFe$LOb-~^X(CoSCUZGZyGP8XA6cKru4yFA^@Y!Lbk%m_jqXhL6f|}TvDbfb zdbRC*2It#OWpMETPnd5ukSk#=R65aP6>y_zrSb=)HQr9@C@p{3*n0@nmGsSd=5SpA z7ERrwf-@xHAZ0KQspwScLt7nMS=kx9*4g~!#X@XYBn0RM*1aq z^_;dD18#qCK}gKCa31MvP4UD97n#5u%sqEc<6~IyV&Y7vklyCmTuWpmPv277;!DcZ zwE3*2_$yN-saj?cpDQ{pF)pzCh5C~xoyR2v-yQF9nVWU|_s_{GVW3C(NdQq@XZn#$ zA#RFXGVK-Af72$GmJwmUJMI^7ET?^Z=jjtNWqN;G5Pmf_{mFb-*PZF{yMU{X&t@~r zWI2qqOU_nW(3E#Pw4CAb6nj2#k6DwH=ipxeipUBAFs@S*0zrQ70`72eJswvP~NT2%q zXxD#TW_R83%ysTegSg)Dl=#@dKF$oZf@kJ$5j9$kR!eI%;s0kYfq0H=4d59{7TvKS zf-cgjV&thF)~eA$)&qVBM_H}$+SOn=wJJE_cs`fqDVjrxOQT7ftsWj83TR%Lxgdpn zlX#UE8R{Wa0XgiNR0zQM|NXC^;h)LkRLXy`-y_QzJ8w*jisx)O?R+sLZV)u6@yFu2 zcQ^hX#dZ7rc*vZ>odEj;ak+_1+jl4c2rL-V9cs#l&4x04SG}N+Z4)@m zJaljR6Pk{SlOA1j-g}X)juJyheCV~Z1(C*&P_IU{xboGQ(5!z?M-QiocR^-=4Q_wy zCh<C*O+Y8+n_E_ zO($>Si)qu^!ORNesAzm#u*iB~0#tvvS7ZHOJJwu6pqMZ!$$R2PWWxT|<9#zBpQ)M> z*t9J?_a}}ko0N38;(?JVHm%I4=&z**-?Qhqc#~%6&o49QZ-w0^w#WsSqS={CX1~U;nCRZQVe$RFbK_#G_><}R zj=R{=#oX1=@ipDm;jyJX`*ZG+H*=e2m-WhxFjQq8Y>jt*lzgpsew=L4&(E(e$jG$m z6@FLOeAfrbmwXGu6#V)*s}z6a-^KqXsv9FfWrp=HcuanltEoYe*!^0lUGncqEjg$R zw-;$m_$aPcsLaNy@MXHD7L?dv+i)`y6kOp}5mfzIeyOM!rZ=~RIr8CvGMRB1}3>kdS-1rZLNRN5!rYm+fHl_ ziOYA;`t^+Huu=&+R4krwT)2L8z*%yp8|IAGWWB;wq)3hb4X%pap5SkUuL#xQ){$yO|ff8 zi=;^{+w_WCIdfkBNNnPo`mdME+iOEs|J6Kq?2$Q^-O~kfd(MBWNbOtHAmLkV!7pB4 zeRzF-_VM+_=h9ZpgE`IjPc>E)sH}(LpS?rz2xjx4WqK247b$6hi3yK)*!=>jl%Vzx zvzI@3Gi)RJfOA@eAltZFSC>jX?5-x#3G(|_`@+TjLy&B zq&vlT*tB2;;r$<44g_os-A_z?f?P7QfRB-BkBLX|Jnl@)27%GUC8N_YpPxmrYuBR} zN)TYoSVRRH`>!^2Y}0q#W6K$P$INL=gTHH2bL?WDRFi-7{Cl%MXuN5DUws+T1^x8# z;}rtE6rDR3crZCGI=j03;TXTH|8P8ed1K$$S=yKY0#1-cFi_OAk)B{P*Yv(1mp>+; zj}wAEW!m_B5KQ*|{=T01Os9O9CUW@l0KH@O@`y%`D|j-11vaN(e-rEqJ~o6scp&lW zf+As8L0Nz3#*gd@xYhIW>H!m(kI{v3Z5;7>&)tT6mowFZ^1wYHmwC3Vt`e0Y(#)Q0Qjym z&LKv8V)tZN7Yl*0i)WL6%!$i{=aPoUDe+yCs&61UK7!9hQpw=c7fT@8ghj^0UfmQ2 z1c2c$idrat!4q5d@pNX9l?hd-s0CDe4UR|fvUO%fq@-CoO*r4gt4O=}qXZRhY!vyM zfaiY(JyaP#5l>&2NZ}*g@&uB;9+Y7Mc-cXaZDN%faVdTj7%`>&2Un9Tu9W92qKsdd79G?seGiawQ*!7R%p&uVe1+%3 zic7FT56XMsZxkyCM;Se^f*$CZ=W^F_x%7(-pZ66UO1}p!<<<3cXI8#+Fr2FrYr}u5 z(1})FAnFg7R}e^3rW|O&VT;m&B1Wgb*B*vFj=c$XiSaX8tivgB{_q{d+C*Q-g6V-d z`~s>jVJHhZb_zX zIQQP)ogt`^T6EVn4Gr6d_Ju4CS7CqWB2sRhlfj*wDlw}up73{}?1iI{UZdoPUoO7} z8b!pbzmwsyXM*}2m#R7BNoj2#Tsu?;W3GrkQsNAT*ylv^Mu;R zF;1kCoBv+l%p+lz@CVFM8(V(}*7ES^h!GPm;@}C8I5uoXSLSuaeaqn_IPhrDiSK+N zHvHYR`I`Mq7U(yKNUEoQh|Cq3*#`)k61e4?-jp6-v~TFqh5IwPqel+QALrH4r#BA7 zZ36K<>dYB1WT`Dbn`s=>IR1AyZ?roYoaT}dalusJ9l~Jd9?6WKJ_vu{V4`v1wVkCp zI=cS&`U*9X2A08*Ip$Gd$b&5y9`eGSaC8J#F(jo~B!`d3#79`VpS}>geq*C%9i4#% z31MSu+NS4I$1Pa)OvM_q@trva5f6KBfdX%Ly0$);cz*RD?!ZQ^I%3J~tN(`141@k& zy@5v-bjdVc&>d<>r`vzd8I4et@4(n8GIV@cE?Tiu2Pj(LGK3M0012q{%JFIcoC%T1 z*OQ)J?`>-lJGgFa)D1@#A6KuA-hxq{olQ2mw-$UH2JHZbabu&CurePcB_oa53Wh=l z>><~=zp+t2EKk?jow9TtaDk>3!j(Y&1pATgcpO|5x5<7jV84Hf<9GzU|K&9^4ziU2 z)}m(Wdk01DRER@3!y2()Y4Mm9nsEWbp6BS`nQf$Y6yx2OM@N_MuHJw6c=pRjI3`|^ z5y%JDB<)tn`{KvE8k%4*H%f`r*nor`TQ4Eq|b68!VQ(Gc$=HnD!w8 zEgYz>Q@goIB0dmpEw4U{CMs=Q*OwO1k``1Kz4*;qYi?o8AxZSbaZsV zWg5TQ937$I-1i+27M62gM^NR)|MV}Pc)^dnU`!|cg6mU{KkfSt)lgU)hnYh1h_Aq- z@9I*cEwJVeZ|oMlmB3>M9q^1QHeeYzI=Y?@Ly8?8)zHyV;P-(jAj#1Y6^KVi^pK;4 zU_R|SdJTV1K(swNO9bKm5b_7&>jg~Nzwtwb2rlLPw}h}w{{&)|{U*KMNWZ_r9znl; zc#9%}%}gP**dcF&yNPY{Fv z@zOzaZ^<2r9x%??6IWFIBq$e@0G}~qZpF(qP^W*3j@bW&b2CRH1bH%DP;K7d+tJH# zSPu*n;_?wONN4FyKm{@gGf1kM46OAr$@ zzIU`g6l>QRrMumd*4eD{Zc`Q_t`?%ma`2zd9Nn9ig=|6~*dKkGxv+@|`t2I&jzLy1 z28DmqnC`BPOxN?n0@`fhPaOO2GnY`K3pIb7v1>b{PEZgTu+^Ozb@AfI$c1xnTMjlv z1_YSlYSKUG5zl6aXk=QXj$VKDU99^EyZVGavpZVeu1L4LvAh04$=vFALm1U+Zo&j`J08nm5u;{5TQ8M3I<8_@zxlO}9{pjdyK z7V+v-!0_(qjfc|4)EztMm_PQy+rC?4w@Ciw=!lkn5ius5V=lpPZwye^KwVG9)e1@g?XO$=n(iS{--!lR>WbIi(zdPOjvDp*CbV;MVvw6!5S zGf0{`6{*1mI4P0hCpHdL17|w(y%&E>W5IP81zR|_RItVPn&8ChQC^CSM2?Gwu5%BB zagbv}&lot1x{7$Lbe!aLJKXrgSch@VB-SnUQHp)ymKolF9x~d|(K)+l+vGlFRp#cJ zqa$>1;lQ%S*U-4bwho>mwDm*QtO4U<3J*qO%NbI+JGae0<|JuTh);@IG8ccd(C$EK zV0vJ_GGW0Grs~QJ`xEAFL`wm?fleKkq(`Lhpegrke^Dhv1Q<-4%Wv+BE?p|N?u6*5nPP4&2aZ(G(xu(t7j81=KKYcn*w#lJxco=~7C#!Y|K-`GiTbd<1E z9v!iBg|~Th6iYaPJZ=^Ql@AZYK8}w54gEsy86A^FX>;v5H5C%9PlB6VB;^E^;0?eq z?@WX0Pc`n=Jt3wGtUIGVC4^g$=+`1vrn+o*fY6S>DgEz22)`F?(NO?1G- zKenI%(!kn_(q-Ue3;KVdZl%r`;h+G$trFXy{*(L(#{f1Y2GT8OZZOeEzEW?w8ZALx zlXdpF2CtgjJjw8MsN>Z4F}3nX=kC{QRvHoe&U76c1WyeC2b-fstS(nNqD{dL{uk(< zfqebpoW39v_tJP-cMPxY%z~ssJQ`u{{gdfr@2LO>d!}e-QKNqIY%a1$pKWDxNrdOgQ@SJrBi2pqlE{$GXY?o)qQjd|X+2b0kB3R?kuQH^|56dWn~^8!FkYEB$;9$LXn<95KyYHRD?|k^ zRexELx~=%&jMjg!N?h>nX$jKc;rxaK;kv6vFU!JwpPX8sOo1LRh=JAoiW_49zB1(V$}4C(b9#Jp>^C1@FQ0U7)Uh<$I5)~T znae0Is<=!vvB-43ndspMiW*)eTDV+n zc?qcK*awe}U2;iO6s(GZT_p;3H8xYxu8$P$S{&sn)Z9vhUzQ2GERJH8C1WWawJJ`m zQ8J)XP3YP-H<~QB?^V>OiW+}aQKL^fYIIZ4qAN+3eTxd+P&DY$ z+Lwy@R8gNQ>QhC1s;EyD^{JvhS2#dbbf=2$eC}ClRCMQKMt90RH;Ms-N_rdb8+=+wk^Q7CHU&8!MC*(eA~mpw`DkK>A(U8*{kr{O5n9IQYpN)N5yLk7GX=cZ6mfF zo-KcT8=rsac!M;(_5sX|i@f!*+*m_vK)FQ?>^PDeCt1S5JlKhA0=b1W*h3t*5)4p2 z+9OVg*dK-Bwi=3C334hBHwEIRK-?6Fn_Q|W5H|r$6o{JwaZ?~}3dBu;xRty=s4x`; z;-)~{6o}i>l43u@TH^LKh2a)coE3(f!f=067;bqOZd`Qi1%w+Lt3q&lU<5bLBIR7; zSmC5+9B)AG7{?0;{o{NjQq^`+e6q?L9f3g;PMw+Yo21>L5g+ayw7A-5^yHig`# zklPe;n?i2Owc)7P9u?d3eD5zRsz+hAJwwd4*7L?}6Gwrp0Fu&rK+HB-UkbBLVYYvz zc|u{fNpO8YrAdJgaeU=MFrX}!66i2f96JEo^+vt14(L+rK``6ajjCD`q^-3kNL#x8 zvNCjAQNa5T($?A(NL!rF3Z$*H9x@`s0ra;;r6QnJ?OFSsMu*0JH6%D=?y@(m5P6nUM)6ywV3Gb;f*|f72YskiT z<`~d0eFwc;pz9z5E{}4w(XSqHy&D^~f~be;zo9e3pubmdY}Br!O9r+JXKamySs-UL zLe+En*Erzj(D4C5k5=r|5eI)1Mi{~6GE^B}IX>;5zg;1dL+nwY&-b>qi0K_SHVWf0 zs_}94>gcTl7B||YP42A)ABRCZfMML&=p?Mn2T93T1!@IDp#%1i>)hYis2`T6X(Zig zl@1lInhL7zsmHV`q&9`rwx39CDmK)HfIoU7&=7qHh<+8@sbV`-Y^Q&U?NqUyPcybt;j;zztVnwjqDYyxVcwYrRfB3w5Ar9(bdgKE z8Feur+%yWd4UcFZget+$hr!)L-7{1Sr@>Tp%NZkVV{74?x<~Jk#5O4K1>M31F@OPy zfpp868+G)?aS{1S9WZLN1a*(p+2O;wt%m}mSEXTx)*5U&kmB!CikgTqtsvl1BU78FhgQI z7SF>>+eoiPbM3c@ZZ>?2m#@TMas` z1UVISnu1PK&}j-fO+lxX2)hU+t%6Qd&}j-fO+lwA=(Mu;2L+v`pwkp|+H(pgdDhTr zG27Z+N124H68FN*wL-|&mA0ag(-d-=LQcz#j$x8xFMxm3=uj1I+5^YNFa{|HJ3z}O zQ3qIcIp_fUF2o#Y)Y^?W>cDP9tvmxnGm$o-0L>JjnOGXDm=_iEqGDcD%!`V7d73dV z8&Xgdo|%e;+0A=}LK;&@W6uz2to^)^#>7z#Dg0zrb2;tDinAFXkcYRepd_iT`k0SyI^2Bqut$*)I9+M z+tJX{#{vUeDKdQH5#b66Od)|OBrt^p_5xLYCJTSzX7F@}9S32=fv8jfjdm4bs>zZk zVR|j8uw3Sa&;!YTr?OO3befn?6ki~C@CuIo=nDHg86MM=({T&xa7~t%UE$?_a z3LbwQNznz4juM2apUjp&vlSAULIP7rVC=1*x}rz0n8Llw!rzb- zB`uPJ3JL6~g>EjLRa=Es<9;^Q!69W zvVJ%HNlyH0g@^C{OcpCrBNqR=d1CAq5SV`obyP55D%A0L0dzf7D5JvX+F^Vy6{^S; z`6Csos6rK0sG3Z6^Bb3KVvCn_Xy4}r7VdkCDhp2sdK!rg*h6#jTYMy5>@ z@pP((^1A2eS6!V|P#r!Cim8 z^PM^u|IJkQ^r}@;b1~Ju=6#A(k<9V+EXobwFH^3J>{tr82jWLVC)2|l4GvYgnl#9J`_FhS6yn(`E*lhCI) z8!~?LgO-SN-?WwB7)!>~oV&T5bIGEucTV@{pt4^dl@+qxHhoZ1kn$YCg~t?8&1=E4 zbPv#MKng@#B3kp)zkQJvFhl0(K(PNexRGVGW#uFOjn08xArRAj{&VK?b=^JG6LiwM zduG1A!=vz{!&R83=g`bX-pEl;Jd_GZ=+p~Jqtsoh*lYic=uipKCyo>b9Ah-*WnnVC z{TXg#sR8*j@&0T5CCFiQnNbTJy{AFeK@w{f7ze-*vQbf2WzJOIbNWkx@siJmUCMpD zy>3j~#wgvbD@FY7tx5hfwq6(g&?<`S-pMPuOR%J?q@V-}5U~aCUV%=Hp5hK4Q>yaW zwUpZ;^`8-3<mULi8_rd4w3Yj5QXT@nYu7NK z4u&KJ!^3s!_TU#aaQvl9b2frF6EDonaNgfV+W$PQw4@jMZ!D(zr^;`j@*SrJ*Eylk z?x>KL^EUjc=&7HLNZ|zT?g)i+Y-OE1`Ic7eKYm4nk1em1z?pdh$^+NO3 zitb^v>woafvewFrJvzKpND~UPWfgl8a!}|G2AB-g`7xV0f0~(u8R=aVQ?Ao~Y=CZ{ z62s5K`$}h?o6zl3>+^x`KwzN2_e_EPXZVm{ZnpERnloSBrOj-bQ^q$_>9&Y0fct?O zTPCz~sfO-#<@fL_QiYF$LLKy~DSyaxR`SanQ3~5-ycD~$D;{LfZljQ+9{|&-s|WG@ zR_G352aXN718R;u{8tUg^!OJ+t&9BaHno|D(`&n|>0H%U!U@f(xEVukf~#XnOaKg1 zCYW2lb6)XI=6kJiv^W%8o&PqV`RN%?WxLv%C)HGSNSgACJTp(gqtgzWkekFt5WL-T zx%^=6%iX-8?U2CAc3_mrCOt+@q9!2|a{Z6NMH_Cowx#j5ZdK>_n_I!r+)u6pPym7^ zw?k%)$m0WJ$V-RdoBC;)#eR<;DJvjNf#)Am~xLbK80sDB(lL4)5M1WbDM zAD4Z3te*A0_59|QNq7Z;OuK~ibV9S;S-#FJXfv?+uw|mMM1x( z9jouqnKH(&G4?6X=J|&uTxi={DzIrTf|l0M*@o+Q3fG}S7uN#UQq@=IYELI!-ng;{ zVi-`c=>2#B8ME7I)+$pi$f zs_Qw~NW*uQ#R7oXZ$KbJX@@h&UK-!&_vKr;}EjO#S~H%Ta6 zKFmnI!AK1>SzrLkmS+1Vp6AZa>n+DqcQ2@o7{*3m@R04>h5siN>d)OPj8)SFgthtaw%AU3;eiVy{x@*6b>LKV3){zZtgb@?A5( zpyaF`PD)%f4mU z#NY>%1AX#ffhHEQ$Rzt}uJ8L+p9P3ZSXxg+>a*5d-UYkyeI_iE>ZD%Zm1_Q7aSNvjj^jFFPS;p?GsOGzVb?05^E z<3i`p^B!J?)x2xpGoy_f;P`VxjG7_}B*{-p`J6=rk~SOo2yCK4s6vH7`4MXQ_KZCOZ{nElI#XeKjqa)4VS z%M_+p8y?^1yN}X}(!OO6KNe`1$Zls$xS;yj?<4!&sA-((xBK?Jg)6W$RY=Q7yr7Z? z6EhWa70NO^qA@kVYU#bVnwBo%UyTm4W-~M_)h$+PQBld8W z@?2TSW9R2YM4bB{mx9GuGIN|*Y=IAMnPtn?)OC5ZqOy8Kl4zN6ERyJ%aZU(49%X#d zU0$EqL9(7gRV?5RSUoy+MZKc)4kjcVQy8W2-z}|jCz28_ZCNFMU@o4Uv&W7agIt*( zTr6bQa%OAo{edQIM_*P&dCtlCW86V8B2Bs%ElZt#Nga%n9pN?!X-)>B zkUoVsGr6~e9EsD@pk9S*BMhF#v_Ac~qej}9DBk_b$S(Kt5F+3*0O@Jj%x>7uO_J-O z;y|r)b|dwTKUOD57?KLS13vL2rii~>TM7qn`@f}hF!=ora{8qDMxnPfn=q(2=1XwM ztN8}!sQjsb$>ZR)ELhchq`Vzm;MW1-d6nqOwhD}NQuTjT!wFAXvyn^!c`Usx-!U(7NcQIJF6`YA%Y zk}K%r5y}@-6hzX2_tUMK&O&8~Dg0F>@BTxa37mBWTwhkMlDav84 z1g|{#Cjl>v!$)Q9)@A6gtEwyRrF9}qfi%3%(syG!}TX(cg{3b5+@`iku z^Ml-rT8;?reCMOY#6N^)zs-F zjTRAAV9P##@ed}bAoktWN37^Pmma;Wt?7F_uH_EPw!{FGQnPqTA^vqRMZ zl2Kc1c{^W(p4gI}{!wZ=1NRk5I!$?chnH2hT2q*9SgGir%|eT_pveTc11CsvQxh6s z>TauMQO`KFVR0}6slGL76K4gRCjFWp7SVppYQ0s{5YGO`v5I|ct7|y4KR?5o9$gOW zvgiZ5f^RulG6E@cnYKxq?!V@@NK!3_FuA-2|8{U2#DF&PPhif6XJD;_-by2p%MfE| zzEdWCnJ8ZvyP?7_Uor@kDO>pWSLy?h7s@Jh>=(aqiEFyf-^jF>;`#4@zf0wJ!H6J* z&FxLX6~_K_m8s(O?~Ju%1bdf@A3WU|(kQEDkp;O?426PzY!hrvp4<;J;g{^Ou3^b} zV0i=l25>O?#F$!E%7!lbyeLKMg{1jD${Y!WHSU9gR9QphB8dbO;s^qjtfDc{dTGVv zrq1S%O6R^4MKb9*Y{%b*-(6L29*Q=kS&CL+6H%maI)-IBdD(lSml6Q2aWm|BYLlJ` z&lfg0jzg^+`>m`1RWpI{pBUJ*X*if*l^j-Cp+6^WrnzF&=M)3oi7`AaF=PUsztQY{ zjA?w4(&u(TSS90jVS2wA@d@~f?-bVox$p7xu^!5PYK8!+VBSk~Ly!HYnk-uxI8ptY z#$~SwLqk!G*@&mm$8SXlUU79_+EA(*;sUq5(9u_*j`~h{kkD4hmR#XPJ5aC9ixX~% z>sD5!DYWaBoxWSTO~M7je2AHV7}oDw{?N*bsqRp5Th{3ub?pjQZULa}w6_wG^SD|W za0Pcw!+4lSW#F>!agDw4q%03oq!hFfVca@i z${<5bYNe%|F91*Dv4HheXwC|mhD$kq7N=1=C;}O4y$^FPe^_BpxC&Y^$nVQwTAam| z1@?qBe69I_pIhNWw-fr|7oRS~LnO-+(;_A88TmAKej=~*8aVM_J#PB|9`$58oHAxs z`KbL4llN;wB_=*z|Be_HYx%A`PubRpsFbC)KH%X9FxK?sOZ*K8(Fd5dJ!af%3X~gm zu7(@`Fp*Z91a7One+W5V+&EiZSxBqx!mNI23F=}bTMhXv2XN{_zF$*W)HK0h_3Fc& z>(ChLuZqO$KzZVk>}mGu)F{Oo?SHga38M1Gi=r^+k(TsX`yBygSXObX?x$O`soHPg zfh`vN&NvgBLn|_9l=WlftZqUnZ>YfqW%f5Iogqir(1GxgC%)CF=<4f!46|v)rOlKo z4aji!t@}2cfPfK#Kx-JKfma}hT%u&5&6LO-r9t;l!uf46q&EnkP{&+Nmr&+hJk6Ouh&1y%1m=s>K?x;z? zu09S5iJEFKNy#YOcSbbd;;pO#dQvT0qf-vz^fOr2pmQWx();p?-t0kH&xV|Pd|RCr za?!1x%t*(bvIx^fI1A=xQ;g_7?V}b-C50vDjKO%;^X}{HkwvXgbLPWm4R3aQDGa&} z;QE1@6OU|SAAMgZkV9Ri4LMR9F}un6~?g969}xcB6>lqFf|a;KN8uM#Z@>dH;8mVeR={-{yjD7IQ8rYC!rKY-yWnT-G+Ru?I2{vJgG#uwX z*lc2stU}JgYWKQ&7YfUIdf2|X5Ss zP6eCctLC9vgGGxMZZ~$Qiq-6%H=9N(&UMlWSZ>NQUiZC-77nDds@nb_RZ)Tf@`VKt zl5Aew!L$vKfqeNE5-3@ea{sJo2orvd3ej4~;0NN7tik$Ktwzg^?j!mKmzBbvX3dv+iW zH5V&>Le%YPzO4fH4YMMat9gBfQEqtL(9^cX@IoA8BKf}Qpg_*ZX&3ghg+C?&iQFWo zyJwC#&(o)p$0(D=IbSa`xJ^|ZzwQ1ZPL}bP-1(m1W%sFK7KA{NqqQ^nqWqL|l&tFF z`XjofWj|5eU4%Ad^W7ED{gL6a3JbL>UD^dP!_LK_FS!@1e8GeLE4EZ7j|l^hnf6H_ zBC)$Duv0kwlDcSyuB0TX=|YsIRGC3nwjlj=Jc{Jz{(EWB<7rlmH|Z7Oft6$A^3M=c zxhWHkUpBN_p1VxrNkRM&W*?){DET^R9P{VTPbslv^}&B1d+k>ki}ZCi$Fzf7NQQn* zGKmb$2EmlKs;dX@2aD+lKDkQXh=N0JO~U>p0IE@N5#1F1FJBErYnlOsb>kUCvN=OhmgGq`6`^Y*%)lp_Vldq zY!Fx@gfHhOoO8H=AhWkye8g^_eC0GqEVwLazQ9*k!s*KCufsBj0YW8}N&1rh z(!B#^#FlVTXh|xooc|i-Ri$KEGMV$5O|6#x3()!T6^lL|dE`iX9%Z}}{9e35iOFUw zFfiVR_5WgvC2-vhdMT}N8z-0AUKa5(g5wTbA}@REs9OGyOy<);{$Wy*&N6rzzL zQx!U_t)u+z655-B%*NYvPua(|J(1eu1=U9Bn`FWDTS+hfo=A*Byz>itn1WqpT@m}B zjgqfy#H6=I{_6;*ntY)oRxK~XSVnj(&$XOdSBq8F9Mc6%sYQIyfB&fSAmkt}2j)8@`sd8T4PQOqEO?A;gj3xrb zi~GqO$3Dh8N!(TuH6k0J%Eaz|F4mSiADi!teq zcGN*msdi1Q3!zjstwNnoDj#KTudRgksf90L-Xj4%p4)=58xECNDZz5hx}wwi23{_H z+lScrAmx&5#Qvg*_Lg6k(d(myA$V36^M9!Y$l{+vk6*vBA0KnH#YGLfhs`k^tgs8D zuGPAQ?XqzZv**K*=Klv`oHv2BgsUw42Sph!!N7c)W4|y`RuMX$L1#;|kPz>s^*Xde z;1wvBzmCj%zT<1Z<}WPfr`DP0S|ciMDu4*szm9)Sgpem@7RtR>!uC?)wypLiO&-|N z(D<)z^<^j*Op5)Lfofc_Q@J3Kzo;H3RufZf#U03z^yH_W#5e`o$77*sx-dIP4oP`EatV22DatK)gzX|g68ysTFa@8n!%C7Uk2n=vz`#jnsv zv+4OYLVdb%_Tz`gUiL5L zI~5vMk^d3io8Lb`MPLSlY)oBn7DQ-hMabF^KKTVdtebs z%-+W3srDZn1ujv8pEC2k1RO=FzZ4wBUyXCgRP7b#^FGJL`SlcaObw4sYFtpkKzzk$ zfehnlp}Y@=l*KQX)(6h$zae;Or4`JHK=QvY`r=0bn7Eb*2uZ7m7y_%l7) znjZS{HNDQ750L)LA4_3%3n8r3^TRMVV~Rdl7*0tjr!316( z9Rq};jPjdt(xwvPj56+_^R<#_NTs^e`k`JmaWUNAX!i=R|4xOa9+Go?Ig=PUhYM5p z#*d^7P-$KXESj4MvOD-S`;#aKUlJaotQHb}!!h{d7sK*h+(hS7+-vmoZqE-dXBz&s8b})NIqGF|ePJqFsX-nuA}E42qbdgCj?mvIht`#ZYJFRGrtc1D$_IhJLXyFk9vHY_jTWX5S zRa69RCH-wOi@b@9!djL8NNvcw_HMGX8wcq5ph-`qcFUlo+#8h=!8~xJ$8MOAX(FWW z6i|^`&ojGppMRL~Hk6+4_SfsfQd+pugSWI>gFxntfj_34>M?p-Yz2%=tizLrYTW@K z78y%C(Kv$8ElsD=Hn{z5&bDz5j3%0(cHd_?*Z-?%AG>5jf6Fk)KsU~;#4#kC>>jW~ z&rMHp&**Fv=6^&NThu}eISemre2rqg%+(52boxLKCtRryljK!s+=J@Nw>w{h{4hCy zv-{m8ig73sbzPxh=aMb{rqg}f>XtV9v@PVrUiS_+6Q9HC3c@bIgJH5}*;lF+3OqD} zy=BZmX9(}_+>~gQww|-OFU}FQIHj$Ww8p!PJyEKW_MLe~N2UK++W+=H@p6m^;{bi3X@7+STziq9 z>}x-XFzV1o?lx2YTjnb{U=Yoh^ulwK|52F^cu#DcqVd1kMetGvD$uYOfjnX|J4t4-tpolSM-w5_Z!G#7VD!VwME+ z6iRSnEQ&?eYh+QXmBF-VqzU>MVo<#5>Q$pnAIG_(m=3PSJ7bch2jK)MT#^8iYH zHOL=x$T(l$y%1;1yD+Hb2f>Z`fw@DFO>NV8;G)6z2+FiB*!g#cwS>-sbf34QJ&5j+ zSNSABa56U(&|mClj;5Wcix zS3m6Z`kd14p5YH05{?L9qIz)i-s7L{&i2lFbkEua>i=SW6E49*nTgW#Uyxg|yA%FG zAo)T2r#SaNF4z-+Tnl4v;JKo2bHx=stt!o;a!L;KVDKBcl=;1ABkR3c?pkx1#9s1p zw|vauWH9V~2YmuV8)nmyHFH-&;?Vbgx?iA)~h;tv5LG+-}yQ{i_ zlpCB%nCK2L5z|cs#|Ph%#`%a`kq72vr(#Hieg_G;8VPX=9LvyM5-SnZAe(@7tEzaI z-Xes^VBGZ*Y1zAhdL9V>UF^haYJwp9`i8KTJmpGDr13(Bc6FfdZZ2}C02<&Kpe1xX z-Myhb8`&F2^7>@MM5lFH3!cqT{-vI^GlQokQtZ|%o4g#bnEL}dhX9`98$qS#?Sw3I zVY<^JrjtRQ3X}Q>^aJ?w8n`*oJvnNrvV64J#K!^I(MuFaSu|n3rzR9ed{e*W;0d8I z^=MV3%~@{EZduG%bkeh(H}$3eXOfNd2ABMIdOTfNyl3a?cb~)O!h@E86d^W6Of{iE zJszhsM^IsWN14P=(cz%+?Y`Q$`K!9FwZCSCQOqOn!os(BB6)UwIVD?h zH~yWF%c2{*tu#1kEgdBitV#y}XYdB@^bndXR#d`HOD>v?2JJ^o$DfX429wZ3tO=$I zBi527=pQINZo>{FCAOGj4ae=!wBH3`HQ@rvBdZ0y0RB6JoT;ARr`0zMb!8}MT$ulB Zh?3szEcO34L_v4qgHLpMZ<+Gp{{f7MZZ7}; delta 25635 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 Np7(WjZ!JM!{txXBKwtm> diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json index 49cbc27393b..afeb4a036fc 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json @@ -160,7 +160,7 @@ }, "properties": { "displayName": "[parameters('workbook1-name')]", - "serializedData": "{\"version\":\"Notebook/1.0\",\"items\":[{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":11,\"content\":{\"version\":\"LinkItem/1.0\",\"style\":\"tabs\",\"links\":[{\"id\":\"06ba5a8f-fe93-4285-9bb4-15fd5c96befe\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"My Scorecard\",\"subTarget\":\"My Scorecard\",\"style\":\"link\"},{\"id\":\"ce6e0294-f130-4450-9005-8aa9924e6b86\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Vendor Scores\",\"subTarget\":\"Vendor Scores\",\"style\":\"link\"},{\"id\":\"26959e65-a53f-4468-8d14-d0b43d1b899d\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Active Issues\",\"subTarget\":\"Active Issues\",\"style\":\"link\"},{\"id\":\"97757d2a-eba1-4ee9-909b-47e9653e1407\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Issues per Vendor (CVE)\",\"subTarget\":\"Issues per Vendor (CVE)\",\"style\":\"link\"},{\"id\":\"73e85106-4dde-4c92-8479-c8720d8604de\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Issues per Vendor (Ransomware)\",\"subTarget\":\"Issues per Vendor (Ransomware)\",\"style\":\"link\"},{\"id\":\"c915da0c-4bfc-4595-8e1a-700a602f3412\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Spotlight\",\"subTarget\":\"Spotlight\",\"style\":\"link\"}]},\"name\":\"Tabs\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# My Scorecard\",\"style\":\"{setTab}\"},\"name\":\"text - 1\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"309cabc5-5a32-4c1a-b905-cb578ee0e667\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ac778abc-2101-4e66-92da-d11d4b4a8629\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":1,\"description\":\"Provide your company name\",\"isRequired\":true,\"query\":\"SecurityScorecardRatings\\r\\n| where portfolioName_s == \\\"NA\\\"\\r\\n| distinct subject_s\\r\\n| limit 1\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"value\":\"cisco.com\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 9\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 3\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(ingestion_time(),*)\\r\\n| extend gradeToday = case((scoreToday_d>=90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project gradeToday, scoreToday_d, Details\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Grade\"}]}},\"leftContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Grade\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(ingestion_time(), *) by subject_s \\r\\n| extend Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project scoreToday_d, subject_s, Details\\r\\n| limit 1\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Score\"}]}},\"leftContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Score\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll'and subject_s == '{Domain}'\\r\\n| project-rename Date = dateToday_s , Score = scoreToday_d \\r\\n| summarize arg_max(ingestion_time(), *) by Date \\r\\n| project Date=format_datetime(todatetime(Date), 'yyyy-MM-dd'), Score\\r\\n| sort by Date asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Score Trend\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"linechart\",\"chartSettings\":{\"showMetrics\":false,\"customThresholdLine\":\"{Score}\",\"customThresholdLineStyle\":4,\"showDataPoints\":true,\"ySettings\":{\"numberFormatSettings\":{\"unit\":0,\"options\":{\"style\":\"decimal\",\"useGrouping\":true}},\"max\":100}}},\"customWidth\":\"50\",\"name\":\"Score Trend\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == 'Factor' and subject_s == '{Domain}'\\r\\n| summarize arg_max(ingestion_time(),*) by dateToday_s, factorDescription_s\\r\\n| summarize arg_max(dateToday_s,*) by factorDescription_s\\r\\n| extend gradeToday=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), gradeYesterday=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\") \\r\\n| project Factor_Name_s, factorDescription_s, gradeToday, scoreToday_d, scoreChange_d, gradeYesterday, scoreYesterday_d, dateToday_s \\r\\n| project-rename Description =factorDescription_s, [\\\"Current Grade\\\"] = gradeToday, [\\\"Current Score\\\"] = scoreToday_d, [\\\"Latest Score Change\\\"] = scoreChange_d, [\\\"Last Updated Grade\\\"] = gradeYesterday, [\\\"Last Updated Score\\\"] = scoreYesterday_d, [\\\"Date of Current Score\\\"] = dateToday_s, Factor = Factor_Name_s \",\"size\":0,\"showAnalytics\":true,\"title\":\"My Scorecard Factors\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Date of Current Score\",\"formatter\":6}],\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"name\":\"My Scorecard Factors\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| summarize [\\\"Issue Count\\\"]= count() by Factor \",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Count by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"barchart\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend issue_name=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5)\\r\\n| summarize count() by severity_value_s, serverity_priority\\r\\n| sort by serverity_priority asc\\r\\n| project-away serverity_priority\\r\\n| render barchart\\r\\n\",\"size\":0,\"title\":\"Issue Types by Severity\",\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"graphSettings\":{\"type\":0,\"topContent\":{\"columnMatch\":\"severity_value_s\",\"formatter\":1},\"centerContent\":{\"columnMatch\":\"adware installation\",\"formatter\":1,\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}},\"chartSettings\":{\"showLegend\":true,\"seriesLabelSettings\":[{\"seriesName\":\"high\",\"label\":\"High\"},{\"seriesName\":\"medium\",\"label\":\"Medium\"},{\"seriesName\":\"low\",\"label\":\"Low\"},{\"seriesName\":\"info\",\"label\":\"Info\"},{\"seriesName\":\"positive\",\"label\":\"Positive\"}],\"customThresholdLine\":\"{issue_name}\",\"customThresholdLineStyle\":0},\"mapSettings\":{\"locInfo\":\"LatLong\",\"sizeSettings\":\"adware installation\",\"sizeAggregation\":\"Sum\",\"legendMetric\":\"adware installation\",\"legendAggregation\":\"Sum\",\"itemColorSettings\":{\"type\":\"heatmap\",\"colorAggregation\":\"Sum\",\"nodeColorField\":\"adware installation\",\"heatmapPalette\":\"greenRed\"}}},\"name\":\"Issue Types by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"My Scorecard\"},\"name\":\"My Scorecard\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Vendor Scores\",\"style\":\"{setTab}\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8ebc23fe-ade3-4318-8635-24bb841f718b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"72d22203-f3dd-4557-9605-5b6ca4a4e6c0\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":1,\"description\":\"Provide your company name\",\"isRequired\":true,\"query\":\"SecurityScorecardRatings\\r\\n| where portfolioName_s == \\\"NA\\\"\\r\\n| distinct subject_s\\r\\n| limit 1\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"value\":\"cisco.com\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 13\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"624e2391-ad46-416c-9af4-f735c1114b84\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"91c18b81-401d-4b6a-a9ba-e6780c6fee61\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c603e74f-d591-4788-b95b-1370a2b98024\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == \\\"OverAll\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and subject_s != '{Domain}'\\r\\n| summarize arg_max(ingestion_time(), *) by dateToday_s, subject_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, portfolioName_s \\r\\n| extend [\\\"Current Grade\\\"]=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), [\\\"Last Updated Grade\\\"]=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\"), Industry=strcat_array(split(industry_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors')\\r\\n| project subject_s, portfolioName_s, Industry, [\\\"Date of Current Score\\\"] = format_datetime(todatetime(dateToday_s), 'yyyy-MM-dd'), scoreToday_d, [\\\"Current Grade\\\"], scoreYesterday_d, ['Last Updated Grade'], Details \\r\\n| project-rename Company = subject_s , [\\\"Current Score\\\"] = scoreToday_d, [\\\"Last Updated Score\\\"] = scoreYesterday_d \\r\\n| sort by Company asc, portfolioName_s asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Company\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\",\"linkIsContextBlade\":false}}],\"rowLimit\":10000,\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"name\":\"Top Level Grade and Score by Company\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a38a4cff-47df-431d-a31e-e5a7b9739786\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardFactor\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct Factor_Name_s\\r\\n| sort by Factor_Name_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 11\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0fe3d2b0-fcbd-4c3f-80e6-29e39f047743\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Grade\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"A\\\", \\\"label\\\":\\\"A\\\"},\\r\\n { \\\"value\\\":\\\"B\\\", \\\"label\\\":\\\"B\\\"},\\r\\n { \\\"value\\\":\\\"C\\\", \\\"label\\\":\\\"C\\\"},\\r\\n { \\\"value\\\":\\\"D\\\", \\\"label\\\":\\\"D\\\" },\\r\\n { \\\"value\\\":\\\"F\\\", \\\"label\\\":\\\"F\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":86400000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 12\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == \\\"Factor\\\" and subject_s != '{Domain}' and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(ingestion_time(), *) by dateToday_s, subject_s, Factor_Name_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, Factor_Name_s, portfolioName_s\\r\\n| extend [\\\"Current Grade\\\"] = case(scoreToday_d>=90, \\\"A\\\", scoreToday_d>=80 and scoreToday_d<=89, \\\"B\\\", scoreToday_d>=70 and scoreToday_d<=79, \\\"C\\\", scoreToday_d>=60 and scoreToday_d<=69, \\\"D\\\", \\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors') \\r\\n| where ('*' in ({Factor}) or Factor_Name_s in ({Factor})) and [\\\"Current Grade\\\"] in ({Grade})\\r\\n| project subject_s, portfolioName_s, Factor_Name_s, factorDescription_s , scoreToday_d, [\\\"Current Grade\\\"], Details \\r\\n| project-rename Company = subject_s, Factor = Factor_Name_s, Description = factorDescription_s, [\\\"Current Score\\\"] = scoreToday_d\\r\\n| sort by Factor asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000}},\"name\":\"Top Level Grade and Score by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"f952c797-c056-446e-8ce1-4495673c337d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"IssueType\",\"label\":\"Issue Type\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend issue_type = strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") \\r\\n| distinct issue_type\\r\\n| sort by issue_type asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 9\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73302a85-fb1b-43cf-8c7f-dfbebd6eb167\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and subject_s != '{Domain}' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(issueName_s), src = arg_max(date_s,Factor_s) by issueType_s, subject_s, severity_value_s\\r\\n| extend [\\\"Issue Type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") , Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| where ('*' in ({IssueType}) or [\\\"Issue Type\\\"] in ({IssueType})) \\r\\n| project subject_s, Severity, [\\\"Issue Type\\\"], [\\\"Findings Count\\\"], [\\\"Issue Count\\\"], Details \\r\\n| order by [\\\"Issue Type\\\"] asc, subject_s asc\\r\\n| project-rename Company=subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true,\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Vendor Scores\"},\"name\":\"Vendor Scores\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Active Issues\",\"style\":\"{setTab}\"},\"name\":\"Active Issues\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"6239b6b6-1b0c-4d82-9599-bcb3155a8869\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"99a0579a-77d5-4693-a099-c1b7dd688c0d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e6981875-d72c-486f-baea-52e1e762143f\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"95c35610-dd13-45f0-bdf4-dae3008215a7\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| distinct value=Factor_s, lable=factor\\r\\n| sort by lable asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"34f6058c-86eb-45e1-8684-ad1db584019a\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"bd48be36-fe76-4b7d-be98-fc3ac56f6759\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":86400000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 11\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Active Issues will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 11\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and ('*' in ({Severity}) or severity_value_s in ({Severity}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize arg_max(date_s,*), src = arg_max(date_s,Factor_s),[\\\"Findings Count\\\"] = sum(findingsCount_d), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s\\r\\n| join kind=leftouter (SecurityScorecardFactor \\r\\n | distinct Factor_s,factorDescription_s\\r\\n | project Factor_s, factorDescription_s) on Factor_s\\r\\n| extend severity_index=case((severity_value_s == \\\"high\\\"),1,(severity_value_s == \\\"medium\\\"),2,(severity_value_s == \\\"low\\\"),3,(severity_value_s == \\\"info\\\"),4,5), severity_value_s=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"), [\\\"Issue type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s)\\r\\n| sort by severity_index asc, findingsCount_d desc\\r\\n| project [\\\"Issue type\\\"], Factor, severity_value_s, factorDescription_s, [\\\"Findings Count\\\"], Active, Resolved, Details\\r\\n| project-rename Description = factorDescription_s, Severity = severity_value_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Active Issues\",\"timeContextFromParameter\":\"Timer\",\"exportParameterName\":\"activeissues\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"Sevirity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000}},\"name\":\"Active Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Issue Count\\\"] = count(issueType_s) by Factor_s \\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| project Factor, [\\\"Issue Count\\\"] \\r\\n\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Types by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize count() by severity_value_s \\r\\n| extend severity_value_s = case((severity_value_s == 'info'), \\\"Info\\\",(severity_value_s == 'low'), \\\"Low\\\",(severity_value_s == 'medium'), \\\"Medium\\\",(severity_value_s == 'high'), \\\"High\\\", (severity_value_s == 'positive'), \\\"Positive\\\", severity_value_s)\\r\\n| render piechart\",\"size\":3,\"showAnalytics\":true,\"title\":\"Count by Severity\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\"},\"name\":\"Count by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Active Issues\"},\"name\":\"Active Issues\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (CVE)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a30af542-54cd-4a92-ac85-e094c9cc1c43\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a3195f85-f04f-422c-b233-f9bd8a357b8b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"CVE\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"service_vuln_host_high\\\", \\\"label\\\":\\\"Service Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"service_vuln_host_low\\\", \\\"label\\\":\\\"Service Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_high\\\", \\\"label\\\":\\\"Patching Cadence High\\\" },\\r\\n { \\\"value\\\":\\\"patching_cadence_low\\\", \\\"label\\\":\\\"Patching Cadence Low\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_medium\\\", \\\"label\\\":\\\"Patching Cadence Medium\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_high\\\", \\\"label\\\":\\\"Web Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"web_vuln_host_low\\\", \\\"label\\\":\\\"Web Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_medium\\\", \\\"label\\\":\\\"Web Vuln Host Medium\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":86400000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"CVE\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0f2ad534-e343-44c2-a3ff-0d1d2c7916c5\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"55320f6b-3583-440d-977f-33ceffc07d94\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"070f384d-1ff0-49c9-8f3f-f121e78811a2\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and issueType_s in ({CVE}) and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s\\r\\n| extend CVE=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), severity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\", severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s), Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| sort by CVE asc, severity_priority asc, subject_s asc\\r\\n| project subject_s, CVE, Factor, Severity, ['Findings Count'], [\\\"Issue Count\\\"], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"turquoise\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (CVE)\"},\"name\":\"Issues per Vendor (CVE)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (Ransomware)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c9b54d32-38cd-4b08-8dd6-4be29b019c80\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"168555cd-afbe-457a-81c1-a68663c51823\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Ransomware\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"tls_weal_cipher\\\", \\\"label\\\":\\\"Tls Weal Cipher\\\"},\\r\\n { \\\"value\\\":\\\"exposed_personal_information_info\\\", \\\"label\\\":\\\"Exposed Personal Information Info\\\" },\\r\\n { \\\"value\\\":\\\"outdated_browser\\\", \\\"label\\\":\\\"Outdated Browser\\\"},\\r\\n { \\\"value\\\":\\\"csp_no_policy_v2\\\", \\\"label\\\":\\\"Csp No Policy V2\\\" },\\r\\n { \\\"value\\\":\\\"exposed_personal_information\\\", \\\"label\\\":\\\"Exposed Personal Information\\\"},\\r\\n { \\\"value\\\":\\\"ip_count_means\\\", \\\"label\\\":\\\"Ip Count Means\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"hsts_incorrect_v2\\\", \\\"label\\\":\\\"Hsts Incorrect V2\\\" },\\r\\n { \\\"value\\\":\\\"unsafe_sri_v2\\\", \\\"label\\\":\\\"Unsafe Sri V2\\\"},\\r\\n { \\\"value\\\":\\\"leaked_credentials\\\", \\\"label\\\":\\\"Leaked Credentials\\\"},\\r\\n { \\\"value\\\":\\\"x_frame_options_incorrect_v2\\\", \\\"label\\\":\\\"X Frame Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_xss_protection_incorrect_v2\\\", \\\"label\\\":\\\"X Xss Protection Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_content_type_options_incorrect_v2\\\", \\\"label\\\":\\\"X Content Type Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_no_revocation\\\", \\\"label\\\":\\\"Tlscert No Revocation\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_expired\\\", \\\"label\\\":\\\"Tlscert Expired\\\"},\\r\\n { \\\"value\\\":\\\"outdated_os\\\", \\\"label\\\":\\\"Outdated Os\\\"},\\r\\n { \\\"value\\\":\\\"tls_weak_protocol\\\", \\\"label\\\":\\\"Tls Weak Protocol\\\"},\\r\\n { \\\"value\\\":\\\"domain_missing_https_v2\\\", \\\"label\\\":\\\"Domain Missing Https V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_excessive_expiration\\\", \\\"label\\\":\\\"Tlscert Excessive Expiration\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Ransomware\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"7bf4c309-6e2b-4619-9253-e85808486e75\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ee929211-b34e-4369-905b-cb4d87bf6364\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8d9dcdcc-8c93-4b47-a2e1-880ffea2a31e\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and issueType_s in ({Ransomware})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d),[\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s \\r\\n| extend Ransomware=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| project subject_s, Ransomware, Severity, ['Findings Count'], ['Issue Count'], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\\r\\n| sort by Ransomware asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"drilldown_url\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"details\"}}],\"rowLimit\":10000}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (Ransomware)\"},\"name\":\"Issues per Vendor (Ransomware)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Spotlight\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73978413-5a37-4814-b4fc-4143999f13ec\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":86400000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":86400000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73bc33a2-eb41-4433-9b1d-59930d7ddf3d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ae9eff1e-6b7b-4d64-9516-30ea5bc5fb17\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"d9274665-9d9c-417b-9d3f-03162538cf92\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend label = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"),value = Factor_s\\r\\n| distinct value, label\\r\\n| sort by label asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"485b4de7-9cd5-4e5e-b2d4-da7f921ff61c\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s =='OverAll' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(dateToday_s,*) by subject_s\\r\\n| extend Grade = case((scoreToday_d >= 90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\") \\r\\n| project Grade, subject_s, scoreToday_d\\r\\n| project-rename Company = subject_s, Score = scoreToday_d\\r\\n| sort by Score asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Worst Performing Companies\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"40\",\"name\":\"Worst Performing Companies\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*), [\\\"Company Count\\\"] = dcount(subject_s,4) by issueName_s, severity_value_s, issueType_s, Factor_s\\r\\n| extend serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), severity_value=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s) \\r\\n| extend Issues=trim(@\\\"'\\\",issueName_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| sort by serverity_priority asc, [\\\"Company Count\\\"] desc\\r\\n| project Severity = severity_value, Issues, Factor = Factor, [\\\"Company Count\\\"]\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Critical Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"60\",\"name\":\"Most Critical Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e316e111-37ee-404b-8feb-920a6147bf30\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":86400000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue \\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend totalcount = toscalar(SecurityScorecardIssue | summarize dcount(subject_s))\\r\\n| summarize subject = dcount(subject_s), totalCount = max(totalcount) by issueName_s, issueType_s, Factor_s\\r\\n| extend [\\\"% of Portfolio Affected\\\"] = round((todouble(subject)/todouble(totalCount))*100,0)\\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| project Factor, issueName_s, [\\\"% of Portfolio Affected\\\"]\\r\\n| sort by [\\\"% of Portfolio Affected\\\"] desc\\r\\n| project-rename Issues = issueName_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Common Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"% of Portfolio Affected\",\"formatter\":3,\"formatOptions\":{\"min\":0,\"max\":100,\"palette\":\"redDark\"}}]}},\"name\":\"Most Common Issues\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Spotlight\"},\"name\":\"Spotlight\"}]},\"name\":\"Main\",\"styleSettings\":{\"showBorder\":true}}],\"fromTemplateId\":\"sentinel-SecurityScorecardWorkbook\",\"$schema\":\"https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json\"}\n", + "serializedData": "{\"version\":\"Notebook/1.0\",\"items\":[{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":11,\"content\":{\"version\":\"LinkItem/1.0\",\"style\":\"tabs\",\"links\":[{\"id\":\"06ba5a8f-fe93-4285-9bb4-15fd5c96befe\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"My Scorecard\",\"subTarget\":\"My Scorecard\",\"style\":\"link\"},{\"id\":\"ce6e0294-f130-4450-9005-8aa9924e6b86\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Vendor Scores\",\"subTarget\":\"Vendor Scores\",\"style\":\"link\"},{\"id\":\"26959e65-a53f-4468-8d14-d0b43d1b899d\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Active Issues\",\"subTarget\":\"Active Issues\",\"style\":\"link\"},{\"id\":\"97757d2a-eba1-4ee9-909b-47e9653e1407\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Issues per Vendor (CVE)\",\"subTarget\":\"Issues per Vendor (CVE)\",\"style\":\"link\"},{\"id\":\"73e85106-4dde-4c92-8479-c8720d8604de\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Issues per Vendor (Ransomware)\",\"subTarget\":\"Issues per Vendor (Ransomware)\",\"style\":\"link\"},{\"id\":\"c915da0c-4bfc-4595-8e1a-700a602f3412\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Spotlight\",\"subTarget\":\"Spotlight\",\"style\":\"link\"}]},\"name\":\"Tabs\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# My Scorecard\",\"style\":\"{setTab}\"},\"name\":\"text - 1\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"309cabc5-5a32-4c1a-b905-cb578ee0e667\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ac778abc-2101-4e66-92da-d11d4b4a8629\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":2,\"description\":\"Select your company domain\",\"isRequired\":true,\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(subject_s)\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 9\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 3\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated,*)\\r\\n| extend gradeToday = case((scoreToday_d>=90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project gradeToday, scoreToday_d, Details\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Grade\"}]}},\"leftContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Grade\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated, *) by subject_s \\r\\n| extend Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project scoreToday_d, subject_s, Details\\r\\n| limit 1\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Score\"}]}},\"leftContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Score\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll'and subject_s == '{Domain}'\\r\\n| project-rename Date = dateToday_s , Score = scoreToday_d \\r\\n| summarize arg_max(TimeGenerated, *) by Date \\r\\n| project Date=format_datetime(todatetime(Date), 'yyyy-MM-dd'), Score\\r\\n| sort by Date asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Score Trend\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"linechart\",\"chartSettings\":{\"showMetrics\":false,\"customThresholdLine\":\"{Score}\",\"customThresholdLineStyle\":4,\"showDataPoints\":true,\"ySettings\":{\"numberFormatSettings\":{\"unit\":0,\"options\":{\"style\":\"decimal\",\"useGrouping\":true}},\"max\":100}}},\"customWidth\":\"50\",\"name\":\"Score Trend\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == 'Factor' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated,*) by dateToday_s, factorDescription_s\\r\\n| summarize arg_max(dateToday_s,*) by factorDescription_s\\r\\n| extend gradeToday=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), gradeYesterday=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\") \\r\\n| project Factor_Name_s, factorDescription_s, gradeToday, scoreToday_d, scoreChange_d, gradeYesterday, scoreYesterday_d, dateToday_s \\r\\n| project-rename Description =factorDescription_s, [\\\"Current Grade\\\"] = gradeToday, [\\\"Current Score\\\"] = scoreToday_d, [\\\"Latest Score Change\\\"] = scoreChange_d, [\\\"Last Updated Grade\\\"] = gradeYesterday, [\\\"Last Updated Score\\\"] = scoreYesterday_d, [\\\"Date of Current Score\\\"] = dateToday_s, Factor = Factor_Name_s \",\"size\":0,\"showAnalytics\":true,\"title\":\"My Scorecard Factors\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Date of Current Score\",\"formatter\":6}],\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"name\":\"My Scorecard Factors\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| summarize [\\\"Issue Count\\\"]= count() by Factor \",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Count by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"barchart\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend issue_name=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5)\\r\\n| summarize count() by severity_value_s, serverity_priority\\r\\n| sort by serverity_priority asc\\r\\n| project-away serverity_priority\\r\\n| render barchart\\r\\n\",\"size\":0,\"title\":\"Issue Types by Severity\",\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"graphSettings\":{\"type\":0,\"topContent\":{\"columnMatch\":\"severity_value_s\",\"formatter\":1},\"centerContent\":{\"columnMatch\":\"adware installation\",\"formatter\":1,\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}},\"chartSettings\":{\"showLegend\":true,\"seriesLabelSettings\":[{\"seriesName\":\"high\",\"label\":\"High\"},{\"seriesName\":\"medium\",\"label\":\"Medium\"},{\"seriesName\":\"low\",\"label\":\"Low\"},{\"seriesName\":\"info\",\"label\":\"Info\"},{\"seriesName\":\"positive\",\"label\":\"Positive\"}],\"customThresholdLine\":\"{issue_name}\",\"customThresholdLineStyle\":0},\"mapSettings\":{\"locInfo\":\"LatLong\",\"sizeSettings\":\"adware installation\",\"sizeAggregation\":\"Sum\",\"legendMetric\":\"adware installation\",\"legendAggregation\":\"Sum\",\"itemColorSettings\":{\"type\":\"heatmap\",\"colorAggregation\":\"Sum\",\"nodeColorField\":\"adware installation\",\"heatmapPalette\":\"greenRed\"}}},\"name\":\"Issue Types by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"My Scorecard\"},\"name\":\"My Scorecard\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Vendor Scores\",\"style\":\"{setTab}\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8ebc23fe-ade3-4318-8635-24bb841f718b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"72d22203-f3dd-4557-9605-5b6ca4a4e6c0\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":2,\"description\":\"Select your company domain\",\"isRequired\":true,\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(subject_s)\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 13\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"624e2391-ad46-416c-9af4-f735c1114b84\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"91c18b81-401d-4b6a-a9ba-e6780c6fee61\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c603e74f-d591-4788-b95b-1370a2b98024\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == \\\"OverAll\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and subject_s != '{Domain}'\\r\\n| summarize arg_max(TimeGenerated, *) by dateToday_s, subject_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, portfolioName_s \\r\\n| extend [\\\"Current Grade\\\"]=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), [\\\"Last Updated Grade\\\"]=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\"), Industry=strcat_array(split(industry_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors')\\r\\n| project subject_s, portfolioName_s, Industry, [\\\"Date of Current Score\\\"] = format_datetime(todatetime(dateToday_s), 'yyyy-MM-dd'), scoreToday_d, [\\\"Current Grade\\\"], scoreYesterday_d, ['Last Updated Grade'], Details \\r\\n| project-rename Company = subject_s , [\\\"Current Score\\\"] = scoreToday_d, [\\\"Last Updated Score\\\"] = scoreYesterday_d \\r\\n| sort by Company asc, portfolioName_s asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Company\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\",\"linkIsContextBlade\":false}}],\"rowLimit\":10000,\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"name\":\"Top Level Grade and Score by Company\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a38a4cff-47df-431d-a31e-e5a7b9739786\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardFactor\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct Factor_Name_s\\r\\n| sort by Factor_Name_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 11\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0fe3d2b0-fcbd-4c3f-80e6-29e39f047743\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Grade\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"A\\\", \\\"label\\\":\\\"A\\\"},\\r\\n { \\\"value\\\":\\\"B\\\", \\\"label\\\":\\\"B\\\"},\\r\\n { \\\"value\\\":\\\"C\\\", \\\"label\\\":\\\"C\\\"},\\r\\n { \\\"value\\\":\\\"D\\\", \\\"label\\\":\\\"D\\\" },\\r\\n { \\\"value\\\":\\\"F\\\", \\\"label\\\":\\\"F\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 12\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == \\\"Factor\\\" and subject_s != '{Domain}' and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(TimeGenerated, *) by dateToday_s, subject_s, Factor_Name_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, Factor_Name_s, portfolioName_s\\r\\n| extend [\\\"Current Grade\\\"] = case(scoreToday_d>=90, \\\"A\\\", scoreToday_d>=80 and scoreToday_d<=89, \\\"B\\\", scoreToday_d>=70 and scoreToday_d<=79, \\\"C\\\", scoreToday_d>=60 and scoreToday_d<=69, \\\"D\\\", \\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors') \\r\\n| where ('*' in ({Factor}) or Factor_Name_s in ({Factor})) and [\\\"Current Grade\\\"] in ({Grade})\\r\\n| project subject_s, portfolioName_s, Factor_Name_s, factorDescription_s , scoreToday_d, [\\\"Current Grade\\\"], Details \\r\\n| project-rename Company = subject_s, Factor = Factor_Name_s, Description = factorDescription_s, [\\\"Current Score\\\"] = scoreToday_d\\r\\n| sort by Factor asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000}},\"name\":\"Top Level Grade and Score by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"f952c797-c056-446e-8ce1-4495673c337d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"IssueType\",\"label\":\"Issue Type\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend issue_type = strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") \\r\\n| distinct issue_type\\r\\n| sort by issue_type asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 9\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73302a85-fb1b-43cf-8c7f-dfbebd6eb167\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and subject_s != '{Domain}' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(issueName_s), src = arg_max(date_s,Factor_s) by issueType_s, subject_s, severity_value_s\\r\\n| extend [\\\"Issue Type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") , Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| where ('*' in ({IssueType}) or [\\\"Issue Type\\\"] in ({IssueType})) \\r\\n| project subject_s, Severity, [\\\"Issue Type\\\"], [\\\"Findings Count\\\"], [\\\"Issue Count\\\"], Details \\r\\n| order by [\\\"Issue Type\\\"] asc, subject_s asc\\r\\n| project-rename Company=subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true,\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Vendor Scores\"},\"name\":\"Vendor Scores\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Active Issues\",\"style\":\"{setTab}\"},\"name\":\"Active Issues\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"6239b6b6-1b0c-4d82-9599-bcb3155a8869\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"99a0579a-77d5-4693-a099-c1b7dd688c0d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e6981875-d72c-486f-baea-52e1e762143f\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"95c35610-dd13-45f0-bdf4-dae3008215a7\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| distinct value=Factor_s, lable=factor\\r\\n| sort by lable asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"34f6058c-86eb-45e1-8684-ad1db584019a\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"bd48be36-fe76-4b7d-be98-fc3ac56f6759\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 11\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Active Issues will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 11\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and ('*' in ({Severity}) or severity_value_s in ({Severity}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize arg_max(date_s,*), src = arg_max(date_s,Factor_s),[\\\"Findings Count\\\"] = sum(findingsCount_d), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s\\r\\n| join kind=leftouter (SecurityScorecardFactor \\r\\n | distinct Factor_s,factorDescription_s\\r\\n | project Factor_s, factorDescription_s) on Factor_s\\r\\n| extend severity_index=case((severity_value_s == \\\"high\\\"),1,(severity_value_s == \\\"medium\\\"),2,(severity_value_s == \\\"low\\\"),3,(severity_value_s == \\\"info\\\"),4,5), severity_value_s=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"), [\\\"Issue type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s)\\r\\n| sort by severity_index asc, findingsCount_d desc\\r\\n| project [\\\"Issue type\\\"], Factor, severity_value_s, factorDescription_s, [\\\"Findings Count\\\"], Active, Resolved, Details\\r\\n| project-rename Description = factorDescription_s, Severity = severity_value_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Active Issues\",\"timeContextFromParameter\":\"Timer\",\"exportParameterName\":\"activeissues\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"Sevirity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000}},\"name\":\"Active Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Issue Count\\\"] = count(issueType_s) by Factor_s \\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| project Factor, [\\\"Issue Count\\\"] \\r\\n\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Types by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize count() by severity_value_s \\r\\n| extend severity_value_s = case((severity_value_s == 'info'), \\\"Info\\\",(severity_value_s == 'low'), \\\"Low\\\",(severity_value_s == 'medium'), \\\"Medium\\\",(severity_value_s == 'high'), \\\"High\\\", (severity_value_s == 'positive'), \\\"Positive\\\", severity_value_s)\\r\\n| render piechart\",\"size\":3,\"showAnalytics\":true,\"title\":\"Count by Severity\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\"},\"name\":\"Count by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Active Issues\"},\"name\":\"Active Issues\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (CVE)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a30af542-54cd-4a92-ac85-e094c9cc1c43\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a3195f85-f04f-422c-b233-f9bd8a357b8b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"CVE\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"service_vuln_host_high\\\", \\\"label\\\":\\\"Service Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"service_vuln_host_low\\\", \\\"label\\\":\\\"Service Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_high\\\", \\\"label\\\":\\\"Patching Cadence High\\\" },\\r\\n { \\\"value\\\":\\\"patching_cadence_low\\\", \\\"label\\\":\\\"Patching Cadence Low\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_medium\\\", \\\"label\\\":\\\"Patching Cadence Medium\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_high\\\", \\\"label\\\":\\\"Web Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"web_vuln_host_low\\\", \\\"label\\\":\\\"Web Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_medium\\\", \\\"label\\\":\\\"Web Vuln Host Medium\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"CVE\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0f2ad534-e343-44c2-a3ff-0d1d2c7916c5\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"55320f6b-3583-440d-977f-33ceffc07d94\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"070f384d-1ff0-49c9-8f3f-f121e78811a2\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and issueType_s in ({CVE}) and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s\\r\\n| extend CVE=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), severity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\", severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s), Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| sort by CVE asc, severity_priority asc, subject_s asc\\r\\n| project subject_s, CVE, Factor, Severity, ['Findings Count'], [\\\"Issue Count\\\"], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"turquoise\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (CVE)\"},\"name\":\"Issues per Vendor (CVE)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (Ransomware)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c9b54d32-38cd-4b08-8dd6-4be29b019c80\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"168555cd-afbe-457a-81c1-a68663c51823\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Ransomware\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"tls_weal_cipher\\\", \\\"label\\\":\\\"Tls Weal Cipher\\\"},\\r\\n { \\\"value\\\":\\\"exposed_personal_information_info\\\", \\\"label\\\":\\\"Exposed Personal Information Info\\\" },\\r\\n { \\\"value\\\":\\\"outdated_browser\\\", \\\"label\\\":\\\"Outdated Browser\\\"},\\r\\n { \\\"value\\\":\\\"csp_no_policy_v2\\\", \\\"label\\\":\\\"Csp No Policy V2\\\" },\\r\\n { \\\"value\\\":\\\"exposed_personal_information\\\", \\\"label\\\":\\\"Exposed Personal Information\\\"},\\r\\n { \\\"value\\\":\\\"ip_count_means\\\", \\\"label\\\":\\\"Ip Count Means\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"hsts_incorrect_v2\\\", \\\"label\\\":\\\"Hsts Incorrect V2\\\" },\\r\\n { \\\"value\\\":\\\"unsafe_sri_v2\\\", \\\"label\\\":\\\"Unsafe Sri V2\\\"},\\r\\n { \\\"value\\\":\\\"leaked_credentials\\\", \\\"label\\\":\\\"Leaked Credentials\\\"},\\r\\n { \\\"value\\\":\\\"x_frame_options_incorrect_v2\\\", \\\"label\\\":\\\"X Frame Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_xss_protection_incorrect_v2\\\", \\\"label\\\":\\\"X Xss Protection Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_content_type_options_incorrect_v2\\\", \\\"label\\\":\\\"X Content Type Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_no_revocation\\\", \\\"label\\\":\\\"Tlscert No Revocation\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_expired\\\", \\\"label\\\":\\\"Tlscert Expired\\\"},\\r\\n { \\\"value\\\":\\\"outdated_os\\\", \\\"label\\\":\\\"Outdated Os\\\"},\\r\\n { \\\"value\\\":\\\"tls_weak_protocol\\\", \\\"label\\\":\\\"Tls Weak Protocol\\\"},\\r\\n { \\\"value\\\":\\\"domain_missing_https_v2\\\", \\\"label\\\":\\\"Domain Missing Https V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_excessive_expiration\\\", \\\"label\\\":\\\"Tlscert Excessive Expiration\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Ransomware\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"7bf4c309-6e2b-4619-9253-e85808486e75\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ee929211-b34e-4369-905b-cb4d87bf6364\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8d9dcdcc-8c93-4b47-a2e1-880ffea2a31e\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and issueType_s in ({Ransomware})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d),[\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s \\r\\n| extend Ransomware=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| project subject_s, Ransomware, Severity, ['Findings Count'], ['Issue Count'], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\\r\\n| sort by Ransomware asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"drilldown_url\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"details\"}}],\"rowLimit\":10000}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (Ransomware)\"},\"name\":\"Issues per Vendor (Ransomware)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Spotlight\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73978413-5a37-4814-b4fc-4143999f13ec\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73bc33a2-eb41-4433-9b1d-59930d7ddf3d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ae9eff1e-6b7b-4d64-9516-30ea5bc5fb17\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"d9274665-9d9c-417b-9d3f-03162538cf92\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend label = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"),value = Factor_s\\r\\n| distinct value, label\\r\\n| sort by label asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"485b4de7-9cd5-4e5e-b2d4-da7f921ff61c\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s =='OverAll' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(dateToday_s,*) by subject_s\\r\\n| extend Grade = case((scoreToday_d >= 90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\") \\r\\n| project Grade, subject_s, scoreToday_d\\r\\n| project-rename Company = subject_s, Score = scoreToday_d\\r\\n| sort by Score asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Worst Performing Companies\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"40\",\"name\":\"Worst Performing Companies\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*), [\\\"Company Count\\\"] = dcount(subject_s,4) by issueName_s, severity_value_s, issueType_s, Factor_s\\r\\n| extend serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), severity_value=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s) \\r\\n| extend Issues=trim(@\\\"'\\\",issueName_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| sort by serverity_priority asc, [\\\"Company Count\\\"] desc\\r\\n| project Severity = severity_value, Issues, Factor = Factor, [\\\"Company Count\\\"]\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Critical Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"60\",\"name\":\"Most Critical Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e316e111-37ee-404b-8feb-920a6147bf30\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue \\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend totalcount = toscalar(SecurityScorecardIssue | summarize dcount(subject_s))\\r\\n| summarize subject = dcount(subject_s), totalCount = max(totalcount) by issueName_s, issueType_s, Factor_s\\r\\n| extend [\\\"% of Portfolio Affected\\\"] = round((todouble(subject)/todouble(totalCount))*100,0)\\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| project Factor, issueName_s, [\\\"% of Portfolio Affected\\\"]\\r\\n| sort by [\\\"% of Portfolio Affected\\\"] desc\\r\\n| project-rename Issues = issueName_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Common Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"% of Portfolio Affected\",\"formatter\":3,\"formatOptions\":{\"min\":0,\"max\":100,\"palette\":\"redDark\"}}]}},\"name\":\"Most Common Issues\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Spotlight\"},\"name\":\"Spotlight\"}]},\"name\":\"Main\",\"styleSettings\":{\"showBorder\":true}}],\"fromTemplateId\":\"sentinel-SecurityScorecardWorkbook\",\"$schema\":\"https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json\"}\n", "version": "1.0", "sourceId": "[variables('workspaceResourceId')]", "category": "sentinel" @@ -1503,22 +1503,6 @@ { "name": "detail_url", "type": "string" - }, - { - "name": "company_domain", - "type": "string" - }, - { - "name": "industry", - "type": "string" - }, - { - "name": "portfolio_id", - "type": "string" - }, - { - "name": "portfolio_name", - "type": "string" } ] } @@ -1539,7 +1523,7 @@ "destinations": [ "clv2ws1" ], - "transformKql": "source | where issue_type != 'breach' | extend TimeGenerated = ['date'], issue_date = ['date'], domain = company_domain | project-away ['date'], company_domain", + "transformKql": "source | where tostring(issue_type) != 'breach' | extend TimeGenerated = todatetime(['date']), issue_date = todatetime(['date']), domain = extract('companies/([^/]+)/', 1, tostring(detail_url)) | project TimeGenerated, id, issue_date, event_type, group_status, issue_count, total_score_impact, issue_type, severity, factor, detail_url, domain", "outputStream": "Custom-SecurityScorecardIssuesHistory_CL" } ] @@ -1992,19 +1976,18 @@ "nextSteps": [ { "stepId": "portfolioCompanies", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project portfolio_id = tostring(res['id'])" } ] }, "stepCollectorConfigs": { "portfolioCompanies": { - "shouldJoinNestedData": false, "stepInfo": { "stepType": "Nested", "nextSteps": [ { "stepId": "issueDetails", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain']), industry = tostring(res['industry'])" + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project company_domain = tostring(res['domain'])" } ] }, @@ -2030,7 +2013,6 @@ } }, "issueDetails": { - "shouldJoinNestedData": true, "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'),'/companies/$company_domain$/history/events')]", "httpMethod": "GET", @@ -2252,21 +2234,17 @@ "Custom-SecurityScorecardRatingsHistory_CL": { "columns": [ { - "name": "date", - "type": "datetime" - }, - { - "name": "score", - "type": "long" - }, - { - "name": "company_domain", + "name": "domain", "type": "string" }, { "name": "industry", "type": "string" }, + { + "name": "score", + "type": "long" + }, { "name": "portfolio_id", "type": "string" @@ -2294,7 +2272,7 @@ "destinations": [ "clv2ws1" ], - "transformKql": "source | extend TimeGenerated = ['date'], score_date = ['date'], domain = company_domain | project-away ['date'], company_domain", + "transformKql": "source | extend TimeGenerated = now(), score_date = now(), domain = tostring(domain), industry = tostring(industry) | project TimeGenerated, score_date, score, domain, industry, portfolio_id, portfolio_name", "outputStream": "Custom-SecurityScorecardRatingsHistory_CL" } ] @@ -2597,6 +2575,10 @@ "properties": { "connectorDefinitionName": "SecurityScorecardRatingsCCPDefinition", "dataType": "SecurityScorecardRatingsHistory_CL", + "addOnAttributes": { + "portfolio_id": "$portfolio_id$", + "portfolio_name": "$portfolio_name$" + }, "dcrConfig": { "streamName": "Custom-SecurityScorecardRatingsHistory_CL", "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", @@ -2611,8 +2593,6 @@ "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'),'/portfolios')]", "httpMethod": "GET", - "queryWindowInMin": 10080, - "queryTimeFormat": "yyyy-MM-dd", "rateLimitQPS": 1, "retryCount": 3, "timeoutInSeconds": 60, @@ -2635,22 +2615,12 @@ "nextSteps": [ { "stepId": "portfolioCompanies", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" } ] }, "stepCollectorConfigs": { "portfolioCompanies": { - "shouldJoinNestedData": false, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "ratingsHistory", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain']), industry = tostring(res['industry'])" - } - ] - }, "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'),'/portfolios/$portfolio_id$/companies')]", "httpMethod": "GET", @@ -2671,36 +2641,6 @@ "$.entries" ] } - }, - "ratingsHistory": { - "shouldJoinNestedData": true, - "request": { - "apiEndpoint": "[[concat(parameters('BaseUrl'),'/companies/$company_domain$/history/score')]", - "httpMethod": "GET", - "queryWindowInMin": 10080, - "queryTimeFormat": "yyyy-MM-dd", - "rateLimitQPS": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "logResponseContent": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - }, - "queryParameters": { - "from": "{_QueryWindowStartTime}", - "to": "{_QueryWindowEndTime}", - "timing": "daily" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - } } } } @@ -2895,28 +2835,16 @@ "Custom-SecurityScorecardFactorHistory_CL": { "columns": [ { - "name": "date", - "type": "datetime" + "name": "domain", + "type": "string" }, { "name": "factors", "type": "dynamic" }, { - "name": "company_domain", - "type": "string" - }, - { - "name": "industry", - "type": "string" - }, - { - "name": "portfolio_id", - "type": "string" - }, - { - "name": "portfolio_name", - "type": "string" + "name": "date", + "type": "datetime" } ] } @@ -2937,7 +2865,7 @@ "destinations": [ "clv2ws1" ], - "transformKql": "source | extend TimeGenerated = ['date'], score_date = ['date'], domain = company_domain | project-away ['date'], company_domain", + "transformKql": "source | extend TimeGenerated = todatetime(['date']), score_date = todatetime(['date']), domain = tostring(domain), factors = todynamic(factors) | project TimeGenerated, score_date, factors, domain", "outputStream": "Custom-SecurityScorecardFactorHistory_CL" } ] @@ -3278,19 +3206,18 @@ "nextSteps": [ { "stepId": "portfolioCompanies", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project portfolio_id = tostring(res['id'])" } ] }, "stepCollectorConfigs": { "portfolioCompanies": { - "shouldJoinNestedData": false, "stepInfo": { "stepType": "Nested", "nextSteps": [ { "stepId": "factorHistory", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain']), industry = tostring(res['industry'])" + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project company_domain = tostring(res['domain'])" } ] }, @@ -3316,7 +3243,6 @@ } }, "factorHistory": { - "shouldJoinNestedData": true, "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'),'/companies/$company_domain$/history/factors/score')]", "httpMethod": "GET", @@ -3385,7 +3311,7 @@ "displayName": "Parser for SecurityScorecard Issues", "category": "Microsoft Sentinel Parser", "functionAlias": "SecurityScorecardIssue", - "query": "let SecurityScorecardIssueLegacy = view () {\n SecurityScorecardIssues_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Issue\")),\n eventID_d = todouble(column_ifexists(\"eventID_d\", real(null))),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n date_s = tostring(column_ifexists(\"date_s\", \"\")),\n issueType_s = tostring(column_ifexists(\"issueType_s\", \"\")),\n issueName_s = tostring(column_ifexists(\"issueName_s\", \"\")),\n findingsCount_d = todouble(column_ifexists(\"findingsCount_d\", real(null))),\n groupStatus_s = tostring(column_ifexists(\"groupStatus_s\", \"\")),\n totalScoreImpact_d = todouble(column_ifexists(\"totalScoreImpact_d\", real(null))),\n severity_value_s = tostring(column_ifexists(\"severity_value_s\", \"\")),\n detail_url_s = tostring(column_ifexists(\"detail_url_s\", \"\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"\"))\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardIssueCCF = view () {\n SecurityScorecardIssuesHistory_CL\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = tostring(issue_type),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", + "query": "let SecurityScorecardIssueLegacy = view () {\n SecurityScorecardIssues_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Issue\")),\n eventID_d = todouble(column_ifexists(\"eventID_d\", real(null))),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n date_s = tostring(column_ifexists(\"date_s\", \"\")),\n issueType_s = tostring(column_ifexists(\"issueType_s\", \"\")),\n issueName_s = tostring(column_ifexists(\"issueName_s\", \"\")),\n findingsCount_d = todouble(column_ifexists(\"findingsCount_d\", real(null))),\n groupStatus_s = tostring(column_ifexists(\"groupStatus_s\", \"\")),\n totalScoreImpact_d = todouble(column_ifexists(\"totalScoreImpact_d\", real(null))),\n severity_value_s = tostring(column_ifexists(\"severity_value_s\", \"\")),\n detail_url_s = tostring(column_ifexists(\"detail_url_s\", \"\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"\"))\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardIssueCCF = view () {\n SecurityScorecardIssuesHistory_CL\n | lookup kind=leftouter (\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain\n | project domain, rt_industry = industry, rt_portfolio_id = portfolio_id, rt_portfolio_name = portfolio_name\n ) on domain\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = tostring(issue_type),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(rt_industry),\n portfolioId_g = toguid(rt_portfolio_id),\n portfolioName_s = tostring(rt_portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", "functionParameters": "", "version": 2, "tags": [ @@ -3450,7 +3376,7 @@ "displayName": "Parser for SecurityScorecard Issues", "category": "Microsoft Sentinel Parser", "functionAlias": "SecurityScorecardIssue", - "query": "let SecurityScorecardIssueLegacy = view () {\n SecurityScorecardIssues_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Issue\")),\n eventID_d = todouble(column_ifexists(\"eventID_d\", real(null))),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n date_s = tostring(column_ifexists(\"date_s\", \"\")),\n issueType_s = tostring(column_ifexists(\"issueType_s\", \"\")),\n issueName_s = tostring(column_ifexists(\"issueName_s\", \"\")),\n findingsCount_d = todouble(column_ifexists(\"findingsCount_d\", real(null))),\n groupStatus_s = tostring(column_ifexists(\"groupStatus_s\", \"\")),\n totalScoreImpact_d = todouble(column_ifexists(\"totalScoreImpact_d\", real(null))),\n severity_value_s = tostring(column_ifexists(\"severity_value_s\", \"\")),\n detail_url_s = tostring(column_ifexists(\"detail_url_s\", \"\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"\"))\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardIssueCCF = view () {\n SecurityScorecardIssuesHistory_CL\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = tostring(issue_type),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", + "query": "let SecurityScorecardIssueLegacy = view () {\n SecurityScorecardIssues_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Issue\")),\n eventID_d = todouble(column_ifexists(\"eventID_d\", real(null))),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n date_s = tostring(column_ifexists(\"date_s\", \"\")),\n issueType_s = tostring(column_ifexists(\"issueType_s\", \"\")),\n issueName_s = tostring(column_ifexists(\"issueName_s\", \"\")),\n findingsCount_d = todouble(column_ifexists(\"findingsCount_d\", real(null))),\n groupStatus_s = tostring(column_ifexists(\"groupStatus_s\", \"\")),\n totalScoreImpact_d = todouble(column_ifexists(\"totalScoreImpact_d\", real(null))),\n severity_value_s = tostring(column_ifexists(\"severity_value_s\", \"\")),\n detail_url_s = tostring(column_ifexists(\"detail_url_s\", \"\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"\"))\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardIssueCCF = view () {\n SecurityScorecardIssuesHistory_CL\n | lookup kind=leftouter (\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain\n | project domain, rt_industry = industry, rt_portfolio_id = portfolio_id, rt_portfolio_name = portfolio_name\n ) on domain\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = tostring(issue_type),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(rt_industry),\n portfolioId_g = toguid(rt_portfolio_id),\n portfolioName_s = tostring(rt_portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", "functionParameters": "", "version": 2, "tags": [ @@ -3649,7 +3575,7 @@ "displayName": "Parser for SecurityScorecard Factor scores (day-over-day per-factor change with metadata)", "category": "Microsoft Sentinel Parser", "functionAlias": "SecurityScorecardFactor", - "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = coalesce(toint(factor[\"score\"]), tolong(toreal(factor[\"score\"])))\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date\n | sort by domain asc, factor_name asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", + "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = coalesce(toint(factor[\"score\"]), tolong(toreal(factor[\"score\"])))\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date\n | sort by domain asc, factor_name asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | lookup kind=leftouter (\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain\n | project domain, rt_industry = industry, rt_portfolio_id = portfolio_id, rt_portfolio_name = portfolio_name\n ) on domain\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(rt_industry),\n portfolioId_g = toguid(rt_portfolio_id),\n portfolioName_s = tostring(rt_portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", "functionParameters": "", "version": 2, "tags": [ @@ -3714,7 +3640,7 @@ "displayName": "Parser for SecurityScorecard Factor scores (day-over-day per-factor change with metadata)", "category": "Microsoft Sentinel Parser", "functionAlias": "SecurityScorecardFactor", - "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = coalesce(toint(factor[\"score\"]), tolong(toreal(factor[\"score\"])))\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date\n | sort by domain asc, factor_name asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", + "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = coalesce(toint(factor[\"score\"]), tolong(toreal(factor[\"score\"])))\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date\n | sort by domain asc, factor_name asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | lookup kind=leftouter (\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain\n | project domain, rt_industry = industry, rt_portfolio_id = portfolio_id, rt_portfolio_name = portfolio_name\n ) on domain\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(rt_industry),\n portfolioId_g = toguid(rt_portfolio_id),\n portfolioName_s = tostring(rt_portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", "functionParameters": "", "version": 2, "tags": [ diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml index 4f4eccab1d6..6422c5328ee 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml @@ -72,6 +72,12 @@ FunctionQuery: | prev_score = prev(factor_score, 1) | extend has_prev = (domain == prev_domain and factor_name == prev_factor) | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key + | lookup kind=leftouter ( + SecurityScorecardRatingsHistory_CL + | where TimeGenerated > ago(365d) + | summarize arg_max(TimeGenerated, *) by domain + | project domain, rt_industry = industry, rt_portfolio_id = portfolio_id, rt_portfolio_name = portfolio_name + ) on domain | extend body_s = "Factor", Factor_s = factor_name, @@ -85,9 +91,9 @@ FunctionQuery: | diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)), factorDescription_s = coalesce(description, "data is not there"), ss_time_t = score_date, - industry_s = tostring(industry), - portfolioId_g = toguid(portfolio_id), - portfolioName_s = tostring(portfolio_name) + industry_s = tostring(rt_industry), + portfolioId_g = toguid(rt_portfolio_id), + portfolioName_s = tostring(rt_portfolio_name) | project TimeGenerated, body_s, diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml index 80a6dd1d30c..fc9f01323ee 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml @@ -47,6 +47,12 @@ FunctionQuery: | }; let SecurityScorecardIssueCCF = view () { SecurityScorecardIssuesHistory_CL + | lookup kind=leftouter ( + SecurityScorecardRatingsHistory_CL + | where TimeGenerated > ago(365d) + | summarize arg_max(TimeGenerated, *) by domain + | project domain, rt_industry = industry, rt_portfolio_id = portfolio_id, rt_portfolio_name = portfolio_name + ) on domain | extend body_s = "Issue", eventID_d = todouble(id), @@ -61,9 +67,9 @@ FunctionQuery: | severity_value_s = tostring(severity), detail_url_s = tostring(detail_url), ss_time_t = todatetime(issue_date), - industry_s = tostring(industry), - portfolioId_g = toguid(portfolio_id), - portfolioName_s = tostring(portfolio_name) + industry_s = tostring(rt_industry), + portfolioId_g = toguid(rt_portfolio_id), + portfolioName_s = tostring(rt_portfolio_name) | project TimeGenerated, body_s, diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/ReleaseNotes.md b/Solutions/SecurityScorecard Cybersecurity Ratings/ReleaseNotes.md index bf3ba44bd61..1e04d3a4e4f 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/ReleaseNotes.md +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/ReleaseNotes.md @@ -1,5 +1,7 @@ | **Version** | **Date Modified (DD-MM-YYYY)** | **Change History** | |-------------|--------------------------------|--------------------------------------------------------------------------------| +| 3.0.0 | 01-06-2026 | Reworked all three CCF pollers to flat fan-out (no shouldJoinNestedData/joinedDataStepName/MvExpand, which produced empty rows). Ratings ingests the portfolio company listing (domain/industry/score flat) with portfolio_id/portfolio_name injected via addOnAttributes. Factor and Issue use a 3-level chain reading the per-company history endpoints; domain comes from the factor response and (for issues) is extracted from detail_url. DCR streams/transforms rewritten to the real API fields. Factor/Issue parsers backfill industry/portfolioId/portfolioName via a lookup join to SecurityScorecardRatingsHistory_CL on domain. Workbook: replaced ingestion_time() with TimeGenerated, widened panel time window to 30 days, removed hardcoded Domain default. | +| 3.0.0 | 29-05-2026 | Migrated data connectors to Codeless Connector Framework (CCF). Added portfolio metadata (portfolio_id, portfolio_name) and company industry enrichment via nested poller steps. Wired PortfolioIds filter for portfolio scoping. Fixed workbook Domain picker (My Scorecard) and Vendor Scores Company/Portfolio/Industry columns. | | 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | | 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | | 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json index 151d457106f..7b658665145 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json @@ -115,7 +115,7 @@ "durationMs": 43200000 }, { - "durationMs": 86400000 + "durationMs": 2592000000 }, { "durationMs": 172800000 @@ -145,7 +145,7 @@ "allowCustom": true }, "timeContext": { - "durationMs": 86400000 + "durationMs": 2592000000 } } ], @@ -165,17 +165,16 @@ "id": "ac778abc-2101-4e66-92da-d11d4b4a8629", "version": "KqlParameterItem/1.0", "name": "Domain", - "type": 1, - "description": "Provide your company name", + "type": 2, + "description": "Select your company domain", "isRequired": true, - "query": "SecurityScorecardRatings\r\n| where portfolioName_s == \"NA\"\r\n| distinct subject_s\r\n| limit 1", + "query": "SecurityScorecardRatings\r\n| where isnotempty(subject_s)\r\n| distinct subject_s\r\n| sort by subject_s asc", "timeContext": { "durationMs": 0 }, "timeContextFromParameter": "Timer", "queryType": 0, - "resourceType": "microsoft.operationalinsights/workspaces", - "value": "cisco.com" + "resourceType": "microsoft.operationalinsights/workspaces" } ], "style": "pills", @@ -196,7 +195,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardRatings\r\n| where body_s == 'OverAll' and subject_s == '{Domain}'\r\n| summarize arg_max(ingestion_time(),*)\r\n| extend gradeToday = case((scoreToday_d>=90), \"A\",(scoreToday_d>=80 and scoreToday_d<=89), \"B\",(scoreToday_d>=70 and scoreToday_d<=79), \"C\",(scoreToday_d>=60 and scoreToday_d<=69), \"D\",isempty(scoreToday_d),\"\",\"F\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \r\n| project gradeToday, scoreToday_d, Details", + "query": "SecurityScorecardRatings\r\n| where body_s == 'OverAll' and subject_s == '{Domain}'\r\n| summarize arg_max(TimeGenerated,*)\r\n| extend gradeToday = case((scoreToday_d>=90), \"A\",(scoreToday_d>=80 and scoreToday_d<=89), \"B\",(scoreToday_d>=70 and scoreToday_d<=79), \"C\",(scoreToday_d>=60 and scoreToday_d<=69), \"D\",isempty(scoreToday_d),\"\",\"F\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \r\n| project gradeToday, scoreToday_d, Details", "size": 4, "showAnalytics": true, "timeContextFromParameter": "Timer", @@ -286,7 +285,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardRatings\r\n| where body_s == 'OverAll' and subject_s == '{Domain}'\r\n| summarize arg_max(ingestion_time(), *) by subject_s \r\n| extend Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \r\n| project scoreToday_d, subject_s, Details\r\n| limit 1", + "query": "SecurityScorecardRatings\r\n| where body_s == 'OverAll' and subject_s == '{Domain}'\r\n| summarize arg_max(TimeGenerated, *) by subject_s \r\n| extend Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \r\n| project scoreToday_d, subject_s, Details\r\n| limit 1", "size": 4, "showAnalytics": true, "timeContextFromParameter": "Timer", @@ -376,7 +375,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardRatings\r\n| where body_s == 'OverAll'and subject_s == '{Domain}'\r\n| project-rename Date = dateToday_s , Score = scoreToday_d \r\n| summarize arg_max(ingestion_time(), *) by Date \r\n| project Date=format_datetime(todatetime(Date), 'yyyy-MM-dd'), Score\r\n| sort by Date asc\r\n| limit 10", + "query": "SecurityScorecardRatings\r\n| where body_s == 'OverAll'and subject_s == '{Domain}'\r\n| project-rename Date = dateToday_s , Score = scoreToday_d \r\n| summarize arg_max(TimeGenerated, *) by Date \r\n| project Date=format_datetime(todatetime(Date), 'yyyy-MM-dd'), Score\r\n| sort by Date asc\r\n| limit 10", "size": 0, "showAnalytics": true, "title": "Score Trend", @@ -412,7 +411,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardFactor\r\n| where body_s == 'Factor' and subject_s == '{Domain}'\r\n| summarize arg_max(ingestion_time(),*) by dateToday_s, factorDescription_s\r\n| summarize arg_max(dateToday_s,*) by factorDescription_s\r\n| extend gradeToday=case((scoreToday_d >= 90),\"A\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\"B\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\"C\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\"D\",\"F\"), gradeYesterday=case((scoreYesterday_d >= 90),\"A\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\"B\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\"C\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\"D\",\"F\") \r\n| project Factor_Name_s, factorDescription_s, gradeToday, scoreToday_d, scoreChange_d, gradeYesterday, scoreYesterday_d, dateToday_s \r\n| project-rename Description =factorDescription_s, [\"Current Grade\"] = gradeToday, [\"Current Score\"] = scoreToday_d, [\"Latest Score Change\"] = scoreChange_d, [\"Last Updated Grade\"] = gradeYesterday, [\"Last Updated Score\"] = scoreYesterday_d, [\"Date of Current Score\"] = dateToday_s, Factor = Factor_Name_s ", + "query": "SecurityScorecardFactor\r\n| where body_s == 'Factor' and subject_s == '{Domain}'\r\n| summarize arg_max(TimeGenerated,*) by dateToday_s, factorDescription_s\r\n| summarize arg_max(dateToday_s,*) by factorDescription_s\r\n| extend gradeToday=case((scoreToday_d >= 90),\"A\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\"B\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\"C\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\"D\",\"F\"), gradeYesterday=case((scoreYesterday_d >= 90),\"A\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\"B\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\"C\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\"D\",\"F\") \r\n| project Factor_Name_s, factorDescription_s, gradeToday, scoreToday_d, scoreChange_d, gradeYesterday, scoreYesterday_d, dateToday_s \r\n| project-rename Description =factorDescription_s, [\"Current Grade\"] = gradeToday, [\"Current Score\"] = scoreToday_d, [\"Latest Score Change\"] = scoreChange_d, [\"Last Updated Grade\"] = gradeYesterday, [\"Last Updated Score\"] = scoreYesterday_d, [\"Date of Current Score\"] = dateToday_s, Factor = Factor_Name_s ", "size": 0, "showAnalytics": true, "title": "My Scorecard Factors", @@ -772,7 +771,7 @@ "durationMs": 43200000 }, { - "durationMs": 86400000 + "durationMs": 2592000000 }, { "durationMs": 172800000 @@ -802,7 +801,7 @@ "allowCustom": true }, "timeContext": { - "durationMs": 86400000 + "durationMs": 2592000000 }, "value": { "durationMs": 604800000 @@ -825,17 +824,16 @@ "id": "72d22203-f3dd-4557-9605-5b6ca4a4e6c0", "version": "KqlParameterItem/1.0", "name": "Domain", - "type": 1, - "description": "Provide your company name", + "type": 2, + "description": "Select your company domain", "isRequired": true, - "query": "SecurityScorecardRatings\r\n| where portfolioName_s == \"NA\"\r\n| distinct subject_s\r\n| limit 1", + "query": "SecurityScorecardRatings\r\n| where isnotempty(subject_s)\r\n| distinct subject_s\r\n| sort by subject_s asc", "timeContext": { "durationMs": 0 }, "timeContextFromParameter": "Timer", "queryType": 0, - "resourceType": "microsoft.operationalinsights/workspaces", - "value": "cisco.com" + "resourceType": "microsoft.operationalinsights/workspaces" } ], "style": "pills", @@ -970,7 +968,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardRatings\r\n| where body_s == \"OverAll\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and subject_s != '{Domain}'\r\n| summarize arg_max(ingestion_time(), *) by dateToday_s, subject_s, portfolioName_s\r\n| summarize arg_max(dateToday_s, *) by subject_s, portfolioName_s \r\n| extend [\"Current Grade\"]=case((scoreToday_d >= 90),\"A\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\"B\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\"C\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\"D\",\"F\"), [\"Last Updated Grade\"]=case((scoreYesterday_d >= 90),\"A\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\"B\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\"C\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\"D\",\"F\"), Industry=strcat_array(split(industry_s,\"_\"),\" \"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors')\r\n| project subject_s, portfolioName_s, Industry, [\"Date of Current Score\"] = format_datetime(todatetime(dateToday_s), 'yyyy-MM-dd'), scoreToday_d, [\"Current Grade\"], scoreYesterday_d, ['Last Updated Grade'], Details \r\n| project-rename Company = subject_s , [\"Current Score\"] = scoreToday_d, [\"Last Updated Score\"] = scoreYesterday_d \r\n| sort by Company asc, portfolioName_s asc", + "query": "SecurityScorecardRatings\r\n| where body_s == \"OverAll\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and subject_s != '{Domain}'\r\n| summarize arg_max(TimeGenerated, *) by dateToday_s, subject_s, portfolioName_s\r\n| summarize arg_max(dateToday_s, *) by subject_s, portfolioName_s \r\n| extend [\"Current Grade\"]=case((scoreToday_d >= 90),\"A\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\"B\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\"C\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\"D\",\"F\"), [\"Last Updated Grade\"]=case((scoreYesterday_d >= 90),\"A\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\"B\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\"C\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\"D\",\"F\"), Industry=strcat_array(split(industry_s,\"_\"),\" \"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors')\r\n| project subject_s, portfolioName_s, Industry, [\"Date of Current Score\"] = format_datetime(todatetime(dateToday_s), 'yyyy-MM-dd'), scoreToday_d, [\"Current Grade\"], scoreYesterday_d, ['Last Updated Grade'], Details \r\n| project-rename Company = subject_s , [\"Current Score\"] = scoreToday_d, [\"Last Updated Score\"] = scoreYesterday_d \r\n| sort by Company asc, portfolioName_s asc", "size": 0, "showAnalytics": true, "title": "Top Level Grade and Score by Company", @@ -1246,7 +1244,7 @@ }, "jsonData": "[\r\n { \"value\":\"A\", \"label\":\"A\"},\r\n { \"value\":\"B\", \"label\":\"B\"},\r\n { \"value\":\"C\", \"label\":\"C\"},\r\n { \"value\":\"D\", \"label\":\"D\" },\r\n { \"value\":\"F\", \"label\":\"F\"}\r\n]", "timeContext": { - "durationMs": 86400000 + "durationMs": 2592000000 }, "defaultValue": "value::all" } @@ -1262,7 +1260,7 @@ "type": 3, "content": { "version": "KqlItem/1.0", - "query": "SecurityScorecardFactor\r\n| where body_s == \"Factor\" and subject_s != '{Domain}' and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| summarize arg_max(ingestion_time(), *) by dateToday_s, subject_s, Factor_Name_s, portfolioName_s\r\n| summarize arg_max(dateToday_s, *) by subject_s, Factor_Name_s, portfolioName_s\r\n| extend [\"Current Grade\"] = case(scoreToday_d>=90, \"A\", scoreToday_d>=80 and scoreToday_d<=89, \"B\", scoreToday_d>=70 and scoreToday_d<=79, \"C\", scoreToday_d>=60 and scoreToday_d<=69, \"D\", \"F\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors') \r\n| where ('*' in ({Factor}) or Factor_Name_s in ({Factor})) and [\"Current Grade\"] in ({Grade})\r\n| project subject_s, portfolioName_s, Factor_Name_s, factorDescription_s , scoreToday_d, [\"Current Grade\"], Details \r\n| project-rename Company = subject_s, Factor = Factor_Name_s, Description = factorDescription_s, [\"Current Score\"] = scoreToday_d\r\n| sort by Factor asc, Company asc", + "query": "SecurityScorecardFactor\r\n| where body_s == \"Factor\" and subject_s != '{Domain}' and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\r\n| summarize arg_max(TimeGenerated, *) by dateToday_s, subject_s, Factor_Name_s, portfolioName_s\r\n| summarize arg_max(dateToday_s, *) by subject_s, Factor_Name_s, portfolioName_s\r\n| extend [\"Current Grade\"] = case(scoreToday_d>=90, \"A\", scoreToday_d>=80 and scoreToday_d<=89, \"B\", scoreToday_d>=70 and scoreToday_d<=79, \"C\", scoreToday_d>=60 and scoreToday_d<=69, \"D\", \"F\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors') \r\n| where ('*' in ({Factor}) or Factor_Name_s in ({Factor})) and [\"Current Grade\"] in ({Grade})\r\n| project subject_s, portfolioName_s, Factor_Name_s, factorDescription_s , scoreToday_d, [\"Current Grade\"], Details \r\n| project-rename Company = subject_s, Factor = Factor_Name_s, Description = factorDescription_s, [\"Current Score\"] = scoreToday_d\r\n| sort by Factor asc, Company asc", "size": 0, "showAnalytics": true, "title": "Top Level Grade and Score by Factor", @@ -1597,7 +1595,7 @@ "durationMs": 43200000 }, { - "durationMs": 86400000 + "durationMs": 2592000000 }, { "durationMs": 172800000 @@ -1627,7 +1625,7 @@ "allowCustom": true }, "timeContext": { - "durationMs": 86400000 + "durationMs": 2592000000 }, "value": { "durationMs": 604800000 @@ -1816,7 +1814,7 @@ }, "jsonData": "[\r\n { \"value\":\"info\", \"label\":\"Info\"},\r\n { \"value\":\"low\", \"label\":\"Low\" },\r\n { \"value\":\"medium\", \"label\":\"Medium\"},\r\n { \"value\":\"high\", \"label\":\"high\" },\r\n { \"value\":\"positive\", \"label\":\"Positive\"}\r\n]", "timeContext": { - "durationMs": 86400000 + "durationMs": 2592000000 }, "defaultValue": "value::all" } @@ -2061,7 +2059,7 @@ "durationMs": 43200000 }, { - "durationMs": 86400000 + "durationMs": 2592000000 }, { "durationMs": 172800000 @@ -2091,7 +2089,7 @@ "allowCustom": true }, "timeContext": { - "durationMs": 86400000 + "durationMs": 2592000000 } } ], @@ -2124,7 +2122,7 @@ }, "jsonData": "[\r\n { \"value\":\"service_vuln_host_high\", \"label\":\"Service Vuln Host High\"},\r\n { \"value\":\"service_vuln_host_low\", \"label\":\"Service Vuln Host Low\" },\r\n { \"value\":\"service_vuln_host_medium\", \"label\":\"Service Vuln Host Medium\"},\r\n { \"value\":\"patching_cadence_high\", \"label\":\"Patching Cadence High\" },\r\n { \"value\":\"patching_cadence_low\", \"label\":\"Patching Cadence Low\"},\r\n { \"value\":\"patching_cadence_medium\", \"label\":\"Patching Cadence Medium\" },\r\n { \"value\":\"web_vuln_host_high\", \"label\":\"Web Vuln Host High\"},\r\n { \"value\":\"web_vuln_host_low\", \"label\":\"Web Vuln Host Low\" },\r\n { \"value\":\"web_vuln_host_medium\", \"label\":\"Web Vuln Host Medium\"}\r\n]", "timeContext": { - "durationMs": 86400000 + "durationMs": 2592000000 }, "defaultValue": "value::all" } @@ -2400,7 +2398,7 @@ "durationMs": 43200000 }, { - "durationMs": 86400000 + "durationMs": 2592000000 }, { "durationMs": 172800000 @@ -2430,7 +2428,7 @@ "allowCustom": true }, "timeContext": { - "durationMs": 86400000 + "durationMs": 2592000000 } } ], @@ -2745,7 +2743,7 @@ "durationMs": 43200000 }, { - "durationMs": 86400000 + "durationMs": 2592000000 }, { "durationMs": 172800000 @@ -2775,7 +2773,7 @@ "allowCustom": true }, "timeContext": { - "durationMs": 86400000 + "durationMs": 2592000000 } } ], @@ -3107,7 +3105,7 @@ }, "jsonData": "[\r\n { \"value\":\"info\", \"label\":\"Info\"},\r\n { \"value\":\"low\", \"label\":\"Low\" },\r\n { \"value\":\"medium\", \"label\":\"Medium\"},\r\n { \"value\":\"high\", \"label\":\"high\" },\r\n { \"value\":\"positive\", \"label\":\"Positive\"}\r\n]", "timeContext": { - "durationMs": 86400000 + "durationMs": 2592000000 }, "defaultValue": "value::all" } From 57843e222cfb8a59322fbf2c2402e7edb1a35353 Mon Sep 17 00:00:00 2001 From: Shrey Sonar Date: Fri, 17 Jul 2026 17:27:55 +0530 Subject: [PATCH 3/9] Add multi-instance and Azure Function feature parity to SecurityScorecard CCF connectors Convert the Ratings, Factor, and Issue CCF connectors to multi-instance (DataConnectorsGrid + ContextPane) with one independently-managed connection per portfolio, scoped server-side via uniqueString pollers, and close the remaining feature gaps versus the legacy Azure Function connectors: - Ratings: nested /companies/{domain}/history/score for real dated history (replaces the now() snapshot), with real day-over-day deltas and backfill. - Optional own-company "My Scorecard" ingestion via a condition-gated poller per connector (optional Domain field). - Inject company domain and industry into Factor/Issue leaf events via addOnAttributes; drop the cross-connector RatingsHistory parser lookup. - Issue parser: dedup by (id, portfolio_id); humanize issueName. - Ratings/Factor parsers: key day-over-day partitioning on portfolio_id. - Disable logResponseContent; remove stale azuredeploy poller templates. - Repackage solution at 3.0.0. --- .../SecurityScorecardFactor_DCR.json | 14 +- ...orecardFactor_DataConnectorDefinition.json | 116 +- ...SecurityScorecardFactor_PollingConfig.json | 111 +- ...urityScorecardFactor_poller_connector.json | 582 --------- .../SecurityScorecardIssue_DCR.json | 18 +- ...corecardIssue_DataConnectorDefinition.json | 116 +- .../SecurityScorecardIssue_PollingConfig.json | 111 +- ...curityScorecardIssue_poller_connector.json | 646 ---------- .../SecurityScorecardRatings_DCR.json | 14 +- ...recardRatings_DataConnectorDefinition.json | 116 +- ...ecurityScorecardRatings_PollingConfig.json | 89 +- ...rityScorecardRatings_poller_connector.json | 582 --------- .../Package/2.0.0.zip | Bin 18006 -> 0 bytes .../Package/3.0.0.zip | Bin 28198 -> 31998 bytes .../Package/mainTemplate.json | 1101 ++++++++++++----- .../Parsers/SecurityScorecardFactor.yaml | 25 +- .../Parsers/SecurityScorecardIssue.yaml | 20 +- .../Parsers/SecurityScorecardRatings.yaml | 11 +- .../ReleaseNotes.md | 9 +- 19 files changed, 1354 insertions(+), 2327 deletions(-) delete mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/azuredeploy_SecurityScorecardFactor_poller_connector.json delete mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/azuredeploy_SecurityScorecardIssue_poller_connector.json delete mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/azuredeploy_SecurityScorecardRatings_poller_connector.json delete mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Package/2.0.0.zip diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DCR.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DCR.json index 2ab39baba3d..aa823b8d375 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DCR.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DCR.json @@ -19,6 +19,18 @@ { "name": "date", "type": "datetime" + }, + { + "name": "portfolio_id", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + }, + { + "name": "industry", + "type": "string" } ] } @@ -39,7 +51,7 @@ "destinations": [ "clv2ws1" ], - "transformKql": "source | extend TimeGenerated = todatetime(['date']), score_date = todatetime(['date']), domain = tostring(domain), factors = todynamic(factors) | project TimeGenerated, score_date, factors, domain", + "transformKql": "source | extend TimeGenerated = todatetime(['date']), score_date = todatetime(['date']), domain = tostring(domain), industry = tostring(industry), factors = todynamic(factors) | project TimeGenerated, score_date, factors, domain, industry, portfolio_id, portfolio_name", "outputStream": "Custom-SecurityScorecardFactorHistory_CL" } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json index 0c75661ac1c..22b6f3f6a43 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json @@ -1,6 +1,6 @@ { "name": "SecurityScorecardFactorCCPDefinition", - "apiVersion": "2022-09-01-preview", + "apiVersion": "2025-07-01-preview", "type": "Microsoft.SecurityInsights/dataConnectorDefinitions", "location": "{{location}}", "kind": "Customizable", @@ -9,7 +9,7 @@ "id": "SecurityScorecardFactorCCPDefinition", "title": "SecurityScorecard Factors (Codeless)", "publisher": "SecurityScorecard", - "descriptionMarkdown": "The SecurityScorecard Factors (Codeless) connector ingests company factor-score history into Microsoft Sentinel using the Codeless Connector Framework. Raw rows land in `SecurityScorecardFactorHistory_CL`; query via the `SecurityScorecardFactor` parser to get day-over-day deltas with factor metadata, matching the legacy Function App schema.", + "descriptionMarkdown": "The SecurityScorecard Factors (Codeless) connector ingests company factor-score history into Microsoft Sentinel using the Codeless Connector Framework. Add one connection per SecurityScorecard portfolio you want to monitor — each connection is managed independently in the grid below. Raw rows land in `SecurityScorecardFactorHistory_CL`; query via the `SecurityScorecardFactor` parser to get day-over-day deltas with factor metadata, matching the legacy Function App schema.", "graphQueriesTableName": "SecurityScorecardFactorHistory_CL", "graphQueries": [ { @@ -69,41 +69,97 @@ "description": "As an administrator, create a bot user with Read Only permission and generate the API token." }, { - "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", - "description": "Enter the base URL, API token, and one or more portfolio IDs (comma-separated). At least one portfolio ID is required — the connector fetches all portfolios and ingests factor scores only for those matching the provided IDs.", + "title": "STEP 2 - Add a portfolio connection", + "description": "Add one connection per SecurityScorecard portfolio. Each connection ingests the factor-score history for the companies in a single portfolio and is listed, managed, and deleted independently below. To also ingest your own company's factor scores (My Scorecard), enter your company domain in the optional field on one connection.", "instructions": [ { - "type": "Textbox", + "type": "DataConnectorsGrid", "parameters": { - "label": "Base URL", - "placeholder": "https://api.securityscorecard.io", - "type": "text", - "name": "BaseUrl" + "mapping": [ + { + "columnName": "Portfolio Name", + "columnValue": "properties.addOnAttributes.portfolio_name" + }, + { + "columnName": "Portfolio ID", + "columnValue": "properties.addOnAttributes.portfolio_id" + } + ], + "menuItems": [ + "DeleteConnector" + ] } }, { - "type": "Textbox", + "type": "ContextPane", "parameters": { - "label": "API Token", - "placeholder": "Enter your SecurityScorecard API token", - "type": "password", - "name": "ApiToken" - } - }, - { - "type": "Textbox", - "parameters": { - "label": "Portfolio IDs (comma-separated)", - "placeholder": "comma-separated, no spaces: portfolio-id-1,portfolio-id-2", - "type": "text", - "name": "PortfolioIds" - } - }, - { - "type": "ConnectionToggleButton", - "parameters": { - "connectLabel": "connect", - "name": "connect" + "label": "Add portfolio", + "title": "Add a SecurityScorecard portfolio", + "subtitle": "Connect one SecurityScorecard portfolio", + "contextPaneType": "DataConnectorsContextPane", + "instructionSteps": [ + { + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl", + "validations": { + "required": true + } + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken", + "validations": { + "required": true + } + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio ID", + "placeholder": "Enter the SecurityScorecard portfolio ID", + "type": "text", + "name": "PortfolioId", + "validations": { + "required": true + } + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio Name", + "placeholder": "A friendly name for this portfolio (shown in reports and the workbook)", + "type": "text", + "name": "PortfolioName", + "validations": { + "required": true + } + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Your Company Domain (optional - My Scorecard)", + "placeholder": "e.g. yourcompany.com - leave blank if not needed", + "type": "text", + "name": "Domain" + } + } + ] + } + ] } } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json index 5238f9d126d..23d089d5eed 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json @@ -1,13 +1,19 @@ [ { - "name": "SecurityScorecardFactorPoller", - "apiVersion": "2024-09-01", "type": "Microsoft.SecurityInsights/dataConnectors", + "apiVersion": "2024-09-01", + "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardFactor', uniqueString(parameters('PortfolioId')))]", "location": "{{location}}", "kind": "RestApiPoller", "properties": { "connectorDefinitionName": "SecurityScorecardFactorCCPDefinition", "dataType": "SecurityScorecardFactorHistory_CL", + "addOnAttributes": { + "portfolio_id": "[[parameters('PortfolioId')]", + "portfolio_name": "[[parameters('PortfolioName')]", + "domain": "$company_domain$", + "industry": "$company_industry$" + }, "dcrConfig": { "streamName": "Custom-SecurityScorecardFactorHistory_CL", "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", @@ -15,19 +21,19 @@ }, "auth": { "type": "APIKey", - "ApiKey": "{{ApiToken}}", + "ApiKey": "[[parameters('ApiToken')]", "ApiKeyName": "Authorization", "ApiKeyIdentifier": "Token" }, "request": { - "apiEndpoint": "{{BaseUrl}}/portfolios", + "apiEndpoint": "[[concat(parameters('BaseUrl'), '/portfolios/', parameters('PortfolioId'), '/companies')]", "httpMethod": "GET", "queryWindowInMin": 10080, "queryTimeFormat": "yyyy-MM-dd", "rateLimitQPS": 1, "retryCount": 3, "timeoutInSeconds": 60, - "logResponseContent": true, + "logResponseContent": false, "headers": { "Content-Type": "application/json", "Accept": "application/json; charset=utf-8", @@ -45,53 +51,22 @@ "stepType": "Nested", "nextSteps": [ { - "stepId": "portfolioCompanies", - "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project portfolio_id = tostring(res['id'])" + "stepId": "factorHistory", + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project company_domain = tostring(res['domain']), company_industry = tostring(res['industry'])" } ] }, "stepCollectorConfigs": { - "portfolioCompanies": { - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "factorHistory", - "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project company_domain = tostring(res['domain'])" - } - ] - }, - "request": { - "apiEndpoint": "{{BaseUrl}}/portfolios/$portfolio_id$/companies", - "httpMethod": "GET", - "rateLimitQPS": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "logResponseContent": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - } - }, "factorHistory": { "request": { - "apiEndpoint": "{{BaseUrl}}/companies/$company_domain$/history/factors/score", + "apiEndpoint": "[[concat(parameters('BaseUrl'), '/companies/$company_domain$/history/factors/score')]", "httpMethod": "GET", "queryWindowInMin": 10080, "queryTimeFormat": "yyyy-MM-dd", "rateLimitQPS": 1, "retryCount": 3, "timeoutInSeconds": 60, - "logResponseContent": true, + "logResponseContent": false, "headers": { "Content-Type": "application/json", "Accept": "application/json; charset=utf-8", @@ -113,5 +88,61 @@ } } } + }, + { + "type": "Microsoft.SecurityInsights/dataConnectors", + "apiVersion": "2024-09-01", + "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardFactorOwn', uniqueString(parameters('Domain')))]", + "location": "{{location}}", + "kind": "RestApiPoller", + "condition": "[[and(not(empty(parameters('Domain'))), not(equals(parameters('Domain'), 'Domain')))]", + "properties": { + "connectorDefinitionName": "SecurityScorecardFactorCCPDefinition", + "dataType": "SecurityScorecardFactorHistory_CL", + "addOnAttributes": { + "portfolio_id": "NA", + "portfolio_name": "My Scorecard", + "domain": "[[parameters('Domain')]", + "industry": "NA" + }, + "dcrConfig": { + "streamName": "Custom-SecurityScorecardFactorHistory_CL", + "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", + "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" + }, + "auth": { + "type": "APIKey", + "ApiKey": "[[parameters('ApiToken')]", + "ApiKeyName": "Authorization", + "ApiKeyIdentifier": "Token" + }, + "request": { + "apiEndpoint": "[[concat(parameters('BaseUrl'), '/companies/', parameters('Domain'), '/history/factors/score')]", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": false, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "from": "{_QueryWindowStartTime}", + "to": "{_QueryWindowEndTime}", + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + } } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/azuredeploy_SecurityScorecardFactor_poller_connector.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/azuredeploy_SecurityScorecardFactor_poller_connector.json deleted file mode 100644 index 2c6b9e2d21a..00000000000 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/azuredeploy_SecurityScorecardFactor_poller_connector.json +++ /dev/null @@ -1,582 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "location": { - "defaultValue": "[resourceGroup().location]", - "minLength": 1, - "type": "string", - "metadata": { - "description": "Not used, but needed to pass arm-ttk test `Location-Should-Not-Be-Hardcoded`. We instead use `workspace-location` derived from the LA workspace." - } - }, - "workspace": { - "defaultValue": "", - "type": "string", - "metadata": { - "description": "Workspace name for Log Analytics where Microsoft Sentinel is set up" - } - } - }, - "variables": { - "_solutionName": "SecurityScorecard Cybersecurity Ratings", - "_solutionVersion": "3.0.1", - "_solutionAuthor": "SecurityScorecard", - "_solutionPublisher": "SecurityScorecard", - "_solutionTier": "Partner", - "solutionId": "azuresentinel.azure-sentinel-solution-securityscorecard", - "_solutionId": "[variables('solutionId')]", - "dataConnectorVersionConnections": "3.0.1", - "_dataConnectorContentIdConnectorDefinition": "SecurityScorecardFactorCCPDefinition", - "dataConnectorTemplateNameConnectorDefinition": "[format('contentTemplate-{0}', uniquestring(variables('_dataConnectorContentIdConnectorDefinition')))]", - "_dataConnectorContentIdConnections": "SecurityScorecardFactorCCPDefinitionConnections", - "dataConnectorTemplateNameConnections": "[format('{0}-dc-{1}', parameters('workspace'), uniquestring(variables('_dataConnectorContentIdConnections')))]", - "_solutioncontentProductId": "[concat(take(variables('_solutionId'),50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]" - }, - "resources": [ - { - "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", - "apiVersion": "2023-04-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/{1}-v{2}', parameters('workspace'), variables('dataConnectorTemplateNameConnectorDefinition'), variables('dataConnectorVersionConnections'))]", - "location": "[parameters('location')]", - "dependsOn": [ - "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" - ], - "properties": { - "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "displayName": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "contentKind": "DataConnector", - "packageKind": "Solution", - "packageVersion": "[variables('_solutionVersion')]", - "packageName": "[variables('_solutionName')]", - "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition'),'-', variables('dataConnectorVersionConnections'))))]", - "packageId": "[variables('_solutionId')]", - "contentSchemaVersion": "3.0.0", - "version": "[variables('dataConnectorVersionConnections')]", - "mainTemplate": { - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "[variables('dataConnectorVersionConnections')]", - "parameters": {}, - "variables": {}, - "resources": [ - { - "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", - "apiVersion": "2022-01-01-preview", - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]", - "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "kind": "DataConnector", - "version": "[variables('dataConnectorVersionConnections')]", - "source": { - "sourceId": "[variables('_solutionId')]", - "name": "[variables('_solutionName')]", - "kind": "Solution" - }, - "author": { - "name": "[variables('_solutionAuthor')]" - }, - "support": { - "name": "[variables('_solutionAuthor')]", - "tier": "[variables('_solutionTier')]" - }, - "dependencies": { - "criteria": [ - { - "version": "[variables('dataConnectorVersionConnections')]", - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "kind": "ResourcesDataConnector" - } - ] - } - } - }, - { - "type": "Microsoft.Insights/dataCollectionRules", - "apiVersion": "2021-09-01-preview", - "name": "SecurityScorecardFactorDCR", - "location": "[parameters('location')]", - "properties": { - "dataCollectionEndpointId": "[format('{0}/providers/Microsoft.Insights/dataCollectionEndpoints/{1}', resourceGroup().id, parameters('workspace'))]", - "streamDeclarations": { - "Custom-SecurityScorecardFactorHistory_CL": { - "columns": [ - { - "name": "date", - "type": "datetime" - }, - { - "name": "factors", - "type": "dynamic" - }, - { - "name": "company_domain", - "type": "string" - } - ] - } - }, - "destinations": { - "logAnalytics": [ - { - "workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace'))]", - "name": "clv2ws1" - } - ] - }, - "dataFlows": [ - { - "streams": [ - "Custom-SecurityScorecardFactorHistory_CL" - ], - "destinations": [ - "clv2ws1" - ], - "outputStream": "Custom-SecurityScorecardFactorHistory_CL", - "transformKql": "source | extend TimeGenerated = ['date'], score_date = ['date'], domain = company_domain | project-away ['date'], company_domain" - } - ] - } - }, - { - "name": "SecurityScorecardFactorHistory_CL", - "apiVersion": "2022-10-01", - "type": "Microsoft.OperationalInsights/workspaces/tables", - "location": "[parameters('location')]", - "kind": null, - "properties": { - "schema": { - "name": "SecurityScorecardFactorHistory_CL", - "columns": [ - { - "name": "TimeGenerated", - "type": "datetime" - }, - { - "name": "score_date", - "type": "datetime" - }, - { - "name": "factors", - "type": "dynamic" - }, - { - "name": "domain", - "type": "string" - } - ] - } - } - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions", - "apiVersion": "2022-09-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", - "location": "[parameters('location')]", - "kind": "Customizable", - "properties": { - "connectorUiConfig": { - "id": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "title": "SecurityScorecard Factors (Codeless)", - "publisher": "[variables('_solutionPublisher')]", - "descriptionMarkdown": "Ingest SecurityScorecard factor-score history into Microsoft Sentinel via CCF. Raw rows land in `SecurityScorecardFactorHistory_CL`; query with the `SecurityScorecardFactor` parser.", - "graphQueriesTableName": "SecurityScorecardFactorHistory_CL", - "graphQueries": [ - { - "metricName": "Total Factor history rows received", - "legend": "SecurityScorecard factor history", - "baseQuery": "{{graphQueriesTableName}}" - } - ], - "sampleQueries": [ - { - "description": "Day-over-day factor change (parser)", - "query": "SecurityScorecardFactor\n | sort by TimeGenerated desc" - }, - { - "description": "Raw factor history", - "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" - } - ], - "dataTypes": [ - { - "name": "SecurityScorecardFactorHistory_CL", - "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - } - ], - "connectivityCriteria": [ - { - "type": "HasDataConnectors" - } - ], - "availability": { - "isPreview": false - }, - "permissions": { - "resourceProvider": [ - { - "provider": "Microsoft.OperationalInsights/workspaces", - "permissionsDisplayText": "Read and Write permissions are required.", - "providerDisplayName": "Workspace", - "scope": "Workspace", - "requiredPermissions": { - "write": true, - "read": true, - "delete": true - } - } - ], - "customs": [ - { - "name": "SecurityScorecard API token", - "description": "A SecurityScorecard API token is required." - } - ] - }, - "instructionSteps": [ - { - "title": "STEP 1 - Create a SecurityScorecard API token", - "description": "As an administrator, create a bot user with Read Only permission and generate the API token." - }, - { - "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", - "description": "Enter the base URL, API token, and portfolio ID below.", - "instructions": [ - { - "type": "Textbox", - "parameters": { - "label": "Base URL", - "placeholder": "https://api.securityscorecard.io", - "type": "text", - "name": "BaseUrl" - } - }, - { - "type": "Textbox", - "parameters": { - "label": "API Token", - "placeholder": "Enter your SecurityScorecard API token", - "type": "password", - "name": "ApiToken" - } - }, - { - "type": "Textbox", - "parameters": { - "label": "Portfolio IDs (comma-separated)", - "placeholder": "e.g. portfolio-id-1, portfolio-id-2", - "type": "text", - "name": "PortfolioIds" - } - }, - { - "type": "ConnectionToggleButton", - "parameters": { - "connectLabel": "connect", - "name": "connect" - } - } - ] - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2022-01-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]", - "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "kind": "DataConnector", - "version": "[variables('dataConnectorVersionConnections')]", - "source": { - "sourceId": "[variables('_solutionId')]", - "name": "[variables('_solutionName')]", - "kind": "Solution" - }, - "author": { - "name": "[variables('_solutionAuthor')]" - }, - "support": { - "name": "[variables('_solutionAuthor')]", - "tier": "[variables('_solutionTier')]" - }, - "dependencies": { - "criteria": [ - { - "version": "[variables('dataConnectorVersionConnections')]", - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "kind": "ResourcesDataConnector" - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", - "apiVersion": "2023-04-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/{1}{2}', parameters('workspace'), variables('dataConnectorTemplateNameConnections'), variables('dataConnectorVersionConnections'))]", - "location": "[parameters('location')]", - "dependsOn": [ - "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" - ], - "properties": { - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "displayName": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "contentKind": "ResourcesDataConnector", - "packageKind": "Solution", - "packageVersion": "[variables('_solutionVersion')]", - "packageName": "[variables('_solutionName')]", - "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections'),'-', variables('dataConnectorVersionConnections'))))]", - "packageId": "[variables('_solutionId')]", - "contentSchemaVersion": "3.0.0", - "version": "[variables('dataConnectorVersionConnections')]", - "mainTemplate": { - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "[variables('dataConnectorVersionConnections')]", - "parameters": { - "BaseUrl": { - "defaultValue": "https://api.securityscorecard.io", - "type": "string", - "minLength": 1 - }, - "ApiToken": { - "defaultValue": "-NA-", - "type": "securestring", - "minLength": 1 - }, - "PortfolioIds": { - "defaultValue": "-NA-", - "type": "string", - "minLength": 1 - }, - "connectorDefinitionName": { - "defaultValue": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "type": "string", - "minLength": 1 - }, - "workspace": { - "defaultValue": "[parameters('workspace')]", - "type": "string" - }, - "dcrConfig": { - "defaultValue": { - "dataCollectionEndpoint": "data collection Endpoint", - "dataCollectionRuleImmutableId": "data collection rule immutableId" - }, - "type": "object" - } - }, - "variables": { - "_dataConnectorContentIdConnections": "[variables('_dataConnectorContentIdConnections')]" - }, - "resources": [ - { - "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnections'))]", - "apiVersion": "2022-01-01-preview", - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections'))]", - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "kind": "ResourcesDataConnector", - "version": "[variables('dataConnectorVersionConnections')]", - "source": { - "sourceId": "[variables('_solutionId')]", - "name": "[variables('_solutionName')]", - "kind": "Solution" - }, - "author": { - "name": "[variables('_solutionAuthor')]" - }, - "support": { - "name": "[variables('_solutionAuthor')]", - "tier": "[variables('_solutionTier')]" - } - } - }, - { - "name": "[format('{0}/Microsoft.SecurityInsights/SecurityScorecardFactorPoller', parameters('workspace'))]", - "apiVersion": "2024-09-01", - "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", - "location": "[parameters('location')]", - "kind": "RestApiPoller", - "properties": { - "connectorDefinitionName": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "dataType": "SecurityScorecardFactorHistory_CL", - "dcrConfig": { - "streamName": "Custom-SecurityScorecardFactorHistory_CL", - "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", - "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" - }, - "auth": { - "type": "APIKey", - "ApiKey": "[[parameters('ApiToken')]", - "ApiKeyName": "Authorization", - "ApiKeyIdentifier": "Token" - }, - "request": { - "apiEndpoint": "[[format('{0}/portfolios', parameters('BaseUrl'))]", - "httpMethod": "GET", - "queryWindowInMin": 1440, - "queryTimeFormat": "yyyy-MM-dd", - "rateLimitQps": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - }, - "queryParameters": { - "timing": "daily" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - }, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "portfolioCompanies", - "stepPlaceholdersParsingKql": "[[concat('let userInput = ''', parameters('PortfolioIds'), '''; let allowedIds = split(userInput, '',''); source | project res = parse_json(data) | extend p_id = tostring(res[''id'']) | where userInput != '''' and p_id in (allowedIds) | project portfolio_id = p_id')]" - } - ] - }, - "stepCollectorConfigs": { - "portfolioCompanies": { - "shouldJoinNestedData": false, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "factorHistory", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain'])" - } - ] - }, - "request": { - "apiEndpoint": "[[format('{0}/portfolios/$portfolio_id$/companies', parameters('BaseUrl'))]", - "httpMethod": "GET", - "rateLimitQps": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - }, - "queryParameters": { - "timing": "daily" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - } - }, - "factorHistory": { - "shouldJoinNestedData": true, - "request": { - "apiEndpoint": "[[format('{0}/companies/$company_domain$/history/factors/score', parameters('BaseUrl'))]", - "httpMethod": "GET", - "queryWindowInMin": 1440, - "queryTimeFormat": "yyyy-MM-dd", - "rateLimitQps": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "logResponseContent": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - }, - "queryParameters": { - "from": "{_QueryWindowStartTime}", - "to": "{_QueryWindowEndTime}", - "timing": "daily" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - } - } - } - } - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages", - "apiVersion": "2023-04-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/{1}', parameters('workspace'), variables('_solutionId'))]", - "location": "[parameters('location')]", - "properties": { - "version": "[variables('_solutionVersion')]", - "kind": "Solution", - "contentSchemaVersion": "3.0.0", - "displayName": "[variables('_solutionName')]", - "publisherDisplayName": "[variables('_solutionPublisher')]", - "descriptionHtml": "SecurityScorecard Cybersecurity Ratings \u2014 Factors (Codeless) connector", - "contentKind": "Solution", - "contentProductId": "[variables('_solutioncontentProductId')]", - "id": "[variables('_solutioncontentProductId')]", - "contentId": "[variables('_solutionId')]", - "parentId": "[variables('_solutionId')]", - "source": { - "kind": "Solution", - "name": "SecurityScorecard Cybersecurity Ratings", - "sourceId": "[variables('_solutionId')]" - }, - "author": { - "name": "[variables('_solutionAuthor')]" - }, - "support": { - "name": "[variables('_solutionAuthor')]", - "tier": "[variables('_solutionTier')]" - }, - "dependencies": { - "operator": "AND", - "criteria": [ - { - "kind": "DataConnector", - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "version": "[variables('dataConnectorVersionConnections')]" - } - ] - }, - "firstPublishDate": "2022-10-01", - "providers": [ - "SecurityScorecard" - ], - "categories": { - "domains": [ - "Security", - "Security - Network", - "Security - Vulnerability Management" - ] - } - } - } - ], - "outputs": {} -} \ No newline at end of file diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DCR.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DCR.json index 252dd6e868e..56fbb49f668 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DCR.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DCR.json @@ -47,6 +47,22 @@ { "name": "detail_url", "type": "string" + }, + { + "name": "portfolio_id", + "type": "string" + }, + { + "name": "portfolio_name", + "type": "string" + }, + { + "name": "company_domain", + "type": "string" + }, + { + "name": "industry", + "type": "string" } ] } @@ -67,7 +83,7 @@ "destinations": [ "clv2ws1" ], - "transformKql": "source | where tostring(issue_type) != 'breach' | extend TimeGenerated = todatetime(['date']), issue_date = todatetime(['date']), domain = extract('companies/([^/]+)/', 1, tostring(detail_url)) | project TimeGenerated, id, issue_date, event_type, group_status, issue_count, total_score_impact, issue_type, severity, factor, detail_url, domain", + "transformKql": "source | where tostring(issue_type) != 'breach' | extend TimeGenerated = todatetime(['date']), issue_date = todatetime(['date']), domain = iff(isnotempty(tostring(company_domain)), tostring(company_domain), extract('companies/([^/]+)/', 1, tostring(detail_url))), industry = tostring(industry) | project TimeGenerated, id, issue_date, event_type, group_status, issue_count, total_score_impact, issue_type, severity, factor, detail_url, domain, industry, portfolio_id, portfolio_name", "outputStream": "Custom-SecurityScorecardIssuesHistory_CL" } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json index a2ac69d012b..e7fd17371a0 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json @@ -1,6 +1,6 @@ { "name": "SecurityScorecardIssueCCPDefinition", - "apiVersion": "2022-09-01-preview", + "apiVersion": "2025-07-01-preview", "type": "Microsoft.SecurityInsights/dataConnectorDefinitions", "location": "{{location}}", "kind": "Customizable", @@ -9,7 +9,7 @@ "id": "SecurityScorecardIssueCCPDefinition", "title": "SecurityScorecard Issues (Codeless)", "publisher": "SecurityScorecard", - "descriptionMarkdown": "The SecurityScorecard Issues (Codeless) connector ingests issue history events from SecurityScorecard companies in a chosen portfolio into Microsoft Sentinel using the Codeless Connector Framework. Replaces the Function App connector.", + "descriptionMarkdown": "The SecurityScorecard Issues (Codeless) connector ingests issue history events from the companies in a SecurityScorecard portfolio into Microsoft Sentinel using the Codeless Connector Framework. Add one connection per portfolio you want to monitor — each connection is managed independently in the grid below. Replaces the Function App connector.", "graphQueriesTableName": "SecurityScorecardIssuesHistory_CL", "graphQueries": [ { @@ -65,41 +65,97 @@ "description": "As an administrator in SecurityScorecard, navigate to My Settings then Users, create a bot user with Read Only permission, and generate the API token." }, { - "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", - "description": "Enter the base URL, API token, and one or more portfolio IDs (comma-separated). At least one portfolio ID is required — the connector fetches all portfolios and ingests issue events only for those matching the provided IDs.", + "title": "STEP 2 - Add a portfolio connection", + "description": "Add one connection per SecurityScorecard portfolio. Each connection ingests the issue-history events for the companies in a single portfolio and is listed, managed, and deleted independently below. To also ingest your own company's issue events (My Scorecard), enter your company domain in the optional field on one connection.", "instructions": [ { - "type": "Textbox", + "type": "DataConnectorsGrid", "parameters": { - "label": "Base URL", - "placeholder": "https://api.securityscorecard.io", - "type": "text", - "name": "BaseUrl" + "mapping": [ + { + "columnName": "Portfolio Name", + "columnValue": "properties.addOnAttributes.portfolio_name" + }, + { + "columnName": "Portfolio ID", + "columnValue": "properties.addOnAttributes.portfolio_id" + } + ], + "menuItems": [ + "DeleteConnector" + ] } }, { - "type": "Textbox", + "type": "ContextPane", "parameters": { - "label": "API Token", - "placeholder": "Enter your SecurityScorecard API token", - "type": "password", - "name": "ApiToken" - } - }, - { - "type": "Textbox", - "parameters": { - "label": "Portfolio IDs (comma-separated)", - "placeholder": "comma-separated, no spaces: portfolio-id-1,portfolio-id-2", - "type": "text", - "name": "PortfolioIds" - } - }, - { - "type": "ConnectionToggleButton", - "parameters": { - "connectLabel": "connect", - "name": "connect" + "label": "Add portfolio", + "title": "Add a SecurityScorecard portfolio", + "subtitle": "Connect one SecurityScorecard portfolio", + "contextPaneType": "DataConnectorsContextPane", + "instructionSteps": [ + { + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl", + "validations": { + "required": true + } + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken", + "validations": { + "required": true + } + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio ID", + "placeholder": "Enter the SecurityScorecard portfolio ID", + "type": "text", + "name": "PortfolioId", + "validations": { + "required": true + } + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio Name", + "placeholder": "A friendly name for this portfolio (shown in reports and the workbook)", + "type": "text", + "name": "PortfolioName", + "validations": { + "required": true + } + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Your Company Domain (optional - My Scorecard)", + "placeholder": "e.g. yourcompany.com - leave blank if not needed", + "type": "text", + "name": "Domain" + } + } + ] + } + ] } } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json index 1fa715e8225..e38d7e9ddc0 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json @@ -1,13 +1,19 @@ [ { - "name": "SecurityScorecardIssuesPoller", - "apiVersion": "2024-09-01", "type": "Microsoft.SecurityInsights/dataConnectors", + "apiVersion": "2024-09-01", + "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardIssues', uniqueString(parameters('PortfolioId')))]", "location": "{{location}}", "kind": "RestApiPoller", "properties": { "connectorDefinitionName": "SecurityScorecardIssueCCPDefinition", "dataType": "SecurityScorecardIssuesHistory_CL", + "addOnAttributes": { + "portfolio_id": "[[parameters('PortfolioId')]", + "portfolio_name": "[[parameters('PortfolioName')]", + "company_domain": "$company_domain$", + "industry": "$company_industry$" + }, "dcrConfig": { "streamName": "Custom-SecurityScorecardIssuesHistory_CL", "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", @@ -15,19 +21,19 @@ }, "auth": { "type": "APIKey", - "ApiKey": "{{ApiToken}}", + "ApiKey": "[[parameters('ApiToken')]", "ApiKeyName": "Authorization", "ApiKeyIdentifier": "Token" }, "request": { - "apiEndpoint": "{{BaseUrl}}/portfolios", + "apiEndpoint": "[[concat(parameters('BaseUrl'), '/portfolios/', parameters('PortfolioId'), '/companies')]", "httpMethod": "GET", "queryWindowInMin": 10080, "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", "rateLimitQPS": 1, "retryCount": 3, "timeoutInSeconds": 60, - "logResponseContent": true, + "logResponseContent": false, "headers": { "Content-Type": "application/json", "Accept": "application/json; charset=utf-8", @@ -45,53 +51,22 @@ "stepType": "Nested", "nextSteps": [ { - "stepId": "portfolioCompanies", - "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project portfolio_id = tostring(res['id'])" + "stepId": "issueDetails", + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project company_domain = tostring(res['domain']), company_industry = tostring(res['industry'])" } ] }, "stepCollectorConfigs": { - "portfolioCompanies": { - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "issueDetails", - "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project company_domain = tostring(res['domain'])" - } - ] - }, - "request": { - "apiEndpoint": "{{BaseUrl}}/portfolios/$portfolio_id$/companies", - "httpMethod": "GET", - "rateLimitQPS": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "logResponseContent": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - } - }, "issueDetails": { "request": { - "apiEndpoint": "{{BaseUrl}}/companies/$company_domain$/history/events", + "apiEndpoint": "[[concat(parameters('BaseUrl'), '/companies/$company_domain$/history/events')]", "httpMethod": "GET", "queryWindowInMin": 10080, "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", "rateLimitQPS": 1, "retryCount": 3, "timeoutInSeconds": 60, - "logResponseContent": true, + "logResponseContent": false, "headers": { "Content-Type": "application/json", "Accept": "application/json; charset=utf-8", @@ -113,5 +88,61 @@ } } } + }, + { + "type": "Microsoft.SecurityInsights/dataConnectors", + "apiVersion": "2024-09-01", + "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardIssuesOwn', uniqueString(parameters('Domain')))]", + "location": "{{location}}", + "kind": "RestApiPoller", + "condition": "[[and(not(empty(parameters('Domain'))), not(equals(parameters('Domain'), 'Domain')))]", + "properties": { + "connectorDefinitionName": "SecurityScorecardIssueCCPDefinition", + "dataType": "SecurityScorecardIssuesHistory_CL", + "addOnAttributes": { + "portfolio_id": "NA", + "portfolio_name": "My Scorecard", + "company_domain": "[[parameters('Domain')]", + "industry": "NA" + }, + "dcrConfig": { + "streamName": "Custom-SecurityScorecardIssuesHistory_CL", + "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", + "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" + }, + "auth": { + "type": "APIKey", + "ApiKey": "[[parameters('ApiToken')]", + "ApiKeyName": "Authorization", + "ApiKeyIdentifier": "Token" + }, + "request": { + "apiEndpoint": "[[concat(parameters('BaseUrl'), '/companies/', parameters('Domain'), '/history/events')]", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": false, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "date_from": "{_QueryWindowStartTime}", + "date_to": "{_QueryWindowEndTime}", + "timing": "daily" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + } } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/azuredeploy_SecurityScorecardIssue_poller_connector.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/azuredeploy_SecurityScorecardIssue_poller_connector.json deleted file mode 100644 index db038d15a06..00000000000 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/azuredeploy_SecurityScorecardIssue_poller_connector.json +++ /dev/null @@ -1,646 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "location": { - "defaultValue": "[resourceGroup().location]", - "minLength": 1, - "type": "string", - "metadata": { - "description": "Not used, but needed to pass arm-ttk test `Location-Should-Not-Be-Hardcoded`. We instead use `workspace-location` derived from the LA workspace." - } - }, - "workspace": { - "defaultValue": "", - "type": "string", - "metadata": { - "description": "Workspace name for Log Analytics where Microsoft Sentinel is set up" - } - } - }, - "variables": { - "_solutionName": "SecurityScorecard Cybersecurity Ratings", - "_solutionVersion": "3.0.1", - "_solutionAuthor": "SecurityScorecard", - "_solutionPublisher": "SecurityScorecard", - "_solutionTier": "Partner", - "solutionId": "azuresentinel.azure-sentinel-solution-securityscorecard", - "_solutionId": "[variables('solutionId')]", - "dataConnectorVersionConnections": "3.0.1", - "_dataConnectorContentIdConnectorDefinition": "SecurityScorecardIssueCCPDefinition", - "dataConnectorTemplateNameConnectorDefinition": "[format('contentTemplate-{0}', uniquestring(variables('_dataConnectorContentIdConnectorDefinition')))]", - "_dataConnectorContentIdConnections": "SecurityScorecardIssueCCPDefinitionConnections", - "dataConnectorTemplateNameConnections": "[format('{0}-dc-{1}', parameters('workspace'), uniquestring(variables('_dataConnectorContentIdConnections')))]", - "_solutioncontentProductId": "[concat(take(variables('_solutionId'),50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]" - }, - "resources": [ - { - "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", - "apiVersion": "2023-04-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/{1}-v{2}', parameters('workspace'), variables('dataConnectorTemplateNameConnectorDefinition'), variables('dataConnectorVersionConnections'))]", - "location": "[parameters('location')]", - "dependsOn": [ - "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" - ], - "properties": { - "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "displayName": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "contentKind": "DataConnector", - "packageKind": "Solution", - "packageVersion": "[variables('_solutionVersion')]", - "packageName": "[variables('_solutionName')]", - "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition'),'-', variables('dataConnectorVersionConnections'))))]", - "packageId": "[variables('_solutionId')]", - "contentSchemaVersion": "3.0.0", - "version": "[variables('dataConnectorVersionConnections')]", - "mainTemplate": { - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "[variables('dataConnectorVersionConnections')]", - "parameters": {}, - "variables": {}, - "resources": [ - { - "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", - "apiVersion": "2022-01-01-preview", - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]", - "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "kind": "DataConnector", - "version": "[variables('dataConnectorVersionConnections')]", - "source": { - "sourceId": "[variables('_solutionId')]", - "name": "[variables('_solutionName')]", - "kind": "Solution" - }, - "author": { - "name": "[variables('_solutionAuthor')]" - }, - "support": { - "name": "[variables('_solutionAuthor')]", - "tier": "[variables('_solutionTier')]" - }, - "dependencies": { - "criteria": [ - { - "version": "[variables('dataConnectorVersionConnections')]", - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "kind": "ResourcesDataConnector" - } - ] - } - } - }, - { - "type": "Microsoft.Insights/dataCollectionRules", - "apiVersion": "2021-09-01-preview", - "name": "SecurityScorecardIssueDCR", - "location": "[parameters('location')]", - "properties": { - "dataCollectionEndpointId": "[format('{0}/providers/Microsoft.Insights/dataCollectionEndpoints/{1}', resourceGroup().id, parameters('workspace'))]", - "streamDeclarations": { - "Custom-SecurityScorecardIssuesHistory_CL": { - "columns": [ - { - "name": "id", - "type": "long" - }, - { - "name": "date", - "type": "datetime" - }, - { - "name": "event_type", - "type": "string" - }, - { - "name": "group_status", - "type": "string" - }, - { - "name": "issue_count", - "type": "long" - }, - { - "name": "total_score_impact", - "type": "real" - }, - { - "name": "issue_type", - "type": "string" - }, - { - "name": "severity", - "type": "string" - }, - { - "name": "factor", - "type": "string" - }, - { - "name": "detail_url", - "type": "string" - }, - { - "name": "company_domain", - "type": "string" - } - ] - } - }, - "destinations": { - "logAnalytics": [ - { - "workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace'))]", - "name": "clv2ws1" - } - ] - }, - "dataFlows": [ - { - "streams": [ - "Custom-SecurityScorecardIssuesHistory_CL" - ], - "destinations": [ - "clv2ws1" - ], - "outputStream": "Custom-SecurityScorecardIssuesHistory_CL", - "transformKql": "source | where issue_type != 'breach' | extend TimeGenerated = ['date'], issue_date = ['date'], domain = company_domain | project-away ['date'], company_domain" - } - ] - } - }, - { - "name": "SecurityScorecardIssuesHistory_CL", - "apiVersion": "2022-10-01", - "type": "Microsoft.OperationalInsights/workspaces/tables", - "location": "[parameters('location')]", - "kind": null, - "properties": { - "schema": { - "name": "SecurityScorecardIssuesHistory_CL", - "columns": [ - { - "name": "TimeGenerated", - "type": "datetime" - }, - { - "name": "id", - "type": "long" - }, - { - "name": "issue_date", - "type": "datetime" - }, - { - "name": "event_type", - "type": "string" - }, - { - "name": "group_status", - "type": "string" - }, - { - "name": "issue_count", - "type": "long" - }, - { - "name": "total_score_impact", - "type": "real" - }, - { - "name": "issue_type", - "type": "string" - }, - { - "name": "severity", - "type": "string" - }, - { - "name": "factor", - "type": "string" - }, - { - "name": "detail_url", - "type": "string" - }, - { - "name": "domain", - "type": "string" - } - ] - } - } - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions", - "apiVersion": "2022-09-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", - "location": "[parameters('location')]", - "kind": "Customizable", - "properties": { - "connectorUiConfig": { - "id": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "title": "SecurityScorecard Issues (Codeless)", - "publisher": "[variables('_solutionPublisher')]", - "descriptionMarkdown": "The SecurityScorecard Issues (Codeless) connector ingests issue history events from SecurityScorecard companies in a chosen portfolio into Microsoft Sentinel using the Codeless Connector Framework. Replaces the Function App connector.", - "graphQueriesTableName": "SecurityScorecardIssuesHistory_CL", - "graphQueries": [ - { - "metricName": "Total Issue data received", - "legend": "SecurityScorecard issues", - "baseQuery": "{{graphQueriesTableName}}" - } - ], - "sampleQueries": [ - { - "description": "All SecurityScorecard issues", - "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" - } - ], - "dataTypes": [ - { - "name": "SecurityScorecardIssuesHistory_CL", - "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - } - ], - "connectivityCriteria": [ - { - "type": "HasDataConnectors" - } - ], - "availability": { - "isPreview": false - }, - "permissions": { - "resourceProvider": [ - { - "provider": "Microsoft.OperationalInsights/workspaces", - "permissionsDisplayText": "Read and Write permissions are required.", - "providerDisplayName": "Workspace", - "scope": "Workspace", - "requiredPermissions": { - "write": true, - "read": true, - "delete": true - } - } - ], - "customs": [ - { - "name": "SecurityScorecard API token", - "description": "A SecurityScorecard API token is required." - } - ] - }, - "instructionSteps": [ - { - "title": "STEP 1 - Create a SecurityScorecard API token", - "description": "As an administrator in SecurityScorecard, navigate to My Settings then Users, create a bot user with Read Only permission, and generate the API token." - }, - { - "title": "STEP 2 - Identify the Portfolio ID", - "description": "Find the portfolio ID(s) you want to ingest from the SecurityScorecard portal. One connector instance ingests one portfolio." - }, - { - "title": "STEP 3 - Connect SecurityScorecard to Microsoft Sentinel", - "description": "Enter the base URL, API token, and portfolio ID below.", - "instructions": [ - { - "type": "Textbox", - "parameters": { - "label": "Base URL", - "placeholder": "https://api.securityscorecard.io", - "type": "text", - "name": "BaseUrl" - } - }, - { - "type": "Textbox", - "parameters": { - "label": "API Token", - "placeholder": "Enter your SecurityScorecard API token", - "type": "password", - "name": "ApiToken" - } - }, - { - "type": "Textbox", - "parameters": { - "label": "Portfolio IDs (comma-separated)", - "placeholder": "e.g. portfolio-id-1, portfolio-id-2", - "type": "text", - "name": "PortfolioIds" - } - }, - { - "type": "ConnectionToggleButton", - "parameters": { - "connectLabel": "connect", - "name": "connect" - } - } - ] - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2022-01-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]", - "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "kind": "DataConnector", - "version": "[variables('dataConnectorVersionConnections')]", - "source": { - "sourceId": "[variables('_solutionId')]", - "name": "[variables('_solutionName')]", - "kind": "Solution" - }, - "author": { - "name": "[variables('_solutionAuthor')]" - }, - "support": { - "name": "[variables('_solutionAuthor')]", - "tier": "[variables('_solutionTier')]" - }, - "dependencies": { - "criteria": [ - { - "version": "[variables('dataConnectorVersionConnections')]", - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "kind": "ResourcesDataConnector" - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", - "apiVersion": "2023-04-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/{1}{2}', parameters('workspace'), variables('dataConnectorTemplateNameConnections'), variables('dataConnectorVersionConnections'))]", - "location": "[parameters('location')]", - "dependsOn": [ - "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" - ], - "properties": { - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "displayName": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "contentKind": "ResourcesDataConnector", - "packageKind": "Solution", - "packageVersion": "[variables('_solutionVersion')]", - "packageName": "[variables('_solutionName')]", - "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections'),'-', variables('dataConnectorVersionConnections'))))]", - "packageId": "[variables('_solutionId')]", - "contentSchemaVersion": "3.0.0", - "version": "[variables('dataConnectorVersionConnections')]", - "mainTemplate": { - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "[variables('dataConnectorVersionConnections')]", - "parameters": { - "BaseUrl": { - "defaultValue": "https://api.securityscorecard.io", - "type": "string", - "minLength": 1 - }, - "ApiToken": { - "defaultValue": "-NA-", - "type": "securestring", - "minLength": 1 - }, - "PortfolioIds": { - "defaultValue": "-NA-", - "type": "string", - "minLength": 1 - }, - "connectorDefinitionName": { - "defaultValue": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "type": "string", - "minLength": 1 - }, - "workspace": { - "defaultValue": "[parameters('workspace')]", - "type": "string" - }, - "dcrConfig": { - "defaultValue": { - "dataCollectionEndpoint": "data collection Endpoint", - "dataCollectionRuleImmutableId": "data collection rule immutableId" - }, - "type": "object" - } - }, - "variables": { - "_dataConnectorContentIdConnections": "[variables('_dataConnectorContentIdConnections')]" - }, - "resources": [ - { - "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnections'))]", - "apiVersion": "2022-01-01-preview", - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections'))]", - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "kind": "ResourcesDataConnector", - "version": "[variables('dataConnectorVersionConnections')]", - "source": { - "sourceId": "[variables('_solutionId')]", - "name": "[variables('_solutionName')]", - "kind": "Solution" - }, - "author": { - "name": "[variables('_solutionAuthor')]" - }, - "support": { - "name": "[variables('_solutionAuthor')]", - "tier": "[variables('_solutionTier')]" - } - } - }, - { - "name": "[format('{0}/Microsoft.SecurityInsights/SecurityScorecardIssuesPoller', parameters('workspace'))]", - "apiVersion": "2024-09-01", - "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", - "location": "[parameters('location')]", - "kind": "RestApiPoller", - "properties": { - "connectorDefinitionName": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "dataType": "SecurityScorecardIssuesHistory_CL", - "dcrConfig": { - "streamName": "Custom-SecurityScorecardIssuesHistory_CL", - "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", - "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" - }, - "auth": { - "type": "APIKey", - "ApiKey": "[[parameters('ApiToken')]", - "ApiKeyName": "Authorization", - "ApiKeyIdentifier": "Token" - }, - "request": { - "apiEndpoint": "[[format('{0}/portfolios', parameters('BaseUrl'))]", - "httpMethod": "GET", - "queryWindowInMin": 1440, - "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", - "rateLimitQps": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - }, - "queryParameters": { - "timing": "daily" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - }, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "portfolioCompanies", - "stepPlaceholdersParsingKql": "[[concat('let userInput = ''', parameters('PortfolioIds'), '''; let allowedIds = split(userInput, '',''); source | project res = parse_json(data) | extend p_id = tostring(res[''id'']) | where userInput != '''' and p_id in (allowedIds) | project portfolio_id = p_id')]" - } - ] - }, - "stepCollectorConfigs": { - "portfolioCompanies": { - "shouldJoinNestedData": false, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "issueDetails", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain'])" - } - ] - }, - "request": { - "apiEndpoint": "[[format('{0}/portfolios/$portfolio_id$/companies', parameters('BaseUrl'))]", - "httpMethod": "GET", - "rateLimitQps": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - }, - "queryParameters": { - "timing": "daily" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - } - }, - "issueDetails": { - "shouldJoinNestedData": true, - "request": { - "apiEndpoint": "[[format('{0}/companies/$company_domain$/history/events', parameters('BaseUrl'))]", - "httpMethod": "GET", - "queryWindowInMin": 1440, - "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", - "rateLimitQps": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "logResponseContent": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - }, - "queryParameters": { - "date_from": "{_QueryWindowStartTime}", - "date_to": "{_QueryWindowEndTime}", - "timing": "daily" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - } - } - } - } - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages", - "apiVersion": "2023-04-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/{1}', parameters('workspace'), variables('_solutionId'))]", - "location": "[parameters('location')]", - "properties": { - "version": "[variables('_solutionVersion')]", - "kind": "Solution", - "contentSchemaVersion": "3.0.0", - "displayName": "[variables('_solutionName')]", - "publisherDisplayName": "[variables('_solutionPublisher')]", - "descriptionHtml": "SecurityScorecard Cybersecurity Ratings \u2014 Issues (Codeless) connector", - "contentKind": "Solution", - "contentProductId": "[variables('_solutioncontentProductId')]", - "id": "[variables('_solutioncontentProductId')]", - "contentId": "[variables('_solutionId')]", - "parentId": "[variables('_solutionId')]", - "source": { - "kind": "Solution", - "name": "SecurityScorecard Cybersecurity Ratings", - "sourceId": "[variables('_solutionId')]" - }, - "author": { - "name": "[variables('_solutionAuthor')]" - }, - "support": { - "name": "[variables('_solutionAuthor')]", - "tier": "[variables('_solutionTier')]" - }, - "dependencies": { - "operator": "AND", - "criteria": [ - { - "kind": "DataConnector", - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "version": "[variables('dataConnectorVersionConnections')]" - } - ] - }, - "firstPublishDate": "2022-10-01", - "providers": [ - "SecurityScorecard" - ], - "categories": { - "domains": [ - "Security", - "Security - Network", - "Security - Vulnerability Management" - ] - } - } - } - ], - "outputs": {} -} \ No newline at end of file diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DCR.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DCR.json index 00b5e5373bc..70871ef8740 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DCR.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DCR.json @@ -8,6 +8,14 @@ "streamDeclarations": { "Custom-SecurityScorecardRatingsHistory_CL": { "columns": [ + { + "name": "date", + "type": "datetime" + }, + { + "name": "score", + "type": "long" + }, { "name": "domain", "type": "string" @@ -16,10 +24,6 @@ "name": "industry", "type": "string" }, - { - "name": "score", - "type": "long" - }, { "name": "portfolio_id", "type": "string" @@ -47,7 +51,7 @@ "destinations": [ "clv2ws1" ], - "transformKql": "source | extend TimeGenerated = now(), score_date = now(), domain = tostring(domain), industry = tostring(industry) | project TimeGenerated, score_date, score, domain, industry, portfolio_id, portfolio_name", + "transformKql": "source | extend TimeGenerated = todatetime(['date']), score_date = todatetime(['date']), domain = tostring(domain), industry = tostring(industry) | project TimeGenerated, score_date, score, domain, industry, portfolio_id, portfolio_name", "outputStream": "Custom-SecurityScorecardRatingsHistory_CL" } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json index 71a9f9497dc..810f7c24b01 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json @@ -1,6 +1,6 @@ { "name": "SecurityScorecardRatingsCCPDefinition", - "apiVersion": "2022-09-01-preview", + "apiVersion": "2025-07-01-preview", "type": "Microsoft.SecurityInsights/dataConnectorDefinitions", "location": "{{location}}", "kind": "Customizable", @@ -9,7 +9,7 @@ "id": "SecurityScorecardRatingsCCPDefinition", "title": "SecurityScorecard Ratings (Codeless)", "publisher": "SecurityScorecard", - "descriptionMarkdown": "The SecurityScorecard Ratings (Codeless) connector ingests overall company score history into Microsoft Sentinel using the Codeless Connector Framework. Raw daily score rows land in `SecurityScorecardRatingsHistory_CL`; query via the `SecurityScorecardRatings` parser for day-over-day deltas matching the legacy Function App schema.", + "descriptionMarkdown": "The SecurityScorecard Ratings (Codeless) connector ingests overall company score history into Microsoft Sentinel using the Codeless Connector Framework. Add one connection per SecurityScorecard portfolio you want to monitor — each connection is managed independently in the grid below. Raw daily score rows land in `SecurityScorecardRatingsHistory_CL`; query via the `SecurityScorecardRatings` parser for day-over-day deltas matching the legacy Function App schema.", "graphQueriesTableName": "SecurityScorecardRatingsHistory_CL", "graphQueries": [ { @@ -69,41 +69,97 @@ "description": "As an administrator in SecurityScorecard, navigate to My Settings then Users, create a bot user with Read Only permission, and generate the API token." }, { - "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", - "description": "Enter the base URL, API token, and one or more portfolio IDs (comma-separated). At least one portfolio ID is required — the connector fetches all portfolios and ingests only those matching the provided IDs.", + "title": "STEP 2 - Add a portfolio connection", + "description": "Add one connection per SecurityScorecard portfolio. Each connection ingests the overall company scores for a single portfolio and is listed, managed, and deleted independently below. To also ingest your own company's scorecard (My Scorecard), enter your company domain in the optional field on one connection.", "instructions": [ { - "type": "Textbox", + "type": "DataConnectorsGrid", "parameters": { - "label": "Base URL", - "placeholder": "https://api.securityscorecard.io", - "type": "text", - "name": "BaseUrl" + "mapping": [ + { + "columnName": "Portfolio Name", + "columnValue": "properties.addOnAttributes.portfolio_name" + }, + { + "columnName": "Portfolio ID", + "columnValue": "properties.addOnAttributes.portfolio_id" + } + ], + "menuItems": [ + "DeleteConnector" + ] } }, { - "type": "Textbox", + "type": "ContextPane", "parameters": { - "label": "API Token", - "placeholder": "Enter your SecurityScorecard API token", - "type": "password", - "name": "ApiToken" - } - }, - { - "type": "Textbox", - "parameters": { - "label": "Portfolio IDs (comma-separated)", - "placeholder": "comma-separated, no spaces: portfolio-id-1,portfolio-id-2", - "type": "text", - "name": "PortfolioIds" - } - }, - { - "type": "ConnectionToggleButton", - "parameters": { - "connectLabel": "connect", - "name": "connect" + "label": "Add portfolio", + "title": "Add a SecurityScorecard portfolio", + "subtitle": "Connect one SecurityScorecard portfolio", + "contextPaneType": "DataConnectorsContextPane", + "instructionSteps": [ + { + "instructions": [ + { + "type": "Textbox", + "parameters": { + "label": "Base URL", + "placeholder": "https://api.securityscorecard.io", + "type": "text", + "name": "BaseUrl", + "validations": { + "required": true + } + } + }, + { + "type": "Textbox", + "parameters": { + "label": "API Token", + "placeholder": "Enter your SecurityScorecard API token", + "type": "password", + "name": "ApiToken", + "validations": { + "required": true + } + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio ID", + "placeholder": "Enter the SecurityScorecard portfolio ID", + "type": "text", + "name": "PortfolioId", + "validations": { + "required": true + } + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Portfolio Name", + "placeholder": "A friendly name for this portfolio (shown in reports and the workbook)", + "type": "text", + "name": "PortfolioName", + "validations": { + "required": true + } + } + }, + { + "type": "Textbox", + "parameters": { + "label": "Your Company Domain (optional - My Scorecard)", + "placeholder": "e.g. yourcompany.com - leave blank if not needed", + "type": "text", + "name": "Domain" + } + } + ] + } + ] } } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json index 9e4a4cabaa4..9dee1913fa9 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json @@ -1,16 +1,18 @@ [ { - "name": "SecurityScorecardRatingsPoller", - "apiVersion": "2024-09-01", "type": "Microsoft.SecurityInsights/dataConnectors", + "apiVersion": "2024-09-01", + "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardRatings', uniqueString(parameters('PortfolioId')))]", "location": "{{location}}", "kind": "RestApiPoller", "properties": { "connectorDefinitionName": "SecurityScorecardRatingsCCPDefinition", "dataType": "SecurityScorecardRatingsHistory_CL", "addOnAttributes": { - "portfolio_id": "$portfolio_id$", - "portfolio_name": "$portfolio_name$" + "portfolio_id": "[[parameters('PortfolioId')]", + "portfolio_name": "[[parameters('PortfolioName')]", + "domain": "$company_domain$", + "industry": "$company_industry$" }, "dcrConfig": { "streamName": "Custom-SecurityScorecardRatingsHistory_CL", @@ -19,17 +21,19 @@ }, "auth": { "type": "APIKey", - "ApiKey": "{{ApiToken}}", + "ApiKey": "[[parameters('ApiToken')]", "ApiKeyName": "Authorization", "ApiKeyIdentifier": "Token" }, "request": { - "apiEndpoint": "{{BaseUrl}}/portfolios", + "apiEndpoint": "[[concat(parameters('BaseUrl'), '/portfolios/', parameters('PortfolioId'), '/companies')]", "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-dd", "rateLimitQPS": 1, "retryCount": 3, "timeoutInSeconds": 60, - "logResponseContent": true, + "logResponseContent": false, "headers": { "Content-Type": "application/json", "Accept": "application/json; charset=utf-8", @@ -47,25 +51,31 @@ "stepType": "Nested", "nextSteps": [ { - "stepId": "portfolioCompanies", - "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project portfolio_id = tostring(res['id']), portfolio_name = tostring(res['name'])" + "stepId": "ratingsHistory", + "stepPlaceholdersParsingKql": "source | extend res = parse_json(data) | project company_domain = tostring(res['domain']), company_industry = tostring(res['industry'])" } ] }, "stepCollectorConfigs": { - "portfolioCompanies": { + "ratingsHistory": { "request": { - "apiEndpoint": "{{BaseUrl}}/portfolios/$portfolio_id$/companies", + "apiEndpoint": "[[concat(parameters('BaseUrl'), '/companies/$company_domain$/history/score')]", "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-dd", "rateLimitQPS": 1, "retryCount": 3, "timeoutInSeconds": 60, - "logResponseContent": true, + "logResponseContent": false, "headers": { "Content-Type": "application/json", "Accept": "application/json; charset=utf-8", "X-SSC-Application-Name": "Microsoft Sentinel", "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "from": "{_QueryWindowStartTime}", + "to": "{_QueryWindowEndTime}" } }, "response": { @@ -77,5 +87,60 @@ } } } + }, + { + "type": "Microsoft.SecurityInsights/dataConnectors", + "apiVersion": "2024-09-01", + "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardRatingsOwn', uniqueString(parameters('Domain')))]", + "location": "{{location}}", + "kind": "RestApiPoller", + "condition": "[[and(not(empty(parameters('Domain'))), not(equals(parameters('Domain'), 'Domain')))]", + "properties": { + "connectorDefinitionName": "SecurityScorecardRatingsCCPDefinition", + "dataType": "SecurityScorecardRatingsHistory_CL", + "addOnAttributes": { + "portfolio_id": "NA", + "portfolio_name": "My Scorecard", + "domain": "[[parameters('Domain')]", + "industry": "NA" + }, + "dcrConfig": { + "streamName": "Custom-SecurityScorecardRatingsHistory_CL", + "dataCollectionEndpoint": "{{dataCollectionEndpoint}}", + "dataCollectionRuleImmutableId": "{{dataCollectionRuleImmutableId}}" + }, + "auth": { + "type": "APIKey", + "ApiKey": "[[parameters('ApiToken')]", + "ApiKeyName": "Authorization", + "ApiKeyIdentifier": "Token" + }, + "request": { + "apiEndpoint": "[[concat(parameters('BaseUrl'), '/companies/', parameters('Domain'), '/history/score')]", + "httpMethod": "GET", + "queryWindowInMin": 10080, + "queryTimeFormat": "yyyy-MM-dd", + "rateLimitQPS": 1, + "retryCount": 3, + "timeoutInSeconds": 60, + "logResponseContent": false, + "headers": { + "Content-Type": "application/json", + "Accept": "application/json; charset=utf-8", + "X-SSC-Application-Name": "Microsoft Sentinel", + "X-SSC-Application-Version": "1.0" + }, + "queryParameters": { + "from": "{_QueryWindowStartTime}", + "to": "{_QueryWindowEndTime}" + } + }, + "response": { + "format": "json", + "eventsJsonPaths": [ + "$.entries" + ] + } + } } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/azuredeploy_SecurityScorecardRatings_poller_connector.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/azuredeploy_SecurityScorecardRatings_poller_connector.json deleted file mode 100644 index 5175e1a1444..00000000000 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/azuredeploy_SecurityScorecardRatings_poller_connector.json +++ /dev/null @@ -1,582 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "location": { - "defaultValue": "[resourceGroup().location]", - "minLength": 1, - "type": "string", - "metadata": { - "description": "Not used, but needed to pass arm-ttk test `Location-Should-Not-Be-Hardcoded`. We instead use `workspace-location` derived from the LA workspace." - } - }, - "workspace": { - "defaultValue": "", - "type": "string", - "metadata": { - "description": "Workspace name for Log Analytics where Microsoft Sentinel is set up" - } - } - }, - "variables": { - "_solutionName": "SecurityScorecard Cybersecurity Ratings", - "_solutionVersion": "3.0.1", - "_solutionAuthor": "SecurityScorecard", - "_solutionPublisher": "SecurityScorecard", - "_solutionTier": "Partner", - "solutionId": "azuresentinel.azure-sentinel-solution-securityscorecard", - "_solutionId": "[variables('solutionId')]", - "dataConnectorVersionConnections": "3.0.1", - "_dataConnectorContentIdConnectorDefinition": "SecurityScorecardRatingsCCPDefinition", - "dataConnectorTemplateNameConnectorDefinition": "[format('contentTemplate-{0}', uniquestring(variables('_dataConnectorContentIdConnectorDefinition')))]", - "_dataConnectorContentIdConnections": "SecurityScorecardRatingsCCPDefinitionConnections", - "dataConnectorTemplateNameConnections": "[format('{0}-dc-{1}', parameters('workspace'), uniquestring(variables('_dataConnectorContentIdConnections')))]", - "_solutioncontentProductId": "[concat(take(variables('_solutionId'),50),'-','sl','-', uniqueString(concat(variables('_solutionId'),'-','Solution','-',variables('_solutionId'),'-', variables('_solutionVersion'))))]" - }, - "resources": [ - { - "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", - "apiVersion": "2023-04-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/{1}-v{2}', parameters('workspace'), variables('dataConnectorTemplateNameConnectorDefinition'), variables('dataConnectorVersionConnections'))]", - "location": "[parameters('location')]", - "dependsOn": [ - "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" - ], - "properties": { - "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "displayName": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "contentKind": "DataConnector", - "packageKind": "Solution", - "packageVersion": "[variables('_solutionVersion')]", - "packageName": "[variables('_solutionName')]", - "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','dc','-', uniqueString(concat(variables('_solutionId'),'-','DataConnector','-',variables('_dataConnectorContentIdConnectorDefinition'),'-', variables('dataConnectorVersionConnections'))))]", - "packageId": "[variables('_solutionId')]", - "contentSchemaVersion": "3.0.0", - "version": "[variables('dataConnectorVersionConnections')]", - "mainTemplate": { - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "[variables('dataConnectorVersionConnections')]", - "parameters": {}, - "variables": {}, - "resources": [ - { - "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", - "apiVersion": "2022-01-01-preview", - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]", - "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "kind": "DataConnector", - "version": "[variables('dataConnectorVersionConnections')]", - "source": { - "sourceId": "[variables('_solutionId')]", - "name": "[variables('_solutionName')]", - "kind": "Solution" - }, - "author": { - "name": "[variables('_solutionAuthor')]" - }, - "support": { - "name": "[variables('_solutionAuthor')]", - "tier": "[variables('_solutionTier')]" - }, - "dependencies": { - "criteria": [ - { - "version": "[variables('dataConnectorVersionConnections')]", - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "kind": "ResourcesDataConnector" - } - ] - } - } - }, - { - "type": "Microsoft.Insights/dataCollectionRules", - "apiVersion": "2021-09-01-preview", - "name": "SecurityScorecardRatingsDCR", - "location": "[parameters('location')]", - "properties": { - "dataCollectionEndpointId": "[format('{0}/providers/Microsoft.Insights/dataCollectionEndpoints/{1}', resourceGroup().id, parameters('workspace'))]", - "streamDeclarations": { - "Custom-SecurityScorecardRatingsHistory_CL": { - "columns": [ - { - "name": "date", - "type": "datetime" - }, - { - "name": "score", - "type": "long" - }, - { - "name": "company_domain", - "type": "string" - } - ] - } - }, - "destinations": { - "logAnalytics": [ - { - "workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace'))]", - "name": "clv2ws1" - } - ] - }, - "dataFlows": [ - { - "streams": [ - "Custom-SecurityScorecardRatingsHistory_CL" - ], - "destinations": [ - "clv2ws1" - ], - "outputStream": "Custom-SecurityScorecardRatingsHistory_CL", - "transformKql": "source | extend TimeGenerated = ['date'], score_date = ['date'], domain = company_domain | project-away ['date'], company_domain" - } - ] - } - }, - { - "name": "SecurityScorecardRatingsHistory_CL", - "apiVersion": "2022-10-01", - "type": "Microsoft.OperationalInsights/workspaces/tables", - "location": "[parameters('location')]", - "kind": null, - "properties": { - "schema": { - "name": "SecurityScorecardRatingsHistory_CL", - "columns": [ - { - "name": "TimeGenerated", - "type": "datetime" - }, - { - "name": "score_date", - "type": "datetime" - }, - { - "name": "score", - "type": "long" - }, - { - "name": "domain", - "type": "string" - } - ] - } - } - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectorDefinitions", - "apiVersion": "2022-09-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", - "location": "[parameters('location')]", - "kind": "Customizable", - "properties": { - "connectorUiConfig": { - "id": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "title": "SecurityScorecard Ratings (Codeless)", - "publisher": "[variables('_solutionPublisher')]", - "descriptionMarkdown": "Ingest SecurityScorecard overall score history into Microsoft Sentinel via CCF. Raw rows land in `SecurityScorecardRatingsHistory_CL`; query with the `SecurityScorecardRatings` parser.", - "graphQueriesTableName": "SecurityScorecardRatingsHistory_CL", - "graphQueries": [ - { - "metricName": "Total Ratings history rows received", - "legend": "SecurityScorecard ratings history", - "baseQuery": "{{graphQueriesTableName}}" - } - ], - "sampleQueries": [ - { - "description": "Day-over-day rating change (parser)", - "query": "SecurityScorecardRatings\n | sort by TimeGenerated desc" - }, - { - "description": "Raw ratings history", - "query": "{{graphQueriesTableName}}\n | sort by TimeGenerated desc" - } - ], - "dataTypes": [ - { - "name": "SecurityScorecardRatingsHistory_CL", - "lastDataReceivedQuery": "{{graphQueriesTableName}}\n | summarize Time = max(TimeGenerated)\n | where isnotempty(Time)" - } - ], - "connectivityCriteria": [ - { - "type": "HasDataConnectors" - } - ], - "availability": { - "isPreview": false - }, - "permissions": { - "resourceProvider": [ - { - "provider": "Microsoft.OperationalInsights/workspaces", - "permissionsDisplayText": "Read and Write permissions are required.", - "providerDisplayName": "Workspace", - "scope": "Workspace", - "requiredPermissions": { - "write": true, - "read": true, - "delete": true - } - } - ], - "customs": [ - { - "name": "SecurityScorecard API token", - "description": "A SecurityScorecard API token is required." - } - ] - }, - "instructionSteps": [ - { - "title": "STEP 1 - Create a SecurityScorecard API token", - "description": "As an administrator, create a bot user with Read Only permission and generate the API token." - }, - { - "title": "STEP 2 - Connect SecurityScorecard to Microsoft Sentinel", - "description": "Enter the base URL, API token, and portfolio ID below.", - "instructions": [ - { - "type": "Textbox", - "parameters": { - "label": "Base URL", - "placeholder": "https://api.securityscorecard.io", - "type": "text", - "name": "BaseUrl" - } - }, - { - "type": "Textbox", - "parameters": { - "label": "API Token", - "placeholder": "Enter your SecurityScorecard API token", - "type": "password", - "name": "ApiToken" - } - }, - { - "type": "Textbox", - "parameters": { - "label": "Portfolio IDs (comma-separated)", - "placeholder": "e.g. portfolio-id-1, portfolio-id-2", - "type": "text", - "name": "PortfolioIds" - } - }, - { - "type": "ConnectionToggleButton", - "parameters": { - "connectLabel": "connect", - "name": "connect" - } - } - ] - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "apiVersion": "2022-01-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnectorDefinition'))]", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectorDefinitions', variables('_dataConnectorContentIdConnectorDefinition'))]", - "contentId": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "kind": "DataConnector", - "version": "[variables('dataConnectorVersionConnections')]", - "source": { - "sourceId": "[variables('_solutionId')]", - "name": "[variables('_solutionName')]", - "kind": "Solution" - }, - "author": { - "name": "[variables('_solutionAuthor')]" - }, - "support": { - "name": "[variables('_solutionAuthor')]", - "tier": "[variables('_solutionTier')]" - }, - "dependencies": { - "criteria": [ - { - "version": "[variables('dataConnectorVersionConnections')]", - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "kind": "ResourcesDataConnector" - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/contentTemplates", - "apiVersion": "2023-04-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/{1}{2}', parameters('workspace'), variables('dataConnectorTemplateNameConnections'), variables('dataConnectorVersionConnections'))]", - "location": "[parameters('location')]", - "dependsOn": [ - "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/contentPackages', variables('_solutionId'))]" - ], - "properties": { - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "displayName": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "contentKind": "ResourcesDataConnector", - "packageKind": "Solution", - "packageVersion": "[variables('_solutionVersion')]", - "packageName": "[variables('_solutionName')]", - "contentProductId": "[concat(take(variables('_solutionId'), 50),'-','rdc','-', uniqueString(concat(variables('_solutionId'),'-','ResourcesDataConnector','-',variables('_dataConnectorContentIdConnections'),'-', variables('dataConnectorVersionConnections'))))]", - "packageId": "[variables('_solutionId')]", - "contentSchemaVersion": "3.0.0", - "version": "[variables('dataConnectorVersionConnections')]", - "mainTemplate": { - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "[variables('dataConnectorVersionConnections')]", - "parameters": { - "BaseUrl": { - "defaultValue": "https://api.securityscorecard.io", - "type": "string", - "minLength": 1 - }, - "ApiToken": { - "defaultValue": "-NA-", - "type": "securestring", - "minLength": 1 - }, - "PortfolioIds": { - "defaultValue": "-NA-", - "type": "string", - "minLength": 1 - }, - "connectorDefinitionName": { - "defaultValue": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "type": "string", - "minLength": 1 - }, - "workspace": { - "defaultValue": "[parameters('workspace')]", - "type": "string" - }, - "dcrConfig": { - "defaultValue": { - "dataCollectionEndpoint": "data collection Endpoint", - "dataCollectionRuleImmutableId": "data collection rule immutableId" - }, - "type": "object" - } - }, - "variables": { - "_dataConnectorContentIdConnections": "[variables('_dataConnectorContentIdConnections')]" - }, - "resources": [ - { - "name": "[format('{0}/Microsoft.SecurityInsights/DataConnector-{1}', parameters('workspace'), variables('_dataConnectorContentIdConnections'))]", - "apiVersion": "2022-01-01-preview", - "type": "Microsoft.OperationalInsights/workspaces/providers/metadata", - "properties": { - "parentId": "[extensionResourceId(resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace')), 'Microsoft.SecurityInsights/dataConnectors', variables('_dataConnectorContentIdConnections'))]", - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "kind": "ResourcesDataConnector", - "version": "[variables('dataConnectorVersionConnections')]", - "source": { - "sourceId": "[variables('_solutionId')]", - "name": "[variables('_solutionName')]", - "kind": "Solution" - }, - "author": { - "name": "[variables('_solutionAuthor')]" - }, - "support": { - "name": "[variables('_solutionAuthor')]", - "tier": "[variables('_solutionTier')]" - } - } - }, - { - "name": "[format('{0}/Microsoft.SecurityInsights/SecurityScorecardRatingsPoller', parameters('workspace'))]", - "apiVersion": "2024-09-01", - "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", - "location": "[parameters('location')]", - "kind": "RestApiPoller", - "properties": { - "connectorDefinitionName": "[variables('_dataConnectorContentIdConnectorDefinition')]", - "dataType": "SecurityScorecardRatingsHistory_CL", - "dcrConfig": { - "streamName": "Custom-SecurityScorecardRatingsHistory_CL", - "dataCollectionEndpoint": "[[parameters('dcrConfig').dataCollectionEndpoint]", - "dataCollectionRuleImmutableId": "[[parameters('dcrConfig').dataCollectionRuleImmutableId]" - }, - "auth": { - "type": "APIKey", - "ApiKey": "[[parameters('ApiToken')]", - "ApiKeyName": "Authorization", - "ApiKeyIdentifier": "Token" - }, - "request": { - "apiEndpoint": "[[format('{0}/portfolios', parameters('BaseUrl'))]", - "httpMethod": "GET", - "queryWindowInMin": 1440, - "queryTimeFormat": "yyyy-MM-dd", - "rateLimitQps": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - }, - "queryParameters": { - "timing": "daily" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - }, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "portfolioCompanies", - "stepPlaceholdersParsingKql": "[[concat('let userInput = ''', parameters('PortfolioIds'), '''; let allowedIds = split(userInput, '',''); source | project res = parse_json(data) | extend p_id = tostring(res[''id'']) | where userInput != '''' and p_id in (allowedIds) | project portfolio_id = p_id')]" - } - ] - }, - "stepCollectorConfigs": { - "portfolioCompanies": { - "shouldJoinNestedData": false, - "stepInfo": { - "stepType": "Nested", - "nextSteps": [ - { - "stepId": "ratingsHistory", - "stepPlaceholdersParsingKql": "source | project res = parse_json(data) | project company_domain = tostring(res['domain'])" - } - ] - }, - "request": { - "apiEndpoint": "[[format('{0}/portfolios/$portfolio_id$/companies', parameters('BaseUrl'))]", - "httpMethod": "GET", - "rateLimitQps": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - }, - "queryParameters": { - "timing": "daily" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - } - }, - "ratingsHistory": { - "shouldJoinNestedData": true, - "request": { - "apiEndpoint": "[[format('{0}/companies/$company_domain$/history/score', parameters('BaseUrl'))]", - "httpMethod": "GET", - "queryWindowInMin": 1440, - "queryTimeFormat": "yyyy-MM-dd", - "rateLimitQps": 1, - "retryCount": 3, - "timeoutInSeconds": 60, - "logResponseContent": true, - "headers": { - "Content-Type": "application/json", - "Accept": "application/json; charset=utf-8", - "X-SSC-Application-Name": "Microsoft Sentinel", - "X-SSC-Application-Version": "1.0" - }, - "queryParameters": { - "from": "{_QueryWindowStartTime}", - "to": "{_QueryWindowEndTime}", - "timing": "daily" - } - }, - "response": { - "format": "json", - "eventsJsonPaths": [ - "$.entries" - ] - } - } - } - } - } - ] - } - } - }, - { - "type": "Microsoft.OperationalInsights/workspaces/providers/contentPackages", - "apiVersion": "2023-04-01-preview", - "name": "[format('{0}/Microsoft.SecurityInsights/{1}', parameters('workspace'), variables('_solutionId'))]", - "location": "[parameters('location')]", - "properties": { - "version": "[variables('_solutionVersion')]", - "kind": "Solution", - "contentSchemaVersion": "3.0.0", - "displayName": "[variables('_solutionName')]", - "publisherDisplayName": "[variables('_solutionPublisher')]", - "descriptionHtml": "SecurityScorecard Cybersecurity Ratings \u2014 Ratings (Codeless) connector", - "contentKind": "Solution", - "contentProductId": "[variables('_solutioncontentProductId')]", - "id": "[variables('_solutioncontentProductId')]", - "contentId": "[variables('_solutionId')]", - "parentId": "[variables('_solutionId')]", - "source": { - "kind": "Solution", - "name": "SecurityScorecard Cybersecurity Ratings", - "sourceId": "[variables('_solutionId')]" - }, - "author": { - "name": "[variables('_solutionAuthor')]" - }, - "support": { - "name": "[variables('_solutionAuthor')]", - "tier": "[variables('_solutionTier')]" - }, - "dependencies": { - "operator": "AND", - "criteria": [ - { - "kind": "DataConnector", - "contentId": "[variables('_dataConnectorContentIdConnections')]", - "version": "[variables('dataConnectorVersionConnections')]" - } - ] - }, - "firstPublishDate": "2022-10-01", - "providers": [ - "SecurityScorecard" - ], - "categories": { - "domains": [ - "Security", - "Security - Network", - "Security - Vulnerability Management" - ] - } - } - } - ], - "outputs": {} -} \ No newline at end of file diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/2.0.0.zip b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/2.0.0.zip deleted file mode 100644 index 1a7afb84b894c3433e5073f62bad8d248c7ff066..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18006 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

j9-`*9n>y; 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 ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain\n | project domain, rt_industry = industry, rt_portfolio_id = portfolio_id, rt_portfolio_name = portfolio_name\n ) on domain\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = tostring(issue_type),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(rt_industry),\n portfolioId_g = toguid(rt_portfolio_id),\n portfolioName_s = tostring(rt_portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", + "query": "let SecurityScorecardIssueLegacy = view () {\n SecurityScorecardIssues_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Issue\")),\n eventID_d = todouble(column_ifexists(\"eventID_d\", real(null))),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n date_s = tostring(column_ifexists(\"date_s\", \"\")),\n issueType_s = tostring(column_ifexists(\"issueType_s\", \"\")),\n issueName_s = tostring(column_ifexists(\"issueName_s\", \"\")),\n findingsCount_d = todouble(column_ifexists(\"findingsCount_d\", real(null))),\n groupStatus_s = tostring(column_ifexists(\"groupStatus_s\", \"\")),\n totalScoreImpact_d = todouble(column_ifexists(\"totalScoreImpact_d\", real(null))),\n severity_value_s = tostring(column_ifexists(\"severity_value_s\", \"\")),\n detail_url_s = tostring(column_ifexists(\"detail_url_s\", \"\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"\"))\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardIssueCCF = view () {\n SecurityScorecardIssuesHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by id, portfolio_id\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = strcat_array(split(tostring(issue_type), \"_\"), \" \"),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", "functionParameters": "", "version": 2, "tags": [ @@ -3361,8 +3886,8 @@ "contentId": "[variables('parserObject1').parserContentId1]", "contentKind": "Parser", "displayName": "Parser for SecurityScorecard Issues", - "contentProductId": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject1').parserContentId1,'-', '2.0.2')))]", - "id": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject1').parserContentId1,'-', '2.0.2')))]", + "contentProductId": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject1').parserContentId1,'-', '2.0.3')))]", + "id": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject1').parserContentId1,'-', '2.0.3')))]", "version": "[variables('parserObject1').parserVersion1]" } }, @@ -3376,7 +3901,7 @@ "displayName": "Parser for SecurityScorecard Issues", "category": "Microsoft Sentinel Parser", "functionAlias": "SecurityScorecardIssue", - "query": "let SecurityScorecardIssueLegacy = view () {\n SecurityScorecardIssues_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Issue\")),\n eventID_d = todouble(column_ifexists(\"eventID_d\", real(null))),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n date_s = tostring(column_ifexists(\"date_s\", \"\")),\n issueType_s = tostring(column_ifexists(\"issueType_s\", \"\")),\n issueName_s = tostring(column_ifexists(\"issueName_s\", \"\")),\n findingsCount_d = todouble(column_ifexists(\"findingsCount_d\", real(null))),\n groupStatus_s = tostring(column_ifexists(\"groupStatus_s\", \"\")),\n totalScoreImpact_d = todouble(column_ifexists(\"totalScoreImpact_d\", real(null))),\n severity_value_s = tostring(column_ifexists(\"severity_value_s\", \"\")),\n detail_url_s = tostring(column_ifexists(\"detail_url_s\", \"\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"\"))\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardIssueCCF = view () {\n SecurityScorecardIssuesHistory_CL\n | lookup kind=leftouter (\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain\n | project domain, rt_industry = industry, rt_portfolio_id = portfolio_id, rt_portfolio_name = portfolio_name\n ) on domain\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = tostring(issue_type),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(rt_industry),\n portfolioId_g = toguid(rt_portfolio_id),\n portfolioName_s = tostring(rt_portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", + "query": "let SecurityScorecardIssueLegacy = view () {\n SecurityScorecardIssues_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Issue\")),\n eventID_d = todouble(column_ifexists(\"eventID_d\", real(null))),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n date_s = tostring(column_ifexists(\"date_s\", \"\")),\n issueType_s = tostring(column_ifexists(\"issueType_s\", \"\")),\n issueName_s = tostring(column_ifexists(\"issueName_s\", \"\")),\n findingsCount_d = todouble(column_ifexists(\"findingsCount_d\", real(null))),\n groupStatus_s = tostring(column_ifexists(\"groupStatus_s\", \"\")),\n totalScoreImpact_d = todouble(column_ifexists(\"totalScoreImpact_d\", real(null))),\n severity_value_s = tostring(column_ifexists(\"severity_value_s\", \"\")),\n detail_url_s = tostring(column_ifexists(\"detail_url_s\", \"\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"\"))\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardIssueCCF = view () {\n SecurityScorecardIssuesHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by id, portfolio_id\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = strcat_array(split(tostring(issue_type), \"_\"), \" \"),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", "functionParameters": "", "version": 2, "tags": [ @@ -3443,7 +3968,7 @@ "displayName": "Parser for SecurityScorecard Ratings (day-over-day overall score change)", "category": "Microsoft Sentinel Parser", "functionAlias": "SecurityScorecardRatings", - "query": "let SecurityScorecardRatingsLegacy = view () {\n SecurityScorecardRatings_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"OverAll\")),\n src_s = tostring(column_ifexists(\"src_s\", \"OverallScore\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\")),\n severity_s = tostring(column_ifexists(\"severity_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n src_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s,\n severity_s\n};\nlet SecurityScorecardRatingsCCF = view () {\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain, score_date\n | sort by domain asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(score, 1)\n | extend has_prev = (domain == prev_domain)\n | extend\n body_s = \"OverAll\",\n src_s = \"OverallScore\",\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(score),\n scoreChange_d = iff(has_prev, todouble(score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(score - prev_score), real(null)),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name),\n severity_s = \"NA\"\n | project\n TimeGenerated,\n body_s,\n src_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s,\n severity_s\n};\nunion isfuzzy=true SecurityScorecardRatingsLegacy, SecurityScorecardRatingsCCF\n", + "query": "let SecurityScorecardRatingsLegacy = view () {\n SecurityScorecardRatings_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"OverAll\")),\n src_s = tostring(column_ifexists(\"src_s\", \"OverallScore\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\")),\n severity_s = tostring(column_ifexists(\"severity_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n src_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s,\n severity_s\n};\nlet SecurityScorecardRatingsCCF = view () {\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain, score_date, portfolio_id\n | sort by domain asc, portfolio_id asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_portfolio = prev(portfolio_id, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(score, 1)\n | extend has_prev = (domain == prev_domain and portfolio_id == prev_portfolio)\n | extend\n body_s = \"OverAll\",\n src_s = \"OverallScore\",\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(score),\n scoreChange_d = iff(has_prev, todouble(score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(score - prev_score), real(null)),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name),\n severity_s = \"NA\"\n | project\n TimeGenerated,\n body_s,\n src_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s,\n severity_s\n};\nunion isfuzzy=true SecurityScorecardRatingsLegacy, SecurityScorecardRatingsCCF\n", "functionParameters": "", "version": 2, "tags": [ @@ -3493,8 +4018,8 @@ "contentId": "[variables('parserObject2').parserContentId2]", "contentKind": "Parser", "displayName": "Parser for SecurityScorecard Ratings (day-over-day overall score change)", - "contentProductId": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject2').parserContentId2,'-', '2.0.2')))]", - "id": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject2').parserContentId2,'-', '2.0.2')))]", + "contentProductId": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject2').parserContentId2,'-', '2.0.3')))]", + "id": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject2').parserContentId2,'-', '2.0.3')))]", "version": "[variables('parserObject2').parserVersion2]" } }, @@ -3508,7 +4033,7 @@ "displayName": "Parser for SecurityScorecard Ratings (day-over-day overall score change)", "category": "Microsoft Sentinel Parser", "functionAlias": "SecurityScorecardRatings", - "query": "let SecurityScorecardRatingsLegacy = view () {\n SecurityScorecardRatings_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"OverAll\")),\n src_s = tostring(column_ifexists(\"src_s\", \"OverallScore\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\")),\n severity_s = tostring(column_ifexists(\"severity_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n src_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s,\n severity_s\n};\nlet SecurityScorecardRatingsCCF = view () {\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain, score_date\n | sort by domain asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(score, 1)\n | extend has_prev = (domain == prev_domain)\n | extend\n body_s = \"OverAll\",\n src_s = \"OverallScore\",\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(score),\n scoreChange_d = iff(has_prev, todouble(score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(score - prev_score), real(null)),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name),\n severity_s = \"NA\"\n | project\n TimeGenerated,\n body_s,\n src_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s,\n severity_s\n};\nunion isfuzzy=true SecurityScorecardRatingsLegacy, SecurityScorecardRatingsCCF\n", + "query": "let SecurityScorecardRatingsLegacy = view () {\n SecurityScorecardRatings_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"OverAll\")),\n src_s = tostring(column_ifexists(\"src_s\", \"OverallScore\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\")),\n severity_s = tostring(column_ifexists(\"severity_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n src_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s,\n severity_s\n};\nlet SecurityScorecardRatingsCCF = view () {\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain, score_date, portfolio_id\n | sort by domain asc, portfolio_id asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_portfolio = prev(portfolio_id, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(score, 1)\n | extend has_prev = (domain == prev_domain and portfolio_id == prev_portfolio)\n | extend\n body_s = \"OverAll\",\n src_s = \"OverallScore\",\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(score),\n scoreChange_d = iff(has_prev, todouble(score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(score - prev_score), real(null)),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name),\n severity_s = \"NA\"\n | project\n TimeGenerated,\n body_s,\n src_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s,\n severity_s\n};\nunion isfuzzy=true SecurityScorecardRatingsLegacy, SecurityScorecardRatingsCCF\n", "functionParameters": "", "version": 2, "tags": [ @@ -3575,7 +4100,7 @@ "displayName": "Parser for SecurityScorecard Factor scores (day-over-day per-factor change with metadata)", "category": "Microsoft Sentinel Parser", "functionAlias": "SecurityScorecardFactor", - "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = coalesce(toint(factor[\"score\"]), tolong(toreal(factor[\"score\"])))\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date\n | sort by domain asc, factor_name asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | lookup kind=leftouter (\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain\n | project domain, rt_industry = industry, rt_portfolio_id = portfolio_id, rt_portfolio_name = portfolio_name\n ) on domain\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(rt_industry),\n portfolioId_g = toguid(rt_portfolio_id),\n portfolioName_s = tostring(rt_portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", + "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = tolong(toreal(factor[\"score\"]))\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date, portfolio_id\n | sort by domain asc, factor_name asc, portfolio_id asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_portfolio = prev(portfolio_id, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor and portfolio_id == prev_portfolio)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", "functionParameters": "", "version": 2, "tags": [ @@ -3625,8 +4150,8 @@ "contentId": "[variables('parserObject3').parserContentId3]", "contentKind": "Parser", "displayName": "Parser for SecurityScorecard Factor scores (day-over-day per-factor change with metadata)", - "contentProductId": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject3').parserContentId3,'-', '2.0.2')))]", - "id": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject3').parserContentId3,'-', '2.0.2')))]", + "contentProductId": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject3').parserContentId3,'-', '2.0.3')))]", + "id": "[concat(take(variables('_solutionId'),50),'-','pr','-', uniqueString(concat(variables('_solutionId'),'-','Parser','-',variables('parserObject3').parserContentId3,'-', '2.0.3')))]", "version": "[variables('parserObject3').parserVersion3]" } }, @@ -3640,7 +4165,7 @@ "displayName": "Parser for SecurityScorecard Factor scores (day-over-day per-factor change with metadata)", "category": "Microsoft Sentinel Parser", "functionAlias": "SecurityScorecardFactor", - "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = coalesce(toint(factor[\"score\"]), tolong(toreal(factor[\"score\"])))\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date\n | sort by domain asc, factor_name asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | lookup kind=leftouter (\n SecurityScorecardRatingsHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by domain\n | project domain, rt_industry = industry, rt_portfolio_id = portfolio_id, rt_portfolio_name = portfolio_name\n ) on domain\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(rt_industry),\n portfolioId_g = toguid(rt_portfolio_id),\n portfolioName_s = tostring(rt_portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", + "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = tolong(toreal(factor[\"score\"]))\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date, portfolio_id\n | sort by domain asc, factor_name asc, portfolio_id asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_portfolio = prev(portfolio_id, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor and portfolio_id == prev_portfolio)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", "functionParameters": "", "version": 2, "tags": [ diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml index 6422c5328ee..ef542c9c1e7 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml @@ -1,8 +1,8 @@ id: ee795930-e709-48fc-9fa7-d67708a3eeb5 Function: Title: Parser for SecurityScorecard Factor scores (day-over-day per-factor change with metadata) - Version: '2.0.2' - LastUpdated: '2026-05-28' + Version: '2.0.3' + LastUpdated: '2026-06-26' Category: Microsoft Sentinel Parser FunctionName: SecurityScorecardFactor FunctionAlias: SecurityScorecardFactor @@ -61,23 +61,18 @@ FunctionQuery: | | mv-expand factor = factors | extend factor_name = tostring(factor["name"]), - factor_score = coalesce(toint(factor["score"]), tolong(toreal(factor["score"]))) - | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date - | sort by domain asc, factor_name asc, score_date asc + factor_score = tolong(toreal(factor["score"])) + | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date, portfolio_id + | sort by domain asc, factor_name asc, portfolio_id asc, score_date asc | serialize | extend prev_domain = prev(domain, 1), prev_factor = prev(factor_name, 1), + prev_portfolio = prev(portfolio_id, 1), prev_date = prev(score_date, 1), prev_score = prev(factor_score, 1) - | extend has_prev = (domain == prev_domain and factor_name == prev_factor) + | extend has_prev = (domain == prev_domain and factor_name == prev_factor and portfolio_id == prev_portfolio) | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key - | lookup kind=leftouter ( - SecurityScorecardRatingsHistory_CL - | where TimeGenerated > ago(365d) - | summarize arg_max(TimeGenerated, *) by domain - | project domain, rt_industry = industry, rt_portfolio_id = portfolio_id, rt_portfolio_name = portfolio_name - ) on domain | extend body_s = "Factor", Factor_s = factor_name, @@ -91,9 +86,9 @@ FunctionQuery: | diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)), factorDescription_s = coalesce(description, "data is not there"), ss_time_t = score_date, - industry_s = tostring(rt_industry), - portfolioId_g = toguid(rt_portfolio_id), - portfolioName_s = tostring(rt_portfolio_name) + industry_s = tostring(industry), + portfolioId_g = toguid(portfolio_id), + portfolioName_s = tostring(portfolio_name) | project TimeGenerated, body_s, diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml index fc9f01323ee..d19851b10e7 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml @@ -1,8 +1,8 @@ id: 5e71c965-6875-4348-b98e-5ba38186be2e Function: Title: Parser for SecurityScorecard Issues - Version: '2.0.2' - LastUpdated: '2026-05-28' + Version: '2.0.3' + LastUpdated: '2026-06-26' Category: Microsoft Sentinel Parser FunctionName: SecurityScorecardIssue FunctionAlias: SecurityScorecardIssue @@ -47,12 +47,8 @@ FunctionQuery: | }; let SecurityScorecardIssueCCF = view () { SecurityScorecardIssuesHistory_CL - | lookup kind=leftouter ( - SecurityScorecardRatingsHistory_CL - | where TimeGenerated > ago(365d) - | summarize arg_max(TimeGenerated, *) by domain - | project domain, rt_industry = industry, rt_portfolio_id = portfolio_id, rt_portfolio_name = portfolio_name - ) on domain + | where TimeGenerated > ago(365d) + | summarize arg_max(TimeGenerated, *) by id, portfolio_id | extend body_s = "Issue", eventID_d = todouble(id), @@ -60,16 +56,16 @@ FunctionQuery: | subject_s = tostring(domain), date_s = tostring(issue_date), issueType_s = tostring(issue_type), - issueName_s = tostring(issue_type), + issueName_s = strcat_array(split(tostring(issue_type), "_"), " "), findingsCount_d = todouble(issue_count), groupStatus_s = tostring(group_status), totalScoreImpact_d = todouble(total_score_impact), severity_value_s = tostring(severity), detail_url_s = tostring(detail_url), ss_time_t = todatetime(issue_date), - industry_s = tostring(rt_industry), - portfolioId_g = toguid(rt_portfolio_id), - portfolioName_s = tostring(rt_portfolio_name) + industry_s = tostring(industry), + portfolioId_g = toguid(portfolio_id), + portfolioName_s = tostring(portfolio_name) | project TimeGenerated, body_s, diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardRatings.yaml b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardRatings.yaml index 1db6de520a1..f5f49d355f2 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardRatings.yaml +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardRatings.yaml @@ -1,8 +1,8 @@ id: d45021a4-1e09-4246-9739-1c37738df1aa Function: Title: Parser for SecurityScorecard Ratings (day-over-day overall score change) - Version: '2.0.2' - LastUpdated: '2026-05-28' + Version: '2.0.3' + LastUpdated: '2026-06-26' Category: Microsoft Sentinel Parser FunctionName: SecurityScorecardRatings FunctionAlias: SecurityScorecardRatings @@ -44,14 +44,15 @@ FunctionQuery: | let SecurityScorecardRatingsCCF = view () { SecurityScorecardRatingsHistory_CL | where TimeGenerated > ago(365d) - | summarize arg_max(TimeGenerated, *) by domain, score_date - | sort by domain asc, score_date asc + | summarize arg_max(TimeGenerated, *) by domain, score_date, portfolio_id + | sort by domain asc, portfolio_id asc, score_date asc | serialize | extend prev_domain = prev(domain, 1), + prev_portfolio = prev(portfolio_id, 1), prev_date = prev(score_date, 1), prev_score = prev(score, 1) - | extend has_prev = (domain == prev_domain) + | extend has_prev = (domain == prev_domain and portfolio_id == prev_portfolio) | extend body_s = "OverAll", src_s = "OverallScore", diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/ReleaseNotes.md b/Solutions/SecurityScorecard Cybersecurity Ratings/ReleaseNotes.md index 1e04d3a4e4f..011c5cdbf1b 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/ReleaseNotes.md +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/ReleaseNotes.md @@ -1,10 +1,3 @@ | **Version** | **Date Modified (DD-MM-YYYY)** | **Change History** | |-------------|--------------------------------|--------------------------------------------------------------------------------| -| 3.0.0 | 01-06-2026 | Reworked all three CCF pollers to flat fan-out (no shouldJoinNestedData/joinedDataStepName/MvExpand, which produced empty rows). Ratings ingests the portfolio company listing (domain/industry/score flat) with portfolio_id/portfolio_name injected via addOnAttributes. Factor and Issue use a 3-level chain reading the per-company history endpoints; domain comes from the factor response and (for issues) is extracted from detail_url. DCR streams/transforms rewritten to the real API fields. Factor/Issue parsers backfill industry/portfolioId/portfolioName via a lookup join to SecurityScorecardRatingsHistory_CL on domain. Workbook: replaced ingestion_time() with TimeGenerated, widened panel time window to 30 days, removed hardcoded Domain default. | -| 3.0.0 | 29-05-2026 | Migrated data connectors to Codeless Connector Framework (CCF). Added portfolio metadata (portfolio_id, portfolio_name) and company industry enrichment via nested poller steps. Wired PortfolioIds filter for portfolio scoping. Fixed workbook Domain picker (My Scorecard) and Vendor Scores Company/Portfolio/Industry columns. | -| 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | -| 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | -| 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | -| 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | -| 3.0.0 | 27-05-2026 | Add CCP connectors for Ratings, Factor, and Issues; deprecate Function App connectors; add KQL parsers and update workbook | -| 3.0.0 | 27-05-2026 | Migrated to Codeless Connector Framework: added CCF data connectors for Ratings, Factor, and Issue; added KQL parsers unifying legacy and CCF data; deprecated Python Function App connectors | +| 3.0.0 | 26-06-2026 | Migrated the SecurityScorecard Ratings, Factor, and Issue data connectors to the Codeless Connector Framework (CCF) with multi-instance support and Azure Function feature parity: each connector uses a DataConnectorsGrid + ContextPane for one independently-managed connection per portfolio (scoped server-side by Portfolio ID), an optional own-company "My Scorecard" domain, real dated score/factor/issue history, and company industry enrichment. Deprecated the Python Function App connectors; added KQL parsers unifying legacy (`*_CL`) and CCF (`*History_CL`) data; and updated the workbook. | From 2a5f42d3337eebcb3e07ab0c76df6063ce78a7be Mon Sep 17 00:00:00 2001 From: Shrey Sonar Date: Tue, 21 Jul 2026 15:41:16 +0530 Subject: [PATCH 4/9] Fix CCF poller resource names by quoting the workspace parameter reference The CCF deployment path substitutes the literal text parameters('workspace') with the workspace name, so the reference must be wrapped in single quotes to produce a valid ARM string literal. Without them the expression resolved to concat(ssc-ccf-wkspc-01, ...) -- a bare token -- and deployment failed with InvalidTemplate ("the string character 'c' at position '11' is not expected"). Matches the form used by the merged ElasticAgent CCF connector. Applies to all six pollers (portfolio + own-domain across Ratings, Factor, and Issue). Repackaged 3.0.0. --- ...SecurityScorecardFactor_PollingConfig.json | 4 ++-- .../SecurityScorecardIssue_PollingConfig.json | 4 ++-- ...ecurityScorecardRatings_PollingConfig.json | 4 ++-- .../Package/3.0.0.zip | Bin 31998 -> 32022 bytes .../Package/mainTemplate.json | 12 ++++++------ 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json index 23d089d5eed..741e2e5a5ee 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json @@ -2,7 +2,7 @@ { "type": "Microsoft.SecurityInsights/dataConnectors", "apiVersion": "2024-09-01", - "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardFactor', uniqueString(parameters('PortfolioId')))]", + "name": "[[concat('parameters('workspace')', '/Microsoft.SecurityInsights/SecurityScorecardFactor', uniqueString(parameters('PortfolioId')))]", "location": "{{location}}", "kind": "RestApiPoller", "properties": { @@ -92,7 +92,7 @@ { "type": "Microsoft.SecurityInsights/dataConnectors", "apiVersion": "2024-09-01", - "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardFactorOwn', uniqueString(parameters('Domain')))]", + "name": "[[concat('parameters('workspace')', '/Microsoft.SecurityInsights/SecurityScorecardFactorOwn', uniqueString(parameters('Domain')))]", "location": "{{location}}", "kind": "RestApiPoller", "condition": "[[and(not(empty(parameters('Domain'))), not(equals(parameters('Domain'), 'Domain')))]", diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json index e38d7e9ddc0..6b479bb164e 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json @@ -2,7 +2,7 @@ { "type": "Microsoft.SecurityInsights/dataConnectors", "apiVersion": "2024-09-01", - "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardIssues', uniqueString(parameters('PortfolioId')))]", + "name": "[[concat('parameters('workspace')', '/Microsoft.SecurityInsights/SecurityScorecardIssues', uniqueString(parameters('PortfolioId')))]", "location": "{{location}}", "kind": "RestApiPoller", "properties": { @@ -92,7 +92,7 @@ { "type": "Microsoft.SecurityInsights/dataConnectors", "apiVersion": "2024-09-01", - "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardIssuesOwn', uniqueString(parameters('Domain')))]", + "name": "[[concat('parameters('workspace')', '/Microsoft.SecurityInsights/SecurityScorecardIssuesOwn', uniqueString(parameters('Domain')))]", "location": "{{location}}", "kind": "RestApiPoller", "condition": "[[and(not(empty(parameters('Domain'))), not(equals(parameters('Domain'), 'Domain')))]", diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json index 9dee1913fa9..35e304f8bef 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json @@ -2,7 +2,7 @@ { "type": "Microsoft.SecurityInsights/dataConnectors", "apiVersion": "2024-09-01", - "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardRatings', uniqueString(parameters('PortfolioId')))]", + "name": "[[concat('parameters('workspace')', '/Microsoft.SecurityInsights/SecurityScorecardRatings', uniqueString(parameters('PortfolioId')))]", "location": "{{location}}", "kind": "RestApiPoller", "properties": { @@ -91,7 +91,7 @@ { "type": "Microsoft.SecurityInsights/dataConnectors", "apiVersion": "2024-09-01", - "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardRatingsOwn', uniqueString(parameters('Domain')))]", + "name": "[[concat('parameters('workspace')', '/Microsoft.SecurityInsights/SecurityScorecardRatingsOwn', uniqueString(parameters('Domain')))]", "location": "{{location}}", "kind": "RestApiPoller", "condition": "[[and(not(empty(parameters('Domain'))), not(equals(parameters('Domain'), 'Domain')))]", diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip index d1b603feb7b704a04b3fe1cb1dd58b857e5d0f53..d7a405caf66bc687ca1c38a17b82d22d3f577f92 100644 GIT binary patch delta 10064 zcmZYFWmg>BmMvi1-Jx&@?oMzE?(XjHPT?Bdp>QX-yG!r@!M$*I4S{~oxwm`t8U1DM zJ=QOH)*S2O6*A)u5>-VW8U_af0s;X7De$oo^#~sIpV#1W+C zh)FiO(ZjOadC#{yOY$Qv5y+(}AI}ABbdldynOn9us$DcR;P$Dn9Z{pscuC9o^2xfu? z{(*8uOGbr#y9&k__J{eonUbvvs0ZuO%5|nQJJ{B?*=V;9sv-|jBIYpm*$Fj9RI#k- zw{Es47dHGb*cCsaA0#z_6AOn+FKAV~t6tImJ#N;MI==@*(x;}>52}z3jwK-^!chX?I;F73OXR>*DOB#)kx5_ zY>OefSv8p`1<UF4Q({%EJ~N3SpwKKdP;iu8LI$!N81Tz`rbI% z8!R;gxfEy08OCJbiKgu1LWJ@Uka62{e zR+nD=ck;K}dDmO0)K_k<8o;@k7=P&Pah`RPwO)}s^QQx2#?s9>6{k#3H)pd0)^xFP zE>(UJKR6Rxw?yK%srK>+M!)Hs!xR0^!p)Sdqi!WLa^fhk34@^uaX57DRz*h1uoe}$ z)zs8|ICQm#y2#6^*eyeo*HUAK)`UftAx3cAIQ|qt~g(@8l1L2>h?n<6{caUJ?|0WmoTU!BOlf^=b3X zu!;_mwf+;bGt>nFf8=aPc@ zC#O?!YOgv}~34qXuIZ4C-Q6214G&kr&f-7oU{yZYg zHqT>nXb1=o?7xg6=mY(I5)YJNPM!(?{N-1C|B_~Un2^X7r0M$NJ?@3*J+s0!P3QLs z&Y#3T&iSBfX77bZ!X1xF zXuM~EO+}9Gw9Js!K6sW`JZe799LF$&zWW&Z-!(8OcVd_OF>V~$aBJhg!E`J7O)!jI zG56(|DeP>z;*Y;7-`ZONy!@VC1)H34p5I~jl!n<%9PM%Otdr*L-HTg&!avo z)_KqflX=fdj^V7(@jFAJ#6za7xp^#%H~Ml7xh)lG_I}60iMBM#9?BReMhT<-cSkG| z?IW1^lV|WK#qsW7X{cK%paFx2cG)Y zl`P^W{l~EGHq^FTddHOIO(yb1E0oXlU2R4%m^mu61JdYz*(G-hk|blyl?Am(7i&dV zi5!nU-QVIuaB*T^%$X3sOHkOu7j#kxw3-P<9}9-{EM?wT(x!%t+f{*2x2M^Jq)F=u z7o@B6TvE_;nC8wECdk!_%M5hxSi`;jfs)`wamd`Ru#C#xACdCB5f7b69UwOaODe=A zs=2WBZFwg$ZlC0LCDxq&`u(BpzW;q-Q5!gtHvX9erzZIa7!VnSoxlDkQ9h zOy@7aauYzpZIRNRJ5f_(P68BU_}|@{rY&qzGSH@cqL7|_uY|LbE_KO_E-YDK@e!}b zd{SxN6A%d(v;4N~kBoi@QC~C(6wDJw)exM(Fx8ROIkH2z0SAAf+ZB`0mXN^EcrVl# z$$#()$9kJOYSGAL!R^5^*qYuxh~ySwZ*27PYz^O+B`1=I7o;!Xlj2Zj1-fbOw|O6X z{P=bT>H50fa3vXri@-s{&FQ`~88;Hg8#4_Sh=FFP+OFHB1Zr7+Mq@&{gO|*DCKL@)KlIM8OK&{+1A5+ zo1ZG+1G-A^(Hn^BnHOPmhuTPlaQ-hb_{p30N=ta#>xXNbC2sgd$9m1l(=^}u!fi8P zWCkxLvv%L2z#8OWdE2<=+E}$QcI4Us812u9^^eaxY;3e1Z+BAzayt^w>A4cyZyz>D z_Sh}CR)g2@$4ih{JMV5Qx-q;NNV_xwZ0+!<_hm=7tj6N4#^T08q?*7ImSAz;xwoZ} z5GUG?W`)fPgC6S;zPZhp*`AJBkk9M|vg(jg7H0i~?xx#q_R^>&O(f;P`KC?WLq-kF z>>c}<_EDY?U{n>je4DxvT`-OQJ~8c2MMz7(|AQVAKl^r5ivz9c?q!@qIid_q%$VTJ zgqOpLJx+(;uk*IYk;;5ObXxk-s6q@rx{bmeBhkWi)}fwd3u{Ln!95C(z`Ms{Jt8rp zbZWTs88k!Nir9xnjv~VO4nOU+Gy9f9_}q@IKtZE-BK0isvA@1F$n6h>v$oGMqB#KAE__{$0TFFJ2_+N99?8lLzc{J71P%;L zD5;P^ZbQI8f}$iq{};k9Ur6e4FO$d$G&`hEeQKupYV7vwi-)J9+p)%V%cjS3$2B!c zl{M)Ss;BvH-kW@U+?h|0A8p-vDaJsv0-R$Z0xqE!8c%4mc$IwiQ6|VjVGkti^z&Ku z9y7e>?wh<;K9(IJYoGhlshfX07Fvb!J&*#-O)Y^4a}qqJ0rn^5vKKeLdXZ3&?%LuB zeAm`2hGi-0H?j)pdM8H!v)L_x3|St3aCcs|oZ@3jg1ibPiQU=jyLl;Gfyzz%b5H?N zlaMi!78gf2VyT7s(1rIG2LZ84)wteLq`6u-i8wg}Zk z4^Rrei^cJf&40Ckbu&JFxcU;di#KSojXe$&(mlg3KqbY1P%F!aC5WmWY7rZdy zdYfVUijD_t(Cr`+iYI*v?XA!{g;{H(!C##F#5?z9Hrqcfw!hzrc{sO3e(txY&}k9! zb|H{Q^k>}>z`kQ5u?FA1B31qy){^R3-n{=G*1FU=GR6r157wA#Eh3LUoT*B-b4Cc@7E>h^eF&wu!aq`7zu$jeM~ky`=}( zX^S~s5FJ`jkxY=!I6j)jit}lD$b7+vngG3U&m3sN>^EE zy5yss=`s6a24c*Y=e^MDac0Z4_{y zCn&wZvv7#zV31kILZ!|O4$_HM<;(+zkf605#l$?ZAtu$nS+s<4sn zyP1VG)#y4pn`vTV^+7!fEe7*yXm@f3or2`wwOcu z7~_W+5IyWb(G5fl1ROR7 zaMH^8K_QvFBSjhNEIF5G%jRu&rw$Z$K4ZdF!shwRX%|kL!?a_DNuE^L^@X93^jzwF zNQDeiH|OQ{aQpB^pyLfin){})X^0M--#N)Dj%(Y}8KSLk2){eKf@XmVvN{-e9Vj>% zFbWMQRk?$3&ZxpVNZ9Vfjk4s3T4=1q-x=?_cfT{h2pFIQ@twTpa&TGKr2OWYkltf% z6hRuq(}p+hfhE{y*!w;;K!m?)4{MTesLveYqK{_a0!?sGJ4lf^jLw9bXh4+RL~YOn z5@k|jc>cNSTb>%FyUhXIbn{(3yt|nao5_JB`woeGCZiweUMB;E7vhb^u%gfbtw86C z=&RCkQk~thnq|)u$i`EP7x}imTgeF4CiFQIpVW8Ct^wEuA%D4U2SmXJu50Q1k|+`W z5@>6YXWMbJDi+UR+Elism(SzCvomkYDD1Vswk|eEgvQWk>T?6!sOn`souNh^&m&x% zi8$WQqO|R}G7Js_j~>SC_1v5Gx*I1|uj1sI_r-GnSfKv=#W*e*&^*3)=-p)JR{Lt0 zy-!ckR)Qd?@3H^Aj#?9{(}$xIo{TJyZicDYjq-NRBy%>}&csU`i8lrzh5k^J)&tIT zjtd~X<4;ko%YFkChMYm?oM~l_2rdiKukFhbYilU0imG4s)yCcb1R?b2SfFE+gg3xEU;r1#X z|CUd(J2{co;woz28dBq%IRb|Kp$T6ddu&9U#L#m-314_6zFXyUq6S%BrJIC8hwGh7 z$d^ONMkI|tfrOEch;k_Osf~@$l?U;QBc#9$vH%uJ$Q@en9!kI+>T5Hr6yguFZv!;e zu2Zl;8!h~-Y=YRNdiN5J1^uQR(WxlphG_v&9;DJ5Xu50qU=EQxTF#>H7KNqXo699l zEXFwXCq#cvLX%GkVrC$D)bI^7>ip_eATKe1Fh8}PQfQlwt4IZpi-$z#!jo$e_~=Lt zm?n!3qinNa=wxBz>rE^6WcmBV3=B>}!^QamJ@C;mn27CF*vQ#7fCA_CR=Yb&Y!Lw_ zI~h=KvG8}e=(|4%O9jJlka{-s1`K5p)u;#RtWp@VBpGBbLZHArmXw{1OHrz}Jk>ld zj^~i}UtVQtM48pAUdnCg*1kEV?^rBhb--?pV_$1Qj~+meFrcDf3r`8xi#9k0*BrwF zgB)=-z_0N%JCjnRgW~ORCs#@L&N1JaZaNU3O~b{VATlko(mV#VS|oykwf0EMpqn_L z8>>+VV$nFMcIAj|(wpdyd4fqQA{ zj9DzkqoL|}DKVKSKzxvQdpLk$`YE7MXZ{yDO;Sqy8e%y2 z7+hL?aWc9pafGVQ&ja;bfJ~3-62ez~b`YOsMzLHE2!$!WXNs)i8)_DIZUPaTH9Vwy z3X#_G8V%l5pMeunxF~jtjkOFAG9=NTqmOCbPx3S=eLS#iu{-l2SYI;LSDEsgrekSvOsRwOp(eMFegjX}^FCU^NM7B!bF>1)oH5z%RcR}b zTvEO}PO>2lM09a;{ove-(i;{+=_@;VxV9FbHO2ia^|fdY{jETO$wGrKijF(*C=c@j ziH=)E`5|sBHq$S_m4C9;8?#(?8a?c8!#Vx5vkM#~;HrWka#UbG!ZL@DcJDVFW4QgpgA2Gd1iJs&2H(h7mgBA$tL z47HIIEEh}+BZfB4^zcY@6o4M?i_<_G1o}1zbN~l9G!@W$soW7Lray{siQrD$(eF(uO6+e^v6U!=m=b2wfe=~3j3G< zPw47c6Xa`?NgJ6!a!Ui&M8!Zxg)+RY?ln!y8Ak}GUf+-g8fL3x8n1T>2M+iBaVEYn zzOlBmJ-4TQV;Lk5sCy)QEf%P2_FgivtRrIfSSmy{;(mJ8Hw9>HeFchiKP@on{HPM+ zn}HcE{E};8j=p>SY_7;&B10+`ME^}Kl*n4j`cF?2K1s;lbsXtM|%#g{Ri4%BGmzM;p=YIsox5=1hW>g4JQ?v>Mh4rm;) zW63_fBTV~xkTI~_(FcU>KQg$INju_1bZvApsCS^s)TI3Ks&H;FJUrV9P?i{?m}W(o zi58Lei)l=?PMZCrPX7rpeLkJ#z6x-l;u8)19-^hYEy9h z1qsJ6zX|T8q~N}9&FxHr1L@cGvb(9nreHTG_XSyUqwx%TLV?;xE7x@jxAUHUZ+dT= zNb&n0P@JH3KACHDgt^+@4;z_A2ir!Bf3}+YbDSebWReT$RcAr>gt|l0l)=|b@3&LE z?W!@Rs80CI0(-i1n_`eubDj)HtcI=959~hX>WJIDvf6g*H>XR~)jeLDSVy#?jr!J) z@S%OyVTxLL0~9->E+VTVd6W8RDKxIvB_+rU$`nF*cjibDem4})Le7X`Oc`cU>r~^N z97svw{y@`^pEFF&XG|@F%&Pr(cMnA2^Ui(_&d~X7l&zbYnuXYzOhUA=@64vKt0$sF`RS5jayq;+m-sUmj)DFfoB} z+{-U%E6(W~|GtnukaoK~+!t7>CGl>mrQ8Upq04#lt&|`i`_&}sZ3N6#Nmf(OE2@cG zayFmB0qgw+OSTtS{+5qNEB5XkDq@`1t=W68|1IqYWpbUnCKeq)s$RO2f7X(JdYXmN zCN1pB7kjgBhYgntlD z$bH7A$^eiY!BM)P4R|=4GZvH?1!DE5+S-ePq|k6}j0z5@|824l{p4o}ZZNi4R z^VYqbDG)3VNZ4My(Q9;yskQNm-(_88!@w;G<}{m~_z>!T2gVtXxjQ@)$`^ zul2k)e%9W63XX;}#H|N2jeB_`!?Zz4I3*RvtjxeM$7-6WaHdJxaDmYH-H2O63(69g zY3b1>viCN*O5#@Brr%{K(VU~a?*exCy}O71em0ffYGS0BPBpH?mX6W+l2ZT5EE|Wq z{Df9i8Wpz11=itovJcPom|M}93H1P^X65Y%TQkk;#aqoa4Bavn6sOxzqU^jpCfVb= zDCG+jX&ik|`F@-oLfqv-9XQubmaqq=pU8#MS+oc(8!;o2h(0bq)D)yKTImcE+Y+6o z@4ZDUbF>OILh(4`-8&8VV!t*f-xFnQuf$if%{q$Kfe^%mhhNjzjyKTTX%* zO?GS+Nh9&&HWA1^I9y(ZK{!dj2w1&k?26ZyD&-5S&B5ztTIOd|5hS?gxb~==lviv} z2EkQd3=D82McXSQ+GP8!L!w9!kk-B#HY;Yf??$4oa)GPk(-mppt0V)Fb@F*YU>F>F zNYq?g;C2f$z^YTGIrBisMQ2s;t3wKn=Kax%O6k=#)rpEn+p}XqdM~uzzH5CJjAHKh zZGp|%TOR@GO#F`_=Hh<464w^UzvJ_8>n+gBsiXd%9?vZyW*>8TJSJAFJR>2C)xvuZ zx6#m!iB>eU(!@45k=<=%+v#|D_J8l33`=H%fPT%T34AxbnDFab>04OvJpM&nKrb;v zMqysB!F3LYjyOSVFR^AhtIt)~T%{jd>KN6rXcfCINdJz6@dk(k9Ac%xz5fZ-b#+ka zzQ1a`NO9=!Jb@8Je37DRBTIad7<=O}SEL^7NJ2hBJ0(Yr78f6-gcMNKgp>9R7n%eY z3P1;?#Q;H^Oab_99WNQlDQ&UJoh$~>{rlmI@>0TP9r5r-I2MB;~=vbzVsW!rzgnG5&5--VP}E@c0rQ*)4h%4q!nnVRTDL{`s0 z{9%A5O}Gz>ytED>n4gjqxVU1t^mwwHQ*}qykowb$0!Z>#-dbm2^I||Z?sZk_Q9arY zjy%()m6~aQd4zqExWs|vTeh&U;qiD}8>CLED7u7amMPRt5Acmod=X zbp}Z16ZfViOW%hoZjVylM6ZYB82@}VPEBjmA)T+s%wL(#J05zM=DKu#Yo;vI$g6wj zQR7`zy#~sA3jO?PkOD6VB9*DjNMtJFKLqk`rm;(HFi0qDwRZWwb1w4>VpGv@w8T;}4 z5XoK>S`4_l<3p^xISIKMJexm@P=~z?X@xXzXaKfdg!6R-B|IMI)$G@LXOwf!a8glq zsShva6Lr~KT>3i#M+t{9u^!2!WgHgo^}C{;Kh~}gV@BT#1SnLM8ysJvtu=K9*7k2P zH`0u0Xvd{J0!Hq#ToS(LW0EyGYOXPpxk~3O|D~l{=010)qN`&bj@+2!q@d$5XMRd7 z>;N|Vw)u~l!4B>wA)|HvN6g|~k**DS{*3TrQw^grh5fzTyOWVF!NPYC`hTJaqG!K^ z0v}Wsf^TA5h#JyRR~7;{GMKMVR4IXXA@kgxUKFx~0A+16KuF|6oEX!tSJsz2JYvX* zewV@c`<@XL=CyL0nHGAU`ryM46_l9D>Kg&I6P4QLs|oox6~#{lD1-|2&RhE2#Td+D zOBYd1s!Uy&sZ+jIPEi>G?;Nj0>;{e7H5+1;ZM9Qh{4)dcbb|dWD|!|BzT{Boi2KFDIbjl*q@{L(Jb-YSs$d8-^+3Qv}jS77-P! zs0NjI{;|j^FA&iP@H5m&*D7`B*vRl{O>&lY2MK2}mb*Qgz8ZQyjq0NaZ=zXNPPzW> z*nwS2TTLr<cL{qNcPetbirLt`ekK99Z9yPBYDQ6D*9D6t2KVfc0o{V zUxFW7NyolbKdS%#tRP-gzGQz%t(s zJ9ElL8x5|4k4Xub%@x%Pwxvf|Pt}n}8O4qEv!Xd9M%;8+hbYoF$W3vV6$NfE=9YF+ z-}`l+@=15itup7G^nY-xn|#)J!v6AbmC?p!(&aWt1kiHGmGTU|obA+qpsUD3Lg7IF a&v{&`dw}?Vp2wvQ1@OQH1pIS92k~FnL|h>N delta 10062 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 diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json index 429467ff4d8..8d55d47e9f3 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json @@ -2068,7 +2068,7 @@ } }, { - "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardIssues', uniqueString(parameters('PortfolioId')))]", + "name": "[[concat('parameters('workspace')', '/Microsoft.SecurityInsights/SecurityScorecardIssues', uniqueString(parameters('PortfolioId')))]", "apiVersion": "2023-02-01-preview", "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", "location": "[parameters('workspace-location')]", @@ -2158,7 +2158,7 @@ } }, { - "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardIssuesOwn', uniqueString(parameters('Domain')))]", + "name": "[[concat('parameters('workspace')', '/Microsoft.SecurityInsights/SecurityScorecardIssuesOwn', uniqueString(parameters('Domain')))]", "apiVersion": "2023-02-01-preview", "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", "location": "[parameters('workspace-location')]", @@ -2862,7 +2862,7 @@ } }, { - "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardRatings', uniqueString(parameters('PortfolioId')))]", + "name": "[[concat('parameters('workspace')', '/Microsoft.SecurityInsights/SecurityScorecardRatings', uniqueString(parameters('PortfolioId')))]", "apiVersion": "2023-02-01-preview", "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", "location": "[parameters('workspace-location')]", @@ -2951,7 +2951,7 @@ } }, { - "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardRatingsOwn', uniqueString(parameters('Domain')))]", + "name": "[[concat('parameters('workspace')', '/Microsoft.SecurityInsights/SecurityScorecardRatingsOwn', uniqueString(parameters('Domain')))]", "apiVersion": "2023-02-01-preview", "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", "location": "[parameters('workspace-location')]", @@ -3654,7 +3654,7 @@ } }, { - "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardFactor', uniqueString(parameters('PortfolioId')))]", + "name": "[[concat('parameters('workspace')', '/Microsoft.SecurityInsights/SecurityScorecardFactor', uniqueString(parameters('PortfolioId')))]", "apiVersion": "2023-02-01-preview", "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", "location": "[parameters('workspace-location')]", @@ -3744,7 +3744,7 @@ } }, { - "name": "[[concat(parameters('workspace'), '/Microsoft.SecurityInsights/SecurityScorecardFactorOwn', uniqueString(parameters('Domain')))]", + "name": "[[concat('parameters('workspace')', '/Microsoft.SecurityInsights/SecurityScorecardFactorOwn', uniqueString(parameters('Domain')))]", "apiVersion": "2023-02-01-preview", "type": "Microsoft.OperationalInsights/workspaces/providers/dataConnectors", "location": "[parameters('workspace-location')]", From 9a317a8471654da1a844788c67502f109c2075c1 Mon Sep 17 00:00:00 2001 From: Shrey Sonar Date: Tue, 21 Jul 2026 16:35:43 +0530 Subject: [PATCH 5/9] Fix workbook Domain picker inverting the Vendor Scores filter The Vendor Scores panels exclude the selected Domain by design (subject_s != '{Domain}'), because {Domain} denotes your own company rather than a filter -- vendors are everyone except you. The CCF migration repointed the picker at all companies (the legacy "NA" own-domain marker was never produced by CCF), so selecting any entry removed it from the results. Source the picker from own-company rows only -- "NA" from the legacy Function connector and "My Scorecard" from the new CCF own-domain poller -- and make it optional so the vendor pages still render when no own-domain is configured. Repackaged 3.0.0. --- .../Package/3.0.0.zip | Bin 32022 -> 32077 bytes .../Package/mainTemplate.json | 2 +- .../Workbooks/SecurityScorecardWorkbook.json | 12 ++++++------ 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip index d7a405caf66bc687ca1c38a17b82d22d3f577f92..ff028659a72664520516f1bf4aaa639d4efce457 100644 GIT binary patch delta 27321 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

Wl$JWwHym@lT}a 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 delta 27259 zcmZU4V|3>+*X>kO+qOBiG3~T7wQbwhuQsQ)ZT)MvQ`^SWwsGfK@B7^Q;eN_KNmka$ z%1W}&&dJ0JSn>-Pg1i(2B*vF7Utqq#`P3mCLL#G_&fBB+V57Q3^NT19y z1}`p-hQJS?Wmpvkb9iK=R0pc1**SN#)z?&yf1X0Q9mQDmBChI)V!$pF)MWW|hZXZx z+m*IxNf{ z`^xC-;IZcDfd{Rls1|iD0_P}#rQ*w+ zE)F;bNwzWF!oN|gZ7xsE{o6UA6RIs3ufsX>MK-;1@ftRRrARNP>G2;WHF(@yi#jMi zIB+;46Yx!XJ{p>!*Iv*2A4L&AmBmyV4uvmHCgE&98gbU}+ID;by9bjn)Bra`@vd%B zxg>|h>>v8y;`ps)$b04`l03q^EY-mlC*&TC-J ziT3dqkJMfU~J;Z!^CbHo4mvolH3tPr0O6f_9pvd~8qH0G+{NeD4dOXbskQ zMQUvE=;JCVm71mouOZ1mo1^PS_H&aZuZgO;q9$>`WF8!VT|08+ZM+}y`BM<+gQ13v zZuapo)%}!)je!s=RMU~i?2K*uac=>WTsT}QP<$Kb*!t$7ZkdYgNcKUJIG7+yDUsh2 z=unc*rm)_xP?9bR{3}b9R?40_YZFKtVCIJmXN+dnnqqg=6S*-v3nc1bq2PD|mv)TY zkMG5z12wIO?azKtpwKy1$}Uyz?0G;75wVp)A+eAb7(c!tD zy3@z8+)O|8cA*QAb#h4-!?@JjMpc*muIu%!4L`OBwi+ zO|&Ib@@#{CQm`@L>PJ8R#$7i45rVf#bkUf$=V%4+9@2aUf8tIM<4$-fRE{^)?M~+? zAuFoOGcKUXb=akY^KbzU_@kpRbazzoOXIZsh96(~Lu=wm-=50D4#QP<=%^n338ljqW1&m|k393ud@6#EMCD z_+=!mL(HK(Wi{CbD21pCf|{bWIoSFoB8*QMHa1YBcXmT5EUneAU`4-63(+thtx#_(CEn0dU8@laJzt-4VVjTBt zrZF{&!M`>eEjiYSNZ5C&8zy1d4>S7v>nNG2t#*}F{X3wR*ji8~7(|;Vn@&CY9{R%g zO{Wrmt$RyS>Kqe zgqlU5Ix*13b1yyxXA36ulBK3p4?sA(9uV)H%om~#mQ?hF)H<3aZx4H02F1zONgX6t zRV=3(F7B`Y8OsQ2*8Aya#n>S51?w`TvoEw=K4`ydQ-SyqO7~C6dabfJ zK_^P99fQ01t*d@vVXA-b_K3G_f=3G?(|cKw)yO6(8@>V5j|smBPdF-?3(hvnb(Axv ztKTwT645z~HSzKgI~T+AOaR5bCJ%qa-8PClH4o&7&!zDO0jktJS+{b%isUkdX$I@J zV!jt;E^~5u%ByMQCn_{42~ig7jmNR2EH$9A_S*kCmzX0d${&;Nt{sCk1@kSPkZfti z^lBnidO;Tu$Eb|&Vm)#j8g-v1rt9o=<|T4Ali0Yv6ZyV(a@1^w%kfTyN$`C3eJ{pS zvu5e^E=fagF0t3%y-->_D~~lZMw!0{f>lui!X-?bkW7t6ta@#WYAYsz0G|lhUW5N6 zBM|uM84ze($Euwb>>z#t zuP($Iu8t*zqt;lzbnIG(8ur0K8=E0Y5?O*gc;gs0+{bi*1=s3nvLQ-EYeFa6o6f8k zccYnVhuNr);b+_jy12@Zi@_>LkLqt)o*5y@=X-*P-ShbO-?F1g+wFjuE*4*uJ1BSS zt9jE#Z7Gmlfu22GnjM-CZcI zAaK;_qkUk!)_zgPBJ#gkxrwAk^Y(bQ>n>y_7t=cX!%+P)B@sS%)G64r=AbD;v#rXi zx5A0^iqR>{wzE>uid@~mZc;GLEydrC$59J|Ai{t?736TfXLAG?A%9uMCHD~Vy7AwC z7K!wCcbIWl1~gQ)bLr=pv>;{4s%G{zI~nSR#)mC^t9onG{vii7hfQ!sHO8iM#*cqtVp6JlH}mjxTbS=a(t z%NGit9>KIXlKz)6eMUD*}wO-8v=mNWVmHwQ}NY9umu`Y-kuQDbnu*Cp% z4V)d$-YTl@DyVC^e)fHJjtbHcu=E+R1$`FaSA@n4HmDs~vh+m7L6Edy>6o^<9)u*OYGx;d!!9F{?vXOyMa0&5BK*81y(M>42}y^$-bGY*dBZ)tgK zSQ+8N(nZ1{yPhhEaBYZXdOoyJ6_|bnPrlDQM=F&d<_WF7n`{EJL4grQCc+47RZ@)E zUEVGjQx2MXdDG`o3R9Q-dM>E7reI?rqw0WE2Nl}72efKQ#Hkfexr%*!(VG-#W4d`# z0_TX95&X7a;}N;0D%HXW`If_ZK1)wz&z+)bsU1C3XPO=q+poWzZ>ql96qr2lP-~S9 zapEJ5>SN#I6=JHgjHTFP-Y-AM30e!|%N;gco9H_h&9dQ2GY>OVrP14Ts&@fIgxY#} z?@=$sY%O6k;SV_B-V`N)drOCAt^uG3LnB zKr}npS(Uaob7$`zor&jE{#pS1((BC{5mRWNBbULC9E7s&JI)yU2a+r#Zw#O@Ti33%G}3*gk_CVu@KV4 z(bsjS4)3&)6uXxy-#gzZt*tHLwYBH>Uh8?>7!?zKG9?oh3LO)EJYw=TU;j-g?e~a!TA5EJl0?Hy{NYcn_QH84 z+Ve4xW~K%JG}UtS*Fj z)zZgn8Epqt)ybV(^4|Bj_xTNKGUvH(ye%|?-`zW8ehHm682b+ZkWWMuQ5K!@J&!~Q zSl0cAHV3}wk6<@uyWI>MVmU5Ke4NAMO{z?FGub4Yn8Edeh;G}B-0==Ga9wskhjBCE zUWZu&(Zc!cYA4&u;+c5_#qx$^)h01Zsdx0|?S4Hmh>Ui!D=jj~(WaElT1XjHi(H7y zTCBNrz=e?BbiuI!bmAHrJdBhN+_OJN-NN~hyUzAu#T~BbmLMX3Rm*=sHc(#W{SHgK zN5)LG)Aj5pLsC0-bNOXP|DCXkN$~?l`lx=tqO;zzrgD}3w9L!o8m5J!`Q@U8U9hm< zK&9Gm1u0aemBV)H*{OmldL8jMF)6)0(^`DyuE}?u>@z}s;PD}x=$u27Om$Gnhn&Q{ z3;_!aTxrR?@k7x6G##_|=0ZG++=x!6hqxT3j7JGtv3e!waWY?3!g4Zn+oL#z zJej13^b+MY5&rVG#peQ9lbSGDp3-UUyjt?4^6ILmT*ZkjrYn zw8r^|A_6}L6LUM~wsg;hgfCpzFSl3hr`BWA8hTPX=$u@iq=OkyY6?gjM z>^)TVWc|;%iRY#W4#RQ^rvs*rzN17;Bq}7#3o4^s#ZLEI)t1;Z4Jj9NSaCp4t6!LG;iD(}lq6QL-c&P4K}M#+Bt0q&h^6VA@qOBi~@jc`Wiaj*#!V?{z#j z@!t8?madPFvf!=UQfQ~4@rXC}(}uGJGq{z<%UZ?nk3NxpDXnIHIn`uanj!Sg1sh=h zHLuyT?|avE0W$-tJ{cSK9iENS-OIDE?p75Xfws5I(Ot6|5y&Kh*ol<6;C1hxmDleM zSt+Buy&J5lt@NiE++lEXUOkEw)5 z1P8>!ml*xOnhPmh16Tr%01Lq#U+-65#EAXQJW-Y+(Z*BCIzpTo4sB5pY#=yns*+t` z`{ft~QO6x~#zQ^+L+1o`OS4r!XS%us7$@i0jrsvEL@v#Of4-(;b~%qXh1wA3u1 zuvRjO_HLL5uZi@&m_WvFwK*!CHtu(~&(UsWM}Kr)Laeve~fW)HA`F+H$%Ubi!yu^m$vV@gDu6TPZcZYXEBKJ^OOxHcd9OKm4$e2>PX`6CG=*%+$7cmW_DrnA>MF`6|^Em3jLQeCgKLJ;jr8b?KZYgzi`^En+fC(y(Q? zOU9HC61fhbm+C4VaJbXzGu5;7*L!wZRt!4TW}RC#vPX`jlh+#0VLbGkbt%YT6p;H zq_wy`@?-n>@>S-yI4kD5Rj;-OG%rtG!`K0IhW#1w?oc-%tt2zJrM6*N=^B%Mmmyg! z21cWxa8CU^qRA;dmZwX8hxM@S`?oyY5BXqp<=tvj#eV*_H@c6Bf`=4O<+5<6Oh4UK z`+~Bp;%xTxE!jRDOOP#2x{H}^O~;>dGIHwI>jJl4G%u!o>`lzj%CVw-MRDNERz<5&8C9u4E;W0%zF9&%XebARk8Y59`e_Nggd+7L;3vCL5_4z zL=6|=#m9v8+;Y^O_1LYETqfh5*yLj8F_nsd^qZ|L@pGT~(LM!`_%Y|jS2%f}8L&i;9cHYL;V*9A<%McvUaCPfR8L{`7%UM-0jV z+*ycZq49VWsmlNHD&wDt7IJ~(eEk#^z@csJr@AW{%&2P2+Ftz>R8pqKJ)?F3cXO&5F%nj1WqV|{tV>rln>71IC z1lt?h*chRYT6_!956bFbnv!0*%$F{@zELq?8naYhVncRksdbBS&4IKS8sQuxENQk7 zTgvj$&-^9t-oy4(b6q>da>u5{9MlyuUsnm~z--Wlgb zW(X9FsT5E{5BYH>nE&27N*o0|?f~@XFq8_)Aw>Mdm*0p=3SSb*$nQs@ogGuvXS#nOd_=%tjJe9Xw$IuVk#hERk!O$QB!98fO1WT<*WMeP~rM*mxn%s|5s&9#jFs~c+ zLV-p+=YO>%I!WP+o1b^ooHjZ&WY)@?xV=xE7IsD)EshZSfATyoOI`yRjz}dT90J<< zLzEAsR=;luysaCc`)kxp3+@pm->#7#{=m;4f%rPmqGqNzXl|~t)_7~n8Vg4?l>B^r=-Xg&aBS1^!`@8CDBMPV3;$e<~+39FJ+auZS2f~Y+a(4CwBr` z)ccuaQCEAU-ka??J+lB^xnt*@&lFC7_ZVlyZCqZ)a+B|nI;BcKic4CzEJNT|9-c{a z>sM|px!(7c)3<~Ewq!HNjq@aOFSRwU9DIBTnoZ(M;TOhLpqE^ead^RS2qUfWVuA~Q zZhhY1f238$1{1szvR1a}Uv*xbBZ;|8`;@ zpU{Z&-u$#1!4ivb3;O5&;E0;h_l9@EA|hGz!zcz)u9mWs0iG^xJ|>OEErs*#ztpN{ z>^MfQ8nJd$*zSNV0kHBfIKj1Fw{cs|xovU~ybQC~+%*Me{zJWj63~LP@&AJqR zG(-d!utqOF^|q1V`Az;kdHJhPGJQ}0VlTGf8D2uQ=lRlo?(u+(_o9sE8nH$U!T!u4 zES3VYw4dXnW#OmPm^v&K4OtY0N9h8>IT2&jCz~h!{aGyPIxtzamGU@5S zC9Bg*$Qoc{9hvE&$S&a6d&ET&8GeyPKDM^SCxNXsnBzRubao%ZbWp8$San?ednox~ zZz@Sfw?;aG>2z2DrmX3pFpgo0UHAPMrGi0`;q5dFe~-h( zivkdU+5NMUNa;_Oo2hiTt#=_OkjvKyI)4^FayvKI{7dSTNUy9~z5D zH%ISC7cVhBOz@n!w4whI3B}XETf`fE_5tMKhqnv^*0=J&MR1H*;wMOMoZ$^sei9`uQZl<>@*{gMc%BYi<##WiASLw$oRBU5&2jnD<{~&`$}OmxUQwp0RZK7 zWO^nWho5I>x3ucj#UU5#EbU>1P*i06n})A!!n7jimnlNtmkf2`M-Y<^32kegwc!th z=^Diq>!|u6*h*v5T~;4gW9`T_T|z-OLLI{MtXU{bT+1R#-=z!vwXi!(%x!*}?RMi)WNGQi!)4s(4z#Kxo-|h56fp=nLX?}HQ(EvDkTe&|! zP(G(WKJ1_SlRQj{55+?%wjpsL`=d^%6pgG+PbbZcy<%aH`VmElm2A9MZ=t>1+?Hg0 zibXf&WF4<=zH}Nr+=Q7XPk6BUK`mnI1AoupVmX5d-ANo)Gs#5Md^L{#v{7=NJWPM* zLQof8KvvAPgJF0M30!8%{{UcmxU5m6{w-r@XRtm=GU9hG9m9+P8*=wSXHxtjYZDw8 zh_@uzrYc=?|2$0r zm0=S>W+MH616n|`3tVvo#65>()yD4qhf*Y~K_UkO40aKLuwQPLJQ#=duAY*8I@IwB z@5J`$EI%qc!H3A*S9rhml@-!t@n+h+sTAtGk$!_$qk?;v>2V4qDv!zuE3oDL)l05@ z4U5)AG|U3l@er`=4O}{8Ac(TqiGRw?Z@?Z5-kLl^egm24&mhr`};v^fnaO}<&6PLkcfpty=fCZ^%ZtT5s!U~R) zW1mgqGR5Gqqimg*I*^Y?#c=c+(W6`SS#Uv|Zoxn(phwmHg7;&%qC4R@uORS+FsU4O zE@66gGjcH5ijw){D!~%HwsdD(&ADE?&!-9_kcv0%U^-3juYLDMsXWOO`rF6CK6Fd5 zxDr5=oUs!a*l3Et_$j>z4P6&*g<-^Ue5=YuxTHJt+~z#u=%n%)8VFGv-@(nTe-MB5 z(cu^d^zY-T_HjjAnGG~eqg5BTjoD6&uQ2=EhTwN!hJ>aRg>bEY2M-X?ywT$`KoM9KK}~ zv$`x?oBRq5ZOytvhLruK&Zyt`cC@3Kf6I{@fPEmqbKcd=35NxiWb7t#?K%i8DZ9MT+Bp}Sys93%=_Qd)@R8>cZPUu?yj4l95Ps*kz5Y$a1|}bm{THB z=DA>vD7lSCEo=AgmOklE=vKn=>!&?&^aI=M`WJ*?bwhq@R5 zj-x*O*HC^pY61d36$IErhQ$6*r(H6Jb-A4Il`d9==4jcTfS_8?w9JM>*J=Y5s0r6gT~RUHotMuLs=)=rRS}Ts7PAP+4rz*v_F?ipQV^ zQ?~g#SN%PVG)*Q3>?&?^Q98|S)*w_M`pdQ1anb(lhX9pWTXXi^ou?Vz>2R-$Nxp%w zMq;%BekWJ~KVOElqgkZ@FZ(K3oP$YzL2kVSMV2^T!+yedSl2k44V^S|g2a+jYi1m6 zXzg5!V13Ge`tioJEB_;N#F}w8QSDZ=2@hoF>pmtMQhgHGV!r7KAAIno@~{-JgJ3n_ zTQo?nYW@cbhA*ZlzzmeUtPte}aC375Ue_1zp$U3|J>RZ>j|&UdQdu->ZypLAG)*IZ zb^42#$FwWml9i*N*+W)b0u4IkBEb zL5zt$K0111sQ8uViq&wJsX4~MfFxr~YRgnm2c4!Giw#hnMwoK+tv_;=4W7wmj8y0m zE^p^9pg#VYE!`WUU($3BS(g`{a5R=6;anvNYwL0jk%Wde%a*>a=7a{I&D$Jx;Ddq< zHkweCTOEZy)+B1Sp=NNb3xwFZgqR7UfQD8kAtIO-jll}IzFRxO6~PU9@)yu28{GT{bFp+jJOpY2%(n!a8= znKcLqH`SHh2lsL*P4Y_M2;aYrrAeJZDLn=VOGEqf;B0OcFEScLVbW+oLu1oxb@n1z zmk8SpyDz|M!!N6ZoD55c!*IVa-q+U6Y>vD(ztUVyuVn9qmy6}*(a$x3e`d_KlWWFT zegt4GYa8^dvlRgx9*^sM@J0Ci%b((+{xe1Gv(E7TPCdTed)`r8roTHT`i%a4J26WR(yQ!JBowta9 znY6mvG2GfoWylx6b7a<8@nsNplg#Q@Xi1&y?h}%mEoK20>gs=SQS^iM3%j?-b(tP# zq`7|LcfRbds=J_q7VuxjZS$I%>QUV>a1}<665dBC?Pq&icMR8pM<9|dUM+J|}q8_WEz+X}ddc)8jv z(|m_EjhKOs^EF1-$h$5Ag6V&^*PkG#aVngPXpzX7Kt6SH1nvE-t#kTY@2_)^E)&I( zwP0``cswub6nL`}>RttBxCuTie{_M=RzRIO6#Ndit2yFmBt1p69st|3deStIUwZ+O8)za^=nBi*}`GNV#Tkm=svMzbs*5p+uoo9@GbdX!Co>dhy=`l+;ylTgw80*=#3m;}2Niq4St5{`t?a zZrZjtdfFL0-HLp-KnP~hP@|d?mNa`YSx^iv6<9H!{TG{pr5;$nOZ~ua!8iC%n|_5X zm3)S5^p?(01gSx>oN1@YX*TR8COu-KZ}0&3rZVrccN#t6w7|_2D&5f$&o@e^4eJ7Q zmZ~E*-v{S_#|OI| zSXPc+eFT}vKw4!iA!oeb9j_uH*v;5|=|zXR!`V=NkIsaIhW;kC-wVd4*1?I4MCJ#e z4_}W5N?v`B7e{8^TOf`5&Gw{ANWr&D`v@L z|AdLl(6%H^r=WN6JCLMw^oyLQ95)_NOF9#0`7gU8T>K{3bF9f6_9VTseu~k3;ch&E zAqUAN^Mxs2^}~GQ!*fKE+;H;*WD>A#LAtH)1B#iyPmHlwstx>vdP!l{>lP|v9v%=} z@-^2=p93Wemd0U6*E)U-I@h}?`vnRlG&htgB&FxWW~Ri^Xx%e8r=)J)fN%g25V|>2 z{?8nnyw-uf+krTy>z*(fe;q?^Tx23PjM&PbK?sanl>_ruBE@xTIV$HH)eF;30T%tAwtOO75oArfxRWi*A};1g`jvb6|gSqnsy z-2gW^DU`3sW?TcXON{uP3~<1$kE7+tpIve}#1-N9?Fzyb8bkcNP)u>e$N&j@g+7Y9 zmO_Qze8L-r9=J!E=$EAM2bC(`D-I=nL3#ORZBR4M7xsXDjl1F=xO=ea z`numnl<>w7dhY8lN7jbF7fJ~&o!qY{e@_PkC!=_=#PQ9hmK^^20rfZ!Pmf zFKI1Xq#J9stxfz>N7qZYJIuE;X|@wJ8k(|9#$#@(3cREw?p3E8R%Y5)T(5#4e8rua zLTg4P{t5=tXs1QDiZlW?E(##n5R`1@R)t0nXg5L*Ep|)JDXH9;n9j$eSu*&?FkvOH$|#5R-p(L$UkI+O{36@aR{Y*%9|(7dp~jxCdFkN zk4+QeZP;l+m#3vOyq1kIcs{cV1u8!xlYcYBGSW5Xn@{(xsu2SB8WKK>3OO$GW`zF> zDUqgm+Ztjnyf0`tT$~R@#oZzVxNgv4etF^xf$nTNd4069x@_Q&*9^Vy=VzPmPws3U zQ@R)je+5IptB-E->Sc&^adN7-bb+8JmJXQvl5ap0%dYOAOJ-MvGDs3#T@Z-va zmW5yIClt0WXk2y5WeF_~2Zge`s?-h@|84mF7|JVM^xrznWQB%} zT3P*7lRL>t{S)Yfv1Gyc1x>)@w(At`IzLvtQ?ya=-)sk62*V-nnlDSt)$}{qheBo8 zj*;l9tI;%>W^wJ&6`=XDwUc=p@G?C!+X}Ykg|xMkaT}Kd5U-O~F=9!~d6|({_T_s~ z%t@IONT5H{rt>hXA(|LUk?fb`C6N;-{H5Fpw7|3Wn_uD38h!5`ED4~B_Z}Xr$;?2Y z$&!L~PKAmg`10;rvav#Otaz#G2(rObX)^c?+6?)%`ujd|blTO=tP<#vg~R zva?iGq1Ft{<>*l;=j-NN&hC

H7%5_#vwkEIZFND1oH7}=ERBhB6oRAf;_Xz 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\"},\"name\":\"text - 3\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated,*)\\r\\n| extend gradeToday = case((scoreToday_d>=90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project gradeToday, scoreToday_d, Details\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Grade\"}]}},\"leftContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Grade\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated, *) by subject_s \\r\\n| extend Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project scoreToday_d, subject_s, Details\\r\\n| limit 1\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Score\"}]}},\"leftContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Score\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll'and subject_s == '{Domain}'\\r\\n| project-rename Date = dateToday_s , Score = scoreToday_d \\r\\n| summarize arg_max(TimeGenerated, *) by Date \\r\\n| project Date=format_datetime(todatetime(Date), 'yyyy-MM-dd'), Score\\r\\n| sort by Date asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Score Trend\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"linechart\",\"chartSettings\":{\"showMetrics\":false,\"customThresholdLine\":\"{Score}\",\"customThresholdLineStyle\":4,\"showDataPoints\":true,\"ySettings\":{\"numberFormatSettings\":{\"unit\":0,\"options\":{\"style\":\"decimal\",\"useGrouping\":true}},\"max\":100}}},\"customWidth\":\"50\",\"name\":\"Score Trend\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == 'Factor' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated,*) by dateToday_s, factorDescription_s\\r\\n| summarize arg_max(dateToday_s,*) by factorDescription_s\\r\\n| extend gradeToday=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), gradeYesterday=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\") \\r\\n| project Factor_Name_s, factorDescription_s, gradeToday, scoreToday_d, scoreChange_d, gradeYesterday, scoreYesterday_d, dateToday_s \\r\\n| project-rename Description =factorDescription_s, [\\\"Current Grade\\\"] = gradeToday, [\\\"Current Score\\\"] = scoreToday_d, [\\\"Latest Score Change\\\"] = scoreChange_d, [\\\"Last Updated Grade\\\"] = gradeYesterday, [\\\"Last Updated Score\\\"] = scoreYesterday_d, [\\\"Date of Current Score\\\"] = dateToday_s, Factor = Factor_Name_s \",\"size\":0,\"showAnalytics\":true,\"title\":\"My Scorecard Factors\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Date of Current Score\",\"formatter\":6}],\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"name\":\"My Scorecard Factors\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| summarize [\\\"Issue Count\\\"]= count() by Factor \",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Count by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"barchart\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend issue_name=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5)\\r\\n| summarize count() by severity_value_s, serverity_priority\\r\\n| sort by serverity_priority asc\\r\\n| project-away serverity_priority\\r\\n| render barchart\\r\\n\",\"size\":0,\"title\":\"Issue Types by Severity\",\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"graphSettings\":{\"type\":0,\"topContent\":{\"columnMatch\":\"severity_value_s\",\"formatter\":1},\"centerContent\":{\"columnMatch\":\"adware installation\",\"formatter\":1,\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}},\"chartSettings\":{\"showLegend\":true,\"seriesLabelSettings\":[{\"seriesName\":\"high\",\"label\":\"High\"},{\"seriesName\":\"medium\",\"label\":\"Medium\"},{\"seriesName\":\"low\",\"label\":\"Low\"},{\"seriesName\":\"info\",\"label\":\"Info\"},{\"seriesName\":\"positive\",\"label\":\"Positive\"}],\"customThresholdLine\":\"{issue_name}\",\"customThresholdLineStyle\":0},\"mapSettings\":{\"locInfo\":\"LatLong\",\"sizeSettings\":\"adware installation\",\"sizeAggregation\":\"Sum\",\"legendMetric\":\"adware installation\",\"legendAggregation\":\"Sum\",\"itemColorSettings\":{\"type\":\"heatmap\",\"colorAggregation\":\"Sum\",\"nodeColorField\":\"adware installation\",\"heatmapPalette\":\"greenRed\"}}},\"name\":\"Issue Types by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"My Scorecard\"},\"name\":\"My Scorecard\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Vendor Scores\",\"style\":\"{setTab}\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8ebc23fe-ade3-4318-8635-24bb841f718b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"72d22203-f3dd-4557-9605-5b6ca4a4e6c0\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":2,\"description\":\"Select your company domain\",\"isRequired\":true,\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(subject_s)\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 13\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"624e2391-ad46-416c-9af4-f735c1114b84\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"91c18b81-401d-4b6a-a9ba-e6780c6fee61\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c603e74f-d591-4788-b95b-1370a2b98024\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == \\\"OverAll\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and subject_s != '{Domain}'\\r\\n| summarize arg_max(TimeGenerated, *) by dateToday_s, subject_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, portfolioName_s \\r\\n| extend [\\\"Current Grade\\\"]=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), [\\\"Last Updated Grade\\\"]=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\"), Industry=strcat_array(split(industry_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors')\\r\\n| project subject_s, portfolioName_s, Industry, [\\\"Date of Current Score\\\"] = format_datetime(todatetime(dateToday_s), 'yyyy-MM-dd'), scoreToday_d, [\\\"Current Grade\\\"], scoreYesterday_d, ['Last Updated Grade'], Details \\r\\n| project-rename Company = subject_s , [\\\"Current Score\\\"] = scoreToday_d, [\\\"Last Updated Score\\\"] = scoreYesterday_d \\r\\n| sort by Company asc, portfolioName_s asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Company\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\",\"linkIsContextBlade\":false}}],\"rowLimit\":10000,\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"name\":\"Top Level Grade and Score by Company\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a38a4cff-47df-431d-a31e-e5a7b9739786\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardFactor\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct Factor_Name_s\\r\\n| sort by Factor_Name_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 11\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0fe3d2b0-fcbd-4c3f-80e6-29e39f047743\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Grade\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"A\\\", \\\"label\\\":\\\"A\\\"},\\r\\n { \\\"value\\\":\\\"B\\\", \\\"label\\\":\\\"B\\\"},\\r\\n { \\\"value\\\":\\\"C\\\", \\\"label\\\":\\\"C\\\"},\\r\\n { \\\"value\\\":\\\"D\\\", \\\"label\\\":\\\"D\\\" },\\r\\n { \\\"value\\\":\\\"F\\\", \\\"label\\\":\\\"F\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 12\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == \\\"Factor\\\" and subject_s != '{Domain}' and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(TimeGenerated, *) by dateToday_s, subject_s, Factor_Name_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, Factor_Name_s, portfolioName_s\\r\\n| extend [\\\"Current Grade\\\"] = case(scoreToday_d>=90, \\\"A\\\", scoreToday_d>=80 and scoreToday_d<=89, \\\"B\\\", scoreToday_d>=70 and scoreToday_d<=79, \\\"C\\\", scoreToday_d>=60 and scoreToday_d<=69, \\\"D\\\", \\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors') \\r\\n| where ('*' in ({Factor}) or Factor_Name_s in ({Factor})) and [\\\"Current Grade\\\"] in ({Grade})\\r\\n| project subject_s, portfolioName_s, Factor_Name_s, factorDescription_s , scoreToday_d, [\\\"Current Grade\\\"], Details \\r\\n| project-rename Company = subject_s, Factor = Factor_Name_s, Description = factorDescription_s, [\\\"Current Score\\\"] = scoreToday_d\\r\\n| sort by Factor asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000}},\"name\":\"Top Level Grade and Score by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"f952c797-c056-446e-8ce1-4495673c337d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"IssueType\",\"label\":\"Issue Type\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend issue_type = strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") \\r\\n| distinct issue_type\\r\\n| sort by issue_type asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 9\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73302a85-fb1b-43cf-8c7f-dfbebd6eb167\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and subject_s != '{Domain}' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(issueName_s), src = arg_max(date_s,Factor_s) by issueType_s, subject_s, severity_value_s\\r\\n| extend [\\\"Issue Type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") , Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| where ('*' in ({IssueType}) or [\\\"Issue Type\\\"] in ({IssueType})) \\r\\n| project subject_s, Severity, [\\\"Issue Type\\\"], [\\\"Findings Count\\\"], [\\\"Issue Count\\\"], Details \\r\\n| order by [\\\"Issue Type\\\"] asc, subject_s asc\\r\\n| project-rename Company=subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true,\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Vendor Scores\"},\"name\":\"Vendor Scores\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Active Issues\",\"style\":\"{setTab}\"},\"name\":\"Active Issues\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"6239b6b6-1b0c-4d82-9599-bcb3155a8869\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"99a0579a-77d5-4693-a099-c1b7dd688c0d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e6981875-d72c-486f-baea-52e1e762143f\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"95c35610-dd13-45f0-bdf4-dae3008215a7\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| distinct value=Factor_s, lable=factor\\r\\n| sort by lable asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"34f6058c-86eb-45e1-8684-ad1db584019a\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"bd48be36-fe76-4b7d-be98-fc3ac56f6759\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 11\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Active Issues will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 11\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and ('*' in ({Severity}) or severity_value_s in ({Severity}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize arg_max(date_s,*), src = arg_max(date_s,Factor_s),[\\\"Findings Count\\\"] = sum(findingsCount_d), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s\\r\\n| join kind=leftouter (SecurityScorecardFactor \\r\\n | distinct Factor_s,factorDescription_s\\r\\n | project Factor_s, factorDescription_s) on Factor_s\\r\\n| extend severity_index=case((severity_value_s == \\\"high\\\"),1,(severity_value_s == \\\"medium\\\"),2,(severity_value_s == \\\"low\\\"),3,(severity_value_s == \\\"info\\\"),4,5), severity_value_s=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"), [\\\"Issue type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s)\\r\\n| sort by severity_index asc, findingsCount_d desc\\r\\n| project [\\\"Issue type\\\"], Factor, severity_value_s, factorDescription_s, [\\\"Findings Count\\\"], Active, Resolved, Details\\r\\n| project-rename Description = factorDescription_s, Severity = severity_value_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Active Issues\",\"timeContextFromParameter\":\"Timer\",\"exportParameterName\":\"activeissues\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"Sevirity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000}},\"name\":\"Active Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Issue Count\\\"] = count(issueType_s) by Factor_s \\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| project Factor, [\\\"Issue Count\\\"] \\r\\n\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Types by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize count() by severity_value_s \\r\\n| extend severity_value_s = case((severity_value_s == 'info'), \\\"Info\\\",(severity_value_s == 'low'), \\\"Low\\\",(severity_value_s == 'medium'), \\\"Medium\\\",(severity_value_s == 'high'), \\\"High\\\", (severity_value_s == 'positive'), \\\"Positive\\\", severity_value_s)\\r\\n| render piechart\",\"size\":3,\"showAnalytics\":true,\"title\":\"Count by Severity\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\"},\"name\":\"Count by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Active Issues\"},\"name\":\"Active Issues\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (CVE)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a30af542-54cd-4a92-ac85-e094c9cc1c43\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a3195f85-f04f-422c-b233-f9bd8a357b8b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"CVE\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"service_vuln_host_high\\\", \\\"label\\\":\\\"Service Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"service_vuln_host_low\\\", \\\"label\\\":\\\"Service Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_high\\\", \\\"label\\\":\\\"Patching Cadence High\\\" },\\r\\n { \\\"value\\\":\\\"patching_cadence_low\\\", \\\"label\\\":\\\"Patching Cadence Low\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_medium\\\", \\\"label\\\":\\\"Patching Cadence Medium\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_high\\\", \\\"label\\\":\\\"Web Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"web_vuln_host_low\\\", \\\"label\\\":\\\"Web Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_medium\\\", \\\"label\\\":\\\"Web Vuln Host Medium\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"CVE\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0f2ad534-e343-44c2-a3ff-0d1d2c7916c5\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"55320f6b-3583-440d-977f-33ceffc07d94\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"070f384d-1ff0-49c9-8f3f-f121e78811a2\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and issueType_s in ({CVE}) and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s\\r\\n| extend CVE=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), severity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\", severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s), Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| sort by CVE asc, severity_priority asc, subject_s asc\\r\\n| project subject_s, CVE, Factor, Severity, ['Findings Count'], [\\\"Issue Count\\\"], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"turquoise\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (CVE)\"},\"name\":\"Issues per Vendor (CVE)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (Ransomware)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c9b54d32-38cd-4b08-8dd6-4be29b019c80\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"168555cd-afbe-457a-81c1-a68663c51823\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Ransomware\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"tls_weal_cipher\\\", \\\"label\\\":\\\"Tls Weal Cipher\\\"},\\r\\n { \\\"value\\\":\\\"exposed_personal_information_info\\\", \\\"label\\\":\\\"Exposed Personal Information Info\\\" },\\r\\n { \\\"value\\\":\\\"outdated_browser\\\", \\\"label\\\":\\\"Outdated Browser\\\"},\\r\\n { \\\"value\\\":\\\"csp_no_policy_v2\\\", \\\"label\\\":\\\"Csp No Policy V2\\\" },\\r\\n { \\\"value\\\":\\\"exposed_personal_information\\\", \\\"label\\\":\\\"Exposed Personal Information\\\"},\\r\\n { \\\"value\\\":\\\"ip_count_means\\\", \\\"label\\\":\\\"Ip Count Means\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"hsts_incorrect_v2\\\", \\\"label\\\":\\\"Hsts Incorrect V2\\\" },\\r\\n { \\\"value\\\":\\\"unsafe_sri_v2\\\", \\\"label\\\":\\\"Unsafe Sri V2\\\"},\\r\\n { \\\"value\\\":\\\"leaked_credentials\\\", \\\"label\\\":\\\"Leaked Credentials\\\"},\\r\\n { \\\"value\\\":\\\"x_frame_options_incorrect_v2\\\", \\\"label\\\":\\\"X Frame Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_xss_protection_incorrect_v2\\\", \\\"label\\\":\\\"X Xss Protection Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_content_type_options_incorrect_v2\\\", \\\"label\\\":\\\"X Content Type Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_no_revocation\\\", \\\"label\\\":\\\"Tlscert No Revocation\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_expired\\\", \\\"label\\\":\\\"Tlscert Expired\\\"},\\r\\n { \\\"value\\\":\\\"outdated_os\\\", \\\"label\\\":\\\"Outdated Os\\\"},\\r\\n { \\\"value\\\":\\\"tls_weak_protocol\\\", \\\"label\\\":\\\"Tls Weak Protocol\\\"},\\r\\n { \\\"value\\\":\\\"domain_missing_https_v2\\\", \\\"label\\\":\\\"Domain Missing Https V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_excessive_expiration\\\", \\\"label\\\":\\\"Tlscert Excessive Expiration\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Ransomware\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"7bf4c309-6e2b-4619-9253-e85808486e75\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ee929211-b34e-4369-905b-cb4d87bf6364\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8d9dcdcc-8c93-4b47-a2e1-880ffea2a31e\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and issueType_s in ({Ransomware})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d),[\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s \\r\\n| extend Ransomware=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| project subject_s, Ransomware, Severity, ['Findings Count'], ['Issue Count'], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\\r\\n| sort by Ransomware asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"drilldown_url\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"details\"}}],\"rowLimit\":10000}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (Ransomware)\"},\"name\":\"Issues per Vendor (Ransomware)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Spotlight\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73978413-5a37-4814-b4fc-4143999f13ec\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73bc33a2-eb41-4433-9b1d-59930d7ddf3d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ae9eff1e-6b7b-4d64-9516-30ea5bc5fb17\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"d9274665-9d9c-417b-9d3f-03162538cf92\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend label = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"),value = Factor_s\\r\\n| distinct value, label\\r\\n| sort by label asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"485b4de7-9cd5-4e5e-b2d4-da7f921ff61c\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s =='OverAll' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(dateToday_s,*) by subject_s\\r\\n| extend Grade = case((scoreToday_d >= 90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\") \\r\\n| project Grade, subject_s, scoreToday_d\\r\\n| project-rename Company = subject_s, Score = scoreToday_d\\r\\n| sort by Score asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Worst Performing Companies\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"40\",\"name\":\"Worst Performing Companies\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*), [\\\"Company Count\\\"] = dcount(subject_s,4) by issueName_s, severity_value_s, issueType_s, Factor_s\\r\\n| extend serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), severity_value=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s) \\r\\n| extend Issues=trim(@\\\"'\\\",issueName_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| sort by serverity_priority asc, [\\\"Company Count\\\"] desc\\r\\n| project Severity = severity_value, Issues, Factor = Factor, [\\\"Company Count\\\"]\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Critical Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"60\",\"name\":\"Most Critical Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e316e111-37ee-404b-8feb-920a6147bf30\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue \\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend totalcount = toscalar(SecurityScorecardIssue | summarize dcount(subject_s))\\r\\n| summarize subject = dcount(subject_s), totalCount = max(totalcount) by issueName_s, issueType_s, Factor_s\\r\\n| extend [\\\"% of Portfolio Affected\\\"] = round((todouble(subject)/todouble(totalCount))*100,0)\\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| project Factor, issueName_s, [\\\"% of Portfolio Affected\\\"]\\r\\n| sort by [\\\"% of Portfolio Affected\\\"] desc\\r\\n| project-rename Issues = issueName_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Common Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"% of Portfolio Affected\",\"formatter\":3,\"formatOptions\":{\"min\":0,\"max\":100,\"palette\":\"redDark\"}}]}},\"name\":\"Most Common Issues\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Spotlight\"},\"name\":\"Spotlight\"}]},\"name\":\"Main\",\"styleSettings\":{\"showBorder\":true}}],\"fromTemplateId\":\"sentinel-SecurityScorecardWorkbook\",\"$schema\":\"https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json\"}\n", + "serializedData": "{\"version\":\"Notebook/1.0\",\"items\":[{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":11,\"content\":{\"version\":\"LinkItem/1.0\",\"style\":\"tabs\",\"links\":[{\"id\":\"06ba5a8f-fe93-4285-9bb4-15fd5c96befe\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"My Scorecard\",\"subTarget\":\"My Scorecard\",\"style\":\"link\"},{\"id\":\"ce6e0294-f130-4450-9005-8aa9924e6b86\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Vendor Scores\",\"subTarget\":\"Vendor Scores\",\"style\":\"link\"},{\"id\":\"26959e65-a53f-4468-8d14-d0b43d1b899d\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Active Issues\",\"subTarget\":\"Active Issues\",\"style\":\"link\"},{\"id\":\"97757d2a-eba1-4ee9-909b-47e9653e1407\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Issues per Vendor (CVE)\",\"subTarget\":\"Issues per Vendor (CVE)\",\"style\":\"link\"},{\"id\":\"73e85106-4dde-4c92-8479-c8720d8604de\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Issues per Vendor (Ransomware)\",\"subTarget\":\"Issues per Vendor (Ransomware)\",\"style\":\"link\"},{\"id\":\"c915da0c-4bfc-4595-8e1a-700a602f3412\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Spotlight\",\"subTarget\":\"Spotlight\",\"style\":\"link\"}]},\"name\":\"Tabs\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# My Scorecard\",\"style\":\"{setTab}\"},\"name\":\"text - 1\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"309cabc5-5a32-4c1a-b905-cb578ee0e667\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ac778abc-2101-4e66-92da-d11d4b4a8629\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":2,\"description\":\"Your own company domain (My Scorecard). Vendor pages list everyone except this company.\",\"isRequired\":false,\"query\":\"SecurityScorecardRatings\\r\\n| where portfolioName_s in ('NA', 'My Scorecard')\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 9\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 3\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated,*)\\r\\n| extend gradeToday = case((scoreToday_d>=90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project gradeToday, scoreToday_d, Details\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Grade\"}]}},\"leftContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Grade\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated, *) by subject_s \\r\\n| extend Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project scoreToday_d, subject_s, Details\\r\\n| limit 1\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Score\"}]}},\"leftContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Score\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll'and subject_s == '{Domain}'\\r\\n| project-rename Date = dateToday_s , Score = scoreToday_d \\r\\n| summarize arg_max(TimeGenerated, *) by Date \\r\\n| project Date=format_datetime(todatetime(Date), 'yyyy-MM-dd'), Score\\r\\n| sort by Date asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Score Trend\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"linechart\",\"chartSettings\":{\"showMetrics\":false,\"customThresholdLine\":\"{Score}\",\"customThresholdLineStyle\":4,\"showDataPoints\":true,\"ySettings\":{\"numberFormatSettings\":{\"unit\":0,\"options\":{\"style\":\"decimal\",\"useGrouping\":true}},\"max\":100}}},\"customWidth\":\"50\",\"name\":\"Score Trend\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == 'Factor' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated,*) by dateToday_s, factorDescription_s\\r\\n| summarize arg_max(dateToday_s,*) by factorDescription_s\\r\\n| extend gradeToday=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), gradeYesterday=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\") \\r\\n| project Factor_Name_s, factorDescription_s, gradeToday, scoreToday_d, scoreChange_d, gradeYesterday, scoreYesterday_d, dateToday_s \\r\\n| project-rename Description =factorDescription_s, [\\\"Current Grade\\\"] = gradeToday, [\\\"Current Score\\\"] = scoreToday_d, [\\\"Latest Score Change\\\"] = scoreChange_d, [\\\"Last Updated Grade\\\"] = gradeYesterday, [\\\"Last Updated Score\\\"] = scoreYesterday_d, [\\\"Date of Current Score\\\"] = dateToday_s, Factor = Factor_Name_s \",\"size\":0,\"showAnalytics\":true,\"title\":\"My Scorecard Factors\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Date of Current Score\",\"formatter\":6}],\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"name\":\"My Scorecard Factors\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| summarize [\\\"Issue Count\\\"]= count() by Factor \",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Count by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"barchart\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend issue_name=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5)\\r\\n| summarize count() by severity_value_s, serverity_priority\\r\\n| sort by serverity_priority asc\\r\\n| project-away serverity_priority\\r\\n| render barchart\\r\\n\",\"size\":0,\"title\":\"Issue Types by Severity\",\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"graphSettings\":{\"type\":0,\"topContent\":{\"columnMatch\":\"severity_value_s\",\"formatter\":1},\"centerContent\":{\"columnMatch\":\"adware installation\",\"formatter\":1,\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}},\"chartSettings\":{\"showLegend\":true,\"seriesLabelSettings\":[{\"seriesName\":\"high\",\"label\":\"High\"},{\"seriesName\":\"medium\",\"label\":\"Medium\"},{\"seriesName\":\"low\",\"label\":\"Low\"},{\"seriesName\":\"info\",\"label\":\"Info\"},{\"seriesName\":\"positive\",\"label\":\"Positive\"}],\"customThresholdLine\":\"{issue_name}\",\"customThresholdLineStyle\":0},\"mapSettings\":{\"locInfo\":\"LatLong\",\"sizeSettings\":\"adware installation\",\"sizeAggregation\":\"Sum\",\"legendMetric\":\"adware installation\",\"legendAggregation\":\"Sum\",\"itemColorSettings\":{\"type\":\"heatmap\",\"colorAggregation\":\"Sum\",\"nodeColorField\":\"adware installation\",\"heatmapPalette\":\"greenRed\"}}},\"name\":\"Issue Types by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"My Scorecard\"},\"name\":\"My Scorecard\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Vendor Scores\",\"style\":\"{setTab}\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8ebc23fe-ade3-4318-8635-24bb841f718b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"72d22203-f3dd-4557-9605-5b6ca4a4e6c0\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":2,\"description\":\"Your own company domain (My Scorecard). Vendor pages list everyone except this company.\",\"isRequired\":false,\"query\":\"SecurityScorecardRatings\\r\\n| where portfolioName_s in ('NA', 'My Scorecard')\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 13\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"624e2391-ad46-416c-9af4-f735c1114b84\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"91c18b81-401d-4b6a-a9ba-e6780c6fee61\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c603e74f-d591-4788-b95b-1370a2b98024\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == \\\"OverAll\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and subject_s != '{Domain}'\\r\\n| summarize arg_max(TimeGenerated, *) by dateToday_s, subject_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, portfolioName_s \\r\\n| extend [\\\"Current Grade\\\"]=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), [\\\"Last Updated Grade\\\"]=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\"), Industry=strcat_array(split(industry_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors')\\r\\n| project subject_s, portfolioName_s, Industry, [\\\"Date of Current Score\\\"] = format_datetime(todatetime(dateToday_s), 'yyyy-MM-dd'), scoreToday_d, [\\\"Current Grade\\\"], scoreYesterday_d, ['Last Updated Grade'], Details \\r\\n| project-rename Company = subject_s , [\\\"Current Score\\\"] = scoreToday_d, [\\\"Last Updated Score\\\"] = scoreYesterday_d \\r\\n| sort by Company asc, portfolioName_s asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Company\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\",\"linkIsContextBlade\":false}}],\"rowLimit\":10000,\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"name\":\"Top Level Grade and Score by Company\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a38a4cff-47df-431d-a31e-e5a7b9739786\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardFactor\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct Factor_Name_s\\r\\n| sort by Factor_Name_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 11\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0fe3d2b0-fcbd-4c3f-80e6-29e39f047743\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Grade\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"A\\\", \\\"label\\\":\\\"A\\\"},\\r\\n { \\\"value\\\":\\\"B\\\", \\\"label\\\":\\\"B\\\"},\\r\\n { \\\"value\\\":\\\"C\\\", \\\"label\\\":\\\"C\\\"},\\r\\n { \\\"value\\\":\\\"D\\\", \\\"label\\\":\\\"D\\\" },\\r\\n { \\\"value\\\":\\\"F\\\", \\\"label\\\":\\\"F\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 12\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == \\\"Factor\\\" and subject_s != '{Domain}' and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(TimeGenerated, *) by dateToday_s, subject_s, Factor_Name_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, Factor_Name_s, portfolioName_s\\r\\n| extend [\\\"Current Grade\\\"] = case(scoreToday_d>=90, \\\"A\\\", scoreToday_d>=80 and scoreToday_d<=89, \\\"B\\\", scoreToday_d>=70 and scoreToday_d<=79, \\\"C\\\", scoreToday_d>=60 and scoreToday_d<=69, \\\"D\\\", \\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors') \\r\\n| where ('*' in ({Factor}) or Factor_Name_s in ({Factor})) and [\\\"Current Grade\\\"] in ({Grade})\\r\\n| project subject_s, portfolioName_s, Factor_Name_s, factorDescription_s , scoreToday_d, [\\\"Current Grade\\\"], Details \\r\\n| project-rename Company = subject_s, Factor = Factor_Name_s, Description = factorDescription_s, [\\\"Current Score\\\"] = scoreToday_d\\r\\n| sort by Factor asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000}},\"name\":\"Top Level Grade and Score by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"f952c797-c056-446e-8ce1-4495673c337d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"IssueType\",\"label\":\"Issue Type\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend issue_type = strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") \\r\\n| distinct issue_type\\r\\n| sort by issue_type asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 9\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73302a85-fb1b-43cf-8c7f-dfbebd6eb167\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and subject_s != '{Domain}' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(issueName_s), src = arg_max(date_s,Factor_s) by issueType_s, subject_s, severity_value_s\\r\\n| extend [\\\"Issue Type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") , Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| where ('*' in ({IssueType}) or [\\\"Issue Type\\\"] in ({IssueType})) \\r\\n| project subject_s, Severity, [\\\"Issue Type\\\"], [\\\"Findings Count\\\"], [\\\"Issue Count\\\"], Details \\r\\n| order by [\\\"Issue Type\\\"] asc, subject_s asc\\r\\n| project-rename Company=subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true,\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Vendor Scores\"},\"name\":\"Vendor Scores\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Active Issues\",\"style\":\"{setTab}\"},\"name\":\"Active Issues\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"6239b6b6-1b0c-4d82-9599-bcb3155a8869\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"99a0579a-77d5-4693-a099-c1b7dd688c0d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e6981875-d72c-486f-baea-52e1e762143f\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"95c35610-dd13-45f0-bdf4-dae3008215a7\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| distinct value=Factor_s, lable=factor\\r\\n| sort by lable asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"34f6058c-86eb-45e1-8684-ad1db584019a\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"bd48be36-fe76-4b7d-be98-fc3ac56f6759\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 11\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Active Issues will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 11\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and ('*' in ({Severity}) or severity_value_s in ({Severity}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize arg_max(date_s,*), src = arg_max(date_s,Factor_s),[\\\"Findings Count\\\"] = sum(findingsCount_d), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s\\r\\n| join kind=leftouter (SecurityScorecardFactor \\r\\n | distinct Factor_s,factorDescription_s\\r\\n | project Factor_s, factorDescription_s) on Factor_s\\r\\n| extend severity_index=case((severity_value_s == \\\"high\\\"),1,(severity_value_s == \\\"medium\\\"),2,(severity_value_s == \\\"low\\\"),3,(severity_value_s == \\\"info\\\"),4,5), severity_value_s=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"), [\\\"Issue type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s)\\r\\n| sort by severity_index asc, findingsCount_d desc\\r\\n| project [\\\"Issue type\\\"], Factor, severity_value_s, factorDescription_s, [\\\"Findings Count\\\"], Active, Resolved, Details\\r\\n| project-rename Description = factorDescription_s, Severity = severity_value_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Active Issues\",\"timeContextFromParameter\":\"Timer\",\"exportParameterName\":\"activeissues\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"Sevirity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000}},\"name\":\"Active Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Issue Count\\\"] = count(issueType_s) by Factor_s \\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| project Factor, [\\\"Issue Count\\\"] \\r\\n\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Types by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize count() by severity_value_s \\r\\n| extend severity_value_s = case((severity_value_s == 'info'), \\\"Info\\\",(severity_value_s == 'low'), \\\"Low\\\",(severity_value_s == 'medium'), \\\"Medium\\\",(severity_value_s == 'high'), \\\"High\\\", (severity_value_s == 'positive'), \\\"Positive\\\", severity_value_s)\\r\\n| render piechart\",\"size\":3,\"showAnalytics\":true,\"title\":\"Count by Severity\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\"},\"name\":\"Count by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Active Issues\"},\"name\":\"Active Issues\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (CVE)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a30af542-54cd-4a92-ac85-e094c9cc1c43\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a3195f85-f04f-422c-b233-f9bd8a357b8b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"CVE\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"service_vuln_host_high\\\", \\\"label\\\":\\\"Service Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"service_vuln_host_low\\\", \\\"label\\\":\\\"Service Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_high\\\", \\\"label\\\":\\\"Patching Cadence High\\\" },\\r\\n { \\\"value\\\":\\\"patching_cadence_low\\\", \\\"label\\\":\\\"Patching Cadence Low\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_medium\\\", \\\"label\\\":\\\"Patching Cadence Medium\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_high\\\", \\\"label\\\":\\\"Web Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"web_vuln_host_low\\\", \\\"label\\\":\\\"Web Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_medium\\\", \\\"label\\\":\\\"Web Vuln Host Medium\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"CVE\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0f2ad534-e343-44c2-a3ff-0d1d2c7916c5\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"55320f6b-3583-440d-977f-33ceffc07d94\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"070f384d-1ff0-49c9-8f3f-f121e78811a2\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and issueType_s in ({CVE}) and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s\\r\\n| extend CVE=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), severity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\", severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s), Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| sort by CVE asc, severity_priority asc, subject_s asc\\r\\n| project subject_s, CVE, Factor, Severity, ['Findings Count'], [\\\"Issue Count\\\"], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"turquoise\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (CVE)\"},\"name\":\"Issues per Vendor (CVE)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (Ransomware)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c9b54d32-38cd-4b08-8dd6-4be29b019c80\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"168555cd-afbe-457a-81c1-a68663c51823\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Ransomware\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"tls_weal_cipher\\\", \\\"label\\\":\\\"Tls Weal Cipher\\\"},\\r\\n { \\\"value\\\":\\\"exposed_personal_information_info\\\", \\\"label\\\":\\\"Exposed Personal Information Info\\\" },\\r\\n { \\\"value\\\":\\\"outdated_browser\\\", \\\"label\\\":\\\"Outdated Browser\\\"},\\r\\n { \\\"value\\\":\\\"csp_no_policy_v2\\\", \\\"label\\\":\\\"Csp No Policy V2\\\" },\\r\\n { \\\"value\\\":\\\"exposed_personal_information\\\", \\\"label\\\":\\\"Exposed Personal Information\\\"},\\r\\n { \\\"value\\\":\\\"ip_count_means\\\", \\\"label\\\":\\\"Ip Count Means\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"hsts_incorrect_v2\\\", \\\"label\\\":\\\"Hsts Incorrect V2\\\" },\\r\\n { \\\"value\\\":\\\"unsafe_sri_v2\\\", \\\"label\\\":\\\"Unsafe Sri V2\\\"},\\r\\n { \\\"value\\\":\\\"leaked_credentials\\\", \\\"label\\\":\\\"Leaked Credentials\\\"},\\r\\n { \\\"value\\\":\\\"x_frame_options_incorrect_v2\\\", \\\"label\\\":\\\"X Frame Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_xss_protection_incorrect_v2\\\", \\\"label\\\":\\\"X Xss Protection Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_content_type_options_incorrect_v2\\\", \\\"label\\\":\\\"X Content Type Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_no_revocation\\\", \\\"label\\\":\\\"Tlscert No Revocation\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_expired\\\", \\\"label\\\":\\\"Tlscert Expired\\\"},\\r\\n { \\\"value\\\":\\\"outdated_os\\\", \\\"label\\\":\\\"Outdated Os\\\"},\\r\\n { \\\"value\\\":\\\"tls_weak_protocol\\\", \\\"label\\\":\\\"Tls Weak Protocol\\\"},\\r\\n { \\\"value\\\":\\\"domain_missing_https_v2\\\", \\\"label\\\":\\\"Domain Missing Https V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_excessive_expiration\\\", \\\"label\\\":\\\"Tlscert Excessive Expiration\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Ransomware\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"7bf4c309-6e2b-4619-9253-e85808486e75\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ee929211-b34e-4369-905b-cb4d87bf6364\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8d9dcdcc-8c93-4b47-a2e1-880ffea2a31e\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and issueType_s in ({Ransomware})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d),[\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s \\r\\n| extend Ransomware=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| project subject_s, Ransomware, Severity, ['Findings Count'], ['Issue Count'], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\\r\\n| sort by Ransomware asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"drilldown_url\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"details\"}}],\"rowLimit\":10000}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (Ransomware)\"},\"name\":\"Issues per Vendor (Ransomware)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Spotlight\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73978413-5a37-4814-b4fc-4143999f13ec\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73bc33a2-eb41-4433-9b1d-59930d7ddf3d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ae9eff1e-6b7b-4d64-9516-30ea5bc5fb17\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"d9274665-9d9c-417b-9d3f-03162538cf92\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend label = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"),value = Factor_s\\r\\n| distinct value, label\\r\\n| sort by label asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"485b4de7-9cd5-4e5e-b2d4-da7f921ff61c\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s =='OverAll' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(dateToday_s,*) by subject_s\\r\\n| extend Grade = case((scoreToday_d >= 90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\") \\r\\n| project Grade, subject_s, scoreToday_d\\r\\n| project-rename Company = subject_s, Score = scoreToday_d\\r\\n| sort by Score asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Worst Performing Companies\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"40\",\"name\":\"Worst Performing Companies\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*), [\\\"Company Count\\\"] = dcount(subject_s,4) by issueName_s, severity_value_s, issueType_s, Factor_s\\r\\n| extend serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), severity_value=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s) \\r\\n| extend Issues=trim(@\\\"'\\\",issueName_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| sort by serverity_priority asc, [\\\"Company Count\\\"] desc\\r\\n| project Severity = severity_value, Issues, Factor = Factor, [\\\"Company Count\\\"]\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Critical Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"60\",\"name\":\"Most Critical Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e316e111-37ee-404b-8feb-920a6147bf30\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue \\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend totalcount = toscalar(SecurityScorecardIssue | summarize dcount(subject_s))\\r\\n| summarize subject = dcount(subject_s), totalCount = max(totalcount) by issueName_s, issueType_s, Factor_s\\r\\n| extend [\\\"% of Portfolio Affected\\\"] = round((todouble(subject)/todouble(totalCount))*100,0)\\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| project Factor, issueName_s, [\\\"% of Portfolio Affected\\\"]\\r\\n| sort by [\\\"% of Portfolio Affected\\\"] desc\\r\\n| project-rename Issues = issueName_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Common Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"% of Portfolio Affected\",\"formatter\":3,\"formatOptions\":{\"min\":0,\"max\":100,\"palette\":\"redDark\"}}]}},\"name\":\"Most Common Issues\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Spotlight\"},\"name\":\"Spotlight\"}]},\"name\":\"Main\",\"styleSettings\":{\"showBorder\":true}}],\"fromTemplateId\":\"sentinel-SecurityScorecardWorkbook\",\"$schema\":\"https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json\"}\n", "version": "1.0", "sourceId": "[variables('workspaceResourceId')]", "category": "sentinel" diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json index 7b658665145..d154275876c 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json @@ -166,9 +166,9 @@ "version": "KqlParameterItem/1.0", "name": "Domain", "type": 2, - "description": "Select your company domain", - "isRequired": true, - "query": "SecurityScorecardRatings\r\n| where isnotempty(subject_s)\r\n| distinct subject_s\r\n| sort by subject_s asc", + "description": "Your own company domain (My Scorecard). Vendor pages list everyone except this company.", + "isRequired": false, + "query": "SecurityScorecardRatings\r\n| where portfolioName_s in ('NA', 'My Scorecard')\r\n| distinct subject_s\r\n| sort by subject_s asc", "timeContext": { "durationMs": 0 }, @@ -825,9 +825,9 @@ "version": "KqlParameterItem/1.0", "name": "Domain", "type": 2, - "description": "Select your company domain", - "isRequired": true, - "query": "SecurityScorecardRatings\r\n| where isnotempty(subject_s)\r\n| distinct subject_s\r\n| sort by subject_s asc", + "description": "Your own company domain (My Scorecard). Vendor pages list everyone except this company.", + "isRequired": false, + "query": "SecurityScorecardRatings\r\n| where portfolioName_s in ('NA', 'My Scorecard')\r\n| distinct subject_s\r\n| sort by subject_s asc", "timeContext": { "durationMs": 0 }, From 9af76fb026427c05a9fa0dcb0f36127909139ace Mon Sep 17 00:00:00 2001 From: Shrey Sonar Date: Tue, 21 Jul 2026 16:47:52 +0530 Subject: [PATCH 6/9] Fix duplicated "(using Azure Functions)" suffix on deprecated connector titles The V3 packaging tool appends " (using Azure Functions)" to Function App connector titles, guarding on the plural string "using Azure Functions". The deprecation titles used the singular "(using Azure Function)", so the guard missed and the suffix was appended a second time, rendering as "... (using Azure Function) (using Azure Functions)". Drop the suffix from the source titles and let the packaging tool add it. Repackaged 3.0.0. --- ...curityScorecardFactor_API_FunctionApp.json | 2 +- ...ecurityScorecardIssue_API_FunctionApp.json | 2 +- ...urityScorecardRatings_API_FunctionApp.json | 2 +- .../Package/3.0.0.zip | Bin 32077 -> 32067 bytes .../Package/mainTemplate.json | 18 +++++++++--------- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor/SecurityScorecardFactor_API_FunctionApp.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor/SecurityScorecardFactor_API_FunctionApp.json index 1c44632ee06..02710e74df7 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor/SecurityScorecardFactor_API_FunctionApp.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor/SecurityScorecardFactor_API_FunctionApp.json @@ -1,6 +1,6 @@ { "id": "SecurityScorecardFactorAzureFunctions", - "title": "[DEPRECATED] SecurityScorecard Factor (using Azure Function)", + "title": "[DEPRECATED] SecurityScorecard Factor", "publisher": "SecurityScorecard", "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Factors (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Factors data connector provides the ability for Microsoft Sentinel to import SecurityScorecard factor ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when factor scores change or drop. SecurityScorecard factor ratings are updated daily based on evidence collected across the web.", "graphQueries": [ diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue/SecurityScorecardIssue_API_FunctionApp.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue/SecurityScorecardIssue_API_FunctionApp.json index e8e2e4f01b4..702380f5f33 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue/SecurityScorecardIssue_API_FunctionApp.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue/SecurityScorecardIssue_API_FunctionApp.json @@ -1,6 +1,6 @@ { "id": "SecurityScorecardIssueAzureFunctions", - "title": "[DEPRECATED] SecurityScorecard Issue (using Azure Function)", + "title": "[DEPRECATED] SecurityScorecard Issue", "publisher": "SecurityScorecard", "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Issues (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Issues data connector provides the ability for Microsoft Sentinel to import SecurityScorecard issue data as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when new cybersecurity issues are discovered.", "graphQueries": [ diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings/SecurityScorecardRatings_API_FunctionApp.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings/SecurityScorecardRatings_API_FunctionApp.json index 7acf80d6c9a..d0ab5370295 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings/SecurityScorecardRatings_API_FunctionApp.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings/SecurityScorecardRatings_API_FunctionApp.json @@ -1,6 +1,6 @@ { "id": "SecurityScorecardRatingsAzureFunctions", - "title": "[DEPRECATED] SecurityScorecard Cybersecurity Ratings (using Azure Function)", + "title": "[DEPRECATED] SecurityScorecard Cybersecurity Ratings", "publisher": "SecurityScorecard", "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Ratings (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) data connector provides the ability for Microsoft Sentinel to import SecurityScorecard ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when scores change or drop. SecurityScorecard ratings are updated daily based on evidence collected across the web.", "graphQueries": [ diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip index ff028659a72664520516f1bf4aaa639d4efce457..2a986b0aca11a5875d815ed293f2081f2d506e7c 100644 GIT binary patch delta 28297 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 Y)a@(wKQER`Ligi@De--~cn<9U0J2pon*aa+ delta 28307 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 diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json index 0674dad7b74..648c6c2a28f 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/mainTemplate.json @@ -286,7 +286,7 @@ "properties": { "connectorUiConfig": { "id": "[variables('_uiConfigId1')]", - "title": "[DEPRECATED] SecurityScorecard Cybersecurity Ratings (using Azure Function) (using Azure Functions)", + "title": "[DEPRECATED] SecurityScorecard Cybersecurity Ratings (using Azure Functions)", "publisher": "SecurityScorecard", "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Ratings (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) data connector provides the ability for Microsoft Sentinel to import SecurityScorecard ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when scores change or drop. SecurityScorecard ratings are updated daily based on evidence collected across the web.", "graphQueries": [ @@ -440,7 +440,7 @@ "contentSchemaVersion": "3.0.0", "contentId": "[variables('_dataConnectorContentId1')]", "contentKind": "DataConnector", - "displayName": "[DEPRECATED] SecurityScorecard Cybersecurity Ratings (using Azure Function) (using Azure Functions)", + "displayName": "[DEPRECATED] SecurityScorecard Cybersecurity Ratings (using Azure Functions)", "contentProductId": "[variables('_dataConnectorcontentProductId1')]", "id": "[variables('_dataConnectorcontentProductId1')]", "version": "[variables('dataConnectorVersion1')]" @@ -484,7 +484,7 @@ "kind": "GenericUI", "properties": { "connectorUiConfig": { - "title": "[DEPRECATED] SecurityScorecard Cybersecurity Ratings (using Azure Function) (using Azure Functions)", + "title": "[DEPRECATED] SecurityScorecard Cybersecurity Ratings (using Azure Functions)", "publisher": "SecurityScorecard", "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Ratings (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) data connector provides the ability for Microsoft Sentinel to import SecurityScorecard ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when scores change or drop. SecurityScorecard ratings are updated daily based on evidence collected across the web.", "graphQueries": [ @@ -629,7 +629,7 @@ "properties": { "connectorUiConfig": { "id": "[variables('_uiConfigId2')]", - "title": "[DEPRECATED] SecurityScorecard Factor (using Azure Function) (using Azure Functions)", + "title": "[DEPRECATED] SecurityScorecard Factor (using Azure Functions)", "publisher": "SecurityScorecard", "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Factors (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Factors data connector provides the ability for Microsoft Sentinel to import SecurityScorecard factor ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when factor scores change or drop. SecurityScorecard factor ratings are updated daily based on evidence collected across the web.", "graphQueries": [ @@ -783,7 +783,7 @@ "contentSchemaVersion": "3.0.0", "contentId": "[variables('_dataConnectorContentId2')]", "contentKind": "DataConnector", - "displayName": "[DEPRECATED] SecurityScorecard Factor (using Azure Function) (using Azure Functions)", + "displayName": "[DEPRECATED] SecurityScorecard Factor (using Azure Functions)", "contentProductId": "[variables('_dataConnectorcontentProductId2')]", "id": "[variables('_dataConnectorcontentProductId2')]", "version": "[variables('dataConnectorVersion2')]" @@ -827,7 +827,7 @@ "kind": "GenericUI", "properties": { "connectorUiConfig": { - "title": "[DEPRECATED] SecurityScorecard Factor (using Azure Function) (using Azure Functions)", + "title": "[DEPRECATED] SecurityScorecard Factor (using Azure Functions)", "publisher": "SecurityScorecard", "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Factors (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Factors data connector provides the ability for Microsoft Sentinel to import SecurityScorecard factor ratings as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when factor scores change or drop. SecurityScorecard factor ratings are updated daily based on evidence collected across the web.", "graphQueries": [ @@ -972,7 +972,7 @@ "properties": { "connectorUiConfig": { "id": "[variables('_uiConfigId3')]", - "title": "[DEPRECATED] SecurityScorecard Issue (using Azure Function) (using Azure Functions)", + "title": "[DEPRECATED] SecurityScorecard Issue (using Azure Functions)", "publisher": "SecurityScorecard", "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Issues (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Issues data connector provides the ability for Microsoft Sentinel to import SecurityScorecard issue data as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when new cybersecurity issues are discovered.", "graphQueries": [ @@ -1126,7 +1126,7 @@ "contentSchemaVersion": "3.0.0", "contentId": "[variables('_dataConnectorContentId3')]", "contentKind": "DataConnector", - "displayName": "[DEPRECATED] SecurityScorecard Issue (using Azure Function) (using Azure Functions)", + "displayName": "[DEPRECATED] SecurityScorecard Issue (using Azure Functions)", "contentProductId": "[variables('_dataConnectorcontentProductId3')]", "id": "[variables('_dataConnectorcontentProductId3')]", "version": "[variables('dataConnectorVersion3')]" @@ -1170,7 +1170,7 @@ "kind": "GenericUI", "properties": { "connectorUiConfig": { - "title": "[DEPRECATED] SecurityScorecard Issue (using Azure Function) (using Azure Functions)", + "title": "[DEPRECATED] SecurityScorecard Issue (using Azure Functions)", "publisher": "SecurityScorecard", "descriptionMarkdown": "

NOTE: This data connector has been deprecated. Consider moving to the SecurityScorecard Issues (Codeless) CCF data connector available in the solution, which replaces ingestion via the deprecated HTTP Data Collector API.

\n\nSecurityScorecard is the leader in cybersecurity risk ratings. The [SecurityScorecard](https://www.SecurityScorecard.com/) Issues data connector provides the ability for Microsoft Sentinel to import SecurityScorecard issue data as logs. SecurityScorecard provides ratings for over 12 million companies and domains using countless data points from across the internet. Maintain full awareness of any company's security posture and be able to receive timely updates when new cybersecurity issues are discovered.", "graphQueries": [ From 3c7682264f8de58ac34f788f34013dcbb78ea940 Mon Sep 17 00:00:00 2001 From: Shrey Sonar Date: Tue, 21 Jul 2026 17:24:43 +0530 Subject: [PATCH 7/9] Fix parity-audit blockers: optional Domain param, poll window, Issue dedup - Domain textbox declared no validations block, so the packaging tool fell through to its default and emitted the parameter as {defaultValue: "Domain", minLength: 1}. A user who left the field blank -- as its own label instructs -- submitted "" and failed minLength, taking down the entire connection deployment including the portfolio poller. Adding validations.required:false makes the generated parameter defaultValue "" with no minLength, per CCF_README. - queryWindowInMin 10080 -> 1440 on all six pollers. SecurityScorecard was the only solution in the repository above 1440 (70 others use 1440); the underlying data is daily, so a 7-day window meant either weekly polling or ~7x redundant API volume against rateLimitQPS 1. - Widen the Issue parser dedup key from (id, portfolio_id) to (id, portfolio_id, domain, issue_date). The narrower key collapsed active->resolved state transitions -- breaking the workbook's Active/Resolved sums -- and could collide across companies if event ids are not globally unique. The workbook's own dedup expressions all include subject_s. - factor_score: drop the tolong() wrapper, which floored fractional factor scores. Repackaged 3.0.0. --- ...orecardFactor_DataConnectorDefinition.json | 5 +- ...SecurityScorecardFactor_PollingConfig.json | 6 +- ...corecardIssue_DataConnectorDefinition.json | 5 +- .../SecurityScorecardIssue_PollingConfig.json | 6 +- ...recardRatings_DataConnectorDefinition.json | 5 +- ...ecurityScorecardRatings_PollingConfig.json | 6 +- .../Package/3.0.0.zip | Bin 32067 -> 32106 bytes .../Package/mainTemplate.json | 71 +++++++++++------- .../Parsers/SecurityScorecardFactor.yaml | 2 +- .../Parsers/SecurityScorecardIssue.yaml | 2 +- 10 files changed, 66 insertions(+), 42 deletions(-) diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json index 22b6f3f6a43..f30654816e1 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_DataConnectorDefinition.json @@ -154,7 +154,10 @@ "label": "Your Company Domain (optional - My Scorecard)", "placeholder": "e.g. yourcompany.com - leave blank if not needed", "type": "text", - "name": "Domain" + "name": "Domain", + "validations": { + "required": false + } } } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json index 741e2e5a5ee..44571e80ca2 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardFactor_ccp/SecurityScorecardFactor_PollingConfig.json @@ -28,7 +28,7 @@ "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'), '/portfolios/', parameters('PortfolioId'), '/companies')]", "httpMethod": "GET", - "queryWindowInMin": 10080, + "queryWindowInMin": 1440, "queryTimeFormat": "yyyy-MM-dd", "rateLimitQPS": 1, "retryCount": 3, @@ -61,7 +61,7 @@ "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'), '/companies/$company_domain$/history/factors/score')]", "httpMethod": "GET", - "queryWindowInMin": 10080, + "queryWindowInMin": 1440, "queryTimeFormat": "yyyy-MM-dd", "rateLimitQPS": 1, "retryCount": 3, @@ -119,7 +119,7 @@ "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'), '/companies/', parameters('Domain'), '/history/factors/score')]", "httpMethod": "GET", - "queryWindowInMin": 10080, + "queryWindowInMin": 1440, "queryTimeFormat": "yyyy-MM-dd", "rateLimitQPS": 1, "retryCount": 3, diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json index e7fd17371a0..1e87a187cfd 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_DataConnectorDefinition.json @@ -150,7 +150,10 @@ "label": "Your Company Domain (optional - My Scorecard)", "placeholder": "e.g. yourcompany.com - leave blank if not needed", "type": "text", - "name": "Domain" + "name": "Domain", + "validations": { + "required": false + } } } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json index 6b479bb164e..1669dbebb73 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardIssue_ccp/SecurityScorecardIssue_PollingConfig.json @@ -28,7 +28,7 @@ "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'), '/portfolios/', parameters('PortfolioId'), '/companies')]", "httpMethod": "GET", - "queryWindowInMin": 10080, + "queryWindowInMin": 1440, "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", "rateLimitQPS": 1, "retryCount": 3, @@ -61,7 +61,7 @@ "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'), '/companies/$company_domain$/history/events')]", "httpMethod": "GET", - "queryWindowInMin": 10080, + "queryWindowInMin": 1440, "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", "rateLimitQPS": 1, "retryCount": 3, @@ -119,7 +119,7 @@ "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'), '/companies/', parameters('Domain'), '/history/events')]", "httpMethod": "GET", - "queryWindowInMin": 10080, + "queryWindowInMin": 1440, "queryTimeFormat": "yyyy-MM-ddTHH:mm:ssZ", "rateLimitQPS": 1, "retryCount": 3, diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json index 810f7c24b01..4a41bcec0eb 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_DataConnectorDefinition.json @@ -154,7 +154,10 @@ "label": "Your Company Domain (optional - My Scorecard)", "placeholder": "e.g. yourcompany.com - leave blank if not needed", "type": "text", - "name": "Domain" + "name": "Domain", + "validations": { + "required": false + } } } ] diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json index 35e304f8bef..6203d924657 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Data Connectors/SecurityScorecardRatings_ccp/SecurityScorecardRatings_PollingConfig.json @@ -28,7 +28,7 @@ "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'), '/portfolios/', parameters('PortfolioId'), '/companies')]", "httpMethod": "GET", - "queryWindowInMin": 10080, + "queryWindowInMin": 1440, "queryTimeFormat": "yyyy-MM-dd", "rateLimitQPS": 1, "retryCount": 3, @@ -61,7 +61,7 @@ "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'), '/companies/$company_domain$/history/score')]", "httpMethod": "GET", - "queryWindowInMin": 10080, + "queryWindowInMin": 1440, "queryTimeFormat": "yyyy-MM-dd", "rateLimitQPS": 1, "retryCount": 3, @@ -118,7 +118,7 @@ "request": { "apiEndpoint": "[[concat(parameters('BaseUrl'), '/companies/', parameters('Domain'), '/history/score')]", "httpMethod": "GET", - "queryWindowInMin": 10080, + "queryWindowInMin": 1440, "queryTimeFormat": "yyyy-MM-dd", "rateLimitQPS": 1, "retryCount": 3, diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip index 2a986b0aca11a5875d815ed293f2081f2d506e7c..c56674a0f87ca45877ecc21b458b12c4f41815b2 100644 GIT binary patch delta 12326 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 delta 12241 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 ago(365d)\n | summarize arg_max(TimeGenerated, *) by id, portfolio_id\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = strcat_array(split(tostring(issue_type), \"_\"), \" \"),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", + "query": "let SecurityScorecardIssueLegacy = view () {\n SecurityScorecardIssues_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Issue\")),\n eventID_d = todouble(column_ifexists(\"eventID_d\", real(null))),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n date_s = tostring(column_ifexists(\"date_s\", \"\")),\n issueType_s = tostring(column_ifexists(\"issueType_s\", \"\")),\n issueName_s = tostring(column_ifexists(\"issueName_s\", \"\")),\n findingsCount_d = todouble(column_ifexists(\"findingsCount_d\", real(null))),\n groupStatus_s = tostring(column_ifexists(\"groupStatus_s\", \"\")),\n totalScoreImpact_d = todouble(column_ifexists(\"totalScoreImpact_d\", real(null))),\n severity_value_s = tostring(column_ifexists(\"severity_value_s\", \"\")),\n detail_url_s = tostring(column_ifexists(\"detail_url_s\", \"\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"\"))\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardIssueCCF = view () {\n SecurityScorecardIssuesHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by id, portfolio_id, domain, issue_date\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = strcat_array(split(tostring(issue_type), \"_\"), \" \"),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", "functionParameters": "", "version": 2, "tags": [ @@ -3901,7 +3916,7 @@ "displayName": "Parser for SecurityScorecard Issues", "category": "Microsoft Sentinel Parser", "functionAlias": "SecurityScorecardIssue", - "query": "let SecurityScorecardIssueLegacy = view () {\n SecurityScorecardIssues_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Issue\")),\n eventID_d = todouble(column_ifexists(\"eventID_d\", real(null))),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n date_s = tostring(column_ifexists(\"date_s\", \"\")),\n issueType_s = tostring(column_ifexists(\"issueType_s\", \"\")),\n issueName_s = tostring(column_ifexists(\"issueName_s\", \"\")),\n findingsCount_d = todouble(column_ifexists(\"findingsCount_d\", real(null))),\n groupStatus_s = tostring(column_ifexists(\"groupStatus_s\", \"\")),\n totalScoreImpact_d = todouble(column_ifexists(\"totalScoreImpact_d\", real(null))),\n severity_value_s = tostring(column_ifexists(\"severity_value_s\", \"\")),\n detail_url_s = tostring(column_ifexists(\"detail_url_s\", \"\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"\"))\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardIssueCCF = view () {\n SecurityScorecardIssuesHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by id, portfolio_id\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = strcat_array(split(tostring(issue_type), \"_\"), \" \"),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", + "query": "let SecurityScorecardIssueLegacy = view () {\n SecurityScorecardIssues_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Issue\")),\n eventID_d = todouble(column_ifexists(\"eventID_d\", real(null))),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n date_s = tostring(column_ifexists(\"date_s\", \"\")),\n issueType_s = tostring(column_ifexists(\"issueType_s\", \"\")),\n issueName_s = tostring(column_ifexists(\"issueName_s\", \"\")),\n findingsCount_d = todouble(column_ifexists(\"findingsCount_d\", real(null))),\n groupStatus_s = tostring(column_ifexists(\"groupStatus_s\", \"\")),\n totalScoreImpact_d = todouble(column_ifexists(\"totalScoreImpact_d\", real(null))),\n severity_value_s = tostring(column_ifexists(\"severity_value_s\", \"\")),\n detail_url_s = tostring(column_ifexists(\"detail_url_s\", \"\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"\"))\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardIssueCCF = view () {\n SecurityScorecardIssuesHistory_CL\n | where TimeGenerated > ago(365d)\n | summarize arg_max(TimeGenerated, *) by id, portfolio_id, domain, issue_date\n | extend\n body_s = \"Issue\",\n eventID_d = todouble(id),\n Factor_s = tostring(factor),\n subject_s = tostring(domain),\n date_s = tostring(issue_date),\n issueType_s = tostring(issue_type),\n issueName_s = strcat_array(split(tostring(issue_type), \"_\"), \" \"),\n findingsCount_d = todouble(issue_count),\n groupStatus_s = tostring(group_status),\n totalScoreImpact_d = todouble(total_score_impact),\n severity_value_s = tostring(severity),\n detail_url_s = tostring(detail_url),\n ss_time_t = todatetime(issue_date),\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n eventID_d,\n Factor_s,\n subject_s,\n date_s,\n issueType_s,\n issueName_s,\n findingsCount_d,\n groupStatus_s,\n totalScoreImpact_d,\n severity_value_s,\n detail_url_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardIssueLegacy, SecurityScorecardIssueCCF\n", "functionParameters": "", "version": 2, "tags": [ @@ -4100,7 +4115,7 @@ "displayName": "Parser for SecurityScorecard Factor scores (day-over-day per-factor change with metadata)", "category": "Microsoft Sentinel Parser", "functionAlias": "SecurityScorecardFactor", - "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = tolong(toreal(factor[\"score\"]))\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date, portfolio_id\n | sort by domain asc, factor_name asc, portfolio_id asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_portfolio = prev(portfolio_id, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor and portfolio_id == prev_portfolio)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", + "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = toreal(factor[\"score\"])\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date, portfolio_id\n | sort by domain asc, factor_name asc, portfolio_id asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_portfolio = prev(portfolio_id, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor and portfolio_id == prev_portfolio)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", "functionParameters": "", "version": 2, "tags": [ @@ -4165,7 +4180,7 @@ "displayName": "Parser for SecurityScorecard Factor scores (day-over-day per-factor change with metadata)", "category": "Microsoft Sentinel Parser", "functionAlias": "SecurityScorecardFactor", - "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = tolong(toreal(factor[\"score\"]))\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date, portfolio_id\n | sort by domain asc, factor_name asc, portfolio_id asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_portfolio = prev(portfolio_id, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor and portfolio_id == prev_portfolio)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", + "query": "let FactorMetadata = datatable(key:string, name:string, description:string) [\n \"application_security\", \"Application Security\", \"Detects common website application vulnerabilities and security issues.\",\n \"cubit_score\", \"Cubit Score\", \"Proprietary algorithms checking for implementation of security best practices.\",\n \"dns_health\", \"DNS Health\", \"Detects DNS misconfigurations and proper configuration of email security.\",\n \"endpoint_security\", \"Endpoint Security\", \"Detects measures used to protect employee workstations, laptops, mobile devices.\",\n \"hacker_chatter\", \"Hacker Chatter\", \"Monitors hacker forums and chat rooms for company mentions.\",\n \"ip_reputation\", \"IP Reputation\", \"Detects suspicious activity from company IP addresses, such as malware infections.\",\n \"leaked_information\", \"Information Leak\", \"Identifies if information leaks have occurred on internet sites.\",\n \"network_security\", \"Network Security\", \"Detects insecure network settings.\",\n \"patching_cadence\", \"Patching Cadence\", \"Analyzes how quickly a company reacts to vulnerabilities they may be exposed to.\",\n \"social_engineering\", \"Social Engineering\", \"Determines an organization's susceptibility to a targeted social engineering attack.\"\n];\nlet SecurityScorecardFactorLegacy = view () {\n SecurityScorecardFactor_CL\n | extend\n body_s = tostring(column_ifexists(\"body_s\", \"Factor\")),\n Factor_s = tostring(column_ifexists(\"Factor_s\", \"\")),\n Factor_Name_s = tostring(column_ifexists(\"Factor_Name_s\", \"Not Available\")),\n subject_s = tostring(column_ifexists(\"subject_s\", \"\")),\n dateYesterday_s = tostring(column_ifexists(\"dateYesterday_s\", \"\")),\n dateToday_s = tostring(column_ifexists(\"dateToday_s\", \"\")),\n scoreYesterday_d = todouble(column_ifexists(\"scoreYesterday_d\", real(null))),\n scoreToday_d = todouble(column_ifexists(\"scoreToday_d\", real(null))),\n scoreChange_d = todouble(column_ifexists(\"scoreChange_d\", real(null))),\n diff_d = todouble(column_ifexists(\"diff_d\", real(null))),\n factorDescription_s = tostring(column_ifexists(\"factorDescription_s\", \"data is not there\")),\n ss_time_t = todatetime(column_ifexists(\"ss_time_t\", column_ifexists(\"ss_time_s\", \"\"))),\n industry_s = tostring(column_ifexists(\"industry_s\", \"\")),\n portfolioId_g = toguid(column_ifexists(\"portfolioId_s\", \"\")),\n portfolioName_s = tostring(column_ifexists(\"portfolioName_s\", \"NA\"))\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nlet SecurityScorecardFactorCCF = view () {\n SecurityScorecardFactorHistory_CL\n | where TimeGenerated > ago(365d)\n | mv-expand factor = factors\n | extend\n factor_name = tostring(factor[\"name\"]),\n factor_score = toreal(factor[\"score\"])\n | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date, portfolio_id\n | sort by domain asc, factor_name asc, portfolio_id asc, score_date asc\n | serialize\n | extend\n prev_domain = prev(domain, 1),\n prev_factor = prev(factor_name, 1),\n prev_portfolio = prev(portfolio_id, 1),\n prev_date = prev(score_date, 1),\n prev_score = prev(factor_score, 1)\n | extend has_prev = (domain == prev_domain and factor_name == prev_factor and portfolio_id == prev_portfolio)\n | lookup kind=leftouter FactorMetadata on $left.factor_name == $right.key\n | extend\n body_s = \"Factor\",\n Factor_s = factor_name,\n Factor_Name_s = coalesce(name, \"Not Available\"),\n subject_s = domain,\n dateYesterday_s = iff(has_prev, tostring(prev_date), \"\"),\n dateToday_s = tostring(score_date),\n scoreYesterday_d = iff(has_prev, todouble(prev_score), real(null)),\n scoreToday_d = todouble(factor_score),\n scoreChange_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n diff_d = iff(has_prev, todouble(factor_score - prev_score), real(null)),\n factorDescription_s = coalesce(description, \"data is not there\"),\n ss_time_t = score_date,\n industry_s = tostring(industry),\n portfolioId_g = toguid(portfolio_id),\n portfolioName_s = tostring(portfolio_name)\n | project\n TimeGenerated,\n body_s,\n Factor_s,\n Factor_Name_s,\n subject_s,\n dateYesterday_s,\n dateToday_s,\n scoreYesterday_d,\n scoreToday_d,\n scoreChange_d,\n diff_d,\n factorDescription_s,\n ss_time_t,\n industry_s,\n portfolioId_g,\n portfolioName_s\n};\nunion isfuzzy=true SecurityScorecardFactorLegacy, SecurityScorecardFactorCCF\n", "functionParameters": "", "version": 2, "tags": [ diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml index ef542c9c1e7..6495f08c8a1 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardFactor.yaml @@ -61,7 +61,7 @@ FunctionQuery: | | mv-expand factor = factors | extend factor_name = tostring(factor["name"]), - factor_score = tolong(toreal(factor["score"])) + factor_score = toreal(factor["score"]) | summarize arg_max(TimeGenerated, *) by domain, factor_name, score_date, portfolio_id | sort by domain asc, factor_name asc, portfolio_id asc, score_date asc | serialize diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml index d19851b10e7..42ad496c7ac 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Parsers/SecurityScorecardIssue.yaml @@ -48,7 +48,7 @@ FunctionQuery: | let SecurityScorecardIssueCCF = view () { SecurityScorecardIssuesHistory_CL | where TimeGenerated > ago(365d) - | summarize arg_max(TimeGenerated, *) by id, portfolio_id + | summarize arg_max(TimeGenerated, *) by id, portfolio_id, domain, issue_date | extend body_s = "Issue", eventID_d = todouble(id), From 84c62881eb6013e3e605931c60dffaf248e2e12b Mon Sep 17 00:00:00 2001 From: Shrey Sonar Date: Mon, 27 Jul 2026 19:31:55 +0530 Subject: [PATCH 8/9] Fix KqlValidations CI failure and workbook dropdown label typo Register the three CCF history tables with the KQL validator. The solution parsers reference SecurityScorecardRatingsHistory_CL, SecurityScorecardFactorHistory_CL and SecurityScorecardIssuesHistory_CL, which have no schema under KqlvalidationsTests/CustomTables, so Validate_SolutionParsersFunctions_HaveValidKql fails all three with "does not refer to any known table, tabular variable or function". Schemas mirror each CCF bundle's *_tables.json. Also fix the IssueType picker projecting "lable" instead of "label", so the dropdown renders the humanized factor names rather than falling back to the raw factor keys. Package regenerated to carry the workbook change; solution version stays at 3.0.0. --- .../SecurityScorecardFactorHistory_CL.json | 12 +++++++++++ .../SecurityScorecardIssuesHistory_CL.json | 20 ++++++++++++++++++ .../SecurityScorecardRatingsHistory_CL.json | 12 +++++++++++ .../Package/3.0.0.zip | Bin 32106 -> 32099 bytes .../Package/mainTemplate.json | 2 +- .../Workbooks/SecurityScorecardWorkbook.json | 2 +- 6 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 .script/tests/KqlvalidationsTests/CustomTables/SecurityScorecardFactorHistory_CL.json create mode 100644 .script/tests/KqlvalidationsTests/CustomTables/SecurityScorecardIssuesHistory_CL.json create mode 100644 .script/tests/KqlvalidationsTests/CustomTables/SecurityScorecardRatingsHistory_CL.json diff --git a/.script/tests/KqlvalidationsTests/CustomTables/SecurityScorecardFactorHistory_CL.json b/.script/tests/KqlvalidationsTests/CustomTables/SecurityScorecardFactorHistory_CL.json new file mode 100644 index 00000000000..cd15247a4d8 --- /dev/null +++ b/.script/tests/KqlvalidationsTests/CustomTables/SecurityScorecardFactorHistory_CL.json @@ -0,0 +1,12 @@ +{ + "Name": "SecurityScorecardFactorHistory_CL", + "Properties": [ + { "Name": "TimeGenerated", "Type": "datetime" }, + { "Name": "score_date", "Type": "datetime" }, + { "Name": "factors", "Type": "dynamic" }, + { "Name": "domain", "Type": "string" }, + { "Name": "industry", "Type": "string" }, + { "Name": "portfolio_name", "Type": "string" }, + { "Name": "portfolio_id", "Type": "string" } + ] +} diff --git a/.script/tests/KqlvalidationsTests/CustomTables/SecurityScorecardIssuesHistory_CL.json b/.script/tests/KqlvalidationsTests/CustomTables/SecurityScorecardIssuesHistory_CL.json new file mode 100644 index 00000000000..847a321c017 --- /dev/null +++ b/.script/tests/KqlvalidationsTests/CustomTables/SecurityScorecardIssuesHistory_CL.json @@ -0,0 +1,20 @@ +{ + "Name": "SecurityScorecardIssuesHistory_CL", + "Properties": [ + { "Name": "TimeGenerated", "Type": "datetime" }, + { "Name": "id", "Type": "long" }, + { "Name": "issue_date", "Type": "datetime" }, + { "Name": "event_type", "Type": "string" }, + { "Name": "group_status", "Type": "string" }, + { "Name": "issue_count", "Type": "long" }, + { "Name": "total_score_impact", "Type": "real" }, + { "Name": "issue_type", "Type": "string" }, + { "Name": "severity", "Type": "string" }, + { "Name": "factor", "Type": "string" }, + { "Name": "detail_url", "Type": "string" }, + { "Name": "domain", "Type": "string" }, + { "Name": "industry", "Type": "string" }, + { "Name": "portfolio_name", "Type": "string" }, + { "Name": "portfolio_id", "Type": "string" } + ] +} diff --git a/.script/tests/KqlvalidationsTests/CustomTables/SecurityScorecardRatingsHistory_CL.json b/.script/tests/KqlvalidationsTests/CustomTables/SecurityScorecardRatingsHistory_CL.json new file mode 100644 index 00000000000..b37f27d587d --- /dev/null +++ b/.script/tests/KqlvalidationsTests/CustomTables/SecurityScorecardRatingsHistory_CL.json @@ -0,0 +1,12 @@ +{ + "Name": "SecurityScorecardRatingsHistory_CL", + "Properties": [ + { "Name": "TimeGenerated", "Type": "datetime" }, + { "Name": "score_date", "Type": "datetime" }, + { "Name": "score", "Type": "long" }, + { "Name": "domain", "Type": "string" }, + { "Name": "industry", "Type": "string" }, + { "Name": "portfolio_name", "Type": "string" }, + { "Name": "portfolio_id", "Type": "string" } + ] +} diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/3.0.0.zip index c56674a0f87ca45877ecc21b458b12c4f41815b2..40f6f3aae8182504d0453b83b89580670fa74255 100644 GIT binary patch delta 23353 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 Z7k2V`fZTt&u#?%ph+_-~JQrmn{THQTbRhr$ delta 23397 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\"},\"name\":\"text - 3\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated,*)\\r\\n| extend gradeToday = case((scoreToday_d>=90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project gradeToday, scoreToday_d, Details\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Grade\"}]}},\"leftContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Grade\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated, *) by subject_s \\r\\n| extend Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project scoreToday_d, subject_s, Details\\r\\n| limit 1\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Score\"}]}},\"leftContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Score\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll'and subject_s == '{Domain}'\\r\\n| project-rename Date = dateToday_s , Score = scoreToday_d \\r\\n| summarize arg_max(TimeGenerated, *) by Date \\r\\n| project Date=format_datetime(todatetime(Date), 'yyyy-MM-dd'), Score\\r\\n| sort by Date asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Score Trend\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"linechart\",\"chartSettings\":{\"showMetrics\":false,\"customThresholdLine\":\"{Score}\",\"customThresholdLineStyle\":4,\"showDataPoints\":true,\"ySettings\":{\"numberFormatSettings\":{\"unit\":0,\"options\":{\"style\":\"decimal\",\"useGrouping\":true}},\"max\":100}}},\"customWidth\":\"50\",\"name\":\"Score Trend\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == 'Factor' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated,*) by dateToday_s, factorDescription_s\\r\\n| summarize arg_max(dateToday_s,*) by factorDescription_s\\r\\n| extend gradeToday=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), gradeYesterday=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\") \\r\\n| project Factor_Name_s, factorDescription_s, gradeToday, scoreToday_d, scoreChange_d, gradeYesterday, scoreYesterday_d, dateToday_s \\r\\n| project-rename Description =factorDescription_s, [\\\"Current Grade\\\"] = gradeToday, [\\\"Current Score\\\"] = scoreToday_d, [\\\"Latest Score Change\\\"] = scoreChange_d, [\\\"Last Updated Grade\\\"] = gradeYesterday, [\\\"Last Updated Score\\\"] = scoreYesterday_d, [\\\"Date of Current Score\\\"] = dateToday_s, Factor = Factor_Name_s \",\"size\":0,\"showAnalytics\":true,\"title\":\"My Scorecard Factors\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Date of Current Score\",\"formatter\":6}],\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"name\":\"My Scorecard Factors\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| summarize [\\\"Issue Count\\\"]= count() by Factor \",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Count by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"barchart\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend issue_name=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5)\\r\\n| summarize count() by severity_value_s, serverity_priority\\r\\n| sort by serverity_priority asc\\r\\n| project-away serverity_priority\\r\\n| render barchart\\r\\n\",\"size\":0,\"title\":\"Issue Types by Severity\",\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"graphSettings\":{\"type\":0,\"topContent\":{\"columnMatch\":\"severity_value_s\",\"formatter\":1},\"centerContent\":{\"columnMatch\":\"adware installation\",\"formatter\":1,\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}},\"chartSettings\":{\"showLegend\":true,\"seriesLabelSettings\":[{\"seriesName\":\"high\",\"label\":\"High\"},{\"seriesName\":\"medium\",\"label\":\"Medium\"},{\"seriesName\":\"low\",\"label\":\"Low\"},{\"seriesName\":\"info\",\"label\":\"Info\"},{\"seriesName\":\"positive\",\"label\":\"Positive\"}],\"customThresholdLine\":\"{issue_name}\",\"customThresholdLineStyle\":0},\"mapSettings\":{\"locInfo\":\"LatLong\",\"sizeSettings\":\"adware installation\",\"sizeAggregation\":\"Sum\",\"legendMetric\":\"adware installation\",\"legendAggregation\":\"Sum\",\"itemColorSettings\":{\"type\":\"heatmap\",\"colorAggregation\":\"Sum\",\"nodeColorField\":\"adware installation\",\"heatmapPalette\":\"greenRed\"}}},\"name\":\"Issue Types by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"My Scorecard\"},\"name\":\"My Scorecard\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Vendor Scores\",\"style\":\"{setTab}\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8ebc23fe-ade3-4318-8635-24bb841f718b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"72d22203-f3dd-4557-9605-5b6ca4a4e6c0\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":2,\"description\":\"Your own company domain (My Scorecard). Vendor pages list everyone except this company.\",\"isRequired\":false,\"query\":\"SecurityScorecardRatings\\r\\n| where portfolioName_s in ('NA', 'My Scorecard')\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 13\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"624e2391-ad46-416c-9af4-f735c1114b84\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"91c18b81-401d-4b6a-a9ba-e6780c6fee61\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c603e74f-d591-4788-b95b-1370a2b98024\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == \\\"OverAll\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and subject_s != '{Domain}'\\r\\n| summarize arg_max(TimeGenerated, *) by dateToday_s, subject_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, portfolioName_s \\r\\n| extend [\\\"Current Grade\\\"]=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), [\\\"Last Updated Grade\\\"]=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\"), Industry=strcat_array(split(industry_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors')\\r\\n| project subject_s, portfolioName_s, Industry, [\\\"Date of Current Score\\\"] = format_datetime(todatetime(dateToday_s), 'yyyy-MM-dd'), scoreToday_d, [\\\"Current Grade\\\"], scoreYesterday_d, ['Last Updated Grade'], Details \\r\\n| project-rename Company = subject_s , [\\\"Current Score\\\"] = scoreToday_d, [\\\"Last Updated Score\\\"] = scoreYesterday_d \\r\\n| sort by Company asc, portfolioName_s asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Company\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\",\"linkIsContextBlade\":false}}],\"rowLimit\":10000,\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"name\":\"Top Level Grade and Score by Company\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a38a4cff-47df-431d-a31e-e5a7b9739786\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardFactor\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct Factor_Name_s\\r\\n| sort by Factor_Name_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 11\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0fe3d2b0-fcbd-4c3f-80e6-29e39f047743\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Grade\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"A\\\", \\\"label\\\":\\\"A\\\"},\\r\\n { \\\"value\\\":\\\"B\\\", \\\"label\\\":\\\"B\\\"},\\r\\n { \\\"value\\\":\\\"C\\\", \\\"label\\\":\\\"C\\\"},\\r\\n { \\\"value\\\":\\\"D\\\", \\\"label\\\":\\\"D\\\" },\\r\\n { \\\"value\\\":\\\"F\\\", \\\"label\\\":\\\"F\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 12\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == \\\"Factor\\\" and subject_s != '{Domain}' and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(TimeGenerated, *) by dateToday_s, subject_s, Factor_Name_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, Factor_Name_s, portfolioName_s\\r\\n| extend [\\\"Current Grade\\\"] = case(scoreToday_d>=90, \\\"A\\\", scoreToday_d>=80 and scoreToday_d<=89, \\\"B\\\", scoreToday_d>=70 and scoreToday_d<=79, \\\"C\\\", scoreToday_d>=60 and scoreToday_d<=69, \\\"D\\\", \\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors') \\r\\n| where ('*' in ({Factor}) or Factor_Name_s in ({Factor})) and [\\\"Current Grade\\\"] in ({Grade})\\r\\n| project subject_s, portfolioName_s, Factor_Name_s, factorDescription_s , scoreToday_d, [\\\"Current Grade\\\"], Details \\r\\n| project-rename Company = subject_s, Factor = Factor_Name_s, Description = factorDescription_s, [\\\"Current Score\\\"] = scoreToday_d\\r\\n| sort by Factor asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000}},\"name\":\"Top Level Grade and Score by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"f952c797-c056-446e-8ce1-4495673c337d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"IssueType\",\"label\":\"Issue Type\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend issue_type = strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") \\r\\n| distinct issue_type\\r\\n| sort by issue_type asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 9\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73302a85-fb1b-43cf-8c7f-dfbebd6eb167\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and subject_s != '{Domain}' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(issueName_s), src = arg_max(date_s,Factor_s) by issueType_s, subject_s, severity_value_s\\r\\n| extend [\\\"Issue Type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") , Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| where ('*' in ({IssueType}) or [\\\"Issue Type\\\"] in ({IssueType})) \\r\\n| project subject_s, Severity, [\\\"Issue Type\\\"], [\\\"Findings Count\\\"], [\\\"Issue Count\\\"], Details \\r\\n| order by [\\\"Issue Type\\\"] asc, subject_s asc\\r\\n| project-rename Company=subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true,\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Vendor Scores\"},\"name\":\"Vendor Scores\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Active Issues\",\"style\":\"{setTab}\"},\"name\":\"Active Issues\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"6239b6b6-1b0c-4d82-9599-bcb3155a8869\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"99a0579a-77d5-4693-a099-c1b7dd688c0d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e6981875-d72c-486f-baea-52e1e762143f\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"95c35610-dd13-45f0-bdf4-dae3008215a7\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| distinct value=Factor_s, lable=factor\\r\\n| sort by lable asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"34f6058c-86eb-45e1-8684-ad1db584019a\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"bd48be36-fe76-4b7d-be98-fc3ac56f6759\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 11\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Active Issues will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 11\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and ('*' in ({Severity}) or severity_value_s in ({Severity}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize arg_max(date_s,*), src = arg_max(date_s,Factor_s),[\\\"Findings Count\\\"] = sum(findingsCount_d), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s\\r\\n| join kind=leftouter (SecurityScorecardFactor \\r\\n | distinct Factor_s,factorDescription_s\\r\\n | project Factor_s, factorDescription_s) on Factor_s\\r\\n| extend severity_index=case((severity_value_s == \\\"high\\\"),1,(severity_value_s == \\\"medium\\\"),2,(severity_value_s == \\\"low\\\"),3,(severity_value_s == \\\"info\\\"),4,5), severity_value_s=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"), [\\\"Issue type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s)\\r\\n| sort by severity_index asc, findingsCount_d desc\\r\\n| project [\\\"Issue type\\\"], Factor, severity_value_s, factorDescription_s, [\\\"Findings Count\\\"], Active, Resolved, Details\\r\\n| project-rename Description = factorDescription_s, Severity = severity_value_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Active Issues\",\"timeContextFromParameter\":\"Timer\",\"exportParameterName\":\"activeissues\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"Sevirity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000}},\"name\":\"Active Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Issue Count\\\"] = count(issueType_s) by Factor_s \\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| project Factor, [\\\"Issue Count\\\"] \\r\\n\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Types by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize count() by severity_value_s \\r\\n| extend severity_value_s = case((severity_value_s == 'info'), \\\"Info\\\",(severity_value_s == 'low'), \\\"Low\\\",(severity_value_s == 'medium'), \\\"Medium\\\",(severity_value_s == 'high'), \\\"High\\\", (severity_value_s == 'positive'), \\\"Positive\\\", severity_value_s)\\r\\n| render piechart\",\"size\":3,\"showAnalytics\":true,\"title\":\"Count by Severity\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\"},\"name\":\"Count by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Active Issues\"},\"name\":\"Active Issues\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (CVE)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a30af542-54cd-4a92-ac85-e094c9cc1c43\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a3195f85-f04f-422c-b233-f9bd8a357b8b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"CVE\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"service_vuln_host_high\\\", \\\"label\\\":\\\"Service Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"service_vuln_host_low\\\", \\\"label\\\":\\\"Service Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_high\\\", \\\"label\\\":\\\"Patching Cadence High\\\" },\\r\\n { \\\"value\\\":\\\"patching_cadence_low\\\", \\\"label\\\":\\\"Patching Cadence Low\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_medium\\\", \\\"label\\\":\\\"Patching Cadence Medium\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_high\\\", \\\"label\\\":\\\"Web Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"web_vuln_host_low\\\", \\\"label\\\":\\\"Web Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_medium\\\", \\\"label\\\":\\\"Web Vuln Host Medium\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"CVE\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0f2ad534-e343-44c2-a3ff-0d1d2c7916c5\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"55320f6b-3583-440d-977f-33ceffc07d94\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"070f384d-1ff0-49c9-8f3f-f121e78811a2\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and issueType_s in ({CVE}) and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s\\r\\n| extend CVE=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), severity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\", severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s), Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| sort by CVE asc, severity_priority asc, subject_s asc\\r\\n| project subject_s, CVE, Factor, Severity, ['Findings Count'], [\\\"Issue Count\\\"], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"turquoise\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (CVE)\"},\"name\":\"Issues per Vendor (CVE)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (Ransomware)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c9b54d32-38cd-4b08-8dd6-4be29b019c80\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"168555cd-afbe-457a-81c1-a68663c51823\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Ransomware\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"tls_weal_cipher\\\", \\\"label\\\":\\\"Tls Weal Cipher\\\"},\\r\\n { \\\"value\\\":\\\"exposed_personal_information_info\\\", \\\"label\\\":\\\"Exposed Personal Information Info\\\" },\\r\\n { \\\"value\\\":\\\"outdated_browser\\\", \\\"label\\\":\\\"Outdated Browser\\\"},\\r\\n { \\\"value\\\":\\\"csp_no_policy_v2\\\", \\\"label\\\":\\\"Csp No Policy V2\\\" },\\r\\n { \\\"value\\\":\\\"exposed_personal_information\\\", \\\"label\\\":\\\"Exposed Personal Information\\\"},\\r\\n { \\\"value\\\":\\\"ip_count_means\\\", \\\"label\\\":\\\"Ip Count Means\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"hsts_incorrect_v2\\\", \\\"label\\\":\\\"Hsts Incorrect V2\\\" },\\r\\n { \\\"value\\\":\\\"unsafe_sri_v2\\\", \\\"label\\\":\\\"Unsafe Sri V2\\\"},\\r\\n { \\\"value\\\":\\\"leaked_credentials\\\", \\\"label\\\":\\\"Leaked Credentials\\\"},\\r\\n { \\\"value\\\":\\\"x_frame_options_incorrect_v2\\\", \\\"label\\\":\\\"X Frame Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_xss_protection_incorrect_v2\\\", \\\"label\\\":\\\"X Xss Protection Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_content_type_options_incorrect_v2\\\", \\\"label\\\":\\\"X Content Type Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_no_revocation\\\", \\\"label\\\":\\\"Tlscert No Revocation\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_expired\\\", \\\"label\\\":\\\"Tlscert Expired\\\"},\\r\\n { \\\"value\\\":\\\"outdated_os\\\", \\\"label\\\":\\\"Outdated Os\\\"},\\r\\n { \\\"value\\\":\\\"tls_weak_protocol\\\", \\\"label\\\":\\\"Tls Weak Protocol\\\"},\\r\\n { \\\"value\\\":\\\"domain_missing_https_v2\\\", \\\"label\\\":\\\"Domain Missing Https V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_excessive_expiration\\\", \\\"label\\\":\\\"Tlscert Excessive Expiration\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Ransomware\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"7bf4c309-6e2b-4619-9253-e85808486e75\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ee929211-b34e-4369-905b-cb4d87bf6364\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8d9dcdcc-8c93-4b47-a2e1-880ffea2a31e\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and issueType_s in ({Ransomware})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d),[\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s \\r\\n| extend Ransomware=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| project subject_s, Ransomware, Severity, ['Findings Count'], ['Issue Count'], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\\r\\n| sort by Ransomware asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"drilldown_url\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"details\"}}],\"rowLimit\":10000}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (Ransomware)\"},\"name\":\"Issues per Vendor (Ransomware)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Spotlight\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73978413-5a37-4814-b4fc-4143999f13ec\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73bc33a2-eb41-4433-9b1d-59930d7ddf3d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ae9eff1e-6b7b-4d64-9516-30ea5bc5fb17\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"d9274665-9d9c-417b-9d3f-03162538cf92\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend label = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"),value = Factor_s\\r\\n| distinct value, label\\r\\n| sort by label asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"485b4de7-9cd5-4e5e-b2d4-da7f921ff61c\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s =='OverAll' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(dateToday_s,*) by subject_s\\r\\n| extend Grade = case((scoreToday_d >= 90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\") \\r\\n| project Grade, subject_s, scoreToday_d\\r\\n| project-rename Company = subject_s, Score = scoreToday_d\\r\\n| sort by Score asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Worst Performing Companies\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"40\",\"name\":\"Worst Performing Companies\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*), [\\\"Company Count\\\"] = dcount(subject_s,4) by issueName_s, severity_value_s, issueType_s, Factor_s\\r\\n| extend serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), severity_value=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s) \\r\\n| extend Issues=trim(@\\\"'\\\",issueName_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| sort by serverity_priority asc, [\\\"Company Count\\\"] desc\\r\\n| project Severity = severity_value, Issues, Factor = Factor, [\\\"Company Count\\\"]\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Critical Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"60\",\"name\":\"Most Critical Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e316e111-37ee-404b-8feb-920a6147bf30\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue \\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend totalcount = toscalar(SecurityScorecardIssue | summarize dcount(subject_s))\\r\\n| summarize subject = dcount(subject_s), totalCount = max(totalcount) by issueName_s, issueType_s, Factor_s\\r\\n| extend [\\\"% of Portfolio Affected\\\"] = round((todouble(subject)/todouble(totalCount))*100,0)\\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| project Factor, issueName_s, [\\\"% of Portfolio Affected\\\"]\\r\\n| sort by [\\\"% of Portfolio Affected\\\"] desc\\r\\n| project-rename Issues = issueName_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Common Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"% of Portfolio Affected\",\"formatter\":3,\"formatOptions\":{\"min\":0,\"max\":100,\"palette\":\"redDark\"}}]}},\"name\":\"Most Common Issues\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Spotlight\"},\"name\":\"Spotlight\"}]},\"name\":\"Main\",\"styleSettings\":{\"showBorder\":true}}],\"fromTemplateId\":\"sentinel-SecurityScorecardWorkbook\",\"$schema\":\"https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json\"}\n", + "serializedData": "{\"version\":\"Notebook/1.0\",\"items\":[{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":11,\"content\":{\"version\":\"LinkItem/1.0\",\"style\":\"tabs\",\"links\":[{\"id\":\"06ba5a8f-fe93-4285-9bb4-15fd5c96befe\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"My Scorecard\",\"subTarget\":\"My Scorecard\",\"style\":\"link\"},{\"id\":\"ce6e0294-f130-4450-9005-8aa9924e6b86\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Vendor Scores\",\"subTarget\":\"Vendor Scores\",\"style\":\"link\"},{\"id\":\"26959e65-a53f-4468-8d14-d0b43d1b899d\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Active Issues\",\"subTarget\":\"Active Issues\",\"style\":\"link\"},{\"id\":\"97757d2a-eba1-4ee9-909b-47e9653e1407\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Issues per Vendor (CVE)\",\"subTarget\":\"Issues per Vendor (CVE)\",\"style\":\"link\"},{\"id\":\"73e85106-4dde-4c92-8479-c8720d8604de\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Issues per Vendor (Ransomware)\",\"subTarget\":\"Issues per Vendor (Ransomware)\",\"style\":\"link\"},{\"id\":\"c915da0c-4bfc-4595-8e1a-700a602f3412\",\"cellValue\":\"setTab\",\"linkTarget\":\"parameter\",\"linkLabel\":\"Spotlight\",\"subTarget\":\"Spotlight\",\"style\":\"link\"}]},\"name\":\"Tabs\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# My Scorecard\",\"style\":\"{setTab}\"},\"name\":\"text - 1\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"309cabc5-5a32-4c1a-b905-cb578ee0e667\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ac778abc-2101-4e66-92da-d11d4b4a8629\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":2,\"description\":\"Your own company domain (My Scorecard). Vendor pages list everyone except this company.\",\"isRequired\":false,\"query\":\"SecurityScorecardRatings\\r\\n| where portfolioName_s in ('NA', 'My Scorecard')\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 9\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 3\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated,*)\\r\\n| extend gradeToday = case((scoreToday_d>=90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project gradeToday, scoreToday_d, Details\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Grade\"}]}},\"leftContent\":{\"columnMatch\":\"gradeToday\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Grade\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated, *) by subject_s \\r\\n| extend Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s) \\r\\n| project scoreToday_d, subject_s, Details\\r\\n| limit 1\",\"size\":4,\"showAnalytics\":true,\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"tiles\",\"tileSettings\":{\"titleContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"Default\",\"representation\":\"lightBlue\",\"text\":\"Top Level Score\"}]}},\"leftContent\":{\"columnMatch\":\"scoreToday_d\",\"formatter\":18,\"formatOptions\":{\"linkColumn\":\"Details\",\"linkTarget\":\"Url\",\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]},\"numberFormat\":{\"unit\":17,\"options\":{\"style\":\"decimal\",\"maximumFractionDigits\":2,\"maximumSignificantDigits\":3}}},\"showBorder\":true,\"size\":\"full\"}},\"customWidth\":\"25\",\"name\":\"Top Level Score\",\"styleSettings\":{\"maxWidth\":\"100\"}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == 'OverAll'and subject_s == '{Domain}'\\r\\n| project-rename Date = dateToday_s , Score = scoreToday_d \\r\\n| summarize arg_max(TimeGenerated, *) by Date \\r\\n| project Date=format_datetime(todatetime(Date), 'yyyy-MM-dd'), Score\\r\\n| sort by Date asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Score Trend\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"linechart\",\"chartSettings\":{\"showMetrics\":false,\"customThresholdLine\":\"{Score}\",\"customThresholdLineStyle\":4,\"showDataPoints\":true,\"ySettings\":{\"numberFormatSettings\":{\"unit\":0,\"options\":{\"style\":\"decimal\",\"useGrouping\":true}},\"max\":100}}},\"customWidth\":\"50\",\"name\":\"Score Trend\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == 'Factor' and subject_s == '{Domain}'\\r\\n| summarize arg_max(TimeGenerated,*) by dateToday_s, factorDescription_s\\r\\n| summarize arg_max(dateToday_s,*) by factorDescription_s\\r\\n| extend gradeToday=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), gradeYesterday=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\") \\r\\n| project Factor_Name_s, factorDescription_s, gradeToday, scoreToday_d, scoreChange_d, gradeYesterday, scoreYesterday_d, dateToday_s \\r\\n| project-rename Description =factorDescription_s, [\\\"Current Grade\\\"] = gradeToday, [\\\"Current Score\\\"] = scoreToday_d, [\\\"Latest Score Change\\\"] = scoreChange_d, [\\\"Last Updated Grade\\\"] = gradeYesterday, [\\\"Last Updated Score\\\"] = scoreYesterday_d, [\\\"Date of Current Score\\\"] = dateToday_s, Factor = Factor_Name_s \",\"size\":0,\"showAnalytics\":true,\"title\":\"My Scorecard Factors\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"\"}]}},{\"columnMatch\":\"Date of Current Score\",\"formatter\":6}],\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Factor\",\"sortOrder\":1}]},\"name\":\"My Scorecard Factors\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| summarize [\\\"Issue Count\\\"]= count() by Factor \",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Count by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"barchart\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where subject_s == '{Domain}'\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend issue_name=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5)\\r\\n| summarize count() by severity_value_s, serverity_priority\\r\\n| sort by serverity_priority asc\\r\\n| project-away serverity_priority\\r\\n| render barchart\\r\\n\",\"size\":0,\"title\":\"Issue Types by Severity\",\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"graphSettings\":{\"type\":0,\"topContent\":{\"columnMatch\":\"severity_value_s\",\"formatter\":1},\"centerContent\":{\"columnMatch\":\"adware installation\",\"formatter\":1,\"numberFormat\":{\"unit\":17,\"options\":{\"maximumSignificantDigits\":3,\"maximumFractionDigits\":2}}}},\"chartSettings\":{\"showLegend\":true,\"seriesLabelSettings\":[{\"seriesName\":\"high\",\"label\":\"High\"},{\"seriesName\":\"medium\",\"label\":\"Medium\"},{\"seriesName\":\"low\",\"label\":\"Low\"},{\"seriesName\":\"info\",\"label\":\"Info\"},{\"seriesName\":\"positive\",\"label\":\"Positive\"}],\"customThresholdLine\":\"{issue_name}\",\"customThresholdLineStyle\":0},\"mapSettings\":{\"locInfo\":\"LatLong\",\"sizeSettings\":\"adware installation\",\"sizeAggregation\":\"Sum\",\"legendMetric\":\"adware installation\",\"legendAggregation\":\"Sum\",\"itemColorSettings\":{\"type\":\"heatmap\",\"colorAggregation\":\"Sum\",\"nodeColorField\":\"adware installation\",\"heatmapPalette\":\"greenRed\"}}},\"name\":\"Issue Types by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"My Scorecard\"},\"name\":\"My Scorecard\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Vendor Scores\",\"style\":\"{setTab}\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8ebc23fe-ade3-4318-8635-24bb841f718b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"72d22203-f3dd-4557-9605-5b6ca4a4e6c0\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Domain\",\"type\":2,\"description\":\"Your own company domain (My Scorecard). Vendor pages list everyone except this company.\",\"isRequired\":false,\"query\":\"SecurityScorecardRatings\\r\\n| where portfolioName_s in ('NA', 'My Scorecard')\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"parameters - 13\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"624e2391-ad46-416c-9af4-f735c1114b84\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"91c18b81-401d-4b6a-a9ba-e6780c6fee61\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c603e74f-d591-4788-b95b-1370a2b98024\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s == \\\"OverAll\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and subject_s != '{Domain}'\\r\\n| summarize arg_max(TimeGenerated, *) by dateToday_s, subject_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, portfolioName_s \\r\\n| extend [\\\"Current Grade\\\"]=case((scoreToday_d >= 90),\\\"A\\\",((scoreToday_d >= 80) and (scoreToday_d <= 89)),\\\"B\\\",((scoreToday_d >= 70) and (scoreToday_d <= 79)),\\\"C\\\",((scoreToday_d >= 60) and (scoreToday_d <= 69)),\\\"D\\\",\\\"F\\\"), [\\\"Last Updated Grade\\\"]=case((scoreYesterday_d >= 90),\\\"A\\\",((scoreYesterday_d >= 80) and (scoreYesterday_d <= 89)),\\\"B\\\",((scoreYesterday_d >= 70) and (scoreYesterday_d <= 79)),\\\"C\\\",((scoreYesterday_d >= 60) and (scoreYesterday_d <= 69)),\\\"D\\\",\\\"F\\\"), Industry=strcat_array(split(industry_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors')\\r\\n| project subject_s, portfolioName_s, Industry, [\\\"Date of Current Score\\\"] = format_datetime(todatetime(dateToday_s), 'yyyy-MM-dd'), scoreToday_d, [\\\"Current Grade\\\"], scoreYesterday_d, ['Last Updated Grade'], Details \\r\\n| project-rename Company = subject_s , [\\\"Current Score\\\"] = scoreToday_d, [\\\"Last Updated Score\\\"] = scoreYesterday_d \\r\\n| sort by Company asc, portfolioName_s asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Company\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Last Updated Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\",\"linkIsContextBlade\":false}}],\"rowLimit\":10000,\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"$gen_thresholds_Current Score_3\",\"sortOrder\":1}]},\"name\":\"Top Level Grade and Score by Company\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a38a4cff-47df-431d-a31e-e5a7b9739786\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardFactor\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct Factor_Name_s\\r\\n| sort by Factor_Name_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 11\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0fe3d2b0-fcbd-4c3f-80e6-29e39f047743\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Grade\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"A\\\", \\\"label\\\":\\\"A\\\"},\\r\\n { \\\"value\\\":\\\"B\\\", \\\"label\\\":\\\"B\\\"},\\r\\n { \\\"value\\\":\\\"C\\\", \\\"label\\\":\\\"C\\\"},\\r\\n { \\\"value\\\":\\\"D\\\", \\\"label\\\":\\\"D\\\" },\\r\\n { \\\"value\\\":\\\"F\\\", \\\"label\\\":\\\"F\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 12\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardFactor\\r\\n| where body_s == \\\"Factor\\\" and subject_s != '{Domain}' and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(TimeGenerated, *) by dateToday_s, subject_s, Factor_Name_s, portfolioName_s\\r\\n| summarize arg_max(dateToday_s, *) by subject_s, Factor_Name_s, portfolioName_s\\r\\n| extend [\\\"Current Grade\\\"] = case(scoreToday_d>=90, \\\"A\\\", scoreToday_d>=80 and scoreToday_d<=89, \\\"B\\\", scoreToday_d>=70 and scoreToday_d<=79, \\\"C\\\", scoreToday_d>=60 and scoreToday_d<=69, \\\"D\\\", \\\"F\\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/',subject_s,'/factors') \\r\\n| where ('*' in ({Factor}) or Factor_Name_s in ({Factor})) and [\\\"Current Grade\\\"] in ({Grade})\\r\\n| project subject_s, portfolioName_s, Factor_Name_s, factorDescription_s , scoreToday_d, [\\\"Current Grade\\\"], Details \\r\\n| project-rename Company = subject_s, Factor = Factor_Name_s, Description = factorDescription_s, [\\\"Current Score\\\"] = scoreToday_d\\r\\n| sort by Factor asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Top Level Grade and Score by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Current Score\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\">=\",\"thresholdValue\":\"90\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"80\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"70\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\">=\",\"thresholdValue\":\"60\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"<=\",\"thresholdValue\":\"59\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Current Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000}},\"name\":\"Top Level Grade and Score by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"f952c797-c056-446e-8ce1-4495673c337d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"IssueType\",\"label\":\"Issue Type\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend issue_type = strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") \\r\\n| distinct issue_type\\r\\n| sort by issue_type asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 9\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73302a85-fb1b-43cf-8c7f-dfbebd6eb167\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"50\",\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and subject_s != '{Domain}' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(issueName_s), src = arg_max(date_s,Factor_s) by issueType_s, subject_s, severity_value_s\\r\\n| extend [\\\"Issue Type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\") , Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| where ('*' in ({IssueType}) or [\\\"Issue Type\\\"] in ({IssueType})) \\r\\n| project subject_s, Severity, [\\\"Issue Type\\\"], [\\\"Findings Count\\\"], [\\\"Issue Count\\\"], Details \\r\\n| order by [\\\"Issue Type\\\"] asc, subject_s asc\\r\\n| project-rename Company=subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true,\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"sortBy\":[{\"itemKey\":\"Issue Type\",\"sortOrder\":1}]},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Vendor Scores\"},\"name\":\"Vendor Scores\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Active Issues\",\"style\":\"{setTab}\"},\"name\":\"Active Issues\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"6239b6b6-1b0c-4d82-9599-bcb3155a8869\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000},\"value\":{\"durationMs\":604800000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"99a0579a-77d5-4693-a099-c1b7dd688c0d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e6981875-d72c-486f-baea-52e1e762143f\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"95c35610-dd13-45f0-bdf4-dae3008215a7\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| distinct value=Factor_s, label=factor\\r\\n| sort by label asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"34f6058c-86eb-45e1-8684-ad1db584019a\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"bd48be36-fe76-4b7d-be98-fc3ac56f6759\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 11\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Active Issues will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 11\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and ('*' in ({Severity}) or severity_value_s in ({Severity}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize arg_max(date_s,*), src = arg_max(date_s,Factor_s),[\\\"Findings Count\\\"] = sum(findingsCount_d), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s\\r\\n| join kind=leftouter (SecurityScorecardFactor \\r\\n | distinct Factor_s,factorDescription_s\\r\\n | project Factor_s, factorDescription_s) on Factor_s\\r\\n| extend severity_index=case((severity_value_s == \\\"high\\\"),1,(severity_value_s == \\\"medium\\\"),2,(severity_value_s == \\\"low\\\"),3,(severity_value_s == \\\"info\\\"),4,5), severity_value_s=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"), [\\\"Issue type\\\"]=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s)\\r\\n| sort by severity_index asc, findingsCount_d desc\\r\\n| project [\\\"Issue type\\\"], Factor, severity_value_s, factorDescription_s, [\\\"Findings Count\\\"], Active, Resolved, Details\\r\\n| project-rename Description = factorDescription_s, Severity = severity_value_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Active Issues\",\"timeContextFromParameter\":\"Timer\",\"exportParameterName\":\"activeissues\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"Sevirity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000}},\"name\":\"Active Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Issue Count\\\"] = count(issueType_s) by Factor_s \\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| project Factor, [\\\"Issue Count\\\"] \\r\\n\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issue Types by Factor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"categoricalbar\",\"chartSettings\":{\"showLegend\":true}},\"name\":\"Issue Types by Factor\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == 'active' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize count() by severity_value_s \\r\\n| extend severity_value_s = case((severity_value_s == 'info'), \\\"Info\\\",(severity_value_s == 'low'), \\\"Low\\\",(severity_value_s == 'medium'), \\\"Medium\\\",(severity_value_s == 'high'), \\\"High\\\", (severity_value_s == 'positive'), \\\"Positive\\\", severity_value_s)\\r\\n| render piechart\",\"size\":3,\"showAnalytics\":true,\"title\":\"Count by Severity\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"piechart\"},\"name\":\"Count by Severity\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Active Issues\"},\"name\":\"Active Issues\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (CVE)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a30af542-54cd-4a92-ac85-e094c9cc1c43\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"a3195f85-f04f-422c-b233-f9bd8a357b8b\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"CVE\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"service_vuln_host_high\\\", \\\"label\\\":\\\"Service Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"service_vuln_host_low\\\", \\\"label\\\":\\\"Service Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_high\\\", \\\"label\\\":\\\"Patching Cadence High\\\" },\\r\\n { \\\"value\\\":\\\"patching_cadence_low\\\", \\\"label\\\":\\\"Patching Cadence Low\\\"},\\r\\n { \\\"value\\\":\\\"patching_cadence_medium\\\", \\\"label\\\":\\\"Patching Cadence Medium\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_high\\\", \\\"label\\\":\\\"Web Vuln Host High\\\"},\\r\\n { \\\"value\\\":\\\"web_vuln_host_low\\\", \\\"label\\\":\\\"Web Vuln Host Low\\\" },\\r\\n { \\\"value\\\":\\\"web_vuln_host_medium\\\", \\\"label\\\":\\\"Web Vuln Host Medium\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"CVE\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"0f2ad534-e343-44c2-a3ff-0d1d2c7916c5\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"55320f6b-3583-440d-977f-33ceffc07d94\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"070f384d-1ff0-49c9-8f3f-f121e78811a2\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and issueType_s in ({CVE}) and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d), [\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s\\r\\n| extend CVE=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), severity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\", severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',Factor_s,'/',issueType_s), Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\")\\r\\n| sort by CVE asc, severity_priority asc, subject_s asc\\r\\n| project subject_s, CVE, Factor, Severity, ['Findings Count'], [\\\"Issue Count\\\"], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"turquoise\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}}],\"rowLimit\":10000,\"filter\":true}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (CVE)\"},\"name\":\"Issues per Vendor (CVE)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Issues per Vendor (Ransomware)\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"c9b54d32-38cd-4b08-8dd6-4be29b019c80\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"168555cd-afbe-457a-81c1-a68663c51823\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Ransomware\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"tls_weal_cipher\\\", \\\"label\\\":\\\"Tls Weal Cipher\\\"},\\r\\n { \\\"value\\\":\\\"exposed_personal_information_info\\\", \\\"label\\\":\\\"Exposed Personal Information Info\\\" },\\r\\n { \\\"value\\\":\\\"outdated_browser\\\", \\\"label\\\":\\\"Outdated Browser\\\"},\\r\\n { \\\"value\\\":\\\"csp_no_policy_v2\\\", \\\"label\\\":\\\"Csp No Policy V2\\\" },\\r\\n { \\\"value\\\":\\\"exposed_personal_information\\\", \\\"label\\\":\\\"Exposed Personal Information\\\"},\\r\\n { \\\"value\\\":\\\"ip_count_means\\\", \\\"label\\\":\\\"Ip Count Means\\\" },\\r\\n { \\\"value\\\":\\\"service_vuln_host_medium\\\", \\\"label\\\":\\\"Service Vuln Host Medium\\\"},\\r\\n { \\\"value\\\":\\\"hsts_incorrect_v2\\\", \\\"label\\\":\\\"Hsts Incorrect V2\\\" },\\r\\n { \\\"value\\\":\\\"unsafe_sri_v2\\\", \\\"label\\\":\\\"Unsafe Sri V2\\\"},\\r\\n { \\\"value\\\":\\\"leaked_credentials\\\", \\\"label\\\":\\\"Leaked Credentials\\\"},\\r\\n { \\\"value\\\":\\\"x_frame_options_incorrect_v2\\\", \\\"label\\\":\\\"X Frame Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_xss_protection_incorrect_v2\\\", \\\"label\\\":\\\"X Xss Protection Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"x_content_type_options_incorrect_v2\\\", \\\"label\\\":\\\"X Content Type Options Incorrect V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_no_revocation\\\", \\\"label\\\":\\\"Tlscert No Revocation\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_expired\\\", \\\"label\\\":\\\"Tlscert Expired\\\"},\\r\\n { \\\"value\\\":\\\"outdated_os\\\", \\\"label\\\":\\\"Outdated Os\\\"},\\r\\n { \\\"value\\\":\\\"tls_weak_protocol\\\", \\\"label\\\":\\\"Tls Weak Protocol\\\"},\\r\\n { \\\"value\\\":\\\"domain_missing_https_v2\\\", \\\"label\\\":\\\"Domain Missing Https V2\\\"},\\r\\n { \\\"value\\\":\\\"tlscert_excessive_expiration\\\", \\\"label\\\":\\\"Tlscert Excessive Expiration\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":604800000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Ransomware\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"7bf4c309-6e2b-4619-9253-e85808486e75\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ee929211-b34e-4369-905b-cb4d87bf6364\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"8d9dcdcc-8c93-4b47-a2e1-880ffea2a31e\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":1,\"content\":{\"json\":\"Issues per Vendor will only encompass those that have appeared since the feed was turned on.\",\"style\":\"info\"},\"name\":\"text - 8\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and (groupStatus_s == 'active' or groupStatus_s == 'resolved') and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and issueType_s in ({Ransomware})\\r\\n| summarize arg_max(date_s,*) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| summarize [\\\"Findings Count\\\"] = sum(findingsCount_d),[\\\"Issue Count\\\"] = count(), src = arg_max(date_s,Factor_s), Active = sumif(findingsCount_d, groupStatus_s == \\\"active\\\"), Resolved = sumif(findingsCount_d, groupStatus_s == \\\"resolved\\\") by issueType_s, subject_s, severity_value_s \\r\\n| extend Ransomware=strcat_array(split(issueType_s,\\\"_\\\"),\\\" \\\"), Severity=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s), Details = strcat('https://platform.securityscorecard.io/#/scorecard/', subject_s,'/issues/',src,'/',issueType_s)\\r\\n| project subject_s, Ransomware, Severity, ['Findings Count'], ['Issue Count'], Active, Resolved, Details\\r\\n| project-rename Company = subject_s\\r\\n| sort by Ransomware asc, Company asc\",\"size\":0,\"showAnalytics\":true,\"title\":\"Issues per Vendor\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}},{\"columnMatch\":\"Details\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"Click to view details\"}},{\"columnMatch\":\"drilldown_url\",\"formatter\":7,\"formatOptions\":{\"linkTarget\":\"Url\",\"linkLabel\":\"details\"}}],\"rowLimit\":10000}},\"name\":\"Issues per Vendor\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Issues per Vendor (Ransomware)\"},\"name\":\"Issues per Vendor (Ransomware)\"},{\"type\":12,\"content\":{\"version\":\"NotebookGroup/1.0\",\"groupType\":\"editable\",\"items\":[{\"type\":1,\"content\":{\"json\":\"# Spotlight\"},\"name\":\"text - 0\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73978413-5a37-4814-b4fc-4143999f13ec\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Timer\",\"label\":\"Time Range\",\"type\":4,\"isRequired\":true,\"value\":{\"durationMs\":604800000},\"typeSettings\":{\"selectableValues\":[{\"durationMs\":300000},{\"durationMs\":900000},{\"durationMs\":1800000},{\"durationMs\":3600000},{\"durationMs\":14400000},{\"durationMs\":43200000},{\"durationMs\":2592000000},{\"durationMs\":172800000},{\"durationMs\":259200000},{\"durationMs\":604800000},{\"durationMs\":1209600000},{\"durationMs\":2419200000},{\"durationMs\":2592000000},{\"durationMs\":5184000000},{\"durationMs\":7776000000}],\"allowCustom\":true},\"timeContext\":{\"durationMs\":2592000000}}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Timerparameter\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"73bc33a2-eb41-4433-9b1d-59930d7ddf3d\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Portfolio\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where isnotempty(portfolioName_s)\\r\\n| distinct portfolioName_s\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Portfolio\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"ae9eff1e-6b7b-4d64-9516-30ea5bc5fb17\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Company\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio}))\\r\\n| distinct subject_s\\r\\n| sort by subject_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Company\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"d9274665-9d9c-417b-9d3f-03162538cf92\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Factor\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardIssue\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| extend label = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\"),value = Factor_s\\r\\n| distinct value, label\\r\\n| sort by label asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Factor\"},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"485b4de7-9cd5-4e5e-b2d4-da7f921ff61c\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Industry\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"query\":\"SecurityScorecardRatings\\r\\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| distinct industry_s\\r\\n| sort by industry_s asc\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"*\",\"showDefault\":false},\"timeContext\":{\"durationMs\":0},\"timeContextFromParameter\":\"Timer\",\"defaultValue\":\"value::all\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"customWidth\":\"0\",\"name\":\"Industry\"},{\"type\":1,\"content\":{\"json\":\"
\"},\"name\":\"text - 6\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardRatings\\r\\n| where body_s =='OverAll' and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company}))\\r\\n| summarize arg_max(dateToday_s,*) by subject_s\\r\\n| extend Grade = case((scoreToday_d >= 90), \\\"A\\\",(scoreToday_d>=80 and scoreToday_d<=89), \\\"B\\\",(scoreToday_d>=70 and scoreToday_d<=79), \\\"C\\\",(scoreToday_d>=60 and scoreToday_d<=69), \\\"D\\\",isempty(scoreToday_d),\\\"\\\",\\\"F\\\") \\r\\n| project Grade, subject_s, scoreToday_d\\r\\n| project-rename Company = subject_s, Score = scoreToday_d\\r\\n| sort by Score asc\\r\\n| limit 10\",\"size\":0,\"showAnalytics\":true,\"title\":\"Worst Performing Companies\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Grade\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"A\",\"representation\":\"green\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"B\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"C\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"D\",\"representation\":\"redBright\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"F\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"representation\":\"blue\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"40\",\"name\":\"Worst Performing Companies\",\"styleSettings\":{\"showBorder\":true}},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue\\r\\n| where body_s == 'Issue' and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor}))\\r\\n| summarize arg_max(date_s,*), [\\\"Company Count\\\"] = dcount(subject_s,4) by issueName_s, severity_value_s, issueType_s, Factor_s\\r\\n| extend serverity_priority = case(severity_value_s == \\\"high\\\",1,severity_value_s == \\\"medium\\\",2,severity_value_s == \\\"low\\\",3,severity_value_s == \\\"info\\\",4,5), severity_value=case((severity_value_s == \\\"info\\\"),\\\"Info\\\",(severity_value_s == \\\"low\\\"),\\\"Low\\\",(severity_value_s == \\\"medium\\\"),\\\"Medium\\\",(severity_value_s == \\\"high\\\"),\\\"High\\\",(severity_value_s == \\\"positive\\\"),\\\"Positive\\\",severity_value_s) \\r\\n| extend Issues=trim(@\\\"'\\\",issueName_s), Factor=strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| sort by serverity_priority asc, [\\\"Company Count\\\"] desc\\r\\n| project Severity = severity_value, Issues, Factor = Factor, [\\\"Company Count\\\"]\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Critical Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"Severity\",\"formatter\":18,\"formatOptions\":{\"thresholdsOptions\":\"colors\",\"thresholdsGrid\":[{\"operator\":\"==\",\"thresholdValue\":\"High\",\"representation\":\"red\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Medium\",\"representation\":\"orange\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Low\",\"representation\":\"yellow\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Info\",\"representation\":\"blue\",\"text\":\"{0}{1}\"},{\"operator\":\"==\",\"thresholdValue\":\"Positive\",\"representation\":\"lightBlue\",\"text\":\"{0}{1}\"},{\"operator\":\"Default\",\"text\":\"{0}{1}\"}]}}],\"rowLimit\":10000,\"filter\":true}},\"customWidth\":\"60\",\"name\":\"Most Critical Issues\",\"styleSettings\":{\"showBorder\":true}},{\"type\":9,\"content\":{\"version\":\"KqlParameterItem/1.0\",\"parameters\":[{\"id\":\"e316e111-37ee-404b-8feb-920a6147bf30\",\"version\":\"KqlParameterItem/1.0\",\"name\":\"Severity\",\"type\":2,\"isRequired\":true,\"multiSelect\":true,\"quote\":\"'\",\"delimiter\":\",\",\"typeSettings\":{\"additionalResourceOptions\":[\"value::all\"],\"selectAllValue\":\"\",\"showDefault\":false},\"jsonData\":\"[\\r\\n { \\\"value\\\":\\\"info\\\", \\\"label\\\":\\\"Info\\\"},\\r\\n { \\\"value\\\":\\\"low\\\", \\\"label\\\":\\\"Low\\\" },\\r\\n { \\\"value\\\":\\\"medium\\\", \\\"label\\\":\\\"Medium\\\"},\\r\\n { \\\"value\\\":\\\"high\\\", \\\"label\\\":\\\"high\\\" },\\r\\n { \\\"value\\\":\\\"positive\\\", \\\"label\\\":\\\"Positive\\\"}\\r\\n]\",\"timeContext\":{\"durationMs\":2592000000},\"defaultValue\":\"value::all\"}],\"style\":\"pills\",\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\"},\"name\":\"parameters - 10\"},{\"type\":3,\"content\":{\"version\":\"KqlItem/1.0\",\"query\":\"SecurityScorecardIssue \\r\\n| where body_s == \\\"Issue\\\" and groupStatus_s == \\\"active\\\" and ('*' in ({Industry}) or industry_s in ({Industry})) and ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) and ('*' in ({Company}) or subject_s in ({Company})) and ('*' in ({Factor}) or Factor_s in ({Factor})) and severity_value_s in ({Severity})\\r\\n| summarize arg_max(date_s, *) by eventID_d, Factor_s, subject_s, date_s, issueType_s, groupStatus_s, findingsCount_d, issueName_s, totalScoreImpact_d, severity_value_s, industry_s, portfolioId_g\\r\\n| extend totalcount = toscalar(SecurityScorecardIssue | summarize dcount(subject_s))\\r\\n| summarize subject = dcount(subject_s), totalCount = max(totalcount) by issueName_s, issueType_s, Factor_s\\r\\n| extend [\\\"% of Portfolio Affected\\\"] = round((todouble(subject)/todouble(totalCount))*100,0)\\r\\n| extend Factor = strcat_array(split(Factor_s,\\\"_\\\"),\\\" \\\") \\r\\n| project Factor, issueName_s, [\\\"% of Portfolio Affected\\\"]\\r\\n| sort by [\\\"% of Portfolio Affected\\\"] desc\\r\\n| project-rename Issues = issueName_s\",\"size\":0,\"showAnalytics\":true,\"title\":\"Most Common Issues\",\"timeContextFromParameter\":\"Timer\",\"showExportToExcel\":true,\"queryType\":0,\"resourceType\":\"microsoft.operationalinsights/workspaces\",\"visualization\":\"table\",\"gridSettings\":{\"formatters\":[{\"columnMatch\":\"% of Portfolio Affected\",\"formatter\":3,\"formatOptions\":{\"min\":0,\"max\":100,\"palette\":\"redDark\"}}]}},\"name\":\"Most Common Issues\",\"styleSettings\":{\"showBorder\":true}}]},\"conditionalVisibility\":{\"parameterName\":\"setTab\",\"comparison\":\"isEqualTo\",\"value\":\"Spotlight\"},\"name\":\"Spotlight\"}]},\"name\":\"Main\",\"styleSettings\":{\"showBorder\":true}}],\"fromTemplateId\":\"sentinel-SecurityScorecardWorkbook\",\"$schema\":\"https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json\"}\n", "version": "1.0", "sourceId": "[variables('workspaceResourceId')]", "category": "sentinel" diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json b/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json index d154275876c..f5c86c1c1e4 100644 --- a/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json +++ b/Solutions/SecurityScorecard Cybersecurity Ratings/Workbooks/SecurityScorecardWorkbook.json @@ -1729,7 +1729,7 @@ "multiSelect": true, "quote": "'", "delimiter": ",", - "query": "SecurityScorecardIssue\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\r\n| extend factor = strcat_array(split(Factor_s,\"_\"),\" \")\r\n| distinct value=Factor_s, lable=factor\r\n| sort by lable asc", + "query": "SecurityScorecardIssue\r\n| where ('*' in ({Portfolio}) or portfolioName_s in ({Portfolio})) or ('*' in ({Company}) or subject_s in ({Company}))\r\n| extend factor = strcat_array(split(Factor_s,\"_\"),\" \")\r\n| distinct value=Factor_s, label=factor\r\n| sort by label asc", "typeSettings": { "additionalResourceOptions": [ "value::all" From 88cfed76c21f989fc118d4577092b795fd80b4fb Mon Sep 17 00:00:00 2001 From: Shrey Sonar Date: Tue, 28 Jul 2026 12:24:59 +0530 Subject: [PATCH 9/9] Restore 2.0.0 package zip and add its release notes entry Address review feedback from @v-maheshbh: - Restore Package/2.0.0.zip, which was removed when 3.0.0 was generated. Prior version archives are retained across the repo (BitSight keeps seven, Cloudflare seven, ElasticAgent two), so the existing zip stays alongside the new one. - Add the 2.0.0 row to ReleaseNotes.md so the retained archive has a matching entry, and refresh the 3.0.0 date to the current publish date. --- .../Package/2.0.0.zip | Bin 0 -> 18006 bytes .../ReleaseNotes.md | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 Solutions/SecurityScorecard Cybersecurity Ratings/Package/2.0.0.zip diff --git a/Solutions/SecurityScorecard Cybersecurity Ratings/Package/2.0.0.zip b/Solutions/SecurityScorecard Cybersecurity Ratings/Package/2.0.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..1a7afb84b894c3433e5073f62bad8d248c7ff066 GIT binary patch literal 18006 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