Skip to main content

StratoLens Installation Guide

Deploy StratoLens to your Azure environment from the Azure Marketplace. This guide covers prerequisites, permissions, and the four-step installation from Marketplace provisioning through first sign-in.

Don't have StratoLens yet?

StratoLens deploys straight from the Azure Marketplace into your own tenant, and the 28-day free trial includes every feature.

Quick Start

  1. Sign in to the Azure Portal with an account that has Owner on the target subscription and Global Administrator in Entra ID
  2. Open the StratoLens listing in the Azure Portal and click Create (or preview the listing first)
  3. Complete the Marketplace wizard (subscription, resource group, company name, region) and submit the deployment
  4. Wait for the Marketplace deployment to finish (typically 10–15 minutes)
  5. Open the deployed Container App URL. You'll land on a StratoLens placeholder page with the command to deploy the application layer
  6. Run that command in Azure Cloud Shell (PowerShell mode)
  7. Grant admin consent when prompted, then sign in to StratoLens and run your first scan

Heads up: you'll pick two resource groups

StratoLens is an Azure Managed Application, and the Marketplace wizard asks for two distinct resource groups. They are not the same thing:

  • Resource group (Basics tab): holds the StratoLens managed application resource itself.
  • Managed Resource Group (Basics tab, further down): a separate, automatically-created group where the actual infrastructure (Container App, Cosmos DB, Key Vault, etc.) is provisioned. Defaults to a timestamped name like mrg-stratolens-20260421151643.

After deployment, look in the Managed Resource Group to find the running StratoLens infrastructure.

Need help with the install?

Email us at contact@getstratolens.com with any questions or if you'd like a hand walking through the installation. We're happy to help.

Permission Requirements

StratoLens installation requires elevated Microsoft Entra ID permissions to configure authentication and enable tenant-wide scanning capabilities. These elevated permissions are only required during the initial installation process and are not needed for ongoing operation.

Recommended: Global Administrator + Subscription Owner

Global Administrator in Entra ID plus Owner on the target subscription is strongly recommended for the simplest installation experience. This combination can complete all steps without interruption.

Required Access Summary

At minimum, you need:

RequirementAccess Level
Target SubscriptionOwner
Microsoft Entra IDGlobal Administrator (recommended)
Tenant Root Management GroupAbility to assign RBAC roles (Global Admins typically have this via Elevate Access)

Why These Permissions Are Needed

PermissionPurpose
Subscription OwnerDeploy Azure resources via the Marketplace offer and grant role assignments to the managed identity (Owner required, Contributor is not sufficient)
App Registration + ConsentStratoLens uses Azure AD authentication; the app registration requires admin consent for Microsoft Graph permissions (User.Read.All, Group.Read.All) for RBAC
Managed Identity Graph PermissionsThe managed identity needs to read Azure AD applications, users, and groups to provide RBAC visibility in scans
AdvancedLeast Privilege Role Breakdown

For organizations requiring least-privilege access, here's the minimum role combination:

PhaseRequired RolePurpose
InfrastructureOwner (subscription)Deploy Azure resources and assign roles to managed identity
App RegistrationApplication DeveloperCreate app registration and configure SPA redirect URIs
Admin ConsentPrivileged Role AdministratorGrant admin consent for Graph permissions via Portal
Managed IdentityPrivileged Role AdministratorAssign Graph API permissions to managed identity
Management GroupOwner / User Access Administrator at root MG (or Global Administrator to elevate access)Assign Reader at root MG. Global Admin is only needed to elevate access first if no one already has role-assignment rights at that scope
Admin User SetupContributor (resource group)Create initial admin user in Cosmos DB
Container DeploymentContributor (resource group)Deploy container images

Important Limitations

  • Cloud Application Administrator cannot grant admin consent for Microsoft Graph application permissions (Microsoft limitation)
  • Application Developer can create app registrations but cannot grant admin consent
  • Owner or User Access Administrator at the tenant root management group can assign Reader there directly. Global Administrator is only required to elevate access first: the one-time step that grants those rights when no one currently holds them at the root scope

Alternative: Manual Scope Assignment

If you cannot or do not wish to assign Reader at the tenant root management group, you can manually grant the managed identity (id-{company}-stratolens-scanner) Reader access to specific subscriptions or management groups you want StratoLens to discover.

Elevate Access to the Tenant Root

Global Administrators do not have access to manage Azure subscriptions and management groups by default. The setup script needs to assign the Reader role to the StratoLens scanner managed identity at the Tenant Root Management Group, which requires this access. If you're a Global Administrator, you can grant it to yourself by toggling on Access management for Azure resources in your tenant's properties.

When you need this

Skip this section if your account already has role-assignment rights at the tenant root or on the management groups and subscriptions you want StratoLens to scan. The Show test script button on the StratoLens Setup page (covered in Step 2) confirms whether you can assign Reader at the tenant root before you run the full setup.

Toggle on Access management for Azure resources

  1. Sign in to the Azure Portal with a Global Administrator account.
  2. Navigate to Microsoft Entra ID.
  3. In the left navigation, scroll down and click Properties.
  4. Find the Access management for Azure resources section.
  5. Toggle the switch to Yes, then click Save.
Figure. Microsoft Entra ID → Properties. Toggle Access management for Azure resources to Yes to grant your account User Access Administrator at the tenant root.

Once enabled, your account is granted the User Access Administrator role at the tenant root scope, which allows you to assign roles on the Tenant Root Management Group and every subscription and management group beneath it. The setup script will use this access to assign Reader to the scanner managed identity.

Turn it back off when you're done

Elevated access is intended to be temporary. After the StratoLens setup script finishes successfully, return to the same toggle and switch it back to No. Your existing roles aren't affected; only the elevated tenant-root assignment is removed.

1Deploy from Azure Marketplace

Open the StratoLens listing on the Azure Marketplace, choose the subscription you want to use (StratoLens currently offers a single plan, selected by default), and click Create to launch the deployment wizard.

The portal link takes you straight to the Create wizard (you'll be asked to sign in). The marketplace link is public and shows the listing, pricing, and screenshots without sign-in.

Figure 1. StratoLens (preview) listing on the Azure Marketplace. Pick your Subscription, then click Create.

Marketplace Wizard Inputs

The Create StratoLens wizard has four tabs: Basics, Resource Names, Networking, and Review + submit.

Basics tab

Fill in the project and instance details:

FieldDescription
SubscriptionThe target Azure subscription where StratoLens will be deployed
Resource groupNew or existing resource group. This is where the managed application object itself is registered
RegionAzure region for the deployment
Company Name3–12 lowercase alphanumeric characters. Used to pre-populate resource names on the next tab
Managed Resource GroupSeparate resource group that holds the StratoLens-managed resources. Defaults to a timestamped name like mrg-stratolens-20260421151643; it's created automatically and is distinct from the Resource group above. You can rename it on the wizard if you have your own naming convention

Why two resource groups?

StratoLens is deployed as an Azure Managed Application. The Resource group holds the managed application object itself: a lightweight pointer Azure uses to track your subscription to the offer. The Managed Resource Group is where all of the actual infrastructure (Container App, Cosmos DB, Key Vault, etc.) is provisioned. Separating the two lets Azure manage lifecycle and updates of the underlying resources on your behalf while keeping them clearly scoped.

Figure 2a. Basics tab of the Create StratoLens wizard.

Resource Names tab

The second tab shows the names of each Azure resource the offer will create. All names are pre-populated from your Company Name (for example, Company Name contoso produces ca-contoso-stratolens, cosmos-contoso-stratolens, etc.). You can customize any of them if your organization has naming conventions that differ from the defaults.

Figure 2b. Resource Names tab. Names are pre-populated from Company Name and can be customized.

Networking tab

The third tab lets you choose how the StratoLens backends (Cosmos DB and Key Vault) are reached on the network. Pick a Deployment mode:

Deployment modeWhat it means
Standard (public)
Default
The simpler deployment. Cosmos DB and Key Vault use public network access, but still require authentication; nothing is reachable without valid credentials. You can use the Cosmos DB firewall to restrict access further if you wish.
Private (network-isolated backends)Cosmos DB and Key Vault are placed behind private endpoints, so their backends are not exposed to the public internet. This adds extra Azure cost: each private endpoint carries an hourly charge plus data-processing fees, so this mode runs more than Standard.
Figure 2c. Networking tab. Standard (public) is the default; switch to Private to place Cosmos DB and Key Vault behind private endpoints.

Public access still means authenticated access

In Standard (public) mode, "public network access" means the Cosmos DB and Key Vault endpoints are reachable over the internet, but they remain locked behind Azure authentication and RBAC; no data is accessible without valid credentials. Choose Private if your organization requires backend resources to have no public network exposure at all; just note it carries additional Azure cost for the private endpoints.

AdvancedConfiguring Private (network-isolated) mode

Private mode gives you two ways to provide the network. Pick the one that fits your environment:

Option 1: Let StratoLens create the VNet (recommended)

The default, and the right choice for most installs. StratoLens builds a dedicated, correctly sized virtual network with its own subnets and private endpoints, so you don't prepare any networking ahead of time. Choose this unless your security or networking team specifically requires StratoLens to sit inside an existing network.

Selecting Private (network-isolated backends) reveals additional fields for the virtual network, subnets, and private endpoints that StratoLens creates. You can keep the defaults shown below (they are valid and non-overlapping), or define your own naming and address spaces if you have an existing network convention. Just ensure both subnet ranges fall inside the VNet address space and don't overlap.

Figure 2d. Private mode fields. The defaults shown are valid; customize the VNet, subnets, and endpoint names if you need to match your own conventions.

Private DNS

By default (Create new (recommended)), StratoLens automatically deploys the required private DNS zones, creates the appropriate A records, and wires up DNS resolution for the Cosmos DB and Key Vault private endpoints end to end. You don't have to configure anything.

If you switch the toggle to I'll manage DNS myself (bring your own zones), StratoLens skips creating the private DNS zones so you can use your existing zones instead. You'll be responsible for configuring DNS resolution for the private endpoints yourself.

Don't disable public access until after Step 2

For the initial install, Cosmos DB and Key Vault are deployed with public network access enabled, so the setup script in Step 2 can reach them and run. This is expected.

Once that script completes, you can (and should) fully disable public network access on both the Cosmos DB account and the Key Vault as a manual step. Do not disable it before running the Step 2 script, or the setup will fail.

Option 2: Bring your own VNet (deploy into an existing network)

For when your organization needs StratoLens to live inside a network you already control (a spoke in a hub-and-spoke topology, a VNet with existing peering, firewall routing, or address-management rules). Set Virtual network source to Use existing and point the wizard at your own VNet and subnets. The installer never modifies your VNet; you prepare it up front. This is considerably more work than Option 1, and every prerequisite below has to be right before you deploy or the install fails.

Figure 2e. Private mode with Virtual network source set to Use existing. Choose the VNet and the two subnets you prepared beforehand; the dropdowns are pre-filtered to eligible subnets.

Prepare the VNet before you deploy

The VNet must live in the same subscription and region you'll deploy StratoLens into, and you'll need permission to create networking resources and to assign roles on it. Everything below must be done by you ahead of time. You can do it in the Azure portal or with the CLI; adjust names and address space to suit.

1. Prepare two subnets

StratoLens needs two subnets in your VNet. The wizard dropdowns are pre-filtered: the Container Apps list shows only eligible subnets, and so does the private endpoint list. If a dropdown is empty, create or delegate a suitable subnet first.

SubnetRequirements
Container Apps subnet/27 or larger, delegated to Microsoft.App/environments, and empty (not used by any other Container Apps environment).
Private endpoint subnet/27 or larger, with no service delegation and at least 2 free IP addresses. This is where the Cosmos DB and Key Vault private endpoints land.

2. Make sure the app has outbound egress

The app needs outbound internet access to pull its container image and reach Azure Resource Manager, Microsoft Graph, and the StratoLens license server. If your VNet routes traffic through a firewall, NAT, or user-defined routes, or the subnets were created with default outbound access disabled (a private subnet), you must provide egress (for example a NAT gateway) and allow those destinations.

Running behind a firewall?

The Networking tab has a Running behind a firewall? info banner (visible in the screenshot above). Click the link in that banner to open the exact outbound allow-list StratoLens needs, then add those rules to your firewall before deploying.

3. Grant the deployment principal permission to join your subnets

Required prerequisite: grant this before deploying

StratoLens installs as an Azure Marketplace managed application, so its resources are created by a first-party Azure service principal, not by the signed-in user. That principal has rights only inside the managed resource group and none on a VNet you bring, so unless you pre-grant it access the deployment fails partway with LinkedAuthorizationFailed on Microsoft.Network/virtualNetworks/subnets/join/action.

The principal's application id is the same in every tenant (35cbcc06-defd-44d2-ace4-bc2bf2466970); its object id is unique to yours. In the portal IAM picker it usually appears as Managed Applications On Behalf Application. Grant it Network Contributor on the VNet before deploying (resolve the object id first so the assignment doesn't depend on a Graph lookup that can fail intermittently):

Azure CLI (Bash / Cloud Shell)
# (optional) confirm the principal name in your tenant
az ad sp show --id 35cbcc06-defd-44d2-ace4-bc2bf2466970 --query displayName -o tsv

# resolve its object id, then assign the role on your VNet
OID=$(az ad sp show --id 35cbcc06-defd-44d2-ace4-bc2bf2466970 --query id -o tsv)
az role assignment create \
  --assignee-object-id "$OID" \
  --assignee-principal-type ServicePrincipal \
  --role "Network Contributor" \
  --scope "/subscriptions/<SUB_ID>/resourceGroups/<VNET_RG>/providers/Microsoft.Network/virtualNetworks/<VNET_NAME>"

Prefer least privilege?

Instead of Network Contributor you can use a custom role with just Microsoft.Network/virtualNetworks/subnets/join/action (plus virtualNetworks/read and subnets/read), scoped to only the two subnets.

4. Bring your own DNS zones (only if you're managing DNS yourself)

If you keep Create new (recommended) for Private DNS zones, skip this: the template wires them for you. If you chose I'll manage DNS myself, make sure these two zones exist and are linked to this VNet so the app can resolve its backends:

  • privatelink.documents.azure.com (Cosmos DB)
  • privatelink.vaultcore.azure.net (Key Vault)

5. Select your network on the Networking tab, then deploy

With the VNet prepared, launch the deployment and, on the Networking tab (Step 1):

  • Deployment mode: Private (network-isolated backends)
  • Virtual network source: Use existing, then select your VNet
  • Container Apps subnet: your delegated, empty subnet from step 1
  • Private endpoint subnet: your non-delegated subnet from step 1
  • Private DNS zones: Create new (recommended), or manage yourself if you prepared the zones in step 4

From here the flow is identical to a new-VNet deployment: complete the wizard, then run the setup script in Step 2 while public access is still enabled, and disable public access on Cosmos DB and Key Vault afterward as described in the warning above.

Already failed with LinkedAuthorizationFailed?

If a deployment failed before you granted the join permission, delete the failed managed application, run the step 3 grant, then redeploy.

On the Review + submit tab, review your selections and click Create. Azure will provision the Container Apps environment, Container App, Scheduler Job, Cosmos DB, Key Vault, Log Analytics workspace, and the managed identity into the Managed Resource Group you chose.

Figure 3. Deployed resources in the Managed Resource Group once the Marketplace deployment finishes.

Estimated Time

Marketplace deployment typically takes 10–15 minutes.

2Run the Setup Script

Once the Marketplace deployment finishes, open the newly-provisioned Container App in the Azure Portal and navigate to its Application Url. You'll land on the StratoLens Setuppage, which contains a one-line PowerShell command pre-filled with all of your deployment's values (resource group, subscription ID, container app name, managed identity, Key Vault, and more).

Figure 4. Container App Overview. The Application Url is on the right side of the Essentials pane. Click it to open the StratoLens Setup page.
Figure 5. The StratoLens Setup page. Review the prerequisites, click Copy to Clipboard, then paste into Azure Cloud Shell in PowerShell mode.

Before You Run the Command: Prerequisites

Have all three of the following ready before you click Copy to Clipboard on the Setup page:

RequirementDetails
Signed-in identityGlobal Administrator in Entra ID and Owner on the subscription where StratoLens was installed. The same account must be signed in to both the Azure Portal and Cloud Shell.
Azure Cloud Shell, PowerShell modeOpen Cloud Shell from portal.azure.com. The shell-type dropdown in the top-left of the Cloud Shell toolbar must be set to PowerShell, not Bash.
Network accessCloud Shell needs outbound access to api.strato-lens.comto download the setup script. Azure Cloud Shell allows this by default, so most tenants won't need to do anything. If the script fails to download, check with your network admins to confirm outbound access isn't being blocked.

Verify your permissions before running the setup

The Setup page includes a Show test script button next to the Global Administrator prerequisite. Click it to reveal a one-line PowerShell command, copy it, and paste it into Azure Cloud Shell (PowerShell mode) before you run the main setup command. The script confirms you can elevate access and assign Reader at the tenant root, which is exactly what the setup script will attempt. A successful run prints PASS: can assign Reader at tenant root (Owner).

Bash will not work

The setup command is a PowerShell script. Make sure the Cloud Shell dropdown shows PowerShell before pasting; pasting into Bash will fail.

Running the Setup Command

  1. On the StratoLens Setup page, click Copy to Clipboard to copy the pre-filled command.
  2. Open Azure Cloud Shell from the Azure Portal and confirm the shell type is PowerShell.
  3. Paste the command into Cloud Shell and press Enter.
  4. Wait for the script to finish. It prints progress as it runs.

What the Script Does

Running the setup command performs four actions in your tenant:

  1. Creates a StratoLens admin user. Sets up the initial administrator inside the StratoLens app. They'll be able to add additional users from within StratoLens once it's up.
  2. Registers two Azure AD apps. Creates one Entra ID app registration for signing in to StratoLens (with the required Microsoft Graph API permissions), and a second one named StratoLens Notifications that StratoLens uses to send email notifications.
  3. Assigns managed identity permissions. Grants the scanner managed identity Reader access across your tenant so StratoLens can discover resources.
  4. Installs the StratoLens container. Replaces the Setup page with the full StratoLens application.

Admin consent is still required after the script completes

When the script finishes, it will print instructions for granting admin consent on the newly-created app registration. This is a manual step in the Azure Portal and is covered in Step 3 below. Without it, StratoLens will not be able to authenticate users or scan your environment.

The Setup page replaces itself

Once the script finishes installing the StratoLens container, the Setup page you started from will be replaced by the StratoLens application. Refresh the URL after the script completes to reach your dashboard.

Estimated Time

The setup script typically runs for 3–5 minutes.

AdvancedAssign the managed identity's permissions manually

Most installations don't need this. The setup script above already grants the scanner managed identity everything it needs. This section is only for organizations that prefer to assign these permissions by hand, for example when the deploying user can't run the script, or when separate admins own each grant. StratoLens needs exactly two sets of permissions, and both are required.

You'll need the managed identity's Object ID

Find the scanner managed identity's Object ID (and optionally its Client/Application ID) in the Azure Portal under the StratoLens resource's Identity blade, or under Entra ID → Enterprise applications. The default name is id-{company}-stratolens-scanner. Substitute this ID into the commands below wherever you see <MANAGED-IDENTITY-OBJECT-ID>.

The two parts usually need different admins

Because these are two independent grants, they typically require different privileged roles. Part 1 (Graph permissions) needs a Privileged Role Administrator or Global Administrator. Part 2 (the Reader role) needs Owner or User Access Administrator at the target scope. If one person doesn't hold both, send each part to the right admin.

Part 1: Microsoft Graph API Permissions

These let StratoLens read your directory's applications, users, and groups (read-only). They are granted as Application permissions (not Delegated).

PermissionPurposeApp Role GUID
Application.Read.AllRead all applications9a5d68dd-52b0-4cc2-bd40-abcf44ac3a30
User.Read.AllRead all usersdf021288-bdef-4463-88db-98f22de89214
Group.Read.AllRead all groups5b567255-7703-4780-807c-7be8301ae99b

The portal's Grant admin consent flow does not work here

These are app role assignments on a managed identity. The usual App registrations → API permissions → Grant admin consent flow does not apply, because a managed identity has no App Registration to edit. The roles must be assigned directly using the commands below. Granting application permissions to Microsoft Graph is consenting on behalf of the organization, so it requires Privileged Role Administrator or Global Administrator.

Run these in Azure Cloud Shell (PowerShell mode). This is equivalent to what the setup script does.

Azure CLI
$MI_OBJECT_ID = "<MANAGED-IDENTITY-OBJECT-ID>"
$GRAPH_SP_ID = $(az ad sp show --id "00000003-0000-0000-c000-000000000000" --query id -o tsv)

# Application.Read.All
az rest --method POST --uri "https://graph.microsoft.com/v1.0/servicePrincipals/$MI_OBJECT_ID/appRoleAssignments" --headers "Content-Type=application/json" --body "{`"principalId`":`"$MI_OBJECT_ID`",`"resourceId`":`"$GRAPH_SP_ID`",`"appRoleId`":`"9a5d68dd-52b0-4cc2-bd40-abcf44ac3a30`"}"

# User.Read.All
az rest --method POST --uri "https://graph.microsoft.com/v1.0/servicePrincipals/$MI_OBJECT_ID/appRoleAssignments" --headers "Content-Type=application/json" --body "{`"principalId`":`"$MI_OBJECT_ID`",`"resourceId`":`"$GRAPH_SP_ID`",`"appRoleId`":`"df021288-bdef-4463-88db-98f22de89214`"}"

# Group.Read.All
az rest --method POST --uri "https://graph.microsoft.com/v1.0/servicePrincipals/$MI_OBJECT_ID/appRoleAssignments" --headers "Content-Type=application/json" --body "{`"principalId`":`"$MI_OBJECT_ID`",`"resourceId`":`"$GRAPH_SP_ID`",`"appRoleId`":`"5b567255-7703-4780-807c-7be8301ae99b`"}"

Part 2: Azure Reader Role on the Root Management Group

This is what lets StratoLens discover and document your Azure resources. It is read-only.

RoleReader
ScopeRoot (tenant) management group → /providers/Microsoft.Management/managementGroups/<TENANT-ID>. The root management group ID is the same as your tenant ID.
Who can grantOwner or User Access Administrator at that scope.

Option A: Azure Portal

  1. Go to Management Groups and select the root (tenant) management group.
  2. Open Access control (IAM)AddAdd role assignment.
  3. Role: Reader.
  4. Members: Managed identity (or User, group, or service principal → search by the managed identity's name).
  5. Click Review + assign.

Option B: Azure CLI

Run in Azure Cloud Shell (PowerShell mode).

Azure CLI
$TENANT_ID = $(az account show --query tenantId -o tsv)

az role assignment create --assignee-object-id "<MANAGED-IDENTITY-OBJECT-ID>" --assignee-principal-type ServicePrincipal --role "Reader" --scope "/providers/Microsoft.Management/managementGroups/$TENANT_ID"

No one has access to the root management group?

If no one currently has access at the root management group, an admin may first need to elevate access (Entra ID → Properties → Access management for Azure resources toggle; see Elevate Access to the Tenant Root). This is a one-time tenant configuration step, and only a Global Administrator can do it.

Prefer a narrower scope?

You don't have to grant at the root management group. Assign Reader at a narrower scope (a specific management group or subscription) and StratoLens will only see resources within that scope.

Notes & Verification

  • Propagation: Graph API permissions can take up to 24 hours to fully propagate due to token caching. The Reader role is usually effective within a few minutes.
  • "Unknown" in IAM: If a role assignment shows as Unknown, refresh the portal after a few minutes.

Confirm both grants landed:

Azure CLI
# Graph permissions
az rest --method GET --uri "https://graph.microsoft.com/v1.0/servicePrincipals/<MANAGED-IDENTITY-OBJECT-ID>/appRoleAssignments"

# Reader role
az role assignment list --assignee "<MANAGED-IDENTITY-OBJECT-ID>" --scope "/providers/Microsoft.Management/managementGroups/<TENANT-ID>" --role "Reader" -o table

When the setup script finishes, it prints a DEPLOYMENT COMPLETE – ADMIN CONSENT REQUIRED banner with two Azure Portal URLs, one for each app registration the script created. You must grant admin consent on both:

  1. Authentication app (used for signing in to StratoLens). Permissions: User.Read.All, Group.Read.All.
  2. Email notifications app (named StratoLens Notifications). Permissions: User.Read, Mail.Send, offline_access.
Figure 6. The setup script's Final Steps output. Each appIdlink opens a different app registration's consent page.

For each URL the script prints:

  1. Open the link in the Azure Portal, signed in as a user who can grant admin consent (Global Administrator or Privileged Role Administrator).
  2. Review the permissions, then click the blue Grant admin consent for [Your Organization] button.
  3. Click Yes to confirm. The Status column will switch from Not granted to a green check for each permission.
Figure 7. API permissions page of an app registration. Click Grant admin consent for [Your Organization], then repeat on both the authentication app and the StratoLens Notifications app.

Grant consent on BOTH app registrations

It's easy to grant consent on the first app and forget the second. Sign-in will still work, but email notifications won't. Open and consent to each URL the script printed.

If the script shows a tenant-root role warning

Before the admin-consent banner, the script prints a summary. If you see ⚠️ Managed Identity permissions assigned (see warning below) instead of a green check, the Readerrole couldn't be assigned on the tenant root management group. StratoLens won't be able to discover subscriptions or resources until this is fixed.

Fix it with one of these:

  • Elevate access (requires Global Admin): Azure Portal → Microsoft Entra ID → Properties → Access management for Azure resources → set to Yes → Save, then re-run the setup script.
  • Manual assignment: Azure Portal → Management Groups → Tenant Root Group → Access control (IAM)Add role assignment → Role: Reader, Members: the StratoLens scanner managed identity.

4Access StratoLens & First-Time Setup

Once the application deploy completes, your StratoLens URL is displayed in the script output. You can also find it in the Azure Portal by navigating to the Container App named ca-{company}-stratolens and viewing the Application Url on the Overview page.

Sign in with your Entra ID (Azure AD) credentials. The user who ran the setup script in Step 2 is the initial StratoLens administrator and has full access. What follows is a walkthrough of the first-time setup flow.

1. Sign in and land on the Dashboard

After sign-in you arrive at the Executive Dashboard. A banner at the top of the page notes that registration is still incomplete.

Figure 8. First launch. The banner reads "Registration incomplete, click here to register your StratoLens instance."

2. Register your StratoLens instance

Click the registration banner. You'll be routed to Settings → General. Fill in Company Name and Technical Contact (Billing Contact is optional) and click Save Changes. This information is used for license management and support.

Figure 9. Settings → General. Provide your customer information, then Save Changes.

3. Accept the Terms of Service

Once registration is saved, the registration banner clears and a new banner prompts you to accept the Terms of Service. Clicking it opens the Terms of Service modal. Review the terms and click I Accept to continue.

Figure 10. After registration, a Terms of Service banner appears at the top of every page.

4. (Optional) Verify your license

Back in Settings → General, the License Status panel now shows your license state: Install ID, API reachability, expiry date, and days remaining. Click Check License Status to refresh.

Figure 11. License Status panel after registration. Use Check License Status to refresh against the StratoLens licensing API.

5. Run your first scan

Navigate to Scans → Overview and click Start New Scan. StratoLens will check registration and Terms first (re-prompting if either is missing), then verify the scanner identity's permissions.

Figure 12. Scans → Overview. Click Start New Scan under Scan Controls to kick off your first scan.

Once the scan starts, the Scan Controls tile flips to Scan in Progress with a Cancel option, and a progress panel below shows live stages (Resource Graph Changes, Subscription Batches, Total Changes Collected) with a percentage complete. You can leave the page while it runs.

Figure 13. Live scan progress with per-stage counters and a percent-complete indicator.

About scanner permissions

In most installations these permissions are already in place: the setup script in Step 2 assigns the Reader role to the scanner managed identity (id-{company}-stratolens-scanner) at the tenant root management group, which gives StratoLens visibility into everything in your tenant. If that succeeded (no warning at the end of the script), you have nothing to do here.

If StratoLens detects missing permissions when you click Start New Scan, an Access Warning modal appears. That's the signal to grant Reader manually. You don't have to use the tenant root: Reader on any management group or subscription will work, and StratoLens will scan whatever that scope includes. Continue Anyway will still run the scan, but results are limited to what the identity can currently see.

6. Post-scan backfill (first scan only)

When the first scan completes, a Background Data Collection Started modal appears. It explains that background backfills kick off within about 15 minutes for Activity Log (up to 80 days), Cost Data (up to 180 days), and Resource Graph history (up to 14 days). The modal is dismissible with Close or View Scan History. Backfills run asynchronously; you can continue using StratoLens while they complete.

Figure 14. The Background Data Collection Started modal that appears after your first scan.

7. (Optional) Review billing

With a scan under your belt, the Billing Configuration card on Settings → General will now show accurate plan details, including your price and next billing date. StratoLens is billed through your Azure subscription via the Azure Marketplace, and billing is enabled by default. Every StratoLens deployment includes a 28-day free trial; no charges are incurred during the trial regardless of this toggle.

Figure 15. Billing Configuration on Settings → General. Toggle Billing Enabled on or off, pick a Billing Cycle, then click Save Changes.

To change billing:

  1. Toggle Billing Enabled off if you want to pause billing, or leave it on to be billed automatically once the trial ends.
  2. Set Billing Cycle to Monthly or Annual to match how you want to be invoiced.
  3. Click Save Changes.

What happens if billing is disabled after the trial?

If the trial expires and billing is disabled, the scanner stops running. Everything else keeps working: previously discovered resources, scan history, dashboards, and configuration stay fully accessible. The data just gets stale until you re-enable billing and a new scan runs. See the pricing page for more details.

You're up and running

StratoLens is registered, licensed, Terms are accepted, and your first scan is queued. From here, head to Scans → Overview to enable automatic scanning, or start exploring results on the Dashboard as data lands.

What Gets Deployed

The Marketplace offer provisions seven resources into your Managed Resource Group. The names shown below are the defaults derived from your Company Name. You can override any of them on the wizard's Resource Names tab.

ResourceDefault Name
Container Apps Environmentcae-{company}-stratolens
Container App (Web)ca-{company}-stratolens
Container App Job (Scheduler)job-{company}-stratolens
Cosmos DB Accountcosmos-{company}-stratolens
Key Vaultkv-{company}-stratolens
Log Analytics Workspacelog-{company}-stratolens
User-Assigned Managed Identityid-{company}-stratolens-scanner

Troubleshooting

Marketplace Deployment Fails

  • Verify you have Owner permissions on the target subscription
  • Check Azure quota limits for the selected region (Container Apps, Cosmos DB)
  • Review the deployment's error details in the Azure Portal under Deployments for the target resource group

Placeholder Page Shows an Error or Doesn't Load

  • The Container App may still be starting. Wait 2–3 minutes and refresh
  • Confirm the Container App shows status Running in the Azure Portal
  • Verify the Application Url on the Overview page matches the URL you're opening

Application Deploy Script Fails

  • Ensure you're running Azure Cloud Shell in PowerShell mode (not Bash)
  • Confirm you're signed in to the same tenant and subscription where the Marketplace deployment ran
  • Check internet connectivity and that https://api.strato-lens.com is reachable

Invalid or Missing Deploy Command

  • Copy the full command from the placeholder page. It's a single line and must be pasted in its entirety
  • If the command is missing from the placeholder page, refresh after a few minutes; the Marketplace deployment may still be finalizing

Subscription Selection Issues

  • Run az login to authenticate
  • Verify you have access to the target subscription: az account list

Admin Consent Not Granted

  • Confirm you're signing in to the Azure Portal with a user that has permission to grant admin consent (Global Administrator or Privileged Role Administrator)
  • Navigate to the app registration created by the deployment, open API Permissions, and click Grant admin consent for [Your Organization]

Validation Errors

  • Company Name: Must be 3–12 characters, lowercase alphanumeric only
  • Region: Must be a valid Azure region (default: East US 2)