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.
That is the whole read grant: 120 permissions, none of which can change anything.
Acting on findings needs the custom Zopnight Write Access role, plus Zopnight AKS Access for cluster and node-pool operations and Zopnight Databricks Access if you run Databricks on Azure. 125 write permissions across those three.
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. Writes come from the custom Zopnight Write Access role, plus Zopnight AKS Access for cluster and node-pool operations and Zopnight Databricks Access if you run Databricks on Azure. That is 125 write permissions across the three.
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.