Rules by pillar

March 30, 2026 ยท View on GitHub

PSRule for Azure includes the following rules across five pillars of the Microsoft Azure Well-Architected Framework.

Cost Optimization

CO:03 Cost data and reporting

NameSynopsisSeverityLevel
Azure.Resource.UseTagsAzure resources should be tagged using a standard convention.AwarenessError

CO:04 Spending guardrails

NameSynopsisSeverityLevel
Azure.DevBox.ProjectLimitLimit the number of Dev Boxes a single user can create for a project.ImportantError

CO:05 Rate optimization

NameSynopsisSeverityLevel
Azure.VM.MultiTenantHostingDeploy Windows 10 and 11 virtual machines in Azure using Multi-tenant Hosting Rights to leverage your existing Windows licenses.AwarenessError
Azure.VM.PromoSkuVirtual machines (VMs) should not use expired promotional SKU.AwarenessError
Azure.VM.UseHybridUseBenefitUse Azure Hybrid Benefit for applicable virtual machine (VM) workloads.AwarenessError

CO:06 Usage and billing increments

NameSynopsisSeverityLevel
Azure.Alert.HighFrequencyQueryHigh frequency scheduled queries are changed as a higher rate than low frequency queries.ImportantError
Azure.ML.ComputeIdleShutdownConfigure an idle shutdown timeout for Machine Learning compute instances.CriticalError
Azure.VM.DiskSizeAlignmentAlign to the Managed Disk billing increments to improve cost efficiency.AwarenessError

CO:07 Component costs

NameSynopsisSeverityLevel
Azure.ACR.UsageRegularly remove deprecated and unneeded images to reduce storage usage.ImportantError
Azure.AKS.AuditAdminUse kube-audit-admin instead of kube-audit to capture administrative actions in AKS clusters.ImportantError
Azure.VM.DiskAttachedManaged disks should be attached to virtual machines or removed.ImportantError
Azure.VM.ShouldNotBeStoppedAzure Virtual Machines in a stopped state are still allocated and billed for compute usage.ImportantError

CO:10 Data costs

NameSynopsisSeverityLevel
Azure.ACR.RetentionUse a retention policy to cleanup untagged manifests.ImportantError

CO:13 Personnel time

NameSynopsisSeverityLevel
Azure.Alert.MetricAutoMitigateAlerts that require manual intervention for mitigation can lead to increased personnel time and effort.ImportantError
Azure.NIC.AttachedNetwork interfaces (NICs) that are not used should be removed.AwarenessError
Azure.NSG.AssociatedNetwork Security Groups (NSGs) should be associated to a subnet or network interface.AwarenessError

CO:14 Consolidation

NameSynopsisSeverityLevel
Azure.ADX.UsageRegularly remove unused resources to reduce costs.ImportantError
Azure.EventHub.UsageRegularly remove unused resources to reduce costs.ImportantError
Azure.FrontDoor.StateEnable Azure Front Door Classic instance.ImportantError
Azure.PublicIP.IsAttachedPublic IP addresses should be attached or cleaned up if not in use.ImportantError
Azure.ServiceBus.UsageRegularly remove unused resources to reduce costs.ImportantError

Operational Excellence

Configuration

NameSynopsisSeverityLevel
Azure.APIM.ProductTermsSet legal terms for each product registered in API Management.ImportantError

Deployment

NameSynopsisSeverityLevel
Azure.AppGw.MinSkuApplication Gateway should use a minimum instance size of Medium.ImportantError

Infrastructure provisioning

NameSynopsisSeverityLevel
Azure.AppGw.MigrateV2Use a Application Gateway v2 SKU.ImportantError
Azure.ASE.MigrateV3Use ASEv3 as replacement for the classic app service environment versions ASEv1 and ASEv2.ImportantError

Monitoring

NameSynopsisSeverityLevel
Azure.AKS.ContainerInsightsEnable Container insights to monitor AKS cluster workloads.ImportantError
Azure.AKS.PlatformLogsAKS clusters should collect platform diagnostic logs to monitor the state of workloads.ImportantError
Azure.Automation.PlatformLogsEnsure automation account platform diagnostic logs are enabled.ImportantError
Azure.VM.MigrateAMAUse Azure Monitor Agent as replacement for Log Analytics Agent.ImportantError
Azure.VMSS.MigrateAMAUse Azure Monitor Agent as replacement for Log Analytics Agent.ImportantError

OE:04 Continuous integration

NameSynopsisSeverityLevel
Azure.ACR.NameContainer registry names should meet naming requirements.AwarenessError
Azure.AKS.DNSPrefixAzure Kubernetes Service (AKS) cluster DNS prefix should meet naming requirements.AwarenessError
Azure.AKS.NameAzure Kubernetes Service (AKS) cluster names should meet naming requirements.AwarenessError
Azure.APIM.NameAPI Management service names should meet naming requirements.AwarenessError
Azure.AppConfig.NameApp Configuration store names should meet naming requirements.AwarenessError
Azure.AppGw.NameApplication Gateways should meet naming requirements.AwarenessError
Azure.AppInsights.NameAzure Resource Manager (ARM) has requirements for Application Insights resource names.AwarenessError
Azure.ContainerApp.NameContainer Apps should meet naming requirements.AwarenessError
Azure.Cosmos.AccountNameCosmos DB account names should meet naming requirements.AwarenessError
Azure.Group.NameAzure Resource Manager (ARM) has requirements for Resource Groups names.AwarenessError
Azure.KeyVault.KeyNameKey Vault Key names should meet naming requirements.AwarenessError
Azure.KeyVault.SecretNameKey Vault Secret names should meet naming requirements.AwarenessError
Azure.LB.NameLoad Balancer names should meet naming requirements.AwarenessError
Azure.Log.NameAzure Resource Manager (ARM) has requirements for Azure Monitor Log workspace names.AwarenessError
Azure.MariaDB.DatabaseNameAzure Database for MariaDB databases should meet naming requirements.AwarenessError
Azure.MySQL.ServerNameAzure MySQL DB server names should meet naming requirements.AwarenessError
Azure.NIC.NameNetwork Interface (NIC) names should meet naming requirements.AwarenessError
Azure.NSG.NameAzure Resource Manager (ARM) has requirements for Network Security Group (NSG) names.AwarenessError
Azure.PostgreSQL.ServerNameAzure PostgreSQL DB server names should meet naming requirements.AwarenessError
Azure.PublicIP.NameAzure Resource Manager (ARM) has requirements for Public IP address names.AwarenessError
Azure.Route.NameAzure Resource Manager (ARM) has requirements for Route table names.AwarenessError
Azure.Search.NameAzure Resource Manager (ARM) has requirements for AI Search service names.AwarenessError
Azure.SQL.DBNameAzure SQL Database names should meet naming requirements.AwarenessError
Azure.SQL.ServerNameAzure SQL logical server names should meet naming requirements.AwarenessError
Azure.Storage.NameAzure Resource Manager (ARM) has requirements for Storage Account names.AwarenessError
Azure.VM.ComputerNameVirtual Machine (VM) computer name should meet naming requirements.AwarenessError
Azure.VM.NameVirtual Machine (VM) names should meet naming requirements.AwarenessError
Azure.VM.PPGNameProximity Placement Group (PPG) names should meet naming requirements.AwarenessError
Azure.VNET.NameAzure Resource Manager (ARM) has requirements for Virtual Network names.AwarenessError
Azure.VNET.SubnetNameAzure Resource Manager (ARM) has requirements for Virtual Network Subnet names.AwarenessError
Azure.VNG.ConnectionNameVirtual Network Gateway (VNG) connection names should meet naming requirements.AwarenessError
Azure.VNG.NameVirtual Network Gateway (VNG) names should meet naming requirements.AwarenessError

OE:04 Tools and processes

NameSynopsisSeverityLevel
Azure.ACI.NamingContainer Instance resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.ACR.NamingContainer Registry resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.AI.FoundryNamingAzure AI Foundry accounts without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.AKS.NamingAKS cluster resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.AKS.SystemPoolNamingAKS system node pool resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.AKS.UserPoolNamingAKS user node pool resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.APIM.APIDescriptorsAPIs should have a display name and description.AwarenessWarning
Azure.APIM.ProductDescriptorsAPI Management products should have a display name and description.AwarenessWarning
Azure.AppInsights.NamingApplication Insights resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.ContainerApp.APIVersionMigrate from retired API version to a supported version.ImportantError
Azure.ContainerApp.EnvNamingContainer App Environment resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.ContainerApp.JobNamingContainer App Job resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.ContainerApp.NamingContainer App resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Cosmos.CassandraNamingCosmos DB for Apache Cassandra account resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Cosmos.DatabaseNamingCosmos DB database resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Cosmos.GremlinNamingCosmos DB for Apache Gremlin account resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Cosmos.MongoNamingCosmos DB for MongoDB account resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Cosmos.NoSQLNamingCosmos DB for NoSQL account resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Cosmos.PostgreSQLNamingCosmos DB PostgreSQL cluster resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Cosmos.TableNamingCosmos DB for Table account resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.EventGrid.DomainNamingEvent Grid domains without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.EventGrid.SystemTopicNamingEvent Grid system topics without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.EventGrid.TopicNamingEvent Grid topics without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Group.NamingResource Groups without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Group.RequiredTagsResource groups without a standard tagging convention may be difficult to identify and manage.AwarenessError
Azure.LB.NamingLoad balancer names should use a standard prefix.AwarenessError
Azure.Log.NamingAzure Monitor Log workspaces without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.MySQL.ServerNamingMySQL database server resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.NSG.NamingNetwork security group (NSG) without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Policy.AssignmentDescriptorsPolicy assignments should use a display name and description.AwarenessError
Azure.Policy.DescriptorsPolicy and initiative definitions should use a display name, description, and category.AwarenessError
Azure.Policy.ExemptionDescriptorsPolicy exemptions should use a display name and description.AwarenessError
Azure.PostgreSQL.ServerNamingPostgreSQL database server resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.PublicIP.NamingPublic IP addresses without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Redis.NamingAzure Cache for Redis resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.RedisEnterprise.NamingAzure Cache for Redis Enterprise resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Resource.RequiredTagsResources without a standard tagging convention may be difficult to identify and manage.AwarenessError
Azure.Route.NamingRoute tables without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Search.NamingAzure AI Search services without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.ServiceFabric.ManagedNamingService Fabric managed cluster resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.ServiceFabric.NamingService Fabric cluster resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.SQL.DBNamingAzure SQL database resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.SQL.ElasticPoolNamingAzure SQL Elastic Pool resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.SQL.JobAgentNamingAzure SQL Elastic Job agent resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.SQL.ServerNamingAzure SQL Database server resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.SQLMI.NamingSQL Managed Instance resources without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Storage.NamingStorage Accounts without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.Subscription.RequiredTagsSubscriptions without a standard tagging convention may be difficult to identify and manage.AwarenessError
Azure.VM.NamingVirtual machines without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.VNET.NamingVirtual Networks without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.VNET.PeerStateVNET peering connections must be connected.ImportantError
Azure.VNET.SubnetNamingVirtual Network subnets without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.VNG.ConnectionNamingVirtual network gateway connections without a standard naming convention may be difficult to identify and manage.AwarenessError
Azure.VNG.NamingVirtual network gateway without a standard naming convention may be difficult to identify and manage.AwarenessError

OE:05 Infrastructure as code

NameSynopsisSeverityLevel
Azure.Redis.MigrateAMRAzure Cache for Redis is being retired. Migrate to Azure Managed Redis.ImportantError
Azure.RedisEnterprise.MigrateAMRAzure Cache for Redis Enterprise and Enterprise Flash are being retired. Migrate to Azure Managed Redis.ImportantError
Azure.Template.ResourceLocationResource locations should be an expression or global.AwarenessError
Azure.Template.TemplateFileUse ARM template files that are valid.ImportantError
Azure.Template.ValidSecretRefUse a valid secret reference within parameter files.AwarenessError

OE:07 Monitoring system

NameSynopsisSeverityLevel
Azure.AppInsights.WorkspaceConfigure Application Insights resources to store data in a workspace.ImportantError
Azure.VM.AMAUse Azure Monitor Agent for collecting monitoring data from VMs.ImportantError
Azure.VMSS.AMAUse Azure Monitor Agent for collecting monitoring data from VM scale sets.ImportantError

OE:09 Task automation

NameSynopsisSeverityLevel
Azure.AKS.AutoUpgradeNew versions of Kubernetes are released regularly. Upgrading each release manually can add operational overhead without realizing equivalent value.ImportantError

OE:10 Automation design

NameSynopsisSeverityLevel
Azure.VM.AgentVirtual Machines (VMs) without an agent provisioned are unable to use monitoring, management, and security extensions.ImportantError

Release engineering

NameSynopsisSeverityLevel
Azure.Template.DebugDeploymentUse default deployment detail level for nested deployments.AwarenessError
Azure.Template.DefineParametersEach Azure Resource Manager (ARM) template file should contain a minimal number of parameters.AwarenessError
Azure.Template.LocationTypeLocation parameters should use a string value.ImportantError
Azure.Template.MetadataLinkConfigure a metadata link for each parameter file.ImportantError
Azure.Template.ParameterDataTypesSet the parameter default value to a value of the same type.ImportantError
Azure.Template.ParameterMetadataSet metadata descriptions in Azure Resource Manager (ARM) template for each parameter.AwarenessError
Azure.Template.ParameterMinMaxValueTemplate parameters minValue and maxValue constraints must be valid.ImportantError
Azure.Template.ResourcesEach Azure Resource Manager (ARM) template file should deploy at least one resource.AwarenessError
Azure.Template.UseLocationParameterTemplate should reference a location parameter to specify resource location.AwarenessWarning
Azure.Template.UseParametersEach Azure Resource Manager (ARM) template parameter should be used or removed from template files.AwarenessError
Azure.Template.UseVariablesEach Azure Resource Manager (ARM) template variable should be used or removed from template files.AwarenessError

Repeatable infrastructure

