Skip to content

Add workbook: Microsoft Security License & Feature Utilization - #14814

Open
d4rk-pri0r wants to merge 1 commit into
Azure:masterfrom
d4rk-pri0r:community/workbook-security-license-utilization
Open

Add workbook: Microsoft Security License & Feature Utilization#14814
d4rk-pri0r wants to merge 1 commit into
Azure:masterfrom
d4rk-pri0r:community/workbook-security-license-utilization

Conversation

@d4rk-pri0r

Copy link
Copy Markdown
Contributor

Details

New workbook Microsoft Security License & Feature Utilization that correlates licensed Microsoft security products with the signals actually flowing into Microsoft Sentinel, exposing "licensed but minimally configured" gaps across the estate. Seven tabs:

  • Overview — licensed-product coverage vs. data flowing into Sentinel
  • Identity — Entra ID identity protection / sign-in signal coverage
  • Endpoint — Defender for Endpoint onboarding, health, and alert coverage
  • Email — Defender for Office 365 protection signal coverage
  • Data Protection — Purview/Information Protection coverage
  • Defender for Cloud — plan coverage and agent signal flow
  • Sentinel — consumption, data source ingestion health, and insights usage

Each tab uses conditional visibility and empty-result guards (union isfuzzy=true over datatable defaults) so it renders correctly before a data source is onboarded.

Adds the workbook template, its WorkbooksMetadata.json entry (with white/black preview images), and uses the existing M365securityposturelogo.svg logo.

Drive-by fix included

Workbooks/WorkbooksMetadata.json previously referenced MicrosoftADTierModel.svg as the logo for MicrosoftADTierModelWorkbook; that file does not exist in Workbooks/Images/Logos/ (also 404 on master), which fails the Workbooks metadata logo validation for any PR touching the file. Repointed the entry to the existing azureactivedirectory_logo.svg.

Testing

  • Workbook JSON conforms to Notebook/1.0 template schema, no user-workbook/resource-info patterns.
  • WorkbooksMetadata.json passes the metadata schema and image/logo/preview validators (CI will re-run workbook-metadata-validations / workbook-template-validations).
  • KQL blocks validated via CI kql-validations where they reference custom tables.

Note to reviewers

Author metadata: d4rk-pri0r, Community support tier. Preview images are placeholders and will be replaced with captured workbook screenshots in a follow-up commit.

@d4rk-pri0r
d4rk-pri0r requested review from a team as code owners August 3, 2026 14:41
New workbook correlating licensed Microsoft security products with the
signals actually flowing into Sentinel, surfacing licensed-but-minimally-
configured gaps across Defender for Endpoint, Defender for Office 365,
Microsoft Entra ID, Defender for Cloud, and Sentinel itself.

Adds:
- Workbooks/MicrosoftSecurityLicenseUtilization.json
- Workbooks/WorkbooksMetadata.json entry
- White and Black preview images

Drive-by fix: MicrosoftADTierModelWorkbook referenced a logo file
(MicrosoftADTierModel.svg) that does not exist in Workbooks/Images/Logos,
which fails the Workbooks metadata logo validation; pointed it at the
existing azureactivedirectory_logo.svg instead.
@v-atulyadav
v-atulyadav requested a lite review from Copilot August 4, 2026 04:20
@v-atulyadav v-atulyadav added the Workbook Workbook specialty review needed label Aug 4, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Adds a new Sentinel workbook to visualize whether security-product telemetry is actually flowing (vs. “licensed but minimally configured”), and fixes an existing metadata logo reference that points to a non-existent file.

Changes:

  • Added Microsoft Security License & Feature Utilization workbook template with multiple tabbed sections.
  • Added a new WorkbooksMetadata.json entry for the workbook (logo + white/black previews).
  • Fixed MicrosoftADTierModelWorkbook metadata to use an existing logo file.

Reviewed changes

Copilot reviewed 2 out of 4 changed files in this pull request and generated 9 comments.

File Description
Workbooks/WorkbooksMetadata.json Fixes a broken logo reference and registers the new workbook (logo, previews, dependencies).
Workbooks/MicrosoftSecurityLicenseUtilization.json Introduces the new multi-tab workbook with KQL tiles for identity/endpoint/email/purview/cloud/sentinel coverage.

