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
← SecurityInsightOpens the print dialog - choose "Save as PDF".
Invardia SecurityInsightInvardia SecurityInsight

Security review pack

SecurityInsight -- Security review pack

ProductSecurityInsight
Version3.0.79
Date2026-10-30
Published atinvardia.com/products/securityinsight/security/
Questionsinfo@invardia.com

This pack is for the CISO and the security team who must approve SecurityInsight Pro before it is installed. It describes SecurityInsight 3.0 and its security design, not one customer's environment.

Contents

  1. Architecture
  2. Identities
  3. Permissions with justification
  4. Data
  5. Access by the vendor
  6. Supply chain
  7. Change control and audit
  8. Threat model and hardening
  9. Compliance mapping
  10. Uninstall and exit
  11. Scripts
  • Published scripts and their checksums

1. Architecture

SecurityInsight turns your Microsoft security data into one ranked list of what to fix first: every asset in Defender XDR, Entra ID and Azure is profiled, merged into one configuration item (CI) per real asset, given a privilege tier, and every finding is scored by consequence, probability and the business criticality of the asset it sits on. It runs entirely in your own Azure subscription, in a resource group you choose. Invardia does not host the product, your data or its runtime.

Components (all in your subscription)

  • Engine jobs -- Azure Container Apps jobs: the collections (endpoint, identity, Azure, public IP, the privilege-tier classifier), correlation (the CI build), Risk Analysis, the data sync, the connectors (vulnerability close-loop, CMDB hand-off, ServiceNow), verification and data health, asset tagging (opt-in), and the pipeline job that runs them in order every day.
  • Web app -- an ASP.NET Core Container App: findings, collection views, tier board, exemptions, management views, settings, access, jobs, guards, data health.
  • MCP server -- a separate Container App that answers MCP clients with the same curated read-only tools as the web app's chat, to callers that present an Entra token with a SecurityInsight app role.
  • Updater job -- pulls signed releases from Invardia, builds the image inside your registry, applies the database changes, rolls the jobs and apps, verifies and rolls back.
  • Azure SQL -- the Pro database (settings and their history, templates, exemptions, access, the CIs, vulnerability state, the copies of findings the web app reads) and the identity ledger (object identifiers only). Entra-only authentication, Standard tier.
  • Log Analytics workspace -- the SecurityInsight tables (profiles, Risk Analysis, trend, run health), the container logs and the SQL audit.
  • Key Vault -- the licence, the install key, connector secrets and optional keys (Azure OpenAI, Shodan, SMTP). Purge protection on.
  • Storage account and container registry -- run logs, staging and the work queue; the image built in your subscription. Shared-key access and the registry's admin user are off.

What Invardia hosts

  • invardia.com: the guided install's wizard, the standalone setup scripts, the documentation, licences, the signed update manifests and releases, and the receiver of the status reports (chapter 4). None of these is needed for the product to keep running: the engines run without any call to Invardia.
  • Invardia never hosts your directory data, your findings, your database or your runtime.

Network exposure options

  • The web app: from the internet behind Entra sign-in (add Conditional Access), or from your network only (internal ingress). Your choice at install. Every page except a health probe requires a signed-in user with an app role.
  • The network shape is your choice at install. *Public* (the default): Entra-only public endpoints for SQL, Key Vault, storage and the registry; the SQL server admits Azure services, because a Container Apps environment without a virtual network has no fixed outbound address, and accepts Entra identities only. *Private*: the guided install builds a virtual network with private endpoints and private DNS for SQL, Key Vault, storage and the registry, turns public network access off and makes the web app internal.
  • Outbound only. Nothing connects in to your environment. The engines call Microsoft Graph, Defender, Azure Resource Manager and Log Analytics, optionally your Azure OpenAI resource and Shodan, and -- the updater only -- Invardia's update and licence endpoints.

The design rules a reviewer can hold us to

  • Read only towards your tenant; the one writer (asset tagging) has its own identity and writes only after you switch writing on.
  • One identity per role; no secrets in settings; no identity shared between components with different jobs.
  • The engine is one-way: the web app writes requests, the engine pulls and verifies them before it acts.
  • Damage that does not heal is stopped before it happens (guards), and nothing leaves SecurityInsight while its own data is not healthy.

2. Identities

Every identity SecurityInsight creates or uses. No runtime identity holds a secret or a certificate. Installs made before the current naming keep their names (Azure cannot rename a managed identity); the earlier name is given in brackets.

Identities
IdentityKindPurposeCredentialLifetime
id-si-engine (earlier: id-si-<ring>-<edition>-<hosting>)User-assigned managed identityEvery engine job: collection, correlation, Risk Analysis, data sync, connectors, verification, data health, the pipelineNone (managed identity)As long as the install
id-si-web (earlier: uami-si-management)User-assigned managed identityThe web app: reads the database, writes people's decisions, starts named jobsNone (managed identity)As long as the install
id-si-mcp (earlier: uami-si-mcp)User-assigned managed identityThe MCP server: read-only answersNone (managed identity)As long as the install
id-si-updater (earlier: uami-si-updater)User-assigned managed identityThe updater: licence, signed releases, image build, database schema, rolling the jobsNone (managed identity)As long as the install
id-si-tagging (earlier: uami-securityinsight-tagging)User-assigned managed identityAsset tagging, opt-in; the only identity that writes to your tenantNone (managed identity)Until asset tagging is removed
Templates job identityUser-assigned managed identityWrites the template tables only, so the engine role carries no template writesNone (managed identity)As long as the install
SecurityInsight (earlier display name: SecurityInsight Management)Entra app registration and enterprise applicationUsers' sign-in to the web app; bearer tokens for the MCP server. App roles SuperAdmin, Admin, Reader, Wallboard, Department. Assignment required.No secret, no certificate: the web app's managed identity is its federated credentialAs long as the install
grp-si-sql-admins (shown as SecurityInsight SQL admins)Role-assignable Entra security groupThe SQL server's Entra administrator. After setup it holds the Invardia Support app only (when you chose support) or no one. People get in just in time, for example through PIM for Groups.n/aAs long as the install
Invardia SupportEntra app registration you create in your tenantOptional vendor support at a level you choose (chapter 5)A client secret stored at Invardia, renewed under your control in Invardia's customer portalUntil you disable or remove it
The person who installsYour own accountRuns the guided install; becomes the first SuperAdmin of the web appYour sign-in (browser, your MFA and Conditional Access)A member of the SQL admin group only for the length of the install
Break glassClassification, not an identitySecurityInsight creates no break-glass account. It recognises your break-glass accounts in its analysis so they are reported as such, never as ordinary findings.n/an/a

3. Permissions with justification

Every permission, where it is held, why, and what stops working without it. The engines check their own permissions at the start of every run: a missing one is shown in Get Started > Permissions and on the run's health record with the command that fixes it, and every other part of the run goes on.

Least-privilege alternatives considered

  • Defender for Endpoint Machine.ReadWrite.All on the engine -- refused: collection is read only (Machine.Read.All). Tag writes belong to asset tagging's own identity, opt-in.
  • A tenant-wide Microsoft Graph Mail.Send -- refused: SecurityInsight sends from one shared mailbox with Exchange RBAC for Applications scoped to that mailbox, and the setup script removes a tenant-wide Mail.Send it finds.
  • Reader at the tenant root -- not the default: the guided install defaults to one subscription; a management group or the tenant root only when you choose it.
  • db_datareader / db_datawriter / db_owner on the whole database -- replaced by one custom role per component (chapter 7).
  • db_securityadmin on the updater -- replaced by EXECUTE on one certificate-signed grant procedure.
  • Container Apps Jobs Contributor on the web app -- replaced by Container Apps Jobs Operator on the named jobs: the web app can start a job but never change it.
  • A client secret for the web app's sign-in -- replaced by a federated credential (the web app's managed identity).
