private/tests/Test-DiagnosticSettingsConfiguredEntraLogs.21860.ps1
<# .SYNOPSIS Tests if all Entra Logs are configured with Diagnostic Settings. #> function Test-DiagnosticSettingsConfiguredEntraLogs { [CmdletBinding()] param() Write-PSFMessage '🟦 Start' -Tag Test -Level VeryVerbose $azAccessToken = ((Get-AzAccessToken).Token | ConvertTo-SecureString -AsPlainText) $result = Invoke-WebRequest -Uri 'https://management.azure.com/providers/microsoft.aadiam/diagnosticsettings?api-version=2017-04-01-preview' -Authentication Bearer -Token $azAccessToken $diagnosticSettings = $result.Content | ConvertFrom-Json $enabledLogs = $diagnosticSettings.value.properties.logs | Where-Object { $_.enabled } | Select-Object -ExpandProperty category -Unique $logsToCheck = @( "AuditLogs", "SignInLogs", "NonInteractiveUserSignInLogs", "ServicePrincipalSignInLogs", "ManagedIdentitySignInLogs", "ProvisioningLogs", "ADFSSignInLogs", "RiskyUsers", "UserRiskEvents", "NetworkAccessTrafficLogs", "RiskyServicePrincipals", "ServicePrincipalRiskEvents", "EnrichedOffice365AuditLogs", "MicrosoftGraphActivityLogs", "RemoteNetworkHealthLogs" ) $missingLogs = $logsToCheck | Where-Object { $_ -notin $enabledLogs } $passed = $null -eq $missingLogs if ($passed) { $testResultMarkdown += "All Entra Logs are configured with Diagnostic Settings.`n`n%TestResult%" } else { $testResultMarkdown += "Some Entra Logs are not configured with Diagnostic settings.`n`n%TestResult%" } $mdInfo = "## Log archiving`n`n" $mdInfo += "Log | Archiving enabled |`n" $mdInfo += "| :--- | :---: |`n" foreach ($item in $missingLogs | Sort-Object) { $mdInfo += "|$item | ❌ |`n" } foreach ($item in $enabledLogs | Sort-Object) { $mdInfo += "|$item | ✅ |`n" } $testResultMarkdown = $testResultMarkdown -replace "%TestResult%", $mdInfo Add-ZtTestResultDetail -TestId '21860' -Title 'Diagnostic settings are configured for all Microsoft Entra logs' ` -UserImpact Low -Risk High -ImplementationCost Medium ` -AppliesTo Identity -Tag Application ` -Status $passed -Result $testResultMarkdown } |