NameSynopsisSeverityLevel
Azure.APIM.MinAPIVersionAPI Management instances should limit control plane API calls to API Management with version '2021-08-01' or newer.ImportantError
Azure.Arc.Server.MaintenanceConfigUse a maintenance configuration for Arc-enabled servers.ImportantError
Azure.ASG.NameApplication Security Group (ASG) names should meet naming requirements.AwarenessError
Azure.Bastion.NameBastion hosts should meet naming requirements.AwarenessError
Azure.CDN.EndpointNameAzure CDN Endpoint names should meet naming requirements.AwarenessError
Azure.Deployment.NameNested deployments should meet naming requirements of deployments.AwarenessError
Azure.Firewall.NameFirewall names should meet naming requirements.AwarenessError
Azure.Firewall.PolicyNameFirewall policy names should meet naming requirements.AwarenessError
Azure.FrontDoor.NameFront Door names should meet naming requirements.AwarenessError
Azure.FrontDoor.WAF.NameFront Door WAF policy names should meet naming requirements.AwarenessError
Azure.Identity.UserAssignedNameManaged Identity names should meet naming requirements.AwarenessError
Azure.KeyVault.NameKey Vault names should meet naming requirements.AwarenessError
Azure.MariaDB.FirewallRuleNameAzure Database for MariaDB firewall rules should meet naming requirements.AwarenessError
Azure.MariaDB.ServerNameAzure Database for MariaDB servers should meet naming requirements.AwarenessError
Azure.MariaDB.VNETRuleNameAzure Database for MariaDB VNET rules should meet naming requirements.AwarenessError
Azure.NSG.AKSRulesAKS Network Security Group (NSG) should not have custom rules.AwarenessError
Azure.Policy.AssignmentAssignedByPolicy assignments should use assignedBy metadata.AwarenessError
Azure.PrivateEndpoint.NamePrivate Endpoint names should meet naming requirements.AwarenessError
Azure.PublicIP.DNSLabelPublic IP domain name labels should meet naming requirements.AwarenessError
Azure.PublicIP.MigrateStandardUse the Standard SKU for Public IP addresses as the Basic SKU will be retired.ImportantError
Azure.RSV.NameRecovery Services vaults should meet naming requirements.AwarenessError
Azure.SignalR.NameSignalR service instance names should meet naming requirements.AwarenessError
Azure.SQL.FGNameAzure SQL failover group names should meet naming requirements.AwarenessError
Azure.SQLMI.NameSQL Managed Instance names should meet naming requirements.AwarenessError
Azure.Template.ExpressionLengthTemplate expressions should not exceed the maximum length.AwarenessError
Azure.Template.ParameterFileUse ARM template parameter files that are valid.ImportantError
Azure.Template.ParameterSchemeUse an Azure template parameter file schema with the https scheme.AwarenessError
Azure.Template.ParameterStrongTypeSet the parameter value to a value that matches the specified strong type.AwarenessError
Azure.Template.ParameterValueSpecify a value for each parameter in template parameter files.AwarenessError
Azure.Template.TemplateSchemaUse a more recent version of the Azure template schema.AwarenessError
Azure.Template.TemplateSchemeUse an Azure template file schema with the https scheme.AwarenessError
Azure.Template.UseCommentsUse comments for each resource in ARM template to communicate purpose.AwarenessInformation
Azure.Template.UseDescriptionsUse descriptions for each resource in generated template(bicep, psarm, AzOps) to communicate purpose.AwarenessInformation
Azure.VM.ASNameAvailability Set names should meet naming requirements.AwarenessError
Azure.VM.DiskNameManaged Disk names should meet naming requirements.AwarenessError
Azure.VMSS.ComputerNameVirtual Machine Scale Set (VMSS) computer name should meet naming requirements.AwarenessError
Azure.VMSS.NameVirtual Machine Scale Set (VMSS) names should meet naming requirements.AwarenessError
Azure.vWAN.NameVirtual WAN (vWAN) names should meet naming requirements.AwarenessError

Performance Efficiency

Application capacity

NameSynopsisSeverityLevel
Azure.AppService.MinPlanUse at least a Standard App Service Plan.ImportantError

Application scalability

NameSynopsisSeverityLevel
Azure.AKS.PoolScaleSetDeploy AKS clusters with nodes pools based on VM scale sets.ImportantError
Azure.AKS.StandardLBAzure Kubernetes Clusters (AKS) should use a Standard load balancer SKU.ImportantError

Design for performance

NameSynopsisSeverityLevel
Azure.VM.SQLServerDiskUse Premium SSD disks or greater for data and log files for production SQL Server workloads.ImportantError

PE:02 Capacity planning

NameSynopsisSeverityLevel
Azure.Search.SKUUse the basic and standard tiers for entry level workloads.CriticalError

PE:03 Selecting services

NameSynopsisSeverityLevel
Azure.Databricks.SKUEnsure Databricks workspaces are non-trial SKUs for production workloads.CriticalError
Azure.Redis.MinSKUUse Azure Cache for Redis instances of at least Standard C1.ImportantError

PE:05 Scaling and partitioning

NameSynopsisSeverityLevel
Azure.AKS.AutoScalingUse autoscaling to scale clusters based on workload requirements.ImportantError
Azure.AKS.NodeMinPodsAzure Kubernetes Cluster (AKS) nodes should use a minimum number of pods.ImportantError
Azure.AppService.ARRAffinityDisable client affinity for stateless services.AwarenessError
Azure.ContainerApp.DisableAffinityDisable session affinity to prevent unbalanced distribution.AwarenessError
Azure.Redis.MaxMemoryReservedConfigure maxmemory-reserved to reserve memory for non-cache operations.ImportantError

PE:07 Code and infrastructure

NameSynopsisSeverityLevel
Azure.AppService.HTTP2Use HTTP/2 instead of HTTP/1.x to improve protocol efficiency.AwarenessError
Azure.VM.AcceleratedNetworkingUse accelerated networking for supported operating systems and VM types.ImportantError
Azure.VM.DiskCachingCheck disk caching is configured correctly for the workload.ImportantError

PE:08 Data performance

NameSynopsisSeverityLevel
Azure.FrontDoor.UseCachingUse caching to reduce retrieving contents from origins.ImportantError

Performance efficiency checklist

NameSynopsisSeverityLevel
Azure.AKS.EphemeralOSDiskAKS clusters should use ephemeral OS disks which can provide lower read/write latency, along with faster node scaling and cluster upgrades.ImportantWarning
Azure.CDN.UseFrontDoorUse Azure Front Door Standard or Premium SKU to improve the performance of web pages with dynamic content and overall capabilities.ImportantError

Reliability

Application design

NameSynopsisSeverityLevel
Azure.AppService.AlwaysOnConfigure Always On for App Service apps.ImportantError

Best practices

NameSynopsisSeverityLevel
Azure.VNET.BastionSubnetVNETs with a GatewaySubnet should have an AzureBastionSubnet to allow for out of band remote access to VMs.ImportantError

Data management

NameSynopsisSeverityLevel
Azure.AppConfig.PurgeProtectConsider purge protection for app configuration store to ensure store cannot be purged in the retention period.ImportantError

Design

NameSynopsisSeverityLevel
Azure.RSV.ReplicationAlertRecovery Services Vaults (RSV) without replication alerts configured may be at risk.ImportantError
Azure.RSV.StorageTypeRecovery Services Vaults (RSV) not using geo-replicated storage (GRS) may be at risk.ImportantError
Azure.VNG.ERAvailabilityZoneSKUUse availability zone SKU for virtual network gateways deployed with ExpressRoute gateway type.ImportantError

Health modeling

NameSynopsisSeverityLevel
Azure.FrontDoor.ProbeUse health probes to check the health of each backend.ImportantError
Azure.FrontDoor.ProbeMethodConfigure health probes to use HEAD requests to reduce performance overhead.ImportantError
Azure.FrontDoor.ProbePathConfigure a dedicated path for health probe requests.ImportantError

PE:05 Scaling and partitioning

NameSynopsisSeverityLevel
Azure.AKS.CNISubnetSizeAKS clusters using Azure CNI should use large subnets to reduce IP exhaustion issues.ImportantError

RE:01 Simplicity and efficiency

NameSynopsisSeverityLevel
Azure.NIC.UniqueDnsNetwork interfaces (NICs) should inherit DNS from virtual networks.AwarenessError
Azure.NSG.DenyAllInboundWhen all inbound traffic is denied, some functions that affect the reliability of your service may not work as expected.ImportantError
Azure.VM.UseManagedDisksVirtual machines (VMs) should use managed disks.ImportantError

RE:04 Target metrics

NameSynopsisSeverityLevel
Azure.ACR.MinSkuThe Basic SKU provides limited performance and features for production container registry workloads.ImportantError
Azure.ACR.SoftDeleteContainer registry artifacts are permanently lost when accidentally deleted without soft delete protection.ImportantError
Azure.ADX.SLAUse SKUs that include an SLA when configuring Azure Data Explorer (ADX) clusters.ImportantError
Azure.AKS.MaintenanceWindowConfigure customer-controlled maintenance windows for AKS clusters.ImportantError
Azure.AKS.PoolVersionAKS node pools should match Kubernetes control plane version.ImportantError
Azure.AKS.UptimeSLAAKS clusters should have Uptime SLA enabled for a financially backed SLA.ImportantError
Azure.AKS.VersionOlder versions of Kubernetes may have known bugs or security vulnerabilities, and may have limited support.ImportantError
Azure.APIM.CertificateExpiryRenew certificates used for custom domain bindings.ImportantError
Azure.AppConfig.SKUApp Configuration should use a minimum size of Standard.ImportantError
Azure.AppGw.MigrateWAFPolicyMigrate to Application Gateway WAF policy.CriticalError
Azure.AppGw.MinInstanceApplication Gateways should use a minimum of two instances.ImportantError
Azure.AppService.WebProbeConfigure and enable instance health probes.ImportantError
Azure.AppService.WebProbePathConfigure a dedicated path for health probe requests.ImportantError
Azure.AVD.ScheduleAgentUpdateDefine a windows for agent updates to minimize disruptions to users.ImportantError
Azure.Cosmos.SLAUse a paid tier to qualify for a Service Level Agreement (SLA).ImportantError
Azure.DataFactory.VersionConsider migrating to DataFactory v2.AwarenessError
Azure.Grafana.VersionGrafana workspaces should be on Grafana version 10.ImportantError
Azure.LB.StandardSKULoad balancers should be deployed with Standard SKU for production workloads.ImportantError
Azure.MySQL.MaintenanceWindowConfigure a customer-controlled maintenance window for Azure Database for MySQL servers.ImportantError
Azure.PostgreSQL.MaintenanceWindowConfigure a customer-controlled maintenance window for Azure Database for PostgreSQL servers.ImportantError
Azure.PublicIP.StandardSKUThe basic SKU is being retired on 30 September 2025, and does not include several reliability and security features.ImportantError
Azure.Redis.VersionAzure Cache for Redis should use the latest supported version of Redis.ImportantError
Azure.SignalR.SLAUse SKUs that include an SLA when configuring SignalR Services.ImportantError
Azure.SQL.MaintenanceWindowConfigure a customer-controlled maintenance window for Azure SQL databases.ImportantError
Azure.SQLMI.MaintenanceWindowConfigure a customer-controlled maintenance window for Azure SQL Managed Instances.ImportantError
Azure.Storage.ContainerSoftDeleteEnable container soft delete on Storage Accounts.ImportantError
Azure.Storage.FileShareSoftDeleteEnable soft delete on Storage Accounts file shares.ImportantError
Azure.Storage.SoftDeleteEnable blob soft delete on Storage Accounts.ImportantError
Azure.VM.ASAlignmentUse availability sets aligned with managed disks fault domains.ImportantError
Azure.VM.BasicSkuVirtual machines (VMs) should not use Basic sizes.ImportantError
Azure.VM.MaintenanceConfigUse a maintenance configuration for virtual machines.ImportantError
Azure.VM.StandaloneSingle instance VMs are a single point of failure, however reliability can be improved by using premium storage.ImportantError
Azure.VNG.ERLegacySKUMigrate from legacy SKUs to improve reliability and performance of ExpressRoute (ER) gateways.CriticalError
Azure.VNG.MaintenanceConfigUse a customer-controlled maintenance configuration for virtual network gateways.ImportantError
Azure.VNG.VPNLegacySKUMigrate from legacy SKUs to improve reliability and performance of VPN gateways.CriticalError
Azure.WebPubSub.SLAUse SKUs that include an SLA when configuring Web PubSub Services.ImportantError

RE:05 High-availability multi-region design

NameSynopsisSeverityLevel
Azure.ACR.GeoReplicaApplications or infrastructure relying on a container image may fail if the registry is not available at the time they start.ImportantError
Azure.EntraDS.MinReplicasApplications or infrastructure relying on a managed domain may fail if the domain is not available.ImportantError
Azure.EntraDS.SKUThe default SKU for Microsoft Entra Domain Services supports resiliency in a single region.ImportantError

RE:05 Redundancy

NameSynopsisSeverityLevel
Azure.AKS.MinNodeCountAKS clusters should have minimum number of system nodes for failover and updates.ImportantError
Azure.AKS.MinUserPoolNodesUser node pools in an AKS cluster should have a minimum number of nodes for failover and updates.ImportantError
Azure.AppConfig.GeoReplicaReplicate app configuration store across all points of presence for an application.ImportantError
Azure.ContainerApp.MinReplicasUse multiple replicas to remove a single point of failure.ImportantError
Azure.ContainerApp.StorageUse of Azure Files volume mounts to persistent storage container data.AwarenessError
Azure.Cosmos.AvailabilityZoneUse zone redundant Cosmos DB accounts in supported regions to improve reliability.ImportantError
Azure.Cosmos.MongoAvailabilityZoneUse zone redundant Cosmos DB vCore clusters in supported regions to improve reliability.ImportantError
Azure.EventHub.AvailabilityZoneUse zone redundant Event Hub namespaces in supported regions to improve reliability.ImportantError
Azure.LB.ProbeUse a specific probe for web protocols.ImportantError
Azure.MICassandra.AvailabilityZoneUse zone redundant Managed Instance for Apache Cassandra clusters in supported regions to improve reliability.ImportantError
Azure.MySQL.UseFlexibleUse Azure Database for MySQL Flexible Server deployment model.ImportantWarning
Azure.ServiceBus.GeoReplicaEnhance resilience to regional outages by replicating namespaces.ImportantError
Azure.TrafficManager.EndpointsTraffic Manager should use at lest two enabled endpoints.ImportantError
Azure.VM.ASDistributeTrafficEnsure high availability by distributing traffic among members in an availability set.ImportantError
Azure.VM.ASMinMembersAvailability sets should be deployed with at least two virtual machines (VMs).ImportantError
Azure.VNET.FirewallSubnetNATZonal-deployed Azure Firewalls should consider using an Azure NAT Gateway for outbound access.AwarenessWarning
Azure.VNG.VPNActiveActiveUse VPN gateways configured to operate in an Active-Active configuration to reduce connectivity downtime.ImportantError
Azure.VNG.VPNAvailabilityZoneSKUUse availability zone SKU for virtual network gateways deployed with VPN gateway type.ImportantError

RE:05 Regions and availability zones

NameSynopsisSeverityLevel
Azure.AKS.AvailabilityZoneAKS clusters deployed with virtual machine scale sets should use availability zones in supported regions for high availability.ImportantError
Azure.APIM.AvailabilityZoneAPI Management instances should use availability zones in supported regions for high availability.ImportantError
Azure.APIM.MultiRegionEnhance service availability and resilience by deploying API Management instances across multiple regions.ImportantError
Azure.AppGw.AvailabilityZoneApplication Gateway (App Gateway) should use availability zones in supported regions for improved resiliency.ImportantError
Azure.AppService.AvailabilityZoneDeploy app service plan instances using availability zones in supported regions to ensure high availability and resilience.ImportantError
Azure.ASE.AvailabilityZoneDeploy app service environments using availability zones in supported regions to ensure high availability and resilience.ImportantError
Azure.ContainerApp.AvailabilityZoneUse Container Apps environments that are zone redundant to improve reliability.ImportantError
Azure.Firewall.AvailabilityZoneDeploy firewall instances using availability zones in supported regions to ensure high availability and resilience.ImportantError
Azure.Grafana.AvailabilityZoneUse zone redundant Grafana workspaces in supported regions to improve reliability.ImportantError
Azure.LB.AvailabilityZoneLoad balancers deployed with Standard SKU should be zone-redundant for high availability.ImportantError
Azure.Log.ReplicationLog Analytics workspaces should have workspace replication enabled to improve service availability.ImportantError
Azure.MySQL.ZoneRedundantHADeploy Azure Database for MySQL servers using zone-redundant high availability (HA) in supported regions to ensure high availability and resilience.ImportantError
Azure.PostgreSQL.ZoneRedundantHADeploy Azure Database for PostgreSQL servers using zone-redundant high availability (HA) in supported regions to ensure high availability and resilience.ImportantError
Azure.PublicIP.AvailabilityZonePublic IP addresses deployed with Standard SKU should use availability zones in supported regions for high availability.ImportantError
Azure.Redis.AvailabilityZonePremium Redis cache should be deployed with availability zones for high availability.ImportantError
Azure.RedisEnterprise.ZonesEnterprise Redis cache should be zone-redundant for high availability.ImportantError
Azure.Storage.UseReplicationStorage Accounts using the LRS SKU are only replicated within a single zone.ImportantError
Azure.VMSS.AvailabilityZoneDeploy virtual machine scale set instances using availability zones in supported regions to ensure high availability and resilience.ImportantError

RE:06 Data partitioning

NameSynopsisSeverityLevel
Azure.Cosmos.ContinuousBackupEnable continuous backup on Cosmos DB accounts.ImportantError
Azure.Search.IndexSLAUse a minimum of 3 replicas to receive an SLA for query and index updates.ImportantError
Azure.Search.QuerySLAUse a minimum of 2 replicas to receive an SLA for index queries.ImportantError

RE:07 Self-preservation

NameSynopsisSeverityLevel
Azure.ContainerApp.HealthProbeContainer app ingress that uses HTTP should have HTTP health probes configured for liveness and readiness checks.ImportantError
Azure.KeyVault.PurgeProtectEnable Purge Protection on Key Vaults to prevent early purge of vaults and vault items.ImportantError
Azure.KeyVault.SoftDeleteEnable Soft Delete on Key Vaults to protect vaults and vault items from accidental deletion.ImportantError
Azure.VMSS.AutoInstanceRepairsApplications or infrastructure relying on a virtual machine scale sets may fail if VM instances are unhealthy.ImportantError
Azure.VMSS.ZoneBalanceDeploy virtual machine scale set instances using the best-effort zone balance in supported regions.ImportantError

RE:10 Monitoring and alerting

NameSynopsisSeverityLevel
Azure.Monitor.ServiceHealthConfigure Service Health alerts to notify administrators.ImportantError

Resiliency and dependencies

NameSynopsisSeverityLevel
Azure.APIM.MultiRegionGatewayAPI Management instances should have multi-region deployment gateways enabled.ImportantError
Azure.AppService.PlanInstanceCountApp Service Plan should use a minimum number of instances for failover.ImportantError
Azure.VNET.LocalDNSVirtual networks (VNETs) should use DNS servers deployed within the same Azure region.ImportantError
Azure.VNET.SingleDNSVirtual networks (VNETs) should have at least two DNS servers assigned.ImportantError

Resource deployment

NameSynopsisSeverityLevel
Azure.Template.LocationDefaultSet the default value for the location parameter within an ARM template to resource group location.AwarenessError

Target and non-functional requirements

NameSynopsisSeverityLevel
Azure.MariaDB.GeoRedundantBackupAzure Database for MariaDB should store backups in a geo-redundant storage.ImportantError
Azure.MySQL.GeoRedundantBackupAzure Database for MySQL should store backups in a geo-redundant storage.ImportantError
Azure.PostgreSQL.GeoRedundantBackupAzure Database for PostgreSQL should store backups in a geo-redundant storage.ImportantError

Security

Authentication

NameSynopsisSeverityLevel
Azure.Automation.ManagedIdentityEnsure Managed Identity is used for authentication.ImportantError
Azure.FrontDoor.ManagedIdentityEnsure Front Door uses a managed identity to authorize access to Azure resources.ImportantError
Azure.ML.DisableLocalAuthAzure Machine Learning compute resources should have local authentication methods disabled.CriticalError
Azure.SignalR.ManagedIdentityConfigure SignalR Services to use managed identities to access Azure resources securely.ImportantError
Azure.SQLMI.AADUse Azure Active Directory (AAD) authentication with Azure SQL Managed Instance.CriticalError
Azure.SQLMI.ManagedIdentityEnsure managed identity is used to allow support for Azure AD authentication.ImportantError
Azure.WebPubSub.ManagedIdentityConfigure Web PubSub Services to use managed identities to access Azure resources securely.ImportantError

Azure resources

NameSynopsisSeverityLevel
Azure.ACR.QuarantineEnable container image quarantine, scan, and mark images as verified.ImportantError
Azure.AKS.DefenderProfileEnable the Defender profile with Azure Kubernetes Service (AKS) cluster.ImportantError

Connectivity

NameSynopsisSeverityLevel
Azure.ML.ComputeVnetAzure Machine Learning Computes should be hosted in a virtual network (VNet).CriticalError
Azure.ML.PublicAccessDisable public network access from a Azure Machine Learning workspace.CriticalError

Data protection

NameSynopsisSeverityLevel
Azure.APIM.EncryptValuesEncrypt all API Management named values with Key Vault secrets.ImportantError
Azure.Automation.EncryptVariablesAzure Automation variables should be encrypted.ImportantError
Azure.MariaDB.UseSSLAzure Database for MariaDB servers should only accept encrypted connections.CriticalError
Azure.VM.ADEUse Azure Disk Encryption (ADE).ImportantError

Design

NameSynopsisSeverityLevel
Azure.APIM.CORSPolicyAvoid using wildcard for any configuration option in CORS policies.ImportantError
Azure.APIM.PolicyBaseBase element for any policy element in a section should be configured.ImportantError

Encryption

NameSynopsisSeverityLevel
Azure.ADX.DiskEncryptionUse disk encryption for Azure Data Explorer (ADX) clusters.ImportantError
Azure.APIM.ProtocolsAPI Management should only accept a minimum of TLS 1.2 for client and backend communication.CriticalError
Azure.IoTHub.MinTLSIoT Hubs should reject TLS versions older than 1.2.CriticalError

Identity and access management

NameSynopsisSeverityLevel
Azure.AKS.UseRBACDeploy AKS cluster with role-based access control (RBAC) enabled.ImportantError
Azure.Automation.WebHookExpiryDo not create webhooks with an expiry time greater than 1 year (default).AwarenessError
Azure.ML.UserManagedIdentityML workspaces should use user-assigned managed identity, rather than the default system-assigned managed identity.ImportantError
Azure.RBAC.CoAdministratorDelegate access to manage Azure resources using role-based access control (RBAC).ImportantError
Azure.RBAC.LimitMGDelegationLimit Role-Base Access Control (RBAC) inheritance from Management Groups.ImportantError
Azure.RBAC.LimitOwnerLimit the number of subscription Owners.ImportantError
Azure.RBAC.PIMUse just-in-time (JiT) activation of roles instead of persistent role assignment.ImportantError
Azure.RBAC.UseGroupsUse groups for assigning permissions instead of individual user accounts.ImportantError
Azure.RBAC.UseRGDelegationUse RBAC assignments on resource groups instead of individual resources.ImportantError
Azure.SQLMI.AADOnlyEnsure Azure AD-only authentication is enabled with Azure SQL Managed Instance.ImportantError

Key and secret management

NameSynopsisSeverityLevel
Azure.AKS.SecretStoreDeploy AKS clusters with Secrets Store CSI Driver and store Secrets in Key Vault.ImportantError
Azure.AKS.SecretStoreRotationEnable autorotation of Secrets Store CSI Driver secrets for AKS clusters.ImportantError

Monitor

NameSynopsisSeverityLevel
Azure.Automation.AuditLogsEnsure automation account audit diagnostic logs are enabled.ImportantError
Azure.ServiceBus.AuditLogsEnsure namespaces audit diagnostic logs are enabled.ImportantError

Network security and containment

NameSynopsisSeverityLevel
Azure.AppGw.OWASPApplication Gateway Web Application Firewall (WAF) should use OWASP 3.x rules.ImportantError
Azure.AppGw.PreventionInternet exposed Application Gateways should use prevention mode to protect backend resources.CriticalError
Azure.AppGw.WAFRulesApplication Gateway Web Application Firewall (WAF) should have all rules enabled.ImportantError
Azure.AppGwWAF.EnabledApplication Gateway Web Application Firewall (WAF) must be enabled to protect backend resources.CriticalError
Azure.AppGwWAF.ExclusionsApplication Gateway Web Application Firewall (WAF) should have all rules enabled.CriticalError
Azure.AppGwWAF.PreventionModeUse protection mode in Application Gateway Web Application Firewall (WAF) policies to protect back end resources.CriticalError
Azure.MariaDB.AllowAzureAccessDetermine if access from Azure services is required.ImportantError

Network segmentation

NameSynopsisSeverityLevel
Azure.VNET.FirewallSubnetUse Azure Firewall to filter network traffic to and from Azure resources.ImportantError

SE:01 Security Baseline

NameSynopsisSeverityLevel
Azure.ACR.ReplicaLocationThe replication location determines the country or region where container images and metadata are stored and processed.ImportantError
Azure.AKS.NodeAutoUpgradeOperating system (OS) security updates should be applied to AKS nodes and rebooted as required to address security vulnerabilities.ImportantError
Azure.AppConfig.ReplicaLocationThe replication location determines the country or region where configuration data is stored and processed.ImportantError
Azure.EntraDS.ReplicaLocationThe location of a replica set determines the country or region where the data is stored and processed.ImportantError
Azure.Log.ReplicaLocationThe replication location determines the country or region where the data is stored and processed.ImportantError
Azure.Policy.WaiverExpiryConfigure policy waiver exemptions to expire.AwarenessError
Azure.Resource.AllowedRegionsThe deployment location of a resource determines the country or region where metadata and data is stored and processed.ImportantError
Azure.ServiceBus.ReplicaLocationThe replica location determines the country or region where the data is stored and processed.ImportantError

SE:02 Secured development lifecycle

NameSynopsisSeverityLevel
Azure.ACR.ContentTrustDocker content trust allows images to be signed and verified when pulled from a container registry.ImportantError
Azure.ACR.ImageHealthRemove container images with known vulnerabilities.CriticalError
Azure.AppService.NETVersionConfigure applications to use newer .NET versions.ImportantError
Azure.AppService.NodeJsVersionConfigure applications to use supported Node.js runtime versions.ImportantError
Azure.AppService.PHPVersionConfigure applications to use newer PHP runtime versions.ImportantError
Azure.Deployment.AdminUsernameA sensitive property set from deterministic or hardcoded values is not secure.AwarenessError
Azure.Deployment.OuterSecretOuter evaluation deployments may leak secrets exposed as secure parameters into logs and nested deployments.CriticalError
Azure.Deployment.OutputSecretValueOutputting a sensitive value from deployment may leak secrets into deployment history or logs.CriticalError
Azure.Deployment.SecretLeakSensitive parameters that have been not been marked as secure may leak the secret into deployment history or logs.CriticalError
Azure.Deployment.SecureParameterSensitive parameters that have been not been marked as secure may leak the secret into deployment history or logs.CriticalError
Azure.Deployment.SecureValueA secret property set from a non-secure value may leak the secret into deployment history or logs.CriticalError
Azure.ImageBuilder.CustomizeHashExternal scripts that are not pinned may be modified to execute privileged actions by an unauthorized user.ImportantError
Azure.ImageBuilder.ValidateHashExternal scripts that are not pinned may be modified to execute privileged actions by an unauthorized user.ImportantError
Azure.VM.ScriptExtensionsCustom Script Extensions scripts that reference secret values must use the protectedSettings.ImportantError
Azure.VMSS.ScriptExtensionsCustom Script Extensions scripts that reference secret values must use the protectedSettings.ImportantError

SE:04 Segmentation

NameSynopsisSeverityLevel
Azure.AKS.NetworkPolicyAKS clusters without inter-pod network restrictions may be permit unauthorized lateral movement.ImportantError
Azure.NSG.LateralTraversalDeny outbound management connections from non-management hosts.ImportantError

SE:05 Identity and access management

NameSynopsisSeverityLevel
Azure.ACR.AdminUserThe local admin account allows depersonalized access to a container registry using a shared secret.CriticalError
Azure.ACR.AnonymousAccessAnonymous pull access allows unidentified downloading of images and metadata from a container registry.ImportantError
Azure.ADX.ManagedIdentityConfigure Data Explorer clusters to use managed identities to access Azure resources securely.ImportantError
Azure.AI.DisableLocalAuthAccess keys allow depersonalized access to Azure AI using a shared secret.ImportantError
Azure.AI.ManagedIdentityConfigure managed identities to access Azure resources.ImportantError
Azure.AKS.AzureRBACUse Azure RBAC for Kubernetes Authorization with AKS clusters.ImportantError
Azure.AKS.LocalAccountsEnforce named user accounts with RBAC assigned permissions.ImportantError
Azure.AKS.ManagedAADUse AKS-managed Azure AD to simplify authorization and improve security.ImportantError
Azure.AKS.ManagedIdentityConfigure AKS clusters to use managed identities for managing cluster infrastructure.ImportantError
Azure.APIM.ManagedIdentityConfigure managed identities to access Azure resources.ImportantError
Azure.APIM.ProductApprovalConfigure products to require approval.ImportantError
Azure.APIM.ProductSubscriptionConfigure products to require a subscription.ImportantError
Azure.AppConfig.DisableLocalAuthAccess keys allow depersonalized access to App Configuration using a shared secret.ImportantError
Azure.AppInsights.LocalAuthLocal authentication allows depersonalized access to store telemetry in Application Insights using a shared identifier.CriticalError
Azure.AppService.ManagedIdentityConfigure managed identities to access Azure resources.ImportantError
Azure.ContainerApp.ManagedIdentityEnsure managed identity is used for authentication.ImportantError
Azure.Cosmos.DisableMetadataWriteUse Entra ID identities for management place operations in Azure Cosmos DB.ImportantError
Azure.Cosmos.MongoEntraIDMongoDB vCore clusters should have Microsoft Entra ID authentication enabled.CriticalError
Azure.Cosmos.NoSQLLocalAuthAccess keys allow depersonalized access to Cosmos DB NoSQL API accounts using a shared secret.CriticalError
Azure.EventGrid.DisableLocalAuthAuthenticate publishing clients with Azure AD identities.ImportantError
Azure.EventGrid.ManagedIdentityUse managed identities to deliver Event Grid Topic events.ImportantError
Azure.EventHub.DisableLocalAuthAuthenticate Event Hub publishers and consumers with Entra ID identities.ImportantError
Azure.KeyVault.AccessPolicyUse the principal of least privilege when assigning access to Key Vault.ImportantError
Azure.KeyVault.RBACKey Vaults should use Azure RBAC as the authorization system for the data plane.AwarenessWarning
Azure.MySQL.AADUse Entra ID authentication with Azure Database for MySQL databases.CriticalError
Azure.MySQL.AADOnlyEnsure Entra ID only authentication is enabled with Azure Database for MySQL databases.ImportantError
Azure.PostgreSQL.AADUse Entra ID authentication with Azure Database for PostgreSQL databases.CriticalError
Azure.PostgreSQL.AADOnlyEnsure Entra ID only authentication is enabled with Azure Database for PostgreSQL databases.ImportantError
Azure.Redis.EntraIDUse Entra ID authentication with cache instances.CriticalError
Azure.Redis.LocalAuthAccess keys allow depersonalized access to Azure Cache for Redis using a shared secret.ImportantError
Azure.Search.ManagedIdentityConfigure managed identities to access Azure resources.ImportantError
Azure.ServiceBus.DisableLocalAuthAuthenticate Service Bus publishers and consumers with Entra ID identities.ImportantError
Azure.ServiceFabric.AADUse Entra ID client authentication for Service Fabric clusters.CriticalError
Azure.SQL.AADUse Entra ID authentication with Azure SQL databases.CriticalError
Azure.SQL.AADOnlyEnsure Entra ID only authentication is enabled with Azure SQL Database.ImportantError
Azure.Storage.BlobAccessTypeUse containers configured with a private access type that requires authorization.ImportantError
Azure.Storage.BlobPublicAccessStorage Accounts should only accept authorized requests.ImportantError
Azure.Storage.LocalAuthAccess keys allow depersonalized access to Storage Accounts using a shared secret.ImportantError

SE:06 Network controls

NameSynopsisSeverityLevel
Azure.ACR.FirewallContainer Registry without restrictions can be accessed from any network location including the Internet.ImportantError
Azure.ADX.PublicAccessAzure Data Explorer (ADX) clusters should have public network access disabled.CriticalError
Azure.AI.PrivateEndpointsUse Private Endpoints to access Azure AI services accounts.ImportantError
Azure.AI.PublicAccessRestrict access of Azure AI services to authorized virtual networks.ImportantError
Azure.AKS.AuthorizedIPsRestrict access to API server endpoints to authorized IP addresses.ImportantError
Azure.AKS.HttpAppRoutingDisable HTTP application routing add-on in AKS clusters.ImportantError
Azure.AppGw.UseWAFInternet accessible Application Gateways should use protect endpoints with WAF.CriticalError
Azure.AppGw.WAFEnabledApplication Gateway Web Application Firewall (WAF) must be enabled to protect backend resources.CriticalError
Azure.AppGwWAF.RuleGroupsApplication Gateway WAF policies should include both Microsoft Default Rule Set and Bot Manager Rule Set to provide comprehensive protection against web application threats and malicious bot traffic.CriticalError
Azure.ContainerApp.ExternalIngressLimit inbound communication for Container Apps is limited to callers within the Container Apps Environment.ImportantError
Azure.ContainerApp.PublicAccessEnsure public network access for Container Apps environment is disabled.ImportantError
Azure.ContainerApp.RestrictIngressIP ingress restrictions mode should be set to allow action for all rules defined.ImportantError
Azure.Cosmos.PublicAccessAzure Cosmos DB should have public network access disabled.CriticalError
Azure.Databricks.PublicAccessAzure Databricks workspaces should disable public network access.CriticalError
Azure.Databricks.SecureConnectivityUse Databricks workspaces configured for secure cluster connectivity.CriticalError
Azure.EventGrid.TopicPublicAccessUse Private Endpoints to access Event Grid topics and domains.ImportantError
Azure.EventHub.FirewallAccess to the namespace endpoints should be restricted to only allowed sources.CriticalError
Azure.FrontDoor.UseWAFEnable Web Application Firewall (WAF) policies on each Front Door endpoint.CriticalError
Azure.FrontDoor.WAF.EnabledFront Door Web Application Firewall (WAF) policy must be enabled to protect back end resources.CriticalError
Azure.FrontDoor.WAF.ModeUse protection mode in Front Door Web Application Firewall (WAF) policies to protect back end resources.CriticalError
Azure.FrontDoorWAF.EnabledFront Door Web Application Firewall (WAF) policy must be enabled to protect back end resources.CriticalError
Azure.FrontDoorWAF.ExclusionsUse recommended rule groups in Front Door Web Application Firewall (WAF) policies to protect back end resources. Avoid configuring rule exclusions.CriticalError
Azure.FrontDoorWAF.PreventionModeUse protection mode in Front Door Web Application Firewall (WAF) policies to protect back end resources.CriticalError
Azure.FrontDoorWAF.RuleGroupsUse recommended rule groups in Front Door Web Application Firewall (WAF) policies to protect back end resources.CriticalError
Azure.KeyVault.FirewallKey Vault should only accept explicitly allowed traffic.ImportantError
Azure.LogicApp.LimitHTTPTriggerLogic Apps using HTTP triggers without restrictions can be accessed from any network location including the Internet.CriticalError
Azure.MariaDB.FirewallIPRangeDetermine if there is an excessive number of permitted IP addresses.ImportantError
Azure.MariaDB.FirewallRuleCountDetermine if there is an excessive number of firewall rules.AwarenessError
Azure.MySQL.AllowAzureAccessDetermine if access from Azure services is required.ImportantError
Azure.MySQL.FirewallIPRangeDetermine if there is an excessive number of permitted IP addresses.ImportantError
Azure.MySQL.FirewallRuleCountDetermine if there is an excessive number of firewall rules.AwarenessError
Azure.NSG.AnyInboundSourceNetwork security groups (NSGs) should avoid rules that allow "any" as an inbound source.CriticalError
Azure.PostgreSQL.AllowAzureAccessDetermine if access from Azure services is required.ImportantError
Azure.PostgreSQL.FirewallIPRangeDetermine if there is an excessive number of permitted IP addresses.ImportantError
Azure.PostgreSQL.FirewallRuleCountDetermine if there is an excessive number of firewall rules.AwarenessError
Azure.Redis.PublicNetworkAccessRedis cache should disable public network access.CriticalError
Azure.SQL.AllowAzureAccessDetermine if access from Azure services is required.ImportantError
Azure.SQL.FirewallIPRangeEach IP address in the permitted IP list is allowed network access to any databases hosted on the same logical server.ImportantError
Azure.SQL.FirewallRuleCountDetermine if there is an excessive number of firewall rules.AwarenessError
Azure.Storage.FirewallStorage Accounts should only accept explicitly allowed traffic.ImportantError
Azure.VM.PublicIPAttachedAvoid attaching public IPs directly to virtual machines.CriticalError
Azure.VMSS.PublicIPAttachedAvoid attaching public IPs directly to virtual machine scale set instances.CriticalError
Azure.VNET.PrivateSubnetSubnets that allow direct outbound access to the Internet may expose virtual machines to increased security risks.CriticalError
Azure.VNET.UseNSGsVirtual network (VNET) subnets should have Network Security Groups (NSGs) assigned.CriticalError

SE:07 Encryption

NameSynopsisSeverityLevel
Azure.APIM.CiphersAPI Management should not accept weak or deprecated ciphers for client or backend communication.CriticalError
Azure.APIM.HTTPBackendUnencrypted communication could allow disclosure of information to an untrusted party.CriticalError
Azure.APIM.HTTPEndpointUnencrypted communication could allow disclosure of information to an untrusted party.ImportantError
Azure.AppGw.SSLPolicyApplication Gateway should only accept a minimum of TLS 1.2.CriticalError
Azure.AppGw.UseHTTPSApplication Gateways should only expose frontend HTTP endpoints over HTTPS.CriticalError
Azure.AppService.MinTLSApp Service should not accept weak or deprecated transport protocols for client-server communication.CriticalError
Azure.AppService.UseHTTPSUnencrypted communication could allow disclosure of information to an untrusted party.ImportantError
Azure.AppService.WebSecureFtpWeb apps should disable insecure FTP and configure SFTP when required.ImportantError
Azure.CDN.HTTPUnencrypted communication could allow disclosure of information to an untrusted party.ImportantError
Azure.CDN.MinTLSAzure CDN endpoints should reject TLS versions older than 1.2.ImportantError
Azure.ContainerApp.InsecureEnsure insecure inbound traffic is not permitted to the container app.ImportantError
Azure.Cosmos.MinTLSCosmos DB accounts should reject TLS versions older than 1.2.CriticalError
Azure.EntraDS.NTLMDisable NTLM v1 for Microsoft Entra Domain Services.CriticalError
Azure.EntraDS.RC4Disable RC4 encryption for Microsoft Entra Domain Services.CriticalError
Azure.EntraDS.TLSDisable TLS v1 for Microsoft Entra Domain Services.CriticalError
Azure.EventGrid.DomainTLSWeak or deprecated transport protocols for client-server communication introduce security vulnerabilities.CriticalError
Azure.EventGrid.NamespaceTLSWeak or deprecated transport protocols for client-server communication introduce security vulnerabilities.CriticalError
Azure.EventGrid.TopicTLSWeak or deprecated transport protocols for client-server communication introduce security vulnerabilities.CriticalError
Azure.EventHub.MinTLSWeak or deprecated transport protocols for client-server communication introduce security vulnerabilities.CriticalError
Azure.FrontDoor.MinTLSFront Door Classic instances should reject TLS versions older than 1.2.CriticalError
Azure.MariaDB.MinTLSAzure Database for MariaDB servers should reject TLS versions older than 1.2.CriticalError
Azure.MySQL.MinTLSMySQL DB servers should reject TLS versions older than 1.2.CriticalError
Azure.MySQL.UseSSLEnforce encrypted MySQL connections.CriticalError
Azure.PostgreSQL.MinTLSPostgreSQL DB servers should reject TLS versions older than 1.2.CriticalError
Azure.PostgreSQL.UseSSLEnforce encrypted PostgreSQL connections.CriticalError
Azure.Redis.MinTLSRedis Cache should reject TLS versions older than 1.2.CriticalError
Azure.Redis.NonSslPortAzure Cache for Redis should only accept secure connections.CriticalError
Azure.RedisEnterprise.MinTLSRedis Cache should reject TLS versions older than 1.2.CriticalError
Azure.ServiceBus.MinTLSService Bus namespaces should reject TLS versions older than 1.2.ImportantError
Azure.ServiceFabric.ProtectionLevelNode to node communication that is not signed and encrypted may be susceptible to man-in-the-middle attacks.ImportantError
Azure.SQL.MinTLSAzure SQL Database servers should reject TLS versions older than 1.2.CriticalError
Azure.SQL.TDEUse Transparent Data Encryption (TDE) with Azure SQL Database.CriticalError
Azure.Storage.MinTLSStorage Accounts should not accept weak or deprecated transport protocols for client-server communication.CriticalError
Azure.Storage.SecureTransferStorage accounts should only accept encrypted connections.ImportantError
Azure.TrafficManager.ProtocolMonitor Traffic Manager web-based endpoints with HTTPS.ImportantError