Permissions
IdentityTypePermissionScopeWhy it is neededWhat breaks without itOptional
id-si-engineMicrosoft Graph application permissionUser.Read.AllTenant (read only)Every user, its account state and attributesIdentity profiling and every user reportNo
id-si-engineMicrosoft Graph application permissionGroup.Read.AllTenant (read only)Groups and transitive members, for privilege tiers and ownershipGroup-based privilege tiersNo
id-si-engineMicrosoft Graph application permissionDirectory.Read.AllTenant (read only)Directory objects, deleted objects, the tenant's nameObject resolution; the tenant name in the headerNo
id-si-engineMicrosoft Graph application permissionDevice.Read.AllTenant (read only)Entra-registered and joined devicesDevice identities in the CI buildNo
id-si-engineMicrosoft Graph application permissionApplication.Read.AllTenant (read only)Applications, service principals, app role assignments, consent grantsApplication and service principal riskNo
id-si-engineMicrosoft Graph application permissionAuditLog.Read.AllTenant (read only)Last sign-in and authentication-method registration reportsStale-account and MFA findingsNo
id-si-engineMicrosoft Graph application permissionPolicy.Read.AllTenant (read only)The policies that protect an identity, as risk factorsPolicy-based risk factorsNo
id-si-engineMicrosoft Graph application permissionRoleManagement.Read.All, RoleManagement.Read.DirectoryTenant (read only)Directory role assignmentsPrivilege tiers of identitiesNo
id-si-engineMicrosoft Graph application permissionRoleManagementPolicy.Read.Directory, RoleEligibilitySchedule.Read.Directory, RoleAssignmentSchedule.Read.DirectoryTenant (read only)Eligible and active PIM roles and their policiesPIM-aware privilege tiersNo
id-si-engineMicrosoft Graph application permissionPrivilegedAccess.Read.AzureADGroupTenant (read only)PIM for GroupsGroup-based just-in-time access in the tiersNo
id-si-engineMicrosoft Graph application permissionIdentityRiskyUser.Read.All, IdentityRiskEvent.Read.All, IdentityRiskyServicePrincipal.Read.AllTenant (read only)Identity riskIdentity-risk factorsNo
id-si-engineMicrosoft Graph application permissionThreatHunting.Read.AllTenant (read only)Advanced hunting through Graph: Defender device tables and the Exposure GraphEndpoint profiling and most Risk Analysis reportsNo
id-si-engineMicrosoft Graph application permissionUserAuthenticationMethod.Read.AllTenant (read only)Which accounts are passwordless-onlyThat detail of identity findingsNo
id-si-engineMicrosoft Graph application permissionDeviceManagementManagedDevices.Read.AllTenant (read only)Intune serial numbers and MAC addressesThose asset detailsNo
id-si-engineMicrosoft Graph application permissionDeviceManagementConfiguration.Read.AllTenant (read only)Compliance policies a device does not meet; its update ringThose asset detailsNo
id-si-engineMicrosoft Graph application permissionAccessReview.Read.AllTenant (read only)The last access review of a privileged role, group or applicationThat detail of privileged findingsNo
id-si-engineMicrosoft Graph application permissionSecurityAlert.Read.AllTenant (read only)Open alerts per deviceAlert context on devicesNo
id-si-engineMicrosoft Threat Protection application permissionAdvancedHunting.Read.AllTenant (read only)Advanced hunting queries for Risk AnalysisRisk Analysis reportsNo
id-si-engineDefender for Endpoint application permissionMachine.Read.AllTenant (read only)The device list (never Machine.ReadWrite.All)Endpoint collectionNo
id-si-engineDefender for Endpoint application permissionVulnerability.Read.AllTenant (read only)Exploit details of a CVEThat detail of vulnerability findingsNo
id-si-engineDefender for Endpoint application permissionSecurityRecommendation.Read.AllTenant (read only)Exposure impact and active alert of a recommendationThat detail of recommendation findingsNo
id-si-engineAzure RBACReaderOne subscription (default), a management group or the tenant root group -- your choiceEnumerate Azure resources (Resource Graph)Azure collectionNo
id-si-engineAzure RBACLog Analytics ReaderSecurityInsight's workspace; your Sentinel / Defender workspace when namedQuery the SecurityInsight tables and sign-in logsRisk Analysis, trend, correlationNo (the Sentinel workspace is optional)
id-si-engineAzure RBACMonitoring Metrics PublisherThe resource group of SecurityInsight's data collection rulesSend rows to Log AnalyticsEvery table writeNo
id-si-engineAzure RBACStorage Blob, Queue and Table Data ContributorSecurityInsight's storage accountRun logs, staging, the work queueRuns in parts; run logsNo
id-si-engineAzure RBACAcrPullSecurityInsight's registryPull the image (no registry password)Every jobNo
id-si-engineAzure RBACKey Vault Secrets UserSecurityInsight's Key VaultThe licence and the keys of switched-on featuresPro features; optional featuresNo
id-si-engineAzure RBACContainer Apps Jobs ContributorThe install's resource groupThe pipeline starts its steps and gives a job stopped at its run limit the longest limitThe daily pipelineNo
id-si-engineSQL rolesi_engineThe Pro databaseSchema rights where the engine owns the data, object rights elsewhere, a DENY on Admin overrides; no DDL or security rightEvery Pro engineNo
id-si-engineExchange RBAC for ApplicationsApplication Mail.SendOne shared mailbox (a management scope)Send SecurityInsight's mail as that mailbox onlyMail (an SMTP relay is the alternative)Yes
id-si-webAzure RBACAcrPullSecurityInsight's registryPull its imageThe web appNo
id-si-webAzure RBACLog Analytics ReaderSecurityInsight's workspaceThe jobs' console logs on the Jobs pageJob logs in the web appNo
id-si-webAzure RBACContainer Apps Jobs OperatorThe named SecurityInsight jobsRun now (start a job); never change a jobRun nowNo
id-si-webAzure RBACCognitive Services OpenAI UserYour Azure OpenAI resourceThe chatThe chatYes
id-si-webAzure RBACKey Vault Secrets UserSecurityInsight's Key VaultThe magic-link signing keyMagic links (off by default)Yes
id-si-webMicrosoft Graph application permissionGroupMember.Read.All, User.ReadBasic.AllTenant (read only); not granted by setupThe searchable people picker on the admin pagesOnly the picker (addresses can be typed)Yes
id-si-webSQL rolessi_web, si_audit_writerThe Pro databaseRead the views; write only the tables people's decisions go to; add audit rowsThe web appNo
id-si-mcpAzure RBACAcrPull, Log Analytics ReaderSecurityInsight's registry and workspacePull its image; answer questions on the reportsThe MCP serverYes (the MCP server is optional)
id-si-mcpSQL rolesi_mcpThe Pro databaseRead what its tools serve; never the web app's sign-in keysThe MCP serverYes
id-si-updaterAzure RBACContributorThe install's resource group and registryBuild the image in your registry, roll the jobs and apps, raise job and database sizes, turn Key Vault purge protection on (one-way)UpdatesNo
id-si-updaterAzure RBACKey Vault Secrets OfficerSecurityInsight's Key VaultKeep the licence, the install key, the update state; store secrets the web app hands overLicence renewal, updatesNo
id-si-updaterAzure RBACKey Vault Crypto OfficerSecurityInsight's Key VaultThe non-exportable key of the secret hand-overPasting a secret in the web appNo
id-si-updaterSQL rolesi_updaterThe Pro databaseDDL to apply a release's schema; EXECUTE on the signed grant procedure; no security rightDatabase changes of a releaseNo
id-si-updaterMicrosoft Graph application permissionPrivilegedAssignmentSchedule.ReadWrite.AzureADGroup, PrivilegedAssignmentSchedule.Read.AzureADGroup, RoleManagementPolicy.Read.AzureADGroup, GroupMember.Read.All, Application.Read.AllTenant; the write right is used only on SecurityInsight's SQL admin group (role-assignable); granted by setup, never by the updater itselfMake and renew the database setup job's active PIM-for-Groups membership of the SQL admin group, read the group's PIM policy and read the membership back; never RoleManagement.ReadWrite.DirectoryThe database setup job loses its database admin rights when its membership endsNo
id-si-taggingMicrosoft Graph application permissionThreatHunting.Read.All, User.Read.All, Application.Read.AllTenant (read only)Evaluate the tagging rulesAsset taggingYes (opt-in)
id-si-taggingMicrosoft Graph application permissionCustomSecAttributeAssignment.ReadWrite.AllTenant -- only when writing is onSet Entra custom security attributesAttribute writesYes
id-si-taggingDefender for Endpoint application permissionMachine.ReadWrite.AllTenant -- only when writing is onSet machine tagsMachine tag writesYes
id-si-taggingAzure RBACReader; Tag Contributor only when writing is onThe tagging scopeEvaluate Resource Graph rules; set Azure resource tagsAzure tag writesYes
id-si-taggingAzure RBACLog Analytics Reader, Monitoring Metrics Publisher, Storage Blob Data Contributor, AcrPull, Key Vault Secrets UserSecurityInsight's own resourcesIts rules, activity rows, run log, image, licenceAsset taggingYes
SecurityInsight (sign-in app)Delegated permissionsopenid, profile, offline_access, User.ReadSigned-in userSign-in onlySign-inNo
The person who installsAzure RBACContributor + Role Based Access Control Administrator on the resource group (or Owner on the subscription); Owner or User Access Administrator where SecurityInsight readsInstall timeCreate the resources and grant the identitiesEach grant you cannot make ends as a warning with the command for someone who canNo
The person who installsEntra rolePrivileged Role Administrator (or Global Administrator)Install timeGrant the read-only API permissions; create the role-assignable SQL admin groupThose steps end as a warning with the commandYes
Invardia SupportSee chapter 5Per the level you chooseYour tenantVendor supportSupport onlyYes

