Skip to content
InvardiaInvardia
Why InvardiaProductsFeaturesPricingCommunity
Docs
All documentation
Product documentationPIM ManagerSecurityInsight
SettingsPIM Manager settingsSecurityInsight settingsEntra Policy Suite settings
ScriptsPIM Manager scriptsSecurityInsight scriptsEntra Policy Suite scriptsInvardia scripts
Error codesPIM Manager error codesSecurityInsight error codes
API and MCPPIM Manager APIPIM Manager MCP toolsSecurityInsight APISecurityInsight MCP tools
SecurityPIM Manager security packSecurityInsight security packEntra Policy Suite security pack
Network and designPIM Manager network guidesPIM Manager command wizardNetwork egressDesign your installationCalculate your cost
SupportSetup scriptsRemote support access
Search the docs
SupportAboutContactBook a demoCustomer portalDesign your installationFree Pro trial

SecurityInsight docs

1 Why

  • Install SecurityInsight
  • Updates and upgrades
  • Operations
  • Security
  • Identities and permissions
  • SQL access
  • Guards and guard modes
  • Data health
  • Releases, rings and waves
  • Support access
  • Naming
  • Settings
  • The daily pipeline
  • Departments
  • Exemptions
  • CMDB and ServiceNow
  • Weighted risk by CMDB service
  • Community edition: the scripts you run
  • SecurityInsight 3 beside 2.2

7 Integrate

  • The SecurityInsight data contract
  • ServiceNow integration overview
  • ServiceNow staging tables and columns
  • Handling records and states
  • Knowing when a sync is complete
  • Setting up ServiceNow for SecurityInsight
  • Testing with the SecurityInsight test pack
  • ServiceNow troubleshooting and FAQ

On this page

  • How the pieces fit
  • What you need
  • Install
  • The install and configuration scripts
  • Collect: the profilers
  • Analyse and deliver
  • Act and operate
  • Update
  • Container entry points
  • Files that ship but are not for Community use
  • What Community does not include

SecurityInsight documentation · Verified against SecurityInsight 3.0.79 on Nov 9, 2026

Community edition: the scripts you run

SecurityInsight Community is free on GitHub. It is a set of PowerShell scripts that you install and run yourself, in your own Azure: on a Windows server (Task Scheduler) or as Azure Container Apps jobs. It has no web app. Settings live in configuration files, and results arrive as an Excel workbook, a mail and Log Analytics tables. An Azure Monitor workbook that you import is the Community dashboard.

This page lists every file in the Community download that you run, one by one: what it is for, how you run it, what it produces and what it needs. Every script runs on Windows PowerShell 5.1 and PowerShell 7 and needs no PowerShell modules: Azure, Microsoft Graph and Defender are called over REST.

How the pieces fit

Step What runs Where the result goes
Install A setup script, once Azure resources, a configuration file
Collect Four profilers and the privilege tier classifier Log Analytics profile tables
Analyse Risk Analysis (Summary and Detailed) and the risk trend Log Analytics finding and trend tables
Deliver Risk Analysis Excel workbook, mail, JSON files, blob storage or a file share
Operate The daily pipeline, the health check, the deviation report Run health table, console, CSV
Update The update script A new signed release from GitHub

On a server, one scheduled task runs the daily pipeline: every step in order, each when the one before it has ended. In Container Apps, a pipeline job does the same with one job per engine.

What you need

  • An Azure subscription for SecurityInsight’s resources: a Log Analytics workspace, a data collection endpoint and rules, a storage account and a Key Vault. The setup scripts create them.
  • An identity for the scripts. The default is a managed identity (of the container jobs, an Azure VM or an Azure Arc server), and the setup wizard and the container setup choose it unless you pick otherwise. A service principal with a certificate (recommended) or a client secret is a supported choice, and the only one on a server outside Azure. It needs read-only rights: Reader on what you want profiled, Monitoring Metrics Publisher on the data collection rules, Log Analytics Reader on the workspace, the storage data roles on SecurityInsight’s own storage account, and read-only Microsoft Graph, Defender XDR and Defender for Endpoint application permissions. A grant script makes these grants, or prints them for someone who can.
  • Someone who can grant application permissions (Privileged Role Administrator or Global Administrator) and assign roles on those scopes, once, during install.
  • Optional: an Azure OpenAI deployment (AI tier classification and the AI summary), a Shodan key (public IP exposure), an SMTP server (the report mail), a CMDB CSV file (business services and criticality).

