Skip to content

docs(audit): Power Platform pattern catalog (closes #336)#370

Merged
Daren9m merged 1 commit into
mainfrom
spike/336-power-platform
Apr 30, 2026
Merged

docs(audit): Power Platform pattern catalog (closes #336)#370
Daren9m merged 1 commit into
mainfrom
spike/336-power-platform

Conversation

@Daren9m
Copy link
Copy Markdown
Collaborator

@Daren9m Daren9m commented Apr 30, 2026

Summary

Resolves spike #336. Thirteenth domain audit under v3.4.0 umbrella (#326). Ships docs/audits/power-platform.md.

Resolves the PBI/POWERBI duplication chore from #333.

The headline finding

Inverse of typical: too much duplicate Power BI coverage and zero coverage of the broader Power Platform.

Coverage
Power BI tenant settings 26 existing checks (with 11 confirmed duplicate pairs)
Power Apps / Power Automate 0 checks
Tenant isolation 0 checks
Environment hygiene 0 checks
Power Platform DLP 0 checks
Copilot governance 0 checks

11 confirmed PBI/POWERBI duplicate pairs

Control intent PBI-* POWERBI-*
Block ResourceKey Auth PBI-AUTH-001 POWERBI-AUTH-001
API access by SP restricted PBI-API-001 POWERBI-AUTH-002
SP profile creation PBI-PROFILE-001 POWERBI-AUTH-003
Guest user access PBI-GUEST-001 POWERBI-GUEST-001
External invitations PBI-INVITE-001 POWERBI-GUEST-002
Guest content access PBI-CONTENT-001 POWERBI-GUEST-003
Sensitivity labels PBI-LABELS-001 POWERBI-INFOPROT-001
Publish to web PBI-PUBLISH-001 POWERBI-SHARING-001
R/Python visuals PBI-SCRIPT-001 POWERBI-SHARING-002
Shareable links PBI-LINK-001 POWERBI-SHARING-003
External data sharing PBI-SHARING-001 POWERBI-SHARING-004

Plus 3 PBI-TENANT-* meta-checks that overlap further.

Coverage matrix

Category Total Covered Refresh Gaps
Tenant isolation 3 0 0 3
Environment hygiene 5 0 0 4
DLP policy coverage 6 0 0 5
Sharing controls 4 2 (Power BI side) 0 1
Copilot governance 3 0 0 3
Anti-patterns 6 1 0 1 unique
Total 23 unique 3 0 17 net to file + 11 dedup pairs

Threat-pattern map highlights

Compromise pattern Tradecraft Primary control
Citizen-developer data exfil via flow Compromised user creates Power Automate flow that emails CSV to attacker mailbox DLP HTTP / external-email connector restriction
Cross-tenant data flow via guest maker Guest from partner tenant builds flow pulling from your env Tenant isolation enabled
Default-environment proliferation Every licensed user is auto-Maker, accumulating ungoverned apps/flows Default environment lockdown (the #1 Power Platform governance recommendation per CoE Starter Kit)
Personal-cloud connector to enterprise data Flow combines OneDrive (Business) + Personal-OneDrive (Non-Business) Connector classification + cross-classification block
Custom HTTP connector → arbitrary egress Maker creates custom connector to attacker URL Custom connector evaluation + HTTP connector class
Copilot grounding leak across sensitivity classes Confidential content surfaces in Copilot response for unprivileged user Sensitivity-label enforcement on Copilot grounding

Fourth canonical data file proposed

data/power-platform-connectors.json — curated reference of Power Platform connectors with recommended classifications (Business / Non-Business / Blocked).

This is now the fourth canonical reference data file proposed across the audit work:

Worth coordinating as a v3.5 release theme: "canonical reference data layer for cross-consumer M365 governance."

Detection-method first: Power Platform admin PowerShell

This is the first audit where detection lives in Microsoft.PowerApps.Administration.PowerShell, separate from both Graph and Exchange Online PowerShell. Auth uses a different consent flow than Graph (explicit Power Platform admin role + tenant-level consent in the PP admin center).

Power BI side uses yet another module (MicrosoftPowerBIMgmt).

Files

  • docs/audits/power-platform.md — 328 lines
  • CHANGELOG.md[Unreleased] / Documentation entry

Test plan

Out of scope

  • Application-level Power App security (per-app data sources, RBAC) — too org-specific
  • Power BI report-level sensitivity labels — spike: research Purview DLP, sensitivity label, and retention patterns #335 (Purview)
  • Dataverse RLS / column security — out of audit scope
  • Power Automate runtime telemetry — runtime, not config
  • Sign-in patterns for Power Platform admin portal — runtime telemetry

Progress on v3.4.0 audit umbrella

13 of 14 domain audits done. Identity stack done. Collaboration triad done. Mail flow + Intune + MDCA done. Power Platform now done.

Last remaining: #335 Purview — DLP + sensitivity labels + retention. Largest scope, most distinct from prior audits, and the cross-spike target for several open consolidations (#337 sensitivity-label site protection, #340 Teams sensitivity labels, #336 Copilot grounding labels).

🤖 Generated with Claude Code

Thirteenth domain audit under v3.4.0 umbrella (#326). Resolves spike #336.

docs/audits/power-platform.md surfaces an inverse-of-typical coverage
finding: TOO MUCH duplicate Power BI coverage (26 existing checks
across PBI-* + POWERBI-* with 11 confirmed duplicate pairs) and ZERO
coverage of the broader Power Platform (Power Apps, Power Automate,
Dataverse, Copilot Studio, tenant isolation, environment hygiene, DLP).

Catalogs 23 unique patterns across 6 sub-domains (tenant isolation,
environment hygiene, DLP policy coverage, sharing controls, Copilot
governance, anti-patterns).

Headline outcomes:
- 11 confirmed duplicate pairs PBI-* ↔ POWERBI-* (resolves the
  consolidation chore originally flagged in #333)
- 3 PBI-TENANT-* meta-checks that overlap further
- 17 gap CheckIDs (the largest cluster: 5 in DLP policy coverage,
  including the HTTP connector restriction which is the workhorse of
  Power Platform exfil prevention)
- Default environment lockdown is named the #1 governance recommendation
- 4 cross-spike with #335 (Copilot grounding + sensitivity labels)
- Proposes fourth canonical data file:
  data/power-platform-connectors.json for recommended connector
  classifications. Joins role-tiers.json, microsoft-first-party-
  appids.json, transport-rule-actions.json — pattern emerging across
  audits worth coordinating as v3.5 release theme.

Threat-pattern map covers:
- Citizen-developer data exfil via flow (compromised user emails CSV
  to attacker mailbox)
- Cross-tenant data flow via guest maker (no tenant isolation)
- Default-environment proliferation (everyone is auto-Maker)
- Personal-cloud connector to enterprise data (cross-classification
  combination)
- Custom HTTP connector → arbitrary egress
- Public Power BI report leak (already covered ✅)
- Copilot grounding leak across sensitivity classes
- Copilot Studio bot exfil

DETECTION-METHOD FIRST: this is the first audit where detection lives
in the Power Platform admin PowerShell module
(Microsoft.PowerApps.Administration.PowerShell), separate from Graph
AND from Exchange Online PowerShell. Auth uses different consent flow
than Graph (explicit Power Platform admin role + tenant-level consent
in PP admin center). Appendix documents 8 edge cases including
connector classification list dynamism, environment-count scaling,
PBI/POWERBI namespace duplication mechanics, and Copilot governance
emerging surface.

Same template as #327, #328, #329, #330, #331, #332, #333, #334, #337,
#338, #339, #340.

Closes #336

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

Content enrichment population

Overall (1105 checks): rationale 26.3% (291/1105) • impact 26.3% (291/1105) • references 26.3% (291/1105)

Framework n rationale impact references
cis-controls-v8 1020 25.1% (256/1020) 25.1% (256/1020) 25.1% (256/1020)
cis-m365-v6 180 100.0% (180/180) 100.0% (180/180) 100.0% (180/180)
cisa-scuba 52 100.0% (52/52) 100.0% (52/52) 100.0% (52/52)
cmmc 1080 26.3% (284/1080) 26.3% (284/1080) 26.3% (284/1080)
eidsca 21 100.0% (21/21) 100.0% (21/21) 100.0% (21/21)
essential-eight 630 22.2% (140/630) 22.2% (140/630) 22.2% (140/630)
fedramp 1072 27.1% (291/1072) 27.1% (291/1072) 27.1% (291/1072)
gdpr 11 100.0% (11/11) 100.0% (11/11) 100.0% (11/11)
hipaa 501 33.3% (167/501) 33.3% (167/501) 33.3% (167/501)
iso-27001 1020 26.6% (271/1020) 26.6% (271/1020) 26.6% (271/1020)
iso-27002 1020 26.6% (271/1020) 26.6% (271/1020) 26.6% (271/1020)
iso-27017 1012 26.0% (263/1012) 26.0% (263/1012) 26.0% (263/1012)
mitre-attack 892 30.7% (274/892) 30.7% (274/892) 30.7% (274/892)
nis2 311 25.7% (80/311) 25.7% (80/311) 25.7% (80/311)
nist-800-171 1080 26.3% (284/1080) 26.3% (284/1080) 26.3% (284/1080)
nist-800-53 1072 27.1% (291/1072) 27.1% (291/1072) 27.1% (291/1072)
nist-csf 826 31.1% (257/826) 31.1% (257/826) 31.1% (257/826)
pci-dss 1052 26.3% (277/1052) 26.3% (277/1052) 26.3% (277/1052)
soc2 1103 26.4% (291/1103) 26.4% (291/1103) 26.4% (291/1103)
stig 13 100.0% (13/13) 100.0% (13/13) 100.0% (13/13)

Informational only — does not gate the build. The hard release-gate for Critical/High enrichment lives in #281 (v3.2.0).

@github-actions
Copy link
Copy Markdown

Framework mapping count delta

Framework main this PR Δ Δ% Status
cis-controls-v8 1020 1020 0 +0.00% ✓ OK
cis-m365-v6 180 180 0 +0.00% ✓ OK
cisa-scuba 52 52 0 +0.00% ✓ OK
cmmc 1080 1080 0 +0.00% ✓ OK
eidsca 21 21 0 +0.00% ✓ OK
essential-eight 630 630 0 +0.00% ✓ OK
fedramp 1072 1072 0 +0.00% ✓ OK
gdpr 11 11 0 +0.00% ✓ OK
hipaa 501 501 0 +0.00% ✓ OK
iso-27001 1020 1020 0 +0.00% ✓ OK
iso-27002 1020 1020 0 +0.00% ✓ OK
iso-27017 1012 1012 0 +0.00% ✓ OK
mitre-attack 892 892 0 +0.00% ✓ OK
nis2 311 311 0 +0.00% ✓ OK
nist-800-171 1080 1080 0 +0.00% ✓ OK
nist-800-53 1072 1072 0 +0.00% ✓ OK
nist-csf 826 826 0 +0.00% ✓ OK
pci-dss 1052 1052 0 +0.00% ✓ OK
soc2 1103 1103 0 +0.00% ✓ OK
stig 13 13 0 +0.00% ✓ OK

Result: ✓ PASS — no framework mapping regressions detected.

@Daren9m Daren9m merged commit 9de3cc3 into main Apr 30, 2026
8 checks passed
@Daren9m Daren9m deleted the spike/336-power-platform branch April 30, 2026 14:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant