Support · Pro customers

Remote support access

When you ask us for help with deploying or troubleshooting PIM Manager or SecurityInsight, we connect to your tenant with an Invardia Support app that you create, own and control. We never connect unless you ask.

The Invardia Support app is only for easy troubleshooting and support.

You stay in control

Step by step

  1. Download the setup script New-InvardiaSupportApp.ps1 (the products' own setup and repair scripts are on Setup scripts) and read it; its SHA-256 is in SHA256SUMS.txt. What does this script do? lists every permission and change, -WhatIf and undo. Before you run it, compare the file's SHA-256 with its line in SHA256SUMS.txt. It runs in PowerShell 7 (install it from https://aka.ms/powershell; Windows PowerShell 5.1 is refused) with nothing else to install: no modules. It opens the normal Microsoft sign-in page in your browser (MFA as usual) and then talks to Microsoft Graph and Azure directly.
  2. Run it as an administrator who can grant admin consent for Microsoft Graph application permissions (Privileged Role Administrator or Global Administrator) and, for the Azure roles, Owner or User Access Administrator on the subscription (and on the tenant root for -TenantRoot):
    Invoke-WebRequest https://invardia.com/support/New-InvardiaSupportApp.ps1 -OutFile New-InvardiaSupportApp.ps1
    .\New-InvardiaSupportApp.ps1 -TenantId <your tenant id> -Products PimManager,SecurityInsight -Access Setup -SubscriptionIds <subscription id> -TenantRoot -WhatIf
    The first line downloads the script, the second previews what it would do (-WhatIf changes nothing); then run the second line again without -WhatIf.-TenantRoot grants Reader at the tenant root, plus User Access Administrator there only when your organisation approves it (it is recorded in the Invardia portal). -Action RemoveTenantRoot keeps Reader and removes the User Access Administrator again, for example when your organisation withdraws the approval (nothing else changes). Run it again with -Access Troubleshoot (and without -SubscriptionIds) when you want read-only access: it removes what is no longer needed. Automation can run it unattended with -ClientId and -CertificateThumbprint.
  3. Store the details in the portal: portal.invardia.com > Remote support. Add one environment per tenant (for example Production and Test), paste the client id and secret, and add where each product lives (subscription, resource group, key vault ...).
  4. Open a support ticket and tell us which environment to look at. We connect only to that environment, from 172.205.146.248.
  5. When we are done: remove the secret in the portal (or decline its renewal and let it expire), and disable the app until next time if you like.

Permissions: Troubleshoot (read only)

Microsoft Graph application permissions - what the products themselves read, so we see what they see:

PermissionNeeded for
Directory.Read.AllPIM Manager and SecurityInsight
Application.Read.AllPIM Manager and SecurityInsight
User.Read.AllPIM Manager and SecurityInsight
Group.Read.AllPIM Manager and SecurityInsight
RoleManagement.Read.AllPIM Manager and SecurityInsight
RoleManagementPolicy.Read.DirectoryPIM Manager and SecurityInsight
RoleEligibilitySchedule.Read.DirectoryPIM Manager and SecurityInsight
RoleAssignmentSchedule.Read.DirectoryPIM Manager and SecurityInsight
PrivilegedAccess.Read.AzureADGroupPIM Manager and SecurityInsight
Domain.Read.AllPIM Manager
AdministrativeUnit.Read.AllPIM Manager
AccessReview.Read.AllPIM Manager
RoleManagementPolicy.Read.AzureADGroupPIM Manager
PrivilegedEligibilitySchedule.Read.AzureADGroupPIM Manager
PrivilegedAssignmentSchedule.Read.AzureADGroupPIM Manager
Device.Read.AllSecurityInsight
AuditLog.Read.AllSecurityInsight
Policy.Read.AllSecurityInsight
IdentityRiskyUser.Read.AllSecurityInsight
IdentityRiskEvent.Read.AllSecurityInsight
IdentityRiskyServicePrincipal.Read.AllSecurityInsight
ThreatHunting.Read.AllSecurityInsight
AdvancedHunting.Read.AllSecurityInsight (Microsoft Threat Protection API)
Machine.Read.AllSecurityInsight (WindowsDefenderATP API) - read only
Vulnerability.Read.AllSecurityInsight (WindowsDefenderATP API) - read only
Software.Read.AllSecurityInsight (WindowsDefenderATP API) - read only
SecurityRecommendation.Read.AllSecurityInsight (WindowsDefenderATP API) - read only

Azure: Reader and Log Analytics Reader on the product's resource group(s); Key Vault Reader on the product's key vault (metadata only - no secret values).

Permissions: Setup (deploy, repair, upgrade)

Everything in Troubleshoot, plus:

Microsoft Graph permissionWhyProduct
Application.ReadWrite.AllCreate and update the product's app registrations (sign-in, API and management apps) and rotate their credentials - also ones an earlier install created, which the support app does not own.Both
AppRoleAssignment.ReadWrite.AllGive the product's managed identities their API permissions (admin consent). Microsoft has no narrower permission for this.Both
DelegatedPermissionGrant.ReadWrite.AllConsent the product's user sign-in scopes for your tenant, so your admins can open the product.Both
Group.CreateCreate the security groups a product's setup needs (for example PIM Manager's SQL admin group).Both
GroupMember.ReadWrite.AllAdd and remove members of security groups during setup (for example a product's managed identities into the group a prerequisite names). This covers the members of any group that is not role-assignable - Microsoft has no narrower application permission.Both
RoleManagement.ReadWrite.DirectoryPIM Manager's SQL admin group is role-assignable (so only privileged admins can change who administers the database). Creating such a group and adding its members needs this permission - nothing narrower works for role-assignable groups.PIM Manager
Azure roleScopeWhy
Contributorthe subscription(s) you name (-SubscriptionIds)Create the product's own resource groups, register resource providers, and create, update and delete what the product deploys: network, container registry, Container Apps and jobs, SQL, storage, key vault, Log Analytics, managed identities.
User Access Administratorthe subscription(s) you nameGive the product's identities their roles (e.g. Reader on the subscription for its engine).
Readeryour tenant root management group - only with -TenantRootRead your Azure resources across the tenant for support. Kept by -Action RemoveTenantRoot.
User Access Administratoryour tenant root management group - only with -TenantRoot, and only when your organisation approves it (recorded in the Invardia portal)Give SecurityInsight's engine Reader at the tenant root, when it collects from your whole tenant. -Action RemoveTenantRoot removes it again (Reader stays).
Contributor + Role Based Access Control Administrator with a conditionresource groups you name (-ResourceGroupIds, optional)For a deployment limited to existing resource groups. The condition allows only the roles below, and only to service principals.
Key Vault Secrets Officerthe product's key vaultThe product's licence, connector keys and its own credentials.
Key Vault Crypto OfficerPIM Manager Pro MSP managing tenant's key vault onlyCreate the baseline signing key once.
Network Contributorthe hub VNet onlyOnly if PIM Manager is peered to a hub VNet.

Roles the condition allows: AcrPull, Reader, Log Analytics Reader, Monitoring Metrics Publisher, Contributor, Container Apps Jobs Operator, Storage Blob Data Contributor, Storage Queue Data Contributor, Storage Table Data Contributor, Key Vault Secrets User, Key Vault Reader, Cognitive Services OpenAI User.

Please be aware: AppRoleAssignment.ReadWrite.All lets an app grant API permissions, including to itself, and RoleManagement.ReadWrite.Directory (PIM Manager only) lets it assign Microsoft Entra roles. Both are tier 0 - as powerful as a privileged administrator. Microsoft has no narrower permissions for these steps, and deploying a product that manages privileged access needs them. With User Access Administrator on your subscriptions, Setup is owner-level access to them. That is why the IP lock, the short secret and the on/off switch matter.

How the products run day to day

The client secret above is only for the Invardia Support app, for setup and support. PIM Manager and SecurityInsight themselves run on a managed identity - on Azure Container Apps (preferred) or on a virtual machine - or, as an alternative, on a service principal with a certificate. Never on a client secret. Record which one in the portal (Remote support > product details > Runtime identity).

SecurityInsight reports a missing permission

SecurityInsight collects with its own managed identity (in the SecurityInsight resource group), which only reads. When one of its permissions is missing, the run log names it - [permissions] SecurityInsight's collection identity (<client id>) is missing <API> <permission> - and the data that permission feeds is incomplete until it is granted. All of them are read-only:

APIPermissionsWhat SecurityInsight reads with them
Microsoft GraphUser.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.AzureADGroupUsers, groups, devices, apps, sign-ins, Conditional Access, directory and PIM roles
Microsoft GraphIdentityRiskyUser.Read.All, IdentityRiskEvent.Read.All, IdentityRiskyServicePrincipal.Read.AllIdentity Protection risk
Microsoft GraphThreatHunting.Read.AllAdvanced hunting
Microsoft GraphUserAuthenticationMethod.Read.AllMFA and passwordless methods
Microsoft GraphDeviceManagementManagedDevices.Read.All, DeviceManagementConfiguration.Read.AllIntune devices and policies
Microsoft GraphAccessReview.Read.AllAccess reviews
Microsoft GraphSecurityAlert.Read.AllAlerts
Microsoft GraphSecurityEvents.Read.AllSecure Score and its controls
Microsoft Threat ProtectionAdvancedHunting.Read.AllAdvanced hunting in Defender
Defender for EndpointMachine.Read.AllDevices
Defender for EndpointVulnerability.Read.AllCVEs per device
Defender for EndpointSecurityRecommendation.Read.AllRecommendations
Defender for EndpointScore.Read.AllExposure score and secure score

How it is fixed. With the Setup level, Invardia support runs SecurityInsight's own Grant-SIIdentity.ps1 for you: first a plan that lists what is present and what is missing and changes nothing, then it grants only what is missing from SecurityInsight's list - nothing else - and reads it back. Every step appears in your audit log in the customer portal. The next run uses the new permission; nothing needs a restart. To do it yourself instead (as a Privileged Role Administrator or Global Administrator):

Invoke-WebRequest https://invardia.com/support/si/Grant-SIIdentity.ps1 -OutFile Grant-SIIdentity.ps1
.\Grant-SIIdentity.ps1 -PrincipalId <the collection identity's object id> -SubscriptionId <its subscription id> -OnlyAppPermissions
.\Grant-SIIdentity.ps1 -PrincipalId <the collection identity's object id> -SubscriptionId <its subscription id> -OnlyAppPermissions -Apply

The first line downloads the script, the second shows the plan, the third grants what is missing. Run the second line again afterwards: no line says MISSING.

Two database rights in SecurityInsight's Pro database. SecurityInsight's setup grants both, and an update adds them to an existing installation; Invardia support can also grant them through the Support app's database access:

IdentityRightWhat it is forRun log when it is missing
The asset-tagging identityINSERT on cfg.AuditEventAsset tagging writes its settings audit rows.The INSERT permission was denied on the object 'AuditEvent'
The collection identityVIEW DATABASE PERFORMANCE STATEThe engine reads the database's load to pace its writes and size its parallel workers. Without it nothing is lost; the work is slower.VIEW DATABASE PERFORMANCE STATE permission denied

What we never ask for

What you do yourself (once)

With the Setup level the products' setup scripts do almost everything themselves (resource groups, resource providers, their identities' roles on your subscriptions and, with -TenantRoot, Reader at the tenant root). What is left for you (or your administrator), once:

Conditional Access: only from 172.205.146.248

With -ConditionalAccess the script creates a named location Invardia support IP (172.205.146.248/32) and a policy Invardia Support - only from Invardia support IP that blocks the app from everywhere else. To do it by hand: Microsoft Entra admin center > Protection > Conditional Access > New policy > Assignments: Workload identities = the Invardia Support app; Target resources = All resources; Conditions > Locations = Any location, exclude Invardia support IP; Grant = Block access.

Conditional Access for workload identities requires Microsoft Entra Workload ID Premium licences. Without them, keep the secret short-lived and disable the app between support cases.

Questions

Open a ticket in the customer portal or email support@invardia.com.