Install

Open Azure Cloud Shell in PowerShell, signed in to the tenant you want to assess. The install is two lines: line 1 downloads one small file from the latest public release on GitHub, line 2 runs it. It downloads the release, checks it and runs its installer.

Invoke-WebRequest https://github.com/KnudsenMorten/SecurityInsight/releases/latest/download/Install-SecurityInsight.ps1 -OutFile Install-SecurityInsight.ps1
./Install-SecurityInsight.ps1 -TenantId '<tenant id>' -SubscriptionId '<subscription id>'

You sign in as yourself: in Cloud Shell there is no prompt; on your own PC (PowerShell 7 or Windows PowerShell 5.1) a browser window asks you to sign in. No PowerShell modules, no Azure CLI and no client secret. The checks run first, and nothing is created until they pass.

1. The quickest install (most people start here): the two lines above, nothing added. One subscription, every other answer has its default (a new resource group in West Europe, a new Log Analytics workspace, the web app, and the reports mailed to you).

The samples below are line 2 with what you change added.

2. Your own region, resource group and report recipients, when you have naming rules or the reports go to a team:

./Install-SecurityInsight.ps1 -TenantId '<tenant id>' -SubscriptionId '<subscription id>' `
    -Location 'northeurope' -ResourceGroup 'rg-securityinsight' -MailTo 'secops@contoso.com'

3. Read every subscription, in a management group or in the whole tenant, not only the one SecurityInsight runs in (or -CollectionScope tenantRoot for the whole tenant):

./Install-SecurityInsight.ps1 -TenantId '<tenant id>' -SubscriptionId '<subscription id>' `
    -CollectionScope 'managementGroup' -ManagementGroupId '<management group id>'

4. Private network only: no public endpoints, the web app reachable from your network only. You get the hand-off list for your network team at the end.