4. Data

What is read

Microsoft Graph (directory, roles, PIM, identity risk, Intune device details, access reviews, alerts), Defender XDR and Defender for Endpoint (devices, advanced hunting, vulnerabilities, recommendations), Azure Resource Graph and Resource Manager (resources, Defender for Cloud assessments), your Sentinel / Defender Log Analytics workspace when named (sign-in and security logs), and optionally Shodan for your own public IP addresses. All read only (chapter 3).

What is stored, where, how long

  • Log Analytics (your workspace): the profiles, Risk Analysis results, trend, run health, tag activity, container logs and the SQL audit. 90 days when setup creates the workspace; an existing workspace keeps its own retention. SecurityInsight never sets a table's retention, except the SQL audit table (at least 90 days).
  • The Pro database (your subscription): settings and their history, templates and your overrides, exemptions (ended, never deleted), access mappings, the CIs, vulnerability state, the identity ledger, and the copies of findings the web app reads. Copied collections and assets no longer seen: 90 days (setting). The audit trail: forever by default, at least 13 months when you set a retention; the database refuses any other change or deletion.
  • Storage (your subscription): run logs 30 days (setting), staging shards 7 days when the lifecycle rule is applied, exports until you delete them.
  • Key Vault: the licence, the install key, the update state, secrets you supplied. Purge protection on.
  • Azure SQL backups: Azure SQL's defaults; SecurityInsight changes none.

Encryption and residency

Everything is stored in Azure services in your subscription, in the region you chose. At rest: Azure SQL Transparent Data Encryption and storage service encryption with Microsoft-managed keys by default, or, as an option at install, customer-managed keys held in your own Key Vault. In transit: TLS on every call, HTTPS only. Storage uses Entra identities only (shared keys off); SQL uses Entra identities only.