SE:08 Hardening resources

NameSynopsisSeverityLevel
Azure.ACR.ExportPolicyExport policy on Azure container registry may allow artifact exfiltration.ImportantError
Azure.AKS.AzurePolicyAddOnConfigure Azure Kubernetes Service (AKS) clusters to use Azure Policy Add-on for Kubernetes.ImportantError
Azure.APIM.SampleProductsAPI Management Services with default products configured may expose more APIs than intended.AwarenessError
Azure.AppService.RemoteDebugDisable remote debugging on App Service apps when not in use.ImportantError
Azure.DNS.DNSSECDNS may be vulnerable to several attacks when the DNS clients are not able to verify the authenticity of the DNS responses.ImportantError
Azure.Redis.FirewallIPRangeDetermine if there is an excessive number of permitted IP addresses for the Redis cache.CriticalError
Azure.Redis.FirewallRuleCountDetermine if there is an excessive number of firewall rules for the Redis cache.AwarenessError
Azure.VM.PublicKeyLinux virtual machines should use public keys.ImportantError
Azure.VM.UpdatesEnsure automatic updates are enabled at deployment.ImportantError
Azure.VMSS.PublicKeyUse SSH keys instead of common credentials to secure virtual machine scale sets against malicious activities.ImportantError

SE:09 Application secrets

NameSynopsisSeverityLevel
Azure.AppConfig.SecretLeakSecrets stored as key values in an App Configuration Store may be leaked to unauthorized users.CriticalError
Azure.KeyVault.AutoRotationPolicyKeys that become compromised may be used to spoof, decrypt, or gain access to sensitive data.ImportantError

SE:10 Monitoring and threat detection

NameSynopsisSeverityLevel
Azure.ACR.AuditLogsEnsure container registry audit diagnostic logs are enabled.ImportantError
Azure.ACR.ContainerScanContainer images or their base images may have vulnerabilities discovered after they are built.CriticalError
Azure.AKS.AuditLogsAKS clusters should collect security-based audit logs to assess and monitor the compliance status of workloads.ImportantError
Azure.APIM.DefenderCloudAPIs published in Azure API Management should be onboarded to Microsoft Defender for APIs.CriticalError
Azure.AppConfig.AuditLogsEnsure app configuration store audit diagnostic logs are enabled.ImportantError
Azure.Cosmos.DefenderCloudEnable Microsoft Defender for Azure Cosmos DB.CriticalError
Azure.Defender.ApiEnable Microsoft Defender for APIs.CriticalError
Azure.Defender.AppServicesEnable Microsoft Defender for App Service.CriticalError
Azure.Defender.ArmEnable Microsoft Defender for Azure Resource Manager (ARM).CriticalError
Azure.Defender.ContainersEnable Microsoft Defender for Containers.CriticalError
Azure.Defender.CosmosDbEnable Microsoft Defender for Azure Cosmos DB.CriticalError
Azure.Defender.CspmEnable Microsoft Defender Cloud Security Posture Management Standard plan.CriticalError
Azure.Defender.DnsEnable Microsoft Defender for DNS.CriticalError
Azure.Defender.KeyVaultEnable Microsoft Defender for Key Vault.CriticalError
Azure.Defender.OssRdbEnable Microsoft Defender for open-source relational databases.CriticalError
Azure.Defender.ServersEnable Microsoft Defender for Servers.CriticalError
Azure.Defender.SQLEnable Microsoft Defender for SQL servers.CriticalError
Azure.Defender.SQLOnVMEnable Microsoft Defender for SQL servers on machines.CriticalError
Azure.Defender.StorageEnable Microsoft Defender for Storage.CriticalError
Azure.Defender.Storage.DataScanEnable sensitive data threat detection in Microsoft Defender for Storage.CriticalError
Azure.Defender.Storage.MalwareScanEnable Malware Scanning in Microsoft Defender for Storage.CriticalError
Azure.DefenderCloud.ActiveAlertsAlerts that have not received a response may indicate a security issue that requires attention.ImportantError
Azure.Firewall.ModeDeny high confidence malicious IP addresses and domains on classic managed Azure Firewalls.CriticalError
Azure.Firewall.PolicyModeDeny high confidence malicious IP addresses, domains and URLs.CriticalError
Azure.FrontDoor.LogsAudit and monitor access through Azure Front Door profiles.ImportantError
Azure.KeyVault.LogsEnsure audit diagnostics logs are enabled to audit Key Vault access.ImportantError
Azure.SQL.AuditingEnable auditing for Azure SQL logical server.ImportantError
Azure.SQL.DefenderCloudEnable Microsoft Defender for Azure SQL logical server.ImportantError
Azure.SQL.VAScanSQL Databases may have configuration vulnerabilities discovered after they are deployed.ImportantError
Azure.Storage.Defender.DataScanEnable sensitive data threat detection in Microsoft Defender for Storage.CriticalError
Azure.Storage.Defender.MalwareScanEnable Malware Scanning in Microsoft Defender for Storage.CriticalError
Azure.Storage.DefenderCloudEnable Microsoft Defender for Storage for storage accounts.CriticalError

SE:12 Incident response

NameSynopsisSeverityLevel
Azure.Defender.SecurityContactImportant security notifications may be lost or not processed in a timely manner when a clear security contact is not identified.ImportantError

Security design principles

NameSynopsisSeverityLevel
Azure.BV.ImmutableEnsure immutability is configured to protect backup data.ImportantError
Azure.RSV.ImmutableEnsure immutability is configured to protect backup data.ImportantError

Security operations

NameSynopsisSeverityLevel
Azure.Arc.Kubernetes.DefenderDeploy Microsoft Defender for Containers extension for Arc-enabled Kubernetes clusters.ImportantError
Azure.DefenderCloud.ProvisioningEnable auto-provisioning on to improve Microsoft Defender for Cloud insights.ImportantError
Azure.MariaDB.DefenderCloudEnable Microsoft Defender for Cloud for Azure Database for MariaDB.ImportantError
Azure.MySQL.DefenderCloudEnable Microsoft Defender for Cloud for Azure Database for MySQL.ImportantError
Azure.PostgreSQL.DefenderCloudEnable Microsoft Defender for Cloud for Azure Database for PostgreSQL.ImportantError