Comment on lines +12 to +18
{
"cellValue": "parameterTab",
"linkTarget": "parameter",
"linkLabel": "Overview",
"subTarget": "overview",
"style": "link"
},
Comment on lines +109 to +113
"conditionalVisibility": {
"parameterName": "parameterTab",
"comparison": "isEqualTo",
"value": "overview"
},
Comment on lines +133 to +134
"version": "KqlItem/1.0",
"query": "SigninLogs\n| where TimeGenerated > ago(30d)\n| where ResultType == \"0\"\n| extend Status = case(\n ConditionalAccessStatus =~ \"success\", \"CA Applied\",\n ConditionalAccessStatus =~ \"notApplied\", \"CA Not Applied\",\n ConditionalAccessStatus =~ \"failure\", \"CA Failure\",\n ConditionalAccessStatus =~ \"notEnabled\", \"CA Not Enabled\",\n ConditionalAccessStatus =~ \"reportOnlySuccess\", \"Report Only: Success\",\n ConditionalAccessStatus =~ \"reportOnlyFailure\", \"Report Only: Failure\",\n \"Unknown\")\n| summarize Users = dcount(UserPrincipalName), SignIns = count() by Status\n| order by SignIns desc",
Comment on lines +263 to +264
"version": "KqlItem/1.0",
"query": "OfficeActivity\n| where TimeGenerated > ago(30d)\n| where Operation in~ (\"New-InboxRule\", \"Set-Mailbox\", \"Set-MailboxAutoReplyConfiguration\", \"Set-TransportRule\")\n| summarize Operations = count() by Operation, UserId\n| order by Operations desc",
Comment on lines +351 to +352
"version": "KqlItem/1.0",
"query": "SecurityNestedRecommendation\n| where TimeGenerated > ago(30d)\n| where RecommendationState == \"UnHealthy\"\n| summarize Findings = count(), Resources = dcount(AssessedResourceId) by RecommendationSeverity\n| order by Findings desc",
Comment on lines +416 to +417
"version": "KqlItem/1.0",
"query": "SecurityAlert\n| where TimeGenerated > ago(30d)\n| summarize Alerts = count(), LastAlert = max(TimeGenerated) by ProductName\n| order by Alerts desc",
Comment on lines +11074 to +11086
"workbookKey": "MicrosoftSecurityLicenseUtilization",
"logoFileName": "M365securityposturelogo.svg",
"description": "Correlates the Microsoft security products licensed in your tenant with the signals actually flowing into Microsoft Sentinel, surfacing licensed-but-minimally-configured gaps across Defender for Endpoint, Defender for Office 365, Microsoft Entra ID, Defender for Cloud, and Sentinel itself.",
"dataTypesDependencies": [
"SigninLogs",
"AuditLogs",
"OfficeActivity",
"DeviceInfo",
"DeviceEvents",
"DeviceTvmSecureConfigurationAssessment",
"SecurityNestedRecommendation",
"InformationProtectionLogs_CL"
],
{
"type": 1,
"content": {
"json": "## Microsoft Security License & Feature Utilization\n\nThis workbook correlates the Microsoft security products your tenant licenses with the signals that are actually flowing into this Microsoft Sentinel workspace. It is designed to surface **\"licensed but minimally configured\"** gaps: paid capabilities whose data never arrives, or that are enabled yet unmonitored.\n\nEach tab checks one product family. Empty or missing tiles mean the corresponding connector is not collecting data - a candidate to onboard. The workbook reads only the current workspace; no data is modified.",
Comment on lines +96 to +97
"version": "KqlItem/1.0",
"query": "let Sources = union isfuzzy=true\n SigninLogs, AuditLogs, OfficeActivity, DeviceInfo, DeviceEvents,\n DeviceTvmSecureConfigurationAssessment, SecurityNestedRecommendation,\n InformationProtectionLogs_CL, SecurityAlert\n| where TimeGenerated > ago(30d)\n| summarize Rows = count() by Source = Type;\nlet Products = datatable(ProductName:string, SignalSource:string)[\n \"Microsoft Entra ID\", \"SigninLogs\",\n \"Microsoft Entra ID\", \"AuditLogs\",\n \"Microsoft 365 Defender - Email (MDO)\", \"OfficeActivity\",\n \"Defender for Endpoint\", \"DeviceInfo\",\n \"Defender for Cloud\", \"SecurityNestedRecommendation\",\n \"Microsoft Purview\", \"InformationProtectionLogs_CL\"\n];\nProducts\n| join kind=leftouter Sources on $left.SignalSource == $right.Source\n| extend HasData = iff(isnotempty(Rows), \"Data Flowing\", \"No Data Collected\")\n| project ProductName, SignalSource, HasData, Rows\n| order by ProductName asc",
@v-shukore

Copy link
Copy Markdown
Contributor

Hi @d4rk-pri0r, could you please resolve the branch conflicts? I’m also unable to view the images properly they only appear in black and white, as shown in the screenshot below. Thanks!
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Workbook Workbook specialty review needed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants