Microsoft Azure permissions
What access does ZopNight need on Microsoft Azure?
ZopNight reads an Azure subscription through 3 built-in roles: Reader for inventory, Monitoring Reader for the utilisation metrics that idle findings need, and Cost Management Reader for spend. That is 120 read permissions. Acting on findings adds the custom Zopnight Write Access role, granted separately.
Databricks
| Action | Access | Purpose |
|---|---|---|
| Databricks/clusters/list | discovery | |
| Databricks/instance-pools/list | discovery | |
| Databricks/jobs/list | discovery | |
| Databricks/jobs/runs/list | discovery | |
| Databricks/serving-endpoints/list | discovery | |
| Databricks/sql/history/queries | discovery | |
| Databricks/sql/warehouses/list | discovery |
Microsoft.App
| Action | Access | Purpose |
|---|---|---|
| Microsoft.App/containerApps/read | discovery | |
| Microsoft.App/containerApps/start/action | scheduling | |
| Microsoft.App/containerApps/stop/action | scheduling |
Microsoft.Authorization
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Authorization/roleAssignments/read | probe | |
| Microsoft.Authorization/roleDefinitions/read | probe | |
| Microsoft.Authorization/roleAssignments/write | provisioning |
Microsoft.Automation
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Automation/automationAccounts/delete | remediation |
Microsoft.Batch
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Batch/batchAccounts/pools/read | discovery | |
| Microsoft.Batch/batchAccounts/pools/write | scheduling |
Microsoft.Cache
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Cache/redis/delete | provisioning | |
| Microsoft.Cache/redis/read | provisioning | |
| Microsoft.Cache/redis/write | provisioning |
Microsoft.CognitiveServices
| Action | Access | Purpose |
|---|---|---|
| Microsoft.CognitiveServices/accounts/capabilityHosts/read | discovery | |
| Microsoft.CognitiveServices/accounts/commitmentPlans/read | discovery | |
| Microsoft.CognitiveServices/accounts/connections/read | discovery | |
| Microsoft.CognitiveServices/accounts/defenderForAISettings/read | discovery | |
| Microsoft.CognitiveServices/accounts/deployments/read | discovery | |
| Microsoft.CognitiveServices/accounts/encryptionScopes/read | discovery | |
| Microsoft.CognitiveServices/accounts/managedComputeDeployments/read | discovery | |
| Microsoft.CognitiveServices/accounts/networkSecurityPerimeterConfigurations/read | discovery | |
| Microsoft.CognitiveServices/accounts/openai/read | discovery | |
| Microsoft.CognitiveServices/accounts/projects/connections/read | discovery | |
| Microsoft.CognitiveServices/accounts/projects/read | discovery | |
| Microsoft.CognitiveServices/accounts/raiBlocklists/read | discovery | |
| Microsoft.CognitiveServices/accounts/raiPolicies/read | discovery | |
| Microsoft.CognitiveServices/accounts/read | discovery | |
| Microsoft.CognitiveServices/accounts/write | scheduling |
Microsoft.Compute
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Compute/disks/read | discovery; provisioning | |
| Microsoft.Compute/snapshots/read | discovery | |
| Microsoft.Compute/virtualMachines/extensions/read | discovery | |
| Microsoft.Compute/virtualMachines/read | discovery,remediation; provisioning | |
| Microsoft.Compute/virtualMachineScaleSets/read | discovery | |
| Microsoft.Compute/disks/delete | remediation | |
| Microsoft.Compute/disks/write | remediation; provisioning | |
| Microsoft.Compute/snapshots/delete | remediation | |
| Microsoft.Compute/virtualMachines/deallocate/action | scheduling; provisioning | |
| Microsoft.Compute/virtualMachines/delete | provisioning | |
| Microsoft.Compute/virtualMachines/runCommand/action | provisioning | |
| Microsoft.Compute/virtualMachines/start/action | scheduling; provisioning | |
| Microsoft.Compute/virtualMachines/write | remediation; provisioning | |
| Microsoft.Compute/virtualMachineScaleSets/deallocate/action | scheduling | |
| Microsoft.Compute/virtualMachineScaleSets/delete | provisioning | |
| Microsoft.Compute/virtualMachineScaleSets/start/action | scheduling | |
| Microsoft.Compute/virtualMachineScaleSets/virtualMachines/runCommand/action | provisioning | |
| Microsoft.Compute/virtualMachineScaleSets/write | scheduling |
Microsoft.ContainerRegistry
| Action | Access | Purpose |
|---|---|---|
| Microsoft.ContainerRegistry/registries/delete | remediation; deployments | |
| Microsoft.ContainerRegistry/registries/read | deployments | |
| Microsoft.ContainerRegistry/registries/write | deployments |
Microsoft.ContainerService
| Action | Access | Purpose |
|---|---|---|
| Microsoft.ContainerService/managedClusters/agentPools/read | discovery | |
| Microsoft.ContainerService/managedClusters/apiextensions.k8s.io/customresourcedefinitions/read | discovery | |
| Microsoft.ContainerService/managedClusters/apps/controllerrevisions/read | discovery | |
| Microsoft.ContainerService/managedClusters/apps/daemonsets/read | discovery | |
| Microsoft.ContainerService/managedClusters/apps/deployments/read | discovery | |
| Microsoft.ContainerService/managedClusters/apps/replicasets/read | discovery | |
| Microsoft.ContainerService/managedClusters/apps/statefulsets/read | discovery | |
| Microsoft.ContainerService/managedClusters/autoscaling/horizontalpodautoscalers/read | discovery | |
| Microsoft.ContainerService/managedClusters/batch/cronjobs/read | discovery | |
| Microsoft.ContainerService/managedClusters/batch/jobs/read | discovery | |
| Microsoft.ContainerService/managedClusters/configmaps/read | discovery | |
| Microsoft.ContainerService/managedClusters/customresources/read | discovery | |
| Microsoft.ContainerService/managedClusters/discovery.k8s.io/endpointslices/read | discovery | |
| Microsoft.ContainerService/managedClusters/endpoints/read | discovery | |
| Microsoft.ContainerService/managedClusters/events.k8s.io/events/read | discovery | |
| Microsoft.ContainerService/managedClusters/events/read | discovery | |
| Microsoft.ContainerService/managedClusters/extensions/daemonsets/read | discovery | |
| Microsoft.ContainerService/managedClusters/extensions/deployments/read | discovery | |
| Microsoft.ContainerService/managedClusters/extensions/ingresses/read | discovery | |
| Microsoft.ContainerService/managedClusters/extensions/networkpolicies/read | discovery | |
| Microsoft.ContainerService/managedClusters/extensions/replicasets/read | discovery | |
| Microsoft.ContainerService/managedClusters/limitranges/read | discovery | |
| Microsoft.ContainerService/managedClusters/listClusterUserCredential/action | discovery | |
| Microsoft.ContainerService/managedClusters/metrics.k8s.io/nodes/read | discovery | |
| Microsoft.ContainerService/managedClusters/metrics.k8s.io/pods/read | discovery | |
| Microsoft.ContainerService/managedClusters/namespaces/read | discovery | |
| Microsoft.ContainerService/managedClusters/networking.k8s.io/ingresses/read | discovery | |
| Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/read | discovery | |
| Microsoft.ContainerService/managedClusters/nodes/read | discovery | |
| Microsoft.ContainerService/managedClusters/persistentvolumeclaims/read | discovery | |
| Microsoft.ContainerService/managedClusters/persistentvolumes/read | discovery | |
| Microsoft.ContainerService/managedClusters/pods/read | discovery | |
| Microsoft.ContainerService/managedClusters/policy/poddisruptionbudgets/read | discovery | |
| Microsoft.ContainerService/managedClusters/rbac.authorization.k8s.io/clusterrolebindings/read | discovery | |
| Microsoft.ContainerService/managedClusters/rbac.authorization.k8s.io/clusterroles/read | discovery | |
| Microsoft.ContainerService/managedClusters/rbac.authorization.k8s.io/rolebindings/read | discovery | |
| Microsoft.ContainerService/managedClusters/rbac.authorization.k8s.io/roles/read | discovery | |
| Microsoft.ContainerService/managedClusters/read | discovery | |
| Microsoft.ContainerService/managedClusters/replicationcontrollers/read | discovery | |
| Microsoft.ContainerService/managedClusters/resourcequotas/read | discovery | |
| Microsoft.ContainerService/managedClusters/secrets/read | discovery | |
| Microsoft.ContainerService/managedClusters/serviceaccounts/read | discovery | |
| Microsoft.ContainerService/managedClusters/services/read | discovery | |
| Microsoft.ContainerService/managedClusters/storage.k8s.io/storageclasses/read | discovery | |
| Microsoft.ContainerService/managedClusters/agentPools/delete | provisioning | |
| Microsoft.ContainerService/managedClusters/agentPools/write | scheduling | |
| Microsoft.ContainerService/managedClusters/apps/daemonsets/write | namespace_scheduling | |
| Microsoft.ContainerService/managedClusters/apps/deployments/write | namespace_scheduling | |
| Microsoft.ContainerService/managedClusters/apps/statefulsets/write | namespace_scheduling | |
| Microsoft.ContainerService/managedClusters/autoscaling/horizontalpodautoscalers/delete | namespace_scheduling | |
| Microsoft.ContainerService/managedClusters/autoscaling/horizontalpodautoscalers/write | namespace_scheduling | |
| Microsoft.ContainerService/managedClusters/batch/cronjobs/write | namespace_scheduling | |
| Microsoft.ContainerService/managedClusters/customresources/delete | namespace_scheduling | |
| Microsoft.ContainerService/managedClusters/customresources/write | namespace_scheduling | |
| Microsoft.ContainerService/managedClusters/delete | provisioning | |
| Microsoft.ContainerService/managedClusters/policy/poddisruptionbudgets/delete | namespace_scheduling | |
| Microsoft.ContainerService/managedClusters/policy/poddisruptionbudgets/write | namespace_scheduling | |
| Microsoft.ContainerService/managedClusters/start/action | scheduling | |
| Microsoft.ContainerService/managedClusters/stop/action | scheduling | |
| Microsoft.ContainerService/managedClusters/write | provisioning |
Microsoft.CostManagement
| Action | Access | Purpose |
|---|---|---|
| Microsoft.CostManagement/query/read | cost,discovery |
Microsoft.Databricks
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Databricks/workspaces/read | discovery | |
| Microsoft.Databricks/workspaces/write | scheduling |
Microsoft.DataFactory
| Action | Access | Purpose |
|---|---|---|
| Microsoft.DataFactory/factories/integrationRuntimes/read | discovery | |
| Microsoft.DataFactory/factories/read | discovery | |
| Microsoft.DataFactory/factories/integrationRuntimes/start/action | scheduling | |
| Microsoft.DataFactory/factories/integrationRuntimes/stop/action | scheduling | |
| Microsoft.DataFactory/factories/triggers/start/action | scheduling | |
| Microsoft.DataFactory/factories/triggers/stop/action | scheduling | |
| Microsoft.DataFactory/factories/write | scheduling |
Microsoft.DBforMySQL
| Action | Access | Purpose |
|---|---|---|
| Microsoft.DBforMySQL/flexibleServers/read | discovery | |
| Microsoft.DBforMySQL/flexibleServers/delete | provisioning | |
| Microsoft.DBforMySQL/flexibleServers/start/action | scheduling | |
| Microsoft.DBforMySQL/flexibleServers/stop/action | scheduling | |
| Microsoft.DBforMySQL/flexibleServers/write | remediation; provisioning |
Microsoft.DBforPostgreSQL
| Action | Access | Purpose |
|---|---|---|
| Microsoft.DBforPostgreSQL/flexibleServers/read | discovery | |
| Microsoft.DBforPostgreSQL/flexibleServers/delete | provisioning | |
| Microsoft.DBforPostgreSQL/flexibleServers/start/action | scheduling | |
| Microsoft.DBforPostgreSQL/flexibleServers/stop/action | scheduling | |
| Microsoft.DBforPostgreSQL/flexibleServers/write | provisioning |
Microsoft.EventHub
| Action | Access | Purpose |
|---|---|---|
| Microsoft.EventHub/namespaces/delete | remediation |
Microsoft.Insights
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Insights/autoscalesettings/read | discovery | |
| Microsoft.Insights/eventTypes/values/read | recommendations | |
| Microsoft.Insights/metricAlerts/read | discovery | |
| Microsoft.Insights/metrics/read | recommendations | |
| Microsoft.Insights/scheduledQueryRules/read | discovery | |
| Microsoft.Insights/autoscalesettings/delete | scheduling | |
| Microsoft.Insights/autoscalesettings/write | scheduling |
Microsoft.KeyVault
| Action | Access | Purpose |
|---|---|---|
| Microsoft.KeyVault/vaults/delete | remediation; deployments | |
| Microsoft.KeyVault/vaults/read | deployments | |
| Microsoft.KeyVault/vaults/secrets/getSecret/action | deployments | |
| Microsoft.KeyVault/vaults/secrets/read | deployments | |
| Microsoft.KeyVault/vaults/secrets/setSecret/action | deployments | |
| Microsoft.KeyVault/vaults/secrets/write | deployments | |
| Microsoft.KeyVault/vaults/write | deployments |
Microsoft.Kusto
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Kusto/Clusters/read | discovery | |
| Microsoft.Kusto/Clusters/start/action | scheduling | |
| Microsoft.Kusto/Clusters/stop/action | scheduling |
Microsoft.MachineLearningServices
| Action | Access | Purpose |
|---|---|---|
| Microsoft.MachineLearningServices/registries/read | discovery | |
| Microsoft.MachineLearningServices/workspaces/components/read | discovery | |
| Microsoft.MachineLearningServices/workspaces/computes/read | discovery | |
| Microsoft.MachineLearningServices/workspaces/connections/read | discovery | |
| Microsoft.MachineLearningServices/workspaces/data/read | discovery | |
| Microsoft.MachineLearningServices/workspaces/datastores/read | discovery | |
| Microsoft.MachineLearningServices/workspaces/environments/read | discovery | |
| Microsoft.MachineLearningServices/workspaces/featuresets/read | discovery | |
| Microsoft.MachineLearningServices/workspaces/featurestoreentities/read | discovery | |
| Microsoft.MachineLearningServices/workspaces/jobs/read | discovery | |
| Microsoft.MachineLearningServices/workspaces/models/read | discovery | |
| Microsoft.MachineLearningServices/workspaces/schedules/read | discovery | |
| Microsoft.MachineLearningServices/workspaces/computes/start/action | scheduling | |
| Microsoft.MachineLearningServices/workspaces/computes/stop/action | scheduling | |
| Microsoft.MachineLearningServices/workspaces/computes/write | scheduling |
Microsoft.Network
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Network/ddosProtectionPlans/read | discovery | |
| Microsoft.Network/dnsZones/A/write | provisioning | |
| Microsoft.Network/dnsZones/delete | provisioning | |
| Microsoft.Network/dnsZones/read | provisioning | |
| Microsoft.Network/dnsZones/recordSets/read | provisioning | |
| Microsoft.Network/dnsZones/write | provisioning | |
| Microsoft.Network/loadBalancers/delete | provisioning | |
| Microsoft.Network/loadBalancers/read | provisioning | |
| Microsoft.Network/loadBalancers/write | provisioning | |
| Microsoft.Network/networkInterfaces/delete | provisioning | |
| Microsoft.Network/networkInterfaces/join/action | provisioning | |
| Microsoft.Network/networkInterfaces/read | provisioning | |
| Microsoft.Network/networkInterfaces/write | provisioning | |
| Microsoft.Network/networkSecurityGroups/delete | remediation; provisioning | |
| Microsoft.Network/networkSecurityGroups/join/action | provisioning | |
| Microsoft.Network/networkSecurityGroups/read | provisioning | |
| Microsoft.Network/networkSecurityGroups/write | provisioning | |
| Microsoft.Network/privateDnsZones/delete | provisioning | |
| Microsoft.Network/privateDnsZones/read | provisioning | |
| Microsoft.Network/privateDnsZones/virtualNetworkLinks/delete | provisioning | |
| Microsoft.Network/privateDnsZones/virtualNetworkLinks/read | provisioning | |
| Microsoft.Network/privateDnsZones/virtualNetworkLinks/write | provisioning | |
| Microsoft.Network/privateDnsZones/write | provisioning | |
| Microsoft.Network/publicIPAddresses/delete | remediation; provisioning | |
| Microsoft.Network/publicIPAddresses/join/action | provisioning | |
| Microsoft.Network/publicIPAddresses/read | provisioning | |
| Microsoft.Network/publicIPAddresses/write | provisioning | |
| Microsoft.Network/virtualNetworks/delete | provisioning | |
| Microsoft.Network/virtualNetworks/read | discovery; provisioning | |
| Microsoft.Network/virtualNetworks/subnets/delete | provisioning | |
| Microsoft.Network/virtualNetworks/subnets/join/action | provisioning | |
| Microsoft.Network/virtualNetworks/subnets/read | provisioning | |
| Microsoft.Network/virtualNetworks/subnets/write | provisioning | |
| Microsoft.Network/virtualNetworks/virtualNetworkPeerings/delete | remediation; provisioning | |
| Microsoft.Network/virtualNetworks/virtualNetworkPeerings/read | provisioning | |
| Microsoft.Network/virtualNetworks/virtualNetworkPeerings/write | provisioning | |
| Microsoft.Network/virtualNetworks/write | provisioning |
Microsoft.OperationalInsights
| Action | Access | Purpose |
|---|---|---|
| Microsoft.OperationalInsights/workspaces/read | remediation | |
| Microsoft.OperationalInsights/workspaces/write | remediation |
Microsoft.RecoveryServices
| Action | Access | Purpose |
|---|---|---|
| Microsoft.RecoveryServices/vaults/backupconfig/read | discovery | |
| Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems/read | discovery | |
| Microsoft.RecoveryServices/vaults/backupPolicies/read | discovery | |
| Microsoft.RecoveryServices/vaults/backupProtectedItems/read | discovery | |
| Microsoft.RecoveryServices/vaults/backupstorageconfig/read | discovery | |
| Microsoft.RecoveryServices/vaults/read | discovery | |
| Microsoft.RecoveryServices/vaults/backupPolicies/write | remediation | |
| Microsoft.RecoveryServices/vaults/backupstorageconfig/write | remediation | |
| Microsoft.RecoveryServices/vaults/delete | remediation | |
| Microsoft.RecoveryServices/vaults/write | remediation |
Microsoft.ResourceGraph
| Action | Access | Purpose |
|---|---|---|
| Microsoft.ResourceGraph/resources/read | discovery,recommendations |
Microsoft.Resources
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Resources/subscriptions/read | discovery | |
| Microsoft.Resources/subscriptions/resourceGroups/read | discovery | |
| Microsoft.Resources/subscriptions/resourceGroups/delete | provisioning | |
| Microsoft.Resources/subscriptions/resourceGroups/write | provisioning |
Microsoft.Search
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Search/searchServices/listAdminKeys/action | discovery | |
| Microsoft.Search/searchServices/read | discovery |
Microsoft.Security
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Security/locations/jitNetworkAccessPolicies/read | discovery |
Microsoft.ServiceBus
| Action | Access | Purpose |
|---|---|---|
| Microsoft.ServiceBus/namespaces/delete | remediation |
Microsoft.Sql
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Sql/servers/databases/read | discovery | |
| Microsoft.Sql/servers/securityAlertPolicies/read | discovery | |
| Microsoft.Sql/servers/databases/pause/action | scheduling | |
| Microsoft.Sql/servers/databases/resume/action | scheduling |
Microsoft.Storage
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Storage/storageAccounts/managementPolicies/read | discovery | |
| Microsoft.Storage/storageAccounts/read | discovery | |
| Microsoft.Storage/storageAccounts/delete | remediation | |
| Microsoft.Storage/storageAccounts/write | remediation |
Microsoft.Synapse
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Synapse/workspaces/sqlPools/read | discovery | |
| Microsoft.Synapse/workspaces/sqlPools/pause/action | scheduling | |
| Microsoft.Synapse/workspaces/sqlPools/resume/action | scheduling |
Microsoft.Web
| Action | Access | Purpose |
|---|---|---|
| Microsoft.Web/serverfarms/read | remediation | |
| Microsoft.Web/sites/config/read | discovery | |
| Microsoft.Web/sites/read | discovery | |
| Microsoft.Web/serverfarms/delete | remediation | |
| Microsoft.Web/serverfarms/write | remediation | |
| Microsoft.Web/sites/start/action | scheduling | |
| Microsoft.Web/sites/stop/action | scheduling | |
| Microsoft.Web/sites/write | scheduling |
Reader roles now, Zopnight Write Access later
Azure is role-based rather than action-based, so the honest answer is a list of roles, not a list of strings. Read-only discovery needs Reader at subscription scope, Monitoring Reader for the utilisation metrics that idle and rightsizing findings depend on, and Cost Management Reader for spend.
Those roles, plus the cluster reads in Zopnight AKS Access, the workspace reads in Zopnight Databricks Access, a few AI-service roles and the optional Search Service Contributor grant for AI Search inventory, cover every read action ZopNight uses. The reader roles cannot change anything; Search Service Contributor can, which is why that grant is optional.
Acting on findings needs the custom Zopnight Write Access role, plus Zopnight AKS
Access for cluster and node-pool operations. The provisioning and deployment entries in the
list above, such as Microsoft.Authorization/roleAssignments/write, Key Vault secret reads and
writes, and DNS record writes, are not part of that grant. They belong to ZopDay’s separate
ZopDay Infrastructure Access role and are needed only if you provision or deploy with ZopDay.
Service principal or workload identity federation?
Both are supported and the choice is a real one.
- Workload identity federation stores no secret. Azure trusts a ZopNight OIDC token directly, so there is nothing to rotate and nothing to leak. Prefer it.
- Service principal uses a client ID, secret and tenant ID. Universally supported, but the secret is stored and you own its rotation.
Why deallocate, not power off
Stopping an Azure VM through the guest OS leaves it allocated, and an allocated VM keeps
billing for compute. ZopNight always issues deallocate, which releases the capacity and stops
the compute charge. The disks keep billing either way, which is a separate finding.
This is why the write role needs virtualMachines/deallocate/action specifically, and why
granting only powerOff/action produces schedules that appear to work and save nothing.
Namespace scheduling
AKS carries an extra purpose, namespace_scheduling: scaling every Deployment and StatefulSet
in a namespace to zero and suspending its CronJobs, then restoring the prior replica counts.
It needs cluster access rather than subscription-level rights, which is why it sits in its own
role instead of the general write grant.
Microsoft Azure permissions: common questions
Which Azure roles does ZopNight need?
Three built-in ones for reading: Reader at subscription scope for inventory, Monitoring Reader for the utilisation metrics that idle and rightsizing findings depend on, and Cost Management Reader for spend. That is 120 read permissions, none of which can change anything.
Is Contributor or Owner ever required?
No. ZopNight's writes come from the custom Zopnight Write Access role, plus Zopnight AKS Access for cluster and node-pool operations: 68 write permissions across the two. The other write entries on this page, such as Microsoft.Authorization/roleAssignments/write, belong to ZopDay's provisioning role and are needed only if you provision or deploy with ZopDay.
Why does the write role need deallocate rather than powerOff?
Because a VM that is stopped but still allocated keeps billing for compute. ZopNight issues Microsoft.Compute/virtualMachines/deallocate/action, which releases the capacity. Granting powerOff/action instead produces schedules that appear to work and save nothing.