Sent out

  • To Invardia: the status reports below (on by default; SI_Telemetry_Enabled = false turns every report off), the licence request (product, version, the tenant from the identity's own token, an install id, optionally an edition and a contact address) and the update pull (the licence and the install key). Nothing else about your estate.
  • To your own outputs, only those you configure: mail, ServiceNow, your CMDB, your SQL targets, Excel and JSON files in your storage.
  • To Azure OpenAI, only when you switch AI on, to your own resource.
  • To Shodan, only when you switch it on: your own public IP addresses.

Deletion on uninstall

Delete the resource group: every resource, the database and the data in them go with it (a Key Vault is kept soft-deleted for its retention days, then purged by Azure). The workspace keeps data you sent to an existing workspace until its retention ends. See chapter 10.

Status reports to Invardia
RecordFieldsMode
Heartbeat (daily)Product, edition, version, hosting, the kind of sign-in identity, licence state; the environment name; the guard mode, the pre-release wave and the release-mode period when they applyIdentified (install key)
Release-mode report (every 30 minutes for 12 hours after a release that changed engine code)The heartbeat's fields with counts only: users, guests, devicesIdentified
Run (every engine run)Job, outcome, duration, the failed stage, an error class, a count; the tenant, the host and the error text shortened to 8 KB with secrets removedIdentified
Guard (a safety check trips)Which check, its outcome and severity, the numbers against the limit, the held count, first and last seen; the strict and configured limit in a stricter periodIdentified
Health (each data health cycle)The state, the cycle, per source and per report: sampled, found, missing, mismatched, the margin and the verdict; which data-out channels are held or overridden (by role, never a person). Never a record's name, id or value.Identified
Any record of an install without an install keyA random install id, no tenant, no host, no error text; counts only as rangesAnonymous

5. Access by the vendor

Invardia (the vendor) can reach your install only through the Invardia Support app: an app registration you create in your own tenant with Invardia's published script, at the level you choose. Without it Invardia has no access. Most installs never create it: SecurityInsight updates and repairs itself without contact.

The levels

  • Troubleshoot -- read only: read-only Microsoft Graph permissions; Reader and Log Analytics Reader on SecurityInsight's resource group; Key Vault Reader (metadata, never a secret value); a read-only database role (database admin only just in time, during a support session you asked for).
  • Setup -- runs SecurityInsight's setup scripts to install, repair and upgrade: Contributor on SecurityInsight's resource group with role assignment limited to the roles SecurityInsight's own identities use (to service principals only); Key Vault Secrets Officer; a read-only database role, with database admin only just in time (at most 8 hours, at most this level); the Graph permissions the setup scripts need.

The exact permission list per level is on the documentation page of Invardia's script: https://invardia.com/docs/invardia/scripts/New-InvardiaSupportApp/.

When it is used

Only when you ask for help, and for release spot checks on rings 0-2 (read only, counts only, only while your environment's switch "release spot checks allowed" is on -- on by default for rings 0-2; chapter 6).

How it is controlled and audited

  • Its client secret is stored at Invardia. In Invardia's customer portal you set it Enabled or Disabled, its lifetime (1-730 days) and its renewal: Automatic (default on rings 0-2), Approval required (default on ring 3) or Off. Automatic renewal adds a new secret, proves a sign-in with it and only then removes the old one. A secret with a lifetime under 7 days is never renewed. A disabled or removed app is never renewed.
  • A Conditional Access policy for this app only, blocking its sign-in from anywhere but Invardia's support address, is created with it -- switched off, for you to switch on.
  • Every support session starts with a recorded reason or ticket. Every SQL statement goes through Invardia's audited call: the audit row (server, database, the statement's SHA-256, the purpose) is written before it runs. Every Azure call goes through the session's recording commands. You see them in your activity log at Invardia; the SQL audit also lands in your own workspace.
  • Changes to an install are made only with SecurityInsight's published scripts, each with a plan first and a rollback record (chapter 11).

How you remove it

Grant-SISupportAccess -Remove takes SecurityInsight's part away (Key Vault role, the database user and consent, any group membership or ownership left from an earlier release); disable or remove the app in the customer portal, or delete the app registration in Entra ID.

What the vendor cannot do

Reach your install without the app; read a secret value at the Troubleshoot level; use the engine identity; change SecurityInsight's code outside a signed release; keep what it read during a spot check (counts and verdicts only).

6. Supply chain

Signed releases

  • The vendor publishes each release to Invardia; Invardia signs, per update ring, a manifest that names the release and its SHA-256 (RS256).
  • Your updater accepts a manifest only when its signature verifies against Invardia's update-signing public keys that ship inside SecurityInsight (a key list fetched over the network is never trusted on its own; keys are rotated by shipping old and new side by side), the product, the kind and your ring match, its sequence is not lower than the one applied, and the download's size and SHA-256 match. A failed check applies nothing.
  • The image is built inside your own registry from the verified source. No prebuilt image is shipped. A failed roll goes back to the previous image.

Rings, waves and approval

  • Rings 0 Dev, 1 Test, 2 Design partners, 3 Broad, in that order. SecurityInsight decides which version goes to which ring.
  • A release to rings 2 and 3, and every early-release wave, needs the APPROVED state, set only by the vendor's release owner, with a reason, recorded; Invardia refuses the release without it. A setup-only release (no engine code) is the exception, shown and logged on the release.
  • A version is not promoted while an install that took it turned Unhealthy (data health, chapter 7) or stopped reporting for 48 hours.
  • After a release that changed engine code: 24 hours of halved safety-check limits, 12 hours of 30-minute counts to Invardia, and every changed component is Testing until 3 good daily runs.

Who can release

Only the vendor, signed in to Invardia as its publisher application with a certificate; ring 2 and 3 releases additionally need the release owner's APPROVED. Invardia relays and signs; it does not change the content.

How you pin or delay updates

Stay on ring 3 (the default) to take releases last; a release that needs a manual step is held until you accept it on the updater job; template packs that would change templates in force wait for an Admin's release, per detection method; *Pro updates from Invardia* can be switched off.

Source availability and dependencies

  • The source of each release is delivered to your install (the image is built from it in your registry) and can be read there.
  • No PowerShell modules and no Azure CLI in anything that ships: Azure, Graph, SQL and Log Analytics are called over REST with SecurityInsight's own code. The web app and MCP server are .NET, built in your registry.
  • A software bill of materials (SBOM) comes with every signed release, so you can check every component and dependency it contains.
  • Every script is listed with its SHA-256 in SHA256SUMS.txt (chapter 11).

7. Change control and audit

In the web app

  • Tier moves, documents (exclusions, weights, rules) and settings are staged and written only on Review & commit, each in one transaction with an audit row. Nothing is deleted; an exemption is ended.
  • Governed exemptions: owners and approvers per security domain and per department, request -> approve / reject with a comment, standard periods, a monthly owner review, mail.
  • Signed requests: a decision that leads to a change outside SecurityInsight (connector settings, exemptions, asset tagging, data-out decisions) carries the signed Entra token of the person who made it and of the approver; the engine verifies signature, issuer, audience, lifetime, user and role before it acts, and refuses what it cannot verify.
  • A change a job carries out names the person who asked for it and the approver, under one correlation id from the web request to the job's rows.

The audit trail

  • cfg.AuditEvent and cfg.ChangeLog refuse UPDATE and DELETE to every database user (a DENY to public, enforced by the database). No runtime identity holds DDL or ownership, so it binds all of them. The one way rows leave is the retention procedure (never younger than 13 months, recorded).
  • SQL auditing of the server to your Log Analytics workspace, 90 days.
  • Run health of every engine run, container logs and run transcripts in your workspace and storage.

Guards (safety checks)

  • On by default: the CI retire brake (a run or hand-off batch is held when far more CIs would disappear than allowed; a CI retires only after 7 days unseen), the duplicates brake (a connector that could read its target only in part writes nothing), the asset-drop check, and two review checks. Every other check can be switched on.
  • Integrity stops are not switchable: a database change that could remove data, a failed database update, a collection that could not be read in full.
  • Guard modes: for 24 hours after a release that changed engine code, every numbered limit is halved from the configured value; a SuperAdmin may end it early with a recorded reason.
  • Every event is written in plain words (what happened, why, consequence, what to do), mailed at most once a day while it repeats, shown on Operations > Guards and reported to Invardia.

Data health

Every day SecurityInsight samples 10 % (at least 50) of each source's records at random, asks the source again and compares. After three anomalous days the data is Unhealthy and every data-out channel is held (vulnerability closes, CMDB hand-off, ServiceNow, tagging, outputs) until one good cycle; a SuperAdmin can let one channel through with a recorded reason until the data is healthy again.

Undo and backup

Nothing is deleted in the web app; template releases can be rolled back per detection method; every cut-over script writes a rollback record; Azure SQL keeps its point-in-time backups (Azure defaults).

One deviation report

Every override, exemption, exclusion, disabled detection, tier move and changed setting with its owner, reason and expiry.

8. Threat model and hardening

The top risks of running SecurityInsight, the control for each, and the residual risk with the choice you have. Then a hardening checklist you can apply.

Threat model
ThreatControlResidual risk and your choice
Privilege escalation through the engine identityRead-only Graph and Defender permissions; no write permission on the tenant; Reader only where you chose; asset tagging on its own identity, writes opt-in; the least-privilege SQL role si_engine with no DDL or security rightThe engine can read your whole directory and security data by design; keep the collection scope as small as your need
A compromised web app or web administratorEntra sign-in with assignment required, your MFA and Conditional Access; a fixed 8-hour session with code flow and PKCE; four server-checked roles; staging and approvals; the one-way engine (the web app can start, never change, a job); signed requests verified by the engine; an append-only audit trailAn administrator signed in within the token's lifetime can act within their role; your Conditional Access decides how they sign in
A compromised database administratorThe admin group is a role-assignable group holding only the Support app; people enter just in time; SQL auditing records every statement to your workspace; the audit trail refuses changes to every runtime identityThe database owner is not bound by a DENY; that is why the group stays reserved and every statement is audited
Update tamperingSigned manifests verified against embedded keys; ring, sequence, size and SHA-256 checks; an SBOM with every release; the image built in your registry; roll-back; the APPROVED gate for rings 2-3; the health gateRing 3 takes releases last
A defective release doing mass damageHalved guard limits for 24 hours, 30-minute counts for 12 hours, Testing / Stable per component, waves, the health gate, ringsA SuperAdmin may end the stricter period early, with a recorded reason
Incomplete or wrong source data closing tickets or retiring CMDB itemsAbsence is never remediation; failed sources are frozen; collections are complete-or-nothing; guards; data health holds every data-out channelA SuperAdmin may let one channel through, with a recorded reason, until the data is healthy
Secret theftManaged identities everywhere; no secrets in settings or environment; Key Vault with purge protection; the web app never writes a secret; registry admin user off; storage shared keys off; customer-managed keys as an optionSecrets you add for optional features (an SMTP password, an API key) live in your Key Vault
Misuse of vendor accessCustomer-created Support app at a chosen level; customer-controlled secret state, lifetime and renewal; a Conditional Access policy for the app; audited SQL; recorded sessions; the activity logYou decide whether the app exists, its level, and when its Conditional Access policy is on
A privileged person running a tampered or misunderstood scriptSHA256SUMS; a documentation page per script with every right and change; plan / -WhatIf first; transcripts; no second-stage downloads; save-then-run commandsVerify the signature before you run a script
Data leaving through the chat or MCPFixed read-only tools; the role decides; an Entra token with an app role on every MCP callMagic links bypass Conditional Access by design; they are off unless you switch them on
Network exposureEntra sign-in on every page; internal ingress; Entra-only SQL; outbound only; the private shape with private endpoints and public access offThe public shape admits Azure services to SQL; choose the private shape for strict networks
Hardening checklist
#ActionWhy
1Choose web access from your network only, or add Conditional Access (MFA, compliant device, named locations) to the SecurityInsight enterprise applicationThe web app shows your security posture
2Keep the collection scope as small as your need (one subscription is the default)Least privilege for the engine
3Leave asset tagging writes off unless you use themThe only tenant writes
4Keep magic links offThey bypass Conditional Access
5Choose the private network shape at installPrivate endpoints; public network access off
5aChoose customer-managed keys at install if your policy requires your own keysEncryption at rest under your key
6Keep the SQL admin group empty; reach it just in time through PIM for GroupsNo standing database owner
7If you create the Invardia Support app: switch its Conditional Access policy on, choose Approval required, use short secret lifetimes, disable it when not neededVendor access only when you want it
8Stay on ring 3 if you need change windows; accept manual steps deliberatelyUpdates on your terms
9Review the deviation report and the guard events monthlyOverrides and exemptions do not drift
10Set an audit-trail retention (at least 13 months) and export the workspace to long-term storage per your policyEvidence for audits
11Compare a downloaded script's SHA-256 with SHA256SUMS.txt and read its documentation page before you run itScripts run with high privilege
12Keep the default guards on; switch on further checks you want to be told aboutDamage stopped before it happens
13Decide on status reports to Invardia (on by default; one setting turns them off)Your data policy

9. Compliance mapping

How SecurityInsight supports your own controls. This is support for your controls, not a certification: SecurityInsight and Invardia do not hold ISO 27001, SOC 2 or similar certification for the product.

Compliance mapping
FrameworkControlHow SecurityInsight supports it
ISO/IEC 27001:2022 Annex A5.9 Inventory of information and other associated assetsOne CI per real asset across Defender, Entra ID and Azure, with owner, department and business service
ISO/IEC 27001:2022 Annex A5.15 Access control / 8.2 Privileged access rightsPrivilege tiers of every identity, PIM-aware, with findings on standing and excessive privilege
ISO/IEC 27001:2022 Annex A8.8 Management of technical vulnerabilitiesEvery recommendation as a vulnerability, ranked by business impact; the close-loop to your ticketing with closes only on complete data
ISO/IEC 27001:2022 Annex A8.9 Configuration managementDefender for Cloud recommendations per resource; the deviation report of every override
ISO/IEC 27001:2022 Annex A5.23 Information security for use of cloud servicesRuns in your own subscription; vendor access only through your Support app
ISO/IEC 27001:2022 Annex A8.15 Logging / 8.16 Monitoring activitiesAppend-only audit trail; SQL audit; run health; guard events; data health
ISO/IEC 27001:2022 Annex A8.32 Change managementReview & commit, approvals, signed requests, template releases per ring
ISO/IEC 27001:2022 Annex A8.20 Networks securityPublic IP exposure of Tier 0/1 assets (optional Shodan)
NIS2 Article 21(2)(a) Risk analysis and information system security policiesDaily risk analysis across endpoints, identities, Azure and public IPs
NIS2 Article 21(2)(d) Supply chain securitySigned releases, rings with approval, builds in your registry, no module dependencies
NIS2 Article 21(2)(e) Vulnerability handlingPrioritised vulnerabilities with the close-loop and exemptions with owners and expiry
NIS2 Article 21(2)(i) Access control policies and asset managementAsset inventory and privilege tiers
CIS Controls v81 Inventory and control of enterprise assetsThe CI build across sources
CIS Controls v85 Account management / 6 Access control managementIdentity profiling, stale accounts, privilege tiers
CIS Controls v87 Continuous vulnerability managementDaily vulnerability ranking and close-loop
CIS Controls v88 Audit log managementAudit trail, SQL audit, run health in your workspace

10. Uninstall and exit

Remove everything SecurityInsight created

  1. If you created the Invardia Support app: run Grant-SISupportAccess -Remove, then remove the app with Invardia's script (-Action Remove) or delete it in Entra ID.
  2. Delete the SecurityInsight resource group. This removes the jobs, the web app, the MCP server, the updater, the identities, the registry, the storage account, the database server with both databases, the Key Vault (kept soft-deleted for its retention days, 90 by default, then purged by Azure -- purge protection prevents an earlier purge) and a workspace setup created.
  3. Remove the role assignments SecurityInsight's identities had outside the resource group (Reader where it collected, Log Analytics Reader on your Sentinel workspace) -- Azure removes assignments of a deleted identity's principal, but lists them as unknown until then.
  4. Delete the enterprise applications' API permissions (they go with the deleted managed identities) and the sign-in app registration *SecurityInsight*.
  5. Delete the SQL admin group grp-si-sql-admins.
  6. If SecurityInsight sent mail from a shared mailbox: remove the Exchange management scope and role assignment, and the mailbox if it was created for SecurityInsight.
  7. If asset tagging wrote tags: they stay on your devices, resources and identities (they are yours); remove them if you want.

What remains

Data SecurityInsight wrote to an existing Log Analytics workspace stays until that workspace's retention removes it. Tickets, CMDB records and files SecurityInsight handed to your systems stay there. Invardia keeps your licence and the status reports it received under its own retention; nothing of your directory or findings.

11. Scripts

Scripts are run by highly privileged people, so every script a person runs follows the same rules:

  • A documentation page per script at https://invardia.com/docs/si/scripts/<Script>/: purpose, when to run it, the rights it needs, every change it makes (create / update / grant / remove, the object, the permission and scope, why, how to undo it), its parameters, what it only reads, every host it calls, what its preview shows, how to undo the whole script, its version and SHA-256. The page shows the manifest only while it matches the published script exactly.
  • Preview first: every script supports -WhatIf or plans by default; under a preview it reads and prints what it WOULD change and writes nothing. The product's tests run every script this way with every outside call replaced and fail on any write.
  • A transcript of every run on the machine it ran on (no secret is ever printed or written); the last line printed is its path.
  • No second download: a standalone script carries everything it runs, each part checked against its SHA-256; nothing is fetched and executed at run time.
  • Save, then run -- never pipe into PowerShell. Every command shown is two lines: download the file, run it. Verification is described next to the block.
  • No secrets in, no secrets out: browser sign-in or a managed identity; secret parameters are secure strings or Key Vault secret names.
  • Listed: every published script is listed with its SHA-256 in SHA256SUMS.txt next to it. Compare the file with that list before you run it; the documentation page shows how.
  • Cut-over scripts for existing installs (Set-SISecurityBaseline, Move-SIEngineToLeastPrivilege, Install-SIGrantProcedure) run only inside a recorded Invardia support session, send every SQL statement through Invardia's audited call, write a rollback record, add before they remove, and remove broad rights only in a second, later run after a green pipeline.
Standalone scripts (https://invardia.com/support/si/<Script>.ps1)
ScriptPurposeRights needed to run itChanges it makesPreviewIntegrity
Grant-SISupportAccessGive or remove the Invardia Support app's access to SecurityInsightOwner or User Access Administrator (the SecurityInsight Key Vault); Entra admin of the Pro SQL server (member of the SQL admin group) (the Pro database); Privileged Role Administrator (the SecurityInsight SQL admin group, role-assignable -- only with -Remove or -LegacyStandingAccess); Application Administrator or owner of the app (the SecurityInsight app registrations -- only with -Remove or -LegacyStandingAccess)grant: the Support app's service principal [Key Vault Reader (troubleshoot) / Key Vault Secrets Officer (setup)]; create: the just-in-time support grant in each product database (signed procedures, the Support app's own read-only database user, the consent -- never db_owner); grant: Storage Queue Data Message Sender on the support grant's queue (the queue starts the support grant job; no right on any job); remove: Container Apps Jobs Operator on the support grant job, given by an earlier release; LEGACY ONLY (-LegacyStandingAccess, off): a standing SQL admin group membership and app ownership; remove: with -Remove only: the database user, the consent, a membership or ownershipPrints every grant / membership / ownership it would add or remove; adds or removes nothing.SHA-256 in SHA256SUMS.txt
Set-SISqlAdminGroupMake one role-assignable group the Pro SQL server's Entra adminPrivileged Role Administrator (or Global Administrator) (the tenant); SQL Server Contributor (or Contributor / Owner) (the SQL server); Microsoft Graph RoleManagement.ReadWrite.Directory with Group.ReadWrite.All (when an app runs it instead of a person) (the tenant)create: grp-si-sql-admins (role-assignable security group); update: members: the Invardia Support app (when -MemberObjectIds names it) -- never a SecurityInsight runtime identity; update: the Entra admin = grp-si-sql-admins, recorded by the server as a groupPrints the group it would create, the members it would add and the admin it would set; changes nothing.SHA-256 in SHA256SUMS.txt
Grant-SIIdentityGrant a managed identity everything SecurityInsight reads withOwner or User Access Administrator (each scope it grants on); Privileged Role Administrator (or Global Administrator) (the tenant); Microsoft Graph AppRoleAssignment.ReadWrite.All (when an app runs it instead of a person) (the tenant)grant: the managed identity [Key Vault Secrets User]; grant: the managed identity [Reader]; grant: the managed identity [Monitoring Metrics Publisher]; grant: the managed identity [Log Analytics Reader]; grant: the managed identity [Storage Blob Data Contributor, Storage Queue Data Contributor, Storage Table Data Contributor]; grant: the managed identity [AcrPull]; grant: the managed identity's service principal [Microsoft Graph User.Read.All, Group.Read.All, Directory.Read.All, Device.Read.All, Application.Read.All, AuditLog.Read.All, Policy.Read.All, RoleManagement.Read.All, RoleManagement.Read.Directory, RoleManagementPolicy.Read.Directory, RoleEligibilitySchedule.Read.Directory, RoleAssignmentSchedule.Read.Directory, PrivilegedAccess.Read.AzureADGroup, IdentityRiskyUser.Read.All, IdentityRiskEvent.Read.All, IdentityRiskyServicePrincipal.Read.All, ThreatHunting.Read.All, UserAuthenticationMethod.Read.All, DeviceManagementManagedDevices.Read.All, DeviceManagementConfiguration.Read.All, AccessReview.Read.All, SecurityAlert.Read.All; Microsoft Threat Protection AdvancedHunting.Read.All; WindowsDefenderATP Machine.Read.All, Vulnerability.Read.All, SecurityRecommendation.Read.All]; grant: the asset-tagging identity [Tag Contributor; Machine.ReadWrite.All; CustomSecAttributeAssignment.ReadWrite.All (write grants, opt-in)]; grant: the SecurityInsight identity [Monitoring Contributor]; grant: the SecurityInsight identity [Log Analytics Contributor]The plan: every grant listed as present / missing; nothing is granted (same as running without -Apply).SHA-256 in SHA256SUMS.txt
Validate-SIPermissionsCheck, or grant, a service principal's permissions for SecurityInsightPrivileged Role Administrator (or Global Administrator) (the tenant); Owner or User Access Administrator (the scopes it grants on)grant: the service principal [the read-only collection set (User.Read.All, Group.Read.All, Directory.Read.All, Device.Read.All, Application.Read.All, AuditLog.Read.All, Policy.Read.All, RoleManagement.Read.*, Identity risk read, ThreatHunting.Read.All, UserAuthenticationMethod.Read.All, DeviceManagementManagedDevices.Read.All, DeviceManagementConfiguration.Read.All, AccessReview.Read.All, SecurityAlert.Read.All, AdvancedHunting.Read.All, Machine.Read.All, Vulnerability.Read.All, SecurityRecommendation.Read.All)]; grant: the service principal [Reader (+ Tag Contributor with -IncludeTagContributor), Monitoring Metrics Publisher, Log Analytics Reader]; create: the service principal when it does not existReport only: present / missing per permission and role; nothing is granted or created.SHA-256 in SHA256SUMS.txt
Validate-SIOpenAICreate or check the Azure OpenAI account for the AI featuresContributor (or Cognitive Services Contributor) (the resource group)create: an Azure OpenAI (Cognitive Services) account; create: a model deployment on that accountCheck only (as -ValidateOnly): what exists and what would be created; nothing is created and no model dump files are written.SHA-256 in SHA256SUMS.txt
Set-SIStorageSharedKeyShow, or switch off, shared-key access on SecurityInsight's storage accountStorage Account Contributor (or Contributor) (the storage account)update: allowSharedKeyAccess = false, defaultToOAuthAuthentication = true (-Disable) / allowSharedKeyAccess = true (-Enable)The report, plus "would switch shared-key access OFF / ON"; nothing is changed.SHA-256 in SHA256SUMS.txt
Switch-SIJobOrchestrationSwitch between the daily job flow and one timer per jobContributor (or Container Apps Contributor) (the install's resource group)update: each job's trigger (schedule / manual)The plan: every job's trigger before / after; no job is changed (same as without -Apply).SHA-256 in SHA256SUMS.txt
Test-SIInstallHealth check of a SecurityInsight install (read-only)Reader (and Log Analytics Reader on the workspace) (the install's resource group)The same check -- it changes nothing in any case.SHA-256 in SHA256SUMS.txt
Invoke-SIJobsOnceRun every SecurityInsight job once, in pipeline orderContainer Apps Jobs Operator (or Contributor) (the install's resource group)create: one execution of each jobThe plan (as -PlanOnly): which jobs would run in which order; no job is started.SHA-256 in SHA256SUMS.txt
Set-SILicenseInstall a SecurityInsight Pro licenceKey Vault Secrets Officer (the SecurityInsight Key Vault)update: SI-LicenseChecks the licence and shows where it would be written; nothing is written.SHA-256 in SHA256SUMS.txt
Request-SILicenseAsk Invardia for this install's Pro licence, and install itKey Vault Secrets Officer (the SecurityInsight Key Vault)create: a licence request for this tenant / install; update: SI-LicenceRequest-State, and SI-License once approvedShows the licence request state only (as -Status); nothing is requested and no licence is installed.SHA-256 in SHA256SUMS.txt
Set-SIServiceNowCredentialStore the ServiceNow connection in the Key VaultKey Vault Secrets Officer (the SecurityInsight Key Vault)update: the ServiceNow instance URL, user and password secretsShows which secrets it would set; nothing is written.SHA-256 in SHA256SUMS.txt
Set-SIMailSet up how SecurityInsight sends mailExchange Administrator (narrowest: Mail Recipient Creation + Role Management) (Exchange Online); Privileged Role Administrator or Cloud Application Administrator (the tenant)create: the shared mailbox (-CreateMailbox, on by default); create: service principals for SecurityInsight's identities (New-ServicePrincipal); create: management scope SecurityInsight-Sender (only that mailbox); grant: per identity: Application Mail.Send on that scope [Application Mail.Send]; remove: a tenant-wide Microsoft Graph Mail.Send on those identities [Mail.Send]; update: SI-Smtp-PasswordThe plan: what would be created, granted and removed, with the commands; nothing is changed (same as without -Apply).SHA-256 in SHA256SUMS.txt
Set-SIInstallRingRecord this install's update ringthe install identity (service principal + certificate) (the Pro database)update: cfg.InstallState: Ring, channel, set bySays which ring would be recorded where; the database is not opened.SHA-256 in SHA256SUMS.txt
Set-SIInstallTenantRecord the tenant's name for the web app's headerany signed-in account of the tenant (an application needs Directory.Read.All or Organization.Read.All) (the tenant); the install identity (service principal + certificate) (the Pro database)update: cfg.InstallState: Tenant (name, domain, set by)Says what would be read and where it would be recorded; neither Microsoft Graph nor the database is opened.SHA-256 in SHA256SUMS.txt
Clear-SIGuardEventsAcknowledge every open guard eventthe install identity (service principal + certificate) (the Pro database)update: each open guard event: acknowledged, by, reasonThe preview: the open events it would acknowledge; nothing is acknowledged (same as without -Apply).SHA-256 in SHA256SUMS.txt
Grant-SIUpdaterDatabaseLet the product updater apply database changes (one time)member of the SQL admin group (the server's Entra admin) (the Pro database)create: a contained database user for the updater's managed identity; grant: the updater's user [the role si_updater: DDL, and EXECUTE on cfg.ApplyComponentGrants]; create: the component roles and the certificate-signed grant procedure (see Install-SIGrantProcedure), when missingPrints every statement it would run; nothing is changed without -Apply.SHA-256 in SHA256SUMS.txt
Initialize-SIDataSqlPrepare the Pro database for the data backendthe install identity (service principal + certificate) with db_ddladmin (the Pro database)create: schema sidata (tables, indexes, views) and the CMDB sync schemaChecks the schema is additive and says what it would apply; the database is not opened.SHA-256 in SHA256SUMS.txt
Initialize-SIVulnTargetSqlPrepare a database as the vulnerability close-loop's targetthe SI engine identity (service principal + certificate) with db_ddladmin (the target database)create: schema vuln (VulnerabilityItem, VulnerabilityEvent)Says what it would apply; the database is not opened.SHA-256 in SHA256SUMS.txt
Scripts in the release package and support cut-over scripts
ScriptPurposeRights needed to run itChanges it makesPreviewIntegrity
Get-SIDeviationReportWhat have we switched off, changed or exempted?read access to the install folder (the SecurityInsight folder)create: the CSV file (only with -AsCsv)Returns the report rows; with -AsCsv it says where it would write the CSV and writes nothing.SHA-256 in SHA256SUMS.txt
Grant-SISupportAppDatabaseThe Invardia Support app reaches the databases through the database admin group only (one time per install)the Pro SQL server's Entra admin (a member of the SQL admin group), or the Invardia Support app in a support session (the Pro database and the identity ledger); Privileged Role Administrator (the admin group is role-assignable) (the SecurityInsight SQL admin group); Contributor (the Pro SQL server (only when the server does not record the admin group as a group))update: the SecurityInsight SQL admin group: the Support app as a member; update: the server's Entra admin: the admin group, recorded as a group -- only when the server names the group under another kind, or the Support app itself is still the admin; remove: a database user of the Invardia Support app's own, made by an earlier version -- only after the admin group was read back as the Support app's way in; update: the install's record of the Support app's client idThe plan: what is there and what would be changed; nothing is changed and no database connection is opened (same as without -Apply).SHA-256 in SHA256SUMS.txt
Grant-SITaggingDatabaseLet asset tagging read its settings (Pro, once)the SQL server's Entra admin (or a member of its admin group) (the Pro database); Reader (the resource group of the identity)grant: a database user for asset tagging's identity [read of asset tagging's settings (its own role)]Prints the T-SQL it would run; nothing is run.SHA-256 in SHA256SUMS.txt
Import-SICmdbCsvImport a v2.2 CMDB.csv once (Pro)the install's identity (db_datawriter on the Pro database) (the Pro database)create: the services (SVC-0001, ...) and their asset links from the CSV, and the record of the one-time importReads, checks and counts the file; nothing is imported.SHA-256 in SHA256SUMS.txt
Import-SIProSettingsMove an install's configuration into the Pro databasethe install's identity (db_datawriter; db_ddladmin with -CreateSchema) (the Pro database)create: the cfg schema and the default templates (only with -CreateSchema); create: settings, documents, configuration items and connectors imported from the files, each with its change-log row; update: the imported custom files moved aside (only with -RetireFiles); create: OUTPUT\Import-SIProSettings.report.json, the import reportPrints the plan and what needs review; nothing is written to the database, no file is retired and the report file is not written.SHA-256 in SHA256SUMS.txt
Install-SecurityInsightInstall SecurityInsight (guided install)Owner (or Contributor + User Access Administrator) (the subscription SecurityInsight is installed in); Privileged Role Administrator (or Global Administrator) -- optional (the tenant)create: the SecurityInsight resource group, Log Analytics workspace (90 days when created), data collection endpoint and rules, storage account (shared keys off), Key Vault (purge protection on), container registry (admin user off) and the image built from the signed source, Container Apps environment and the engine jobs; create: one user-assigned managed identity per role: the engine, the web app, the MCP server, the updater and (opt-in) asset tagging; grant: the engine identity [Reader, Log Analytics Reader, Monitoring Metrics Publisher, Storage Blob / Queue / Table Data Contributor, AcrPull, Key Vault Secrets User, Container Apps Jobs Contributor]; grant: the web app's, MCP server's and updater's identities [web: AcrPull, Log Analytics Reader, Container Apps Jobs Operator on the named jobs; MCP: AcrPull, Log Analytics Reader; updater: Contributor on the resource group and registry, Key Vault Secrets Officer, Key Vault Crypto Officer]; grant: the engine identity [the read-only application permissions of Microsoft Graph, Microsoft Threat Protection and Defender for Endpoint (see Grant-SIIdentity)]; create: the role-assignable group grp-si-sql-admins as the SQL server's Entra admin; the person installing is a member for the length of the install only; the Invardia Support app is a member when support was chosen; create: the web app's sign-in application "SecurityInsight": app roles, assignment required, the web app's identity as its federated credential (no secret, no certificate); create: the Entra-only server, the Pro database and the identity ledger, their tables, templates and settings; one contained user and one role per component (si_engine, si_web, si_mcp, si_updater); the certificate-signed grant procedure; update: server auditing to the install's workspace, the audit table kept 90 days; create: the licence, the install key and the keys a switched-on feature needs (Azure OpenAI, Shodan, SMTP password -- asked for, never from config.json); create: the web app, the MCP server and the updater job; grant: Invardia Support access (only when chosen in the wizard)Runs the checks only (as -PreflightOnly): nothing is created, changed or written.SHA-256 in SHA256SUMS.txt
Install-SIFlowTaskRun the engines as one daily flow (VM install)local Administrator (the VM)create: the task \SecurityInsight\SecurityInsight (flow), running as SYSTEM every 5 minutes; update: the per-engine SecurityInsight tasks the flow replaces: disabled, not deleted; create: data\flow\replaced-tasks.json -- the record of the disabled tasksPrints what -Apply (or -Remove) would do; no task is registered, enabled or disabled and no file is written.SHA-256 in SHA256SUMS.txt
Install-SIGrantProcedureInstall the certificate-signed grant procedure on an existing installthe Invardia Support app at the Setup level, in a recorded Invardia support session for that environment (the install's environment); member of the SQL admin group (the Pro database)update: the rollback record (cfg.InstallState GrantProcedureBefore: the updater's roles before, whether a procedure was there), written once; create: every component role SecurityInsight compiles in (si_engine, si_web, si_audit_writer, si_mcp, si_updater and the reserved ones); create: the procedure cfg.ApplyComponentGrants (only when missing or another version); create: a new in-database certificate (expiry 2099-12-31, random password never returned), the procedure signed with it, the private key removed; grant: the certificate's user [CONTROL on SecurityInsight's schemas, ALTER ANY USER, ALTER on the component roles]; grant: si_updater [EXECUTE and VIEW DEFINITION on the procedure; DENY ALTER on it]; update: the updater's database user: a member of si_updater; remove: db_securityadmin from the updater's user (-RemoveSecurityAdmin, a separate later run, refused without the updater's own record of an update through the procedure with no failed row)Plans by default: reads the state (read only) and prints every statement it would send. Nothing is changed without -Apply.SHA-256 in SHA256SUMS.txt
Install-SIUpdaterJobCreate or update the updater job (Pro)Contributor (the resource group and the container registry); User Access Administrator (or Owner) -- with -GrantSpnRoles (the resource group, the registry and the Key Vault); member of the SQL admin group -- with -GrantSql (the Pro database)create: the image si-updater:v<version>; create: the updater's user-assigned identity (when missing); grant: the updater's identity (with -GrantSpnRoles) [AcrPull, Key Vault Secrets User; Contributor; Key Vault Secrets Officer; Key Vault Crypto Officer]; remove: the web app's identity (with -GrantSpnRoles) [Key Vault Secrets Officer]; create: the job caj-si-updater (or an update of it): daily at 03:00 UTC, image, ring, the install's resource names (SI_UPDATER_WEB_APP, SI_UPDATER_MCP_APP, SI_UPDATER_JOB_NAME); legacy feed settings removed; grant: the updater's database user (with -GrantSql) [the role si_updater: DDL to apply a release's schema and EXECUTE on the certificate-signed grant procedure; never db_securityadmin]Shows the plan by default; no image is built, no identity, role or job is created or changed without -Apply.SHA-256 in SHA256SUMS.txt
Invoke-SIContainerUpdateBring a container install up to the code of a releaseContributor (the install's resource group and container registry)create: the new engine image, built from the verified release; update: every SecurityInsight engine job: the new image; CPU and memory raised to the tenant-sized default; the run limit raised to the longest Azure accepts (never lowered; a value you set is kept); update: the Pro database raised to the default size (never lowered, never above it); update: the default templates (template pack); remove: a database user the Invardia Support app had from an earlier version -- only after this run read back that the admin group is the server's administrator and the app is its memberPlans by default (and with -DetectOnly): prints every change it would make; nothing is built or changed without -Apply.SHA-256 in SHA256SUMS.txt
Move-SIEngineToLeastPrivilegeMove an existing install's engine identity to its least-privilege database rolethe Invardia Support app at the Setup level, in a recorded Invardia support session for that environment (the install's environment); member of the SQL admin group (the Pro database); Reader (the install's resource group)create: the role si_engine and its grants (idempotent) [schema: SELECT, INSERT, UPDATE, DELETE on the engine's data schema; SELECT, INSERT, UPDATE on the vulnerability, CMDB sync and ServiceNow hand-off schemas; object grants in cfg; DENY INSERT, UPDATE, DELETE on sidata.CiOverride]; update: the engine's database user: a member of si_engine (the broad roles stay in this run); remove: db_datareader and db_datawriter from the engine's user (step remove-broad-roles, a separate later run, only when the proof is green); update: the in-database rollback record (cfg.InstallState EngineSqlAccessBefore: the user's roles before), written once; create: the rollback record (JSON) of this runPlans by default: prints the install's shape, the proof (the role's grants against every engine statement) and what each step WOULD do. Nothing is changed without -Apply -Steps.SHA-256 in SHA256SUMS.txt
New-SIServiceNowTestPackWrite the ServiceNow test packwrite access to the folder (the pack folder (-OutDir))create: the test pack files in -OutDir (sql\*.csv, rest\*.json, columns.csv, servicenow-test-pack.json, HOW-TO-TEST.md)Compares only (as -Check); nothing is written.SHA-256 in SHA256SUMS.txt
Publish-SITemplatesPublish configuration templates into the Pro databasethe install's identity (db_datawriter; db_ddladmin with -CreateSchema) (the Pro database)update: the templates in force, the template release record, the fingerprint and the audit trail; create: the cfg schema (only with -CreateSchema / -InstallDefault); create: a staged template pack for the web app (only with -Stage)Prints the plan (what would be inserted, updated, retired); nothing is written -- also with -InstallDefault, -InstallCurrent or -Stage.SHA-256 in SHA256SUMS.txt
Set-SIProSettingSet or reset one Pro settingthe install's identity (db_datawriter on the Pro database) (the Pro database)update: one setting row and its change-log rowPrints what it would write; the setting is not written.SHA-256 in SHA256SUMS.txt
Set-SISecurityBaselineApply the security baseline to an existing install (registry admin user off, Key Vault purge protection, SQL auditing)the Invardia Support app at the Setup level, in a recorded Invardia support session for that environment (the install's environment); Contributor (the install's resource group (registry, Key Vault, SQL server and Log Analytics workspace)); member of the SQL admin group (read only here) (the Pro database)update: the registry's admin user: off; update: purge protection: on; update: server auditing on, to the install's Log Analytics workspace (Azure's default action groups); create: a diagnostic setting that sends the SQL security audit to the workspace (only when none sends it there already); update: the retention of the table SQLSecurityAuditEvents: at least 90 days; update: the install's record of the cut-over (cfg.InstallState SecurityBaselineCutover); create: the rollback record (JSON) of this runPlans by default: prints the install's shape, the read-only proof and what each step WOULD change. Nothing is changed without -Apply -Steps.SHA-256 in SHA256SUMS.txt
Upgrade-SIToProUpgrade a container install to Pro updatesContributor (and User Access Administrator with -GrantSpnRoles) (the install's resource group, registry and Key Vault)create: the updater job and its identity (Install-SIUpdaterJob -Apply); update: config\SecurityInsight.custom.ps1: the updater job recorded in the saved container hostingPrints the plan, including anything missing; the updater job is not installed and nothing is recorded.SHA-256 in SHA256SUMS.txt
Validate-SILogAnalyticsProvision the Log Analytics workspace, DCE and DCROwner (or Contributor + User Access Administrator) (the subscription (or the resource groups))create: the resource groups, the Log Analytics workspace, the data collection endpoint, the table SI_IdentityAssets_CL and its data collection rule; grant: the SecurityInsight app [Monitoring Metrics Publisher, Monitoring Contributor, Log Analytics Contributor]Every create and every role assignment is printed as [WHATIF] and not done; the reads still run.SHA-256 in SHA256SUMS.txt

Published scripts and their checksums

Every SecurityInsight script Invardia publishes at invardia.com/support/si/, with its documentation page (what it does, the rights it needs, every change it makes, -WhatIf and undo) and the SHA-256 of the exact published file, computed when this page was built.

Always check the SHA-256 before you run a script.

ScriptVersionSHA-256Documentation
Clear-SIGuardEvents3.0.79a96f87d07a7ef6cdfe089e9aaed2d2af2ae3f298dee9441d4e4ec74a157a7d5eCurrent
Grant-SIIdentity3.0.791ebe1979307757bb4a89d5f492dd67240ad84f8336a5439b4ea8d2e8b3ee3d49Current
Grant-SISupportAccess3.0.79583a312bd49990ff9973c890ef3a817d03e6be6884f5f433ec889aad11786586Current
Grant-SIUpdaterDatabase3.0.790582875258567ed5887cd8ddc79430a2c38b4fc58301586e55cfbc6e37476f7eCurrent
Initialize-SIDataSql3.0.79d921e88ed720ad0ae2179b6fd2a2317e66f6af6903e2bbb7b04c6f0bd6967d85Current
Initialize-SIVulnTargetSql3.0.7982302f319c79e6897fd4a640119c294a2148bb5d458050ea971d7ab9edb0ec28Current
Install-SecurityInsight3.0.79e49ec3564732c3c406225997f5fb5ff1ef88b5378baf4a0ea33e3bae05f45417Current
Invoke-SIJobsOnce3.0.7911f207f10fd71a93d9923dc2896847a43f3905f98e968a6b4bfed9cef2ca6599Current
New-SIManagementAppRegistration3.0.797d027ab9917951e4bffd6bcdf1eebbb0783801c7ec6420a809e84acfc6670f70Current
Request-SILicense3.0.79f21c496bb3f4508c60e755e5342851aa05ddb280e99d20b8baef010c69edca42Current
Reset-SIData3.0.79878055bb756a8230635b229887a1a5c5970d777cf5b5e8a32cb4b96db8d6da36Current
Set-SICiCutoff3.0.790ee990c58e3966680e3c5cfbb006e1593ab7e225cf9cac755422791dd4a5c98eCurrent
Set-SIDisplayNames3.0.79c2aef19176138d533120e8a61a31fc7f074c1f223d0aef5425bca4a1e3efa412Current
Set-SIInstallRing3.0.7961748c3c2fbbcd75cd1942e175b83e4575b481252cd684220d76811a4b707d77Current
Set-SIInstallTenant3.0.7900d3eb62e9e5a28c0e64450892f207362b48c588ad0bcfbd55f003d8e888a862Current
Set-SILicense3.0.7932a3318e9477c2af9d431f4328351d49ac36e8947895a154974a778b9aa2ffa9Current
Set-SIMail3.0.794c2ed24e8a8c1632827b444381a9bbb68c017aa13b5610389200f63684212923Current
Set-SIServiceNowCredential3.0.79c6222f2894d6a34992e97bb77c2e17565d56d6101602d90556dbcfa46f8fcdb4Current
Set-SISqlAdminGroup3.0.7909f7a8cfde9cf9962ad520c03256876dce8aa5f0350a11f5ccff8beb3e05f93bCurrent
Set-SIStorageSharedKey3.0.795cab51a5b9c204f44b2f2be02eef50e3c4d578a7b4c90b39416ccdbd0f1f39ccCurrent
Stop-SIRunAndUpdate3.0.797e2ada7a574b08758a6dd8bcd7c6529fa10460f634c225b3e4ee1b084baa43adCurrent
Switch-SIJobOrchestration3.0.7926480ce53e166fe3f586237da6c621b744694844ce2690e63dd81e795f39243fCurrent
Test-SIInstall3.0.79058362deb5579c67f0be91e65cf6eca691dbe05efbd37d456b3c24fbd4d5a664Current
Validate-SIOpenAI3.0.79e1b9a106b815044a2f2191e7748b8c0d054891ef7a06a8f874ea132df96143f1Current

Download, read, run

Never pipe a script into Invoke-Expression. Download it to a file (line 1), read it, preview with -WhatIf (line 2), then run the same line without -WhatIf:

Invoke-WebRequest https://invardia.com/support/si/<Script>.ps1 -OutFile <Script>.ps1
.\<Script>.ps1 -WhatIf

To check a download, compare its SHA-256 (Get-FileHash) with the publishedSHA256SUMS.txt or the table above.

Each script's page shows these commands with its own name. All scripts: SecurityInsight scripts · Every setting explained: SecurityInsight settings

SecurityInsight is sold and supported by Invardia, a brand of 2LINKIT. Questions about this pack: info@invardia.com. Support for licensed customers: portal.invardia.com. This pack describes how the product supports your own controls; it is not a certification, and SecurityInsight does not hold ISO 27001, SOC 2 or similar certification.

SecurityInsight 3.0.79 · security review pack dated 2026-10-30 · written by the SecurityInsight team, published by Invardia.

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