checks/entra/no-security-baseline.ps1

# No identity security baseline: Security Defaults OFF *and* no enabled Conditional Access.
# Works on any tenant (Security Defaults + reading CA are free); a genuine "nothing protects sign-in" finding.
$sd = Invoke-MgGraphRequest -Method GET -Uri 'https://graph.microsoft.com/v1.0/policies/identitySecurityDefaultsEnforcementPolicy' -OutputType PSObject
$caCount = 0
try {
    $ca = Get-GraphAll 'https://graph.microsoft.com/v1.0/identity/conditionalAccess/policies?$select=state'
    $caCount = @($ca | Where-Object { $_.state -eq 'enabled' }).Count
} catch {}
$items = @()
if (-not $sd.isEnabled -and $caCount -eq 0) {
    $items += [pscustomobject]@{ Title = 'No sign-in security baseline in place'; Detail = 'Security Defaults are disabled and there are no enabled Conditional Access policies'; Severity = 'critical' }
}
[pscustomobject]@{
    Name = 'Identity security baseline'
    Severity = 'critical'
    Evidence = "Security Defaults: $(if ($sd.isEnabled) { 'enabled' } else { 'disabled' }); $caCount enabled Conditional Access policies"
    Fix = 'Enable Security Defaults, or (on Entra ID P1+) create Conditional Access policies that enforce MFA and block legacy auth.'
    Items = $items
}