./Install-SecurityInsight.ps1 -TenantId '<tenant id>' -SubscriptionId '<subscription id>' `
    -PrivateNetwork -VnetId '<resource id of your virtual network>' `
    -AppsSubnetName 'snet-si-apps' -EndpointsSubnetName 'snet-si-endpoints' `
    -HubVnetId '<resource id of your hub virtual network>' -WebAppAccess internal

5. Check first, or continue an install that stopped: -PreflightOnly runs the checks only and changes nothing; -Resume continues from the step that stopped, with the same answers.

./Install-SecurityInsight.ps1 -TenantId '<tenant id>' -SubscriptionId '<subscription id>' -PreflightOnly
./Install-SecurityInsight.ps1 -TenantId '<tenant id>' -SubscriptionId '<subscription id>' -Resume

Pro trial: start it at invardia.com/trial, then run the same two lines with line 1 from invardia.com. No licence or key goes on the line:

Invoke-WebRequest https://invardia.com/support/si/Install-SecurityInsight.ps1 -OutFile Install-SecurityInsight.ps1
./Install-SecurityInsight.ps1 -TenantId '<tenant id>' -SubscriptionId '<subscription id>'

Every other setting (your own workspace, SMTP mail, Azure OpenAI, customer-managed keys …) is a parameter of line 2, so any install is two lines: after line 1, Get-Help ./Install-SecurityInsight.ps1 -Full lists them all.

The install and configuration scripts

File Purpose How to run it Produces
setup\Install-SecurityInsight.ps1 Guided install as Container Apps jobs. Checks your sign-in, rights, resource providers and names first and changes nothing until they pass; then creates every resource step by step and reports each step. A grant it cannot make ends as a warning with the exact command. Without a licence file it installs Community. In Azure Cloud Shell, with the two lines above: line 1 downloads Install-SecurityInsight.ps1, line 2 ./Install-SecurityInsight.ps1 -TenantId '<tenant id>' -SubscriptionId '<subscription id>' runs this installer from the release it downloads; every setting is a parameter. -PreflightOnly runs only the checks; -Resume continues after a stop. Resource group, workspace, data collection endpoint and rules, storage, Key Vault, managed identity and its grants, the container registry and image, the Container Apps jobs, a first run and a health check
Setup-SecurityInsight-Unattended.ps1 A Windows server install without prompts, driven by a JSON file. .\Setup-SecurityInsight-Unattended.ps1 -ConfigPath .\setup.json Azure resources and config\SecurityInsight.custom.ps1
setup\ConfigWizard\Start-SetupWizard.ps1 A local setup wizard: serves a page on localhost only while the script runs and opens it in your browser. You answer tenant, workspace, mail, CMDB, Azure OpenAI and Shodan questions; it sets up the sign-in, creates the Log Analytics resources and writes your configuration file. The sign-in is a user-assigned managed identity by default: created, granted and attached to the VM you name (for Container Apps, the jobs’ own identity). A service principal with a certificate or a client secret is there when you choose it; on a server outside Azure, where no managed identity can exist, the wizard says so and offers a certificate first, then a secret. It configures the install and nothing else. .\setup\ConfigWizard\Start-SetupWizard.ps1, stop it with Ctrl+C Managed identity (or a service principal), workspace, data collection endpoint, storage, configuration file
Bootstrap-ContainerAppJob.ps1 Creates or updates the Container Apps hosting: registry, image built in your registry, Container Apps environment, one job per engine with its schedule, and the pipeline job. The jobs sign in as a user-assigned managed identity by default; a service principal by client secret (-UseClientSecret) or by certificate (-CertificateKeyVaultName with -CertificateSecretName) when you choose it. An install whose configuration already carries a client secret keeps it until you run it with -UseManagedIdentity. .\Bootstrap-ContainerAppJob.ps1 -ResourceGroupName <rg> -Location <region> -UseManagedIdentity -GrantIdentityRoles Container Apps jobs (endpoint, identity, azure, publicip, privilege tier classifier, Risk Analysis Summary and Detailed, trend)
Bootstrap-Storage.ps1 Creates SecurityInsight’s storage account for run state and caches, Entra sign-in only (shared keys off). .\Bootstrap-Storage.ps1 -ResourceGroupName <rg> -StorageAccountName <name> -Location <region> Storage account, queues and tables
Bootstrap-Auth.ps1 Service principal installs only: reads the service principal’s details and workspace pointers from your Key Vault and writes them into the configuration file. .\Bootstrap-Auth.ps1 -KeyVaultName <vault> Configuration entries
setup\Grant-SIIdentity.ps1 Grants a managed identity (VM, Arc server or user-assigned), or with -AppId <client id> an app registration that signs in with a certificate, everything SecurityInsight reads with. Prints what is present and missing; changes nothing without -Apply. -Tagging grants the separate write plan for asset tagging’s own identity. .\setup\Grant-SIIdentity.ps1 -VmName <vm> -VmResourceGroup <rg> -KeyVaultName <vault> -Apply Role assignments and application permissions
setup\Validate-SILogAnalytics.ps1 Creates or checks the workspace, data collection endpoint, rules and tables. .\setup\Validate-SILogAnalytics.ps1 Log Analytics resources
setup\Validate-SIOpenAI.ps1 Creates or checks an Azure OpenAI account and model deployment for the AI features. .\setup\Validate-SIOpenAI.ps1 -SubscriptionId <sub> -ResourceGroupName <rg> -Location <region> (-ValidateOnly to check) Azure OpenAI account and deployment
setup\Install-SIFlowTask.ps1 Server install: runs the engines as one daily pipeline (one scheduled task) instead of one task per engine. Previewed, reversible with -Remove. .\setup\Install-SIFlowTask.ps1 -Apply (as administrator) Scheduled task, the old per-engine tasks disabled
setup\Switch-SIJobOrchestration.ps1 Container install: switch between the daily pipeline and one timer per job. Previewed, reversible. .\setup\Switch-SIJobOrchestration.ps1 -Mode flow -ResourceGroupName <rg> -Apply Job triggers changed
setup\Set-SIStorageSharedKey.ps1 Shows, or turns off, shared-key access on SecurityInsight’s storage account after proving nothing uses a key. .\setup\Set-SIStorageSharedKey.ps1 -Disable Storage setting

One script on its own. The configuration scripts above that act on Azure and Entra (Grant-SIIdentity, Validate-SIOpenAI, Set-SIStorageSharedKey, Switch-SIJobOrchestration, Set-SISqlAdminGroup, Grant-SISupportAccess) and the health checks Test-SIInstall and Invoke-SIJobsOnce are also published one by one, each as a single self-contained file that needs no PowerShell module and no download of the release, for a machine without the install or for Azure Cloud Shell:

Invoke-WebRequest https://invardia.com/support/si/Grant-SIIdentity.ps1 -OutFile Grant-SIIdentity.ps1
.\Grant-SIIdentity.ps1 -VmName <vm> -VmResourceGroup <rg> -KeyVaultName <vault>

Any of them: https://invardia.com/support/si/<Script>.ps1; the checksums are in SHA256SUMS.txt next to them. Run on its own, a script does not read an install’s configuration file unless you name it with -ConfigPath.

Configuration files (edit, do not run): config\SecurityInsight.custom.community.sample.ps1 (copy to SecurityInsight.custom.ps1), config\SecurityInsight.custom.reference.ps1 (every setting with a generated glossary: purpose, real default, effect, when to change it) and launcher\<engine>\LauncherConfig.custom.sample.ps1 per engine. Your *.custom.* files are never touched by an update.

Collect: the profilers

On a server you run the launcher.community-vm.ps1 of each engine (scheduled by the pipeline task, or by hand). In Container Apps the same engines run as jobs through container\Start-SIInContainer.ps1. Collection is read-only.

File Purpose How to run it Produces
launcher\endpoint\launcher.community-vm.ps1 Profiles every device from Defender XDR and Exposure Graph: server roles from installed software and detection rules, tier from rules and from the most-privileged users who log on, Defender for Cloud recommendations. .\launcher\endpoint\launcher.community-vm.ps1 (-ForceFullRun ignores the change cache; -WhatIfMode stops before writing) SI_Endpoint_Profile_CL, run health
launcher\identity\launcher.community-vm.ps1 Profiles users, groups and service principals from Entra ID and Defender for Identity: tier from the roles and permissions each one holds, including nested group chains; MFA, SSPR and passwordless registration. .\launcher\identity\launcher.community-vm.ps1 SI_Identity_Profile_CL, run health
launcher\azure\launcher.community-vm.ps1 Profiles Azure resources from Azure Resource Graph, with tags inherited from resource group, subscription and management group. .\launcher\azure\launcher.community-vm.ps1 SI_Azure_Profile_CL, run health
launcher\publicip\launcher.community-vm.ps1 Profiles the public IPs of devices and Azure resources, linked to the asset behind each one; with a Shodan key adds open ports, services, certificates and CVEs. Runs after endpoint and Azure. .\launcher\publicip\launcher.community-vm.ps1 SI_PublicIP_Profile_CL, run health
launcher\privilege-tier-classifier\launcher.community-vm.ps1 Refreshes the privilege tier catalog (Entra roles, API permissions, Azure roles, AD groups) with your own Azure OpenAI. Optional: without Azure OpenAI the shipped catalog is used. .\launcher\privilege-tier-classifier\launcher.community-vm.ps1 The tier catalog file the profilers read
asset-profiling-providers\generic-cmdb\Refresh-CmdbCache.ps1 Loads your CMDB CSV file (business services, criticality, data sensitivity, owners, CIs) into SecurityInsight’s storage, where the profilers and Risk Analysis read it. The CSV can come from any CMDB or be kept by hand. .\asset-profiling-providers\generic-cmdb\Refresh-CmdbCache.ps1 -StorageAccountName <name> -CsvPath .\CMDB.csv CMDB tables in storage

Analyse and deliver

File Purpose How to run it Produces
launcher\risk-analysis\launcher.community-vm.ps1 Risk Analysis: runs the report catalog against the profiles and Defender, scores every finding (consequence x asset tier x risk factors, weighted by CMDB criticality) and ranks it, most critical asset first. Summary and Detailed are two runs. .\launcher\risk-analysis\launcher.community-vm.ps1 -Summary and -Detailed; -ReportTemplate <name> picks a report set; -BuildSummaryByAI adds the AI summary Excel workbook (no Office needed), summary mail, SI_RiskAnalysis_Summary_CL and SI_RiskAnalysis_Detailed_CL, JSON files, optional upload to blob storage or a file share, today’s trend row
launcher\asset-trend\launcher.community-vm.ps1 The daily risk trend: one point per day overall, per tier, per security domain and per severity. .\launcher\asset-trend\launcher.community-vm.ps1 (-Grain week -Weeks 12 -ShowWeeklyRate prints a weekly rate) SI_Trend_CL, console
preview\AzureWorkbook\SecurityInsight-RiskAnalysis.workbook.json The Community dashboard: an Azure Monitor workbook over the SecurityInsight tables (risk score tiles, trend, domain and tier charts, top N, identity inventory). Import it once: Azure Monitor, Workbooks, Advanced Editor, paste, save A workbook in your Azure portal

Reports, exclusions, risk weights and the scoring matrix are files: RiskAnalysis_Queries_Custom.yaml, RiskAnalysisGlobalExclusions.custom.json, <Report>.exclude.custom.json and riskscore_weighted.schema.custom.json.

Act and operate

File Purpose How to run it Produces
launcher\asset-tagging\launcher.community-vm.ps1 Writes SecurityInsight’s classification back as Defender machine tags, Azure resource tags and Entra custom security attributes, from tagging rules. Report only by default: a run logs every tag it would set and changes nothing. It writes only when you ask: -Apply on a run, or $global:SI_AssetTagging_Apply = $true in your configuration. The one script that can write to your tenant; its identity needs the write rights (setup\Grant-SIIdentity.ps1 -Tagging). An install that wrote tags with an earlier version is told once, on its first run after the update, that tagging is now report only and how to switch writing back on. .\launcher\asset-tagging\launcher.community-vm.ps1 (report only), then with -Apply to write. -WhatIfMode still works and means report only. SI_AssetTagActivity_CL; tags only when writing is on
setup\Get-SIDeviationReport.ps1 Every deviation from the shipped defaults: changed settings, exclusions, disabled detections, tier moves, overridden reports and risk weights, with who changed them and when. Reads your custom files; writes nothing to the install. .\setup\Get-SIDeviationReport.ps1 -AsCsv Console or a CSV file
engine\flow\Invoke-SIJobFlowRun.ps1 The daily pipeline runner, started by the scheduled task or the pipeline job. You can also start one step or the rest of a run by hand. .\engine\flow\Invoke-SIJobFlowRun.ps1 -HostKind Vm -Step <step> or -FromStep <step> Each step run in order, run health per step
diagnostics\Test-SIInstall.ps1 Read-only health check: rows and last time per SecurityInsight table, how each engine’s last run ended, the data collection rules, and that the install’s identity holds no write role outside its own resource group. Exit code 1 when anything is wrong. .\diagnostics\Test-SIInstall.ps1 Console report
diagnostics\Invoke-SIJobsOnce.ps1 Runs every Container Apps job of the install once, in pipeline order, and reports each run. .\diagnostics\Invoke-SIJobsOnce.ps1 -ResourceGroup <rg> (-PlanOnly shows the order) Job runs, console report
tools\Run-AllEngines.ps1 First run or demo on a server: starts every launcher in its own window, or one after the other. .\tools\Run-AllEngines.ps1 -Sequential The engines’ normal output

Update

File Purpose How to run it Produces
Update-SecurityInsight.ps1 Takes the release your update ring approves from SecurityInsight’s signed update channel on GitHub. It checks the signature, the product, the ring and that the version is not older, checks the download’s size and SHA-256, pauses the scheduled tasks, keeps a backup and restores it on any failure. Ring 3 (broad) is the default; ring 2 is early release. .\Update-SecurityInsight.ps1 (schedule it, or run it when you choose; -ShowReleaseNotes prints what changed) The new release in place; your custom files, logs and output untouched
setup\Invoke-SIContainerUpdate.ps1 Container install: after an update, rebuilds the engine image in your own registry, rolls the jobs, verifies them and rolls back on failure. Update-SecurityInsight.ps1 calls it for you. .\setup\Invoke-SIContainerUpdate.ps1 -Apply A new image and updated jobs

Community has no automatic update job: you run or schedule the update script.

Container entry points

You do not run these yourself; the Container Apps jobs start them. container\Start-SIInContainer.ps1 runs one engine from the job’s settings, container\Start-RiskAnalysisInContainer.ps1 runs a Risk Analysis job, and container\Invoke-ShardProducer.ps1 splits a large tenant’s collection into parts that several replicas work through (optional queue scaling).

Files that ship but are not for Community use

File Why it is there
setup\Upgrade-SIToPro.ps1, setup\Install-SIUpdaterJob.ps1, container\updater\Start-SIUpdater.ps1 The automatic updater for Pro installs. Its update client ships only in the Pro package, so in Community it has nothing to update from.
engine\asset-tagging\Invoke-SIAssetTaggingJob.ps1 Asset tagging as a container job (caj-si-asset-tagging), in the Community edition and Pro alike; it only reports until its writes are granted and switched on.
setup\Set-SISqlAdminGroup.ps1, setup\Grant-SISupportAccess.ps1 The Pro database’s admin group, and access for the Invardia Support app, which is part of a Pro agreement.
launcher\<engine>\launcher.internal-vm.ps1 Launchers for an internal automation framework; Community uses launcher.community-vm.ps1.
tools\Push-PreviewBundle.ps1, tools\Validate-PublishYml.ps1, demo\Install-DemoConfig.ps1, the schema and query documentation tools and the measuring scripts in diagnostics\ Tools the SecurityInsight team uses to publish releases, build documentation and measure engine changes.

What Community does not include

These are in the Pro editions only, and their code is not in the Community download:

  • The management web app: wall board, risk score and management views, collection views, findings workspace, tier board, CMDB and service map, settings with Review & commit and change history, the deviation page, Ask SecurityInsight and the MCP server.
  • The Pro database: every collection with its assets and findings, daily aggregates and retention.
  • Cross-source correlation: one configuration item per asset across every source, with durable ids.
  • Connectors: ServiceNow (CMDB and vulnerabilities), a SQL table or any REST system, and the vulnerability close-loop with its guards and daily mail.
  • Governance: exemptions with approval and review, departments, external advisors, roles and scopes.
  • Template releases by update ring with roll back, the signed licence, automatic signed updates through Invardia, and support through an app you control.

Community sends anonymous status reports to Invardia, once a day and at the end of each engine run (version, edition, hosting, how the run ended and counts in ranges; no tenant, no host name, no error text). It is on by default; turn it off with $global:SI_Telemetry_Enabled = $false in your configuration file.

Questions: info@invardia.com.

Verified against SecurityInsight 3.0.79 on Nov 9, 2026Download PDF

← Weighted risk by CMDB serviceSecurityInsight 3 beside 2.2 →

InvardiaInvardia

See the risk. Control the access.

Products

PIM ManagerSecurityInsightEntra Policy SuiteAll featuresPricingFree 60-day Pro trialBook a demoWhy Invardia

Docs

DocumentationSearch the docsPIM Manager settingsSecurityInsight settingsPIM network guidesCommand wizardNetwork egressPIM Manager design configuratorSecurityInsight design configuratorDesign your installationCalculate your cost

Company

AboutContactCustomer portalSupportHow support worksHow updates reach youSupport in numbersSetup scriptsRemote support accessContact: info@invardia.com

Legal

Terms of saleLicence termsData processingPrivacyCookiesCompany information
© 2026 Invardia – a brand of 2LINKIT, founded and owned by Morten Knudsen · Strandvejen 21A, 6000 Kolding, Denmark · VAT DK39208032 · Contact: info@invardia.com