Belief Registry

Repos

Claims

acr-admin-account-disabled-by-default [IN] OBSERVATION

The ACR admin account is disabled by default, has two independently regenerable passwords, and is not recommended for production or multi-user scenarios.

acr-admin-account-disabled-by-default-two-passwords [IN] OBSERVATION

ACR admin account is disabled by default, provides full push/pull access, has two independently regenerable passwords, and is not recommended for production or multi-user scenarios.

acr-admin-password-regen-60-seconds [IN] OBSERVATION

ACR admin account password regeneration takes approximately 60 seconds to replicate.

acr-admin-password-regeneration-60-seconds [IN] OBSERVATION

Password regeneration for ACR admin accounts takes approximately 60 seconds to replicate.

acr-all-transfers-https-tls [IN] OBSERVATION

All ACR image transfers use HTTPS with TLS encryption.

acr-api-rate-limits-per-replica [IN] OBSERVATION

ACR API rate limits (throttling) apply independently per geo-replica, not globally across the registry.

acr-auth-entra-service-principal-admin [IN] OBSERVATION

ACR authentication options are Azure identity, Microsoft Entra service principal, or admin account; all image transfers use HTTPS with TLS.

acr-auth-token-valid-3-hours [IN] OBSERVATION

The access token from az acr login is valid for 3 hours and must be renewed.

acr-authentication-entra-service-principal-admin [IN] OBSERVATION

ACR authentication options are Azure identity, Microsoft Entra service principal, or admin account.

acr-best-practice-same-region-as-deployments [IN] OBSERVATION

Best practice is to create an ACR registry in the same Azure region as deployment targets for network-close storage and reduced latency.

acr-content-trust-premium-only [IN] OBSERVATION

Content trust (image tag signing) in ACR is a Premium-only feature.

acr-dedicated-resource-group-recommended [IN] OBSERVATION

ACR registries should be placed in a dedicated resource group to avoid accidental deletion when cleaning up container host resources.

acr-disabled-replica-still-syncs-and-costs [IN] OBSERVATION

Disabling --region-endpoint-enabled on an ACR geo-replica excludes it from global routing but data still syncs and storage costs still accrue.

acr-docker-command-env-var-alternative-tools [IN] OBSERVATION

The DOCKER_COMMAND environment variable can be set to switch az acr login to alternative container tools like podman.

acr-docker-command-env-var-podman [IN] OBSERVATION

The DOCKER_COMMAND environment variable can be set to switch az acr login to use alternative container tools like podman.

acr-expose-token-username-all-zeros [IN] OBSERVATION

When using az acr login --expose-token, the username for docker login is the all-zeros GUID 00000000-0000-0000-0000-000000000000.

acr-five-authentication-methods [IN] OBSERVATION

ACR supports five authentication methods: individual Microsoft Entra identity, service principal, managed identity, admin user, and non-Microsoft Entra token-based permissions.

acr-geo-api-rate-limits-per-replica [IN] OBSERVATION

ACR API rate limits (read/write throttling) apply independently to each geo-replica.

acr-geo-home-region-outage-blocks-property-changes [IN] OBSERVATION

During an ACR home region outage, push/pull still works via other geo-replicas, but registry property modifications are blocked until the home region recovers.

acr-geo-replica-zone-redundancy-auto-enabled [IN] OBSERVATION

Zone redundancy is automatically enabled for ACR geo-replicas in regions that support it.

acr-geo-replicated-storage-usage-home-region-only [IN] OBSERVATION

Storage usage in a geo-replicated ACR is reported for the home region only; multiply by replica count for total consumption.

acr-geo-replication-active-active [IN] OBSERVATION

ACR geo-replication uses an active-active model where all replicas are writable — push and pull work from any replica.

acr-geo-replication-active-active-model [IN] OBSERVATION

ACR geo-replication uses an active-active model where all replicas are writable — push and pull work from any replica, not just the home region.

acr-geo-replication-eventual-consistency [IN] OBSERVATION

ACR geo-replication uses eventual consistency — there is a replication lag window after push before content appears in all replicas.

acr-geo-replication-operational-constraints [IN] OBSERVATION

ACR geo-replication has three operational constraints: disabled replicas still sync data and incur costs, home region outages block registry property changes despite continued push/pull, and global endpoint routes by network performance not geographic proximity.

acr-geo-replication-premium-sku-only [IN] OBSERVATION

ACR geo-replication requires the Premium SKU.

acr-geo-replication-requires-premium [IN] OBSERVATION

ACR geo-replication requires the Premium SKU.

acr-geo-replication-requires-premium-sku [IN] OBSERVATION

ACR geo-replication requires the Premium SKU.

acr-geo-storage-usage-home-region-only [IN] OBSERVATION

Storage usage in a geo-replicated ACR is reported for the home region only; multiply by replica count for total consumption.

acr-global-endpoint-routes-by-network-performance [IN] OBSERVATION

The ACR global endpoint (myregistry.azurecr.io) routes to the geo-replica with the best network performance, not necessarily geographic proximity.

acr-home-region-outage-blocks-property-changes [IN] OBSERVATION

During an ACR home region outage, push/pull still works via other geo-replicas, but registry property modifications are blocked until the home region recovers.

acr-included-storage-basic-10-standard-100-premium-500 [IN] OBSERVATION

ACR included storage: Basic 10 GiB, Standard 100 GiB, Premium 500 GiB; additional storage billed per-GiB.

acr-login-token-valid-3-hours [IN] OBSERVATION

Individual login tokens from az acr login are valid for 3 hours and must be renewed.

acr-max-image-layer-200gib-manifest-4mib [IN] OBSERVATION

ACR max image layer size is 200 GiB and max manifest size is 4 MiB across all SKUs.

acr-max-image-layer-size-200gib [IN] OBSERVATION

ACR maximum image layer size is 200 GiB across all SKUs.

acr-max-storage-basic-standard-40tib-premium-100tib [IN] OBSERVATION

ACR maximum storage limits: Basic/Standard max 40 TiB, Premium max 100 TiB.

acr-network-close-deployment-same-region [IN] OBSERVATION

ACR should be placed in the same Azure region as container hosts to minimize latency and avoid cross-region egress fees.

acr-non-entra-tokens-basic-100-standard-500-premium-50000 [IN] OBSERVATION

ACR non-Entra token limits: Basic 100, Standard 500, Premium 50,000.

acr-optimal-image-layer-count-5-to-10 [IN] OBSERVATION

Optimal container image layer count for ACR is 5–10 layers, balancing layer reuse/caching against pull overhead.

acr-optimal-image-layers-5-to-10 [IN] OBSERVATION

The optimal number of layers per container image is 5–10, balancing layer reuse/caching against pull overhead.

acr-premium-enterprise-feature-gate [IN] OBSERVATION

ACR gates all enterprise capabilities behind Premium SKU: geo-replication, private link (up to 200 endpoints), content trust, customer-managed keys, and 2.5x higher storage limits (100 TiB vs 40 TiB for Basic/Standard).

acr-premium-exclusive-features [IN] OBSERVATION

ACR Premium-exclusive features include: geo-replication, private link, content trust, customer-managed keys, connected registries, artifact streaming, retention policies, dedicated agent pools, IP access rules, export policies, and artifact transfer.

acr-premium-exclusive-features-list [IN] OBSERVATION

ACR Premium-exclusive features: geo-replication, private link (up to 200 endpoints), content trust, customer-managed keys, connected registries, artifact streaming, retention policies, dedicated agent pools, IP access rules, export policies, artifact transfer.

acr-premium-only-features [IN] OBSERVATION

ACR Premium-exclusive features include geo-replication, content trust (image tag signing), private endpoints, customer-managed keys, connected registries, artifact streaming, retention policies, dedicated agent pools, IP access rules, export policies, and artifact transfer.

acr-premium-only-geo-replication-content-trust-private-endpoints [IN] OBSERVATION

ACR Premium-only features include geo-replication, content trust (image tag signing), and private endpoints with private link.

acr-registry-dedicated-resource-group [IN] OBSERVATION

Best practice: place ACR in a dedicated resource group to avoid accidental deletion when cleaning up container host resources.

acr-service-principal-password-default-1-year [IN] OBSERVATION

ACR service principal passwords have a default expiry of 1 year.

acr-service-principal-password-default-expiry-1-year [IN] OBSERVATION

ACR service principal passwords have a default expiry of 1 year.

acr-sku-change-no-downtime [IN] OBSERVATION

ACR SKU changes can be done freely with no downtime, but downgrading from Premium requires removing Premium-only resources first (e.g., geo-replications, connected registries).

acr-supports-docker-helm-oci-artifacts [IN] OBSERVATION

ACR supports Docker container images (Windows and Linux), Helm charts, and OCI-format images.

acr-supports-oci-and-helm-charts [IN] OBSERVATION

ACR supports Docker container images, OCI-format images, and Helm charts as stored artifacts.

acr-tasks-trigger-on-commit-and-base-image-update [IN] OBSERVATION

ACR Tasks can build container images on demand or automatically via triggers including source code commits and base image updates.

acr-three-sku-tiers [IN] OBSERVATION

Azure Container Registry offers three SKU tiers: Basic (dev/test), Standard (most production), and Premium (high-volume/enterprise).

acr-three-skus-basic-standard-premium [IN] OBSERVATION

ACR offers three SKU tiers: Basic (dev/test), Standard (production), Premium (high-volume/enterprise).

acr-throttling-http-429-exponential-backoff [IN] OBSERVATION

ACR returns HTTP 429 errors during high request volume; mitigate with retry logic, exponential backoff, and reducing concurrency.

acr-token-permissions-no-entra-rbac [IN] OBSERVATION

ACR token-based repository permissions are not integrated with Microsoft Entra ID and do not support RBAC role assignments.

acr-token-permissions-not-entra-rbac [IN] OBSERVATION

ACR token-based repository permissions are not integrated with Microsoft Entra ID and do not support RBAC role assignments.

acr-untagged-manifest-retention-policy [IN] OBSERVATION

Untagged (dangling/orphaned) container images in ACR can be managed via a retention policy for untagged manifests.

acr-untagged-manifests-retention-policy [IN] OBSERVATION

Untagged (dangling/orphaned) container images in ACR can be managed via a retention policy for untagged manifests.

acr-webhooks-basic-2-standard-10-premium-500 [IN] OBSERVATION

ACR webhook limits: Basic 2, Standard 10, Premium 500.

aks-api-server-guard-throttles-non-system [IN] OBSERVATION

The API Server Guard (aks-managed-apiserver-guard) is a FlowSchema and PriorityLevelConfiguration that throttles non-system client requests under high load while allowing system-critical calls (e.g., kubelet) to continue.

aks-api-server-guard-throttling [IN] OBSERVATION

The aks-managed-apiserver-guard FlowSchema is a last-resort throttling mechanism that throttles non-system client requests to protect the API server under high load; system-critical calls like kubelet continue normally.

aks-api-server-public-by-default [IN] OBSERVATION

The AKS API server is public by default; access can be restricted via authorized IP ranges or by creating a private cluster.

aks-apiserver-guard-throttles-non-system [IN] OBSERVATION

The AKS API server guard (aks-managed-apiserver-guard) is a FlowSchema and PriorityLevelConfiguration that throttles non-system client requests under high load while allowing system-critical calls (e.g., kubelet) to continue.

aks-apiserver-guard-throttling [IN] OBSERVATION

The aks-managed-apiserver-guard FlowSchema is a last-resort throttling mechanism that throttles non-system client requests to protect the API server under high load; system-critical calls (e.g., kubelet) continue normally.

aks-apparmor-seccomp-container-restriction [IN] OBSERVATION

AKS supports AppArmor and seccomp profiles to restrict container actions following the principle of least privilege.

aks-apparmor-seccomp-container-restrictions [IN] OBSERVATION

AKS supports AppArmor and seccomp profiles to restrict container actions following the least-privilege principle.

aks-azure-disk-readwriteonce [IN] OBSERVATION

Azure Disk volumes in AKS are mounted as ReadWriteOnce (single node); Azure Files supports ReadWriteMany (multi-node)

aks-azure-disks-single-pod-files-multi-pod [IN] OBSERVATION

Azure Disks CSI provides single-pod access; Azure Files CSI provides multiple concurrent pod access.

aks-azure-files-smb-311-nfs-41 [IN] OBSERVATION

Azure Files CSI driver supports SMB 3.1.1 and NFS 4.1 protocols, enabling multi-node and multi-pod concurrent access.

aks-bring-your-own-cni-supported [IN] OBSERVATION

AKS supports bring-your-own CNI for third-party networking plugins in addition to Azure-provided CNI options.

aks-cncf-certified [IN] OBSERVATION

AKS is a CNCF-certified conformant Kubernetes distribution.

aks-cncf-certified-conformance [IN] OBSERVATION

AKS is CNCF-certified, meaning it passes Kubernetes conformance testing.

aks-cncf-certified-kubernetes [IN] OBSERVATION

AKS is CNCF-certified, meaning it passes official Kubernetes conformance testing.

aks-compliance-soc-iso-pci-hipaa [IN] OBSERVATION

AKS is compliant with SOC, ISO, PCI DSS, and HIPAA standards.

aks-confidential-computing-hardware-tee [IN] OBSERVATION

AKS supports confidential computing nodes that run containers in hardware-based trusted execution environments (TEE).

aks-confidential-containers-sev-snp [IN] OBSERVATION

AKS Confidential Containers (preview) use Kata-based isolation with AMD SEV-SNP hardware memory encryption to prevent clear-text memory access.

aks-containerd-only-runtime [IN] OBSERVATION

containerd is the sole supported container runtime in AKS for Linux (Kubernetes 1.19+) and Windows (Kubernetes 1.23+).

aks-control-plane-free [IN] OBSERVATION

The AKS control plane is provided at no cost; users only pay for worker nodes.

aks-control-plane-managed-by-azure [IN] OBSERVATION

The AKS control plane (kube-apiserver, etcd, kube-scheduler, kube-controller-manager, cloud-controller-manager) is fully managed by Azure; users manage only worker nodes.

aks-control-plane-scaling-multi-dimensional [IN] OBSERVATION

AKS control plane scaling is multi-dimensional — scaling one dimension (e.g., pod count) reduces capacity in others (e.g., pod churn rate).

aks-control-plane-scaling-multidimensional [IN] OBSERVATION

AKS auto-scales control plane components based on total cluster cores and CPU/memory pressure; scaling one dimension (e.g., pod count) limits capacity in other dimensions (e.g., pod churn rate).

aks-csi-default-1-21-intree-removed-1-26 [IN] OBSERVATION

CSI drivers are default in AKS from Kubernetes 1.21; in-tree driver support removed from Kubernetes 1.26

aks-custom-vnet-nsg-ports-443-4443-9988 [IN] OBSERVATION

Custom VNet NSG rules for AKS must allow TCP 443 and 4443 from cluster subnet to API server subnet, and TCP 9988 from Azure Load Balancer to API server subnet.

aks-custom-vnet-nsg-required-ports [IN] OBSERVATION

Custom VNet NSGs for AKS must allow TCP 443/4443 from cluster subnet to API server subnet, and TCP 9988 from Azure Load Balancer to API server subnet.

aks-custom-vnet-nsg-tcp-443-4443-9988 [IN] OBSERVATION

Custom VNet NSG rules for AKS must allow TCP 443 and 4443 from cluster subnet to API server subnet, and TCP 9988 from Azure Load Balancer to API server subnet.

aks-custom-vnet-zero-trust-control-plane [IN] OBSERVATION

AKS custom VNet deployments inherit the Standard Load Balancer's zero-trust default-deny posture, requiring explicit NSG allowlisting of control plane ports (TCP 443, 4443 from cluster subnet to API server, TCP 9988 from Azure LB) — making AKS custom networking a manual allowlisting exercise where missing a single rule silently breaks cluster communication.

aks-default-ephemeral-os-disk [IN] OBSERVATION

AKS defaults to ephemeral OS disks when the VM SKU supports them

aks-default-namespaces-four [IN] OBSERVATION

AKS clusters include four default namespaces: default, kube-node-lease, kube-public, and kube-system.

aks-default-os-ubuntu-linux [IN] OBSERVATION

The default operating system for AKS nodes is Ubuntu Linux; Azure Linux and Windows Server 2022 are also available as options.

aks-default-outbound-access-retirement-march-2026 [IN] OBSERVATION

Default outbound internet access for AKS-managed VNet clusters retires March 31, 2026 (defaultOutboundAccess=false); BYO VNet clusters are unaffected.

aks-default-storage-class-managed-csi [IN] OBSERVATION

AKS default storage class is managed-csi backed by Standard SSD LRS

aks-default-storage-classes-reconciled [IN] OBSERVATION

AKS reconciles built-in default storage classes — manual changes to them are overwritten by the platform.

aks-do-not-deploy-apps-to-kube-system [IN] OBSERVATION

Applications should not be deployed to the kube-system namespace in AKS; it is reserved for critical system pods.

aks-do-not-modify-nic-level-nsgs [IN] OBSERVATION

AKS auto-manages NIC-level NSGs; users must not modify them. Custom traffic rules should use subnet-level NSGs instead.

aks-egress-unrestricted-by-default [IN] OBSERVATION

AKS clusters have unrestricted outbound internet access by default, but it can be restricted via outbound type configuration.

aks-ephemeral-os-disk-requires-128gib-temp [IN] OBSERVATION

Ephemeral OS disk default sizing in AKS requires the VM SKU to have at least 128 GiB of temporary storage.

aks-etcd-secrets-encryption-customer-keys [IN] OBSERVATION

Secrets stored in etcd can be encrypted at rest using customer-managed keys via AKS KMS etcd encryption.

aks-flat-network-no-snat-pod-ip-visible [IN] OBSERVATION

In the AKS flat network model, egress traffic is not SNAT'd — the pod IP is directly exposed to the destination, which is useful when external services need to identify pod IPs.

aks-flatcar-immutable-cross-cloud-selinux [IN] OBSERVATION

Flatcar Container Linux (preview) is a vendor-neutral, CNCF-based immutable container OS with SELinux, usable cross-cloud on AKS.

aks-flatcar-immutable-os-selinux [IN] OBSERVATION

Flatcar Container Linux (preview) is a vendor-neutral, CNCF-based immutable OS using SELinux, cross-cloud compatible, with cryptographic integrity protection.

aks-hpa-requires-metrics-server [IN] OBSERVATION

The Horizontal Pod Autoscaler requires Metrics Server to be deployed in the cluster (available since Kubernetes 1.8+).

aks-immutable-os-guard-fips-selinux [IN] OBSERVATION

Azure Linux OS Guard (preview) is an immutable, read-only OS that enforces FIPS + Trusted Launch and uses SELinux for mandatory access control.

aks-immutable-os-options-os-guard-flatcar [IN] OBSERVATION

AKS offers two container-optimized immutable OS options: Azure Linux OS Guard (preview, Microsoft-built, FIPS/Trusted Launch/SELinux enforced) and Flatcar Container Linux (preview, vendor-neutral, CNCF-based). Both are read-only at runtime with cryptographic integrity protection.

aks-istio-service-mesh-addon [IN] OBSERVATION

AKS offers an Istio-based service mesh add-on as a managed option.

aks-kube-proxy-every-node [IN] OBSERVATION

kube-proxy runs on every AKS node to provide network features.

aks-managed-disks-encrypted-at-rest [IN] OBSERVATION

AKS node storage uses Azure Managed Disks with automatic encryption at rest.

aks-managed-helm-prefix [IN] OBSERVATION

AKS manages Helm releases prefixed with aks-managed and labels managed components with kubernetes.azure.com/managedby: aks.

aks-managed-helm-releases-prefix [IN] OBSERVATION

AKS-managed Helm releases use the aks-managed prefix; increasing revision counts on these are expected and safe.

aks-managed-os-disk-sizing-by-vcpu [IN] OBSERVATION

AKS managed OS disk defaults scale by vCPU count: 1-7→P10/128G, 8-15→P15/256G, 16-63→P20/512G, 64+→P30/1024G

aks-multi-az-zrs-default-k8s-1-29 [IN] OBSERVATION

AKS multi-AZ clusters default to ZRS storage from Kubernetes 1.29

aks-nap-based-on-karpenter [IN] OBSERVATION

Node Autoprovisioning (NAP) is a preview feature based on Karpenter that dynamically selects optimal VM SKU and quantity for pending pod requirements.

aks-network-policies-pod-level [IN] OBSERVATION

Kubernetes network policies control pod-to-pod traffic based on labels, namespace, or port; NSGs control node-level traffic.

aks-node-authorization-default-1-24 [IN] OBSERVATION

Node authorization is enabled by default on AKS 1.24+, authorizing kubelet API requests to protect against East-West attacks.

aks-node-pools-backed-by-vmss [IN] OBSERVATION

AKS node pools are backed by Azure VM scale sets (VMSS), and during scale-down the VMSS API determines which nodes are removed.

aks-node-resource-reservations [IN] OBSERVATION

AKS reserves CPU and memory on each node for system functions, so allocatable resources are less than total node resources.

aks-nodes-no-public-ip [IN] OBSERVATION

AKS nodes have no public IP addresses by default and are deployed to private subnets.

aks-notary-v2-image-signatures [IN] OBSERVATION

AKS supports Notary V2 for attaching and verifying container image signatures in the registry as part of the secure supply chain.

aks-notary-v2-image-signing [IN] OBSERVATION

AKS supports Notary V2 to attach signatures to container images for trusted deployment verification.

aks-nsg-auto-configured-for-loadbalancer [IN] OBSERVATION

Azure auto-configures NSG rules when LoadBalancer Services are created in AKS; no manual NSG configuration needed for standard scenarios.

aks-nvme-data-disks-ephemeral [IN] OBSERVATION

Ephemeral NVMe data disks in AKS provide high-performance temporary storage; data is lost on deallocation and they are managed via Azure Container Storage.

aks-nvme-data-disks-ephemeral-container-storage [IN] OBSERVATION

NVMe data disks in AKS are ephemeral (data lost on deallocation) and are managed via Azure Container Storage.

aks-os-disk-size-immutable [IN] OBSERVATION

AKS OS disk size cannot be changed after cluster or node pool creation

aks-os-guard-immutable-fips-selinux [IN] OBSERVATION

Azure Linux OS Guard (preview) is a Microsoft-created immutable container OS that enforces FIPS + Trusted Launch and uses SELinux for mandatory access control.

aks-overlay-vs-flat-networking [IN] OBSERVATION

AKS offers two network models: Overlay (pods get IPs from a private CIDR separate from VNet subnet) and Flat (pods get IPs from the same VNet subnet as nodes, no SNAT on egress).

aks-pv-not-shared-windows-linux [IN] OBSERVATION

Persistent volumes cannot be shared between Windows and Linux pods in AKS

aks-pv-pvc-binding-one-to-one [IN] OBSERVATION

Persistent Volume (PV) to Persistent Volume Claim (PVC) binding is a 1:1 mapping in Kubernetes.

aks-pv-to-pvc-binding-one-to-one [IN] OBSERVATION

Persistent Volume (PV) to Persistent Volume Claim (PVC) binding in Kubernetes is a 1:1 mapping — each PV binds to exactly one PVC.

aks-reconciles-default-storage-classes [IN] OBSERVATION

AKS reconciles built-in default storage classes — manual changes to built-in classes are overwritten by the platform.

aks-registry-signatures-notary-v2 [IN] OBSERVATION

Azure secure supply chain uses Notary V2 to attach signatures to container images for trusted deployment verification.

aks-secret-base64-encoding-not-encryption [IN] OBSERVATION

Raw Kubernetes secret manifests store data in base64 encoding, which is not encryption — etcd-level encryption with customer-managed keys is needed for true encryption at rest.

aks-secret-manifests-base64-not-encrypted [IN] OBSERVATION

Kubernetes Secret manifest files contain data in base64 format (encoding, not encryption) and should never be committed to source control.

aks-secret-watches-expensive-control-plane [IN] OBSERVATION

Watches on Kubernetes secrets are disproportionately expensive for the AKS control plane compared to watches on other resource types.

aks-secrets-base64-not-encrypted [IN] OBSERVATION

Raw Kubernetes secret manifests contain data in base64 format, which is encoding, not encryption.

aks-secrets-base64-not-encryption [IN] OBSERVATION

Raw Kubernetes secret manifests contain data in base64 encoding, which is not encryption — secrets require etcd encryption at rest with customer-managed keys for actual cryptographic protection.

aks-ssh-internal-ip-default-disable-preview [IN] OBSERVATION

AKS nodes have SSH enabled by default via internal IP only (no public IPs); disabling SSH entirely is available in preview.

aks-ssh-internal-ip-only-default [IN] OBSERVATION

SSH on AKS nodes is enabled by default but accessible only via internal IP (no public IPs); SSH can be disabled in preview.

aks-storage-disks-single-files-multi-netapp-throughput-containerstore-block [IN] OBSERVATION

AKS storage options: Azure Disks CSI (single pod), Azure Files CSI (multi-pod concurrent), Azure NetApp Files (high-throughput/low-latency), Azure Container Storage (fully managed block storage).

aks-supply-chain-verification [IN] OBSERVATION

AKS supports container supply chain verification through image signing with Notary V2 and Trusted Launch for node integrity, providing verification at both the container image and infrastructure layers.

aks-supported-os-ubuntu-azurelinux-windows [IN] OBSERVATION

AKS supported node operating systems are Ubuntu (default Linux), Azure Linux, and Windows Server 2022.

aks-supported-os-ubuntu-default [IN] OBSERVATION

AKS supports Ubuntu (default for Linux), Azure Linux, and Windows Server 2022 as node operating systems.

aks-system-vs-user-node-pools [IN] OBSERVATION

AKS distinguishes system node pools (hosting critical system pods like CoreDNS, konnectivity) from user node pools (hosting application workloads).

aks-three-autoscaling-mechanisms [IN] OBSERVATION

AKS supports three autoscaling mechanisms: cluster autoscaler (node-level), horizontal pod autoscaler (pod-level), and KEDA (event-driven).

aks-three-pricing-tiers [IN] OBSERVATION

AKS has three pricing tiers: Free, Standard, and Premium.

aks-trusted-launch-gen2-secure-boot-vtpm [IN] OBSERVATION

AKS Trusted Launch requires Azure Gen2 VMs and combines secure boot with vTPM to verify boot chain integrity.

aks-two-cluster-modes [IN] OBSERVATION

AKS has two cluster modes: Automatic (fully managed, preconfigured) and Standard (more control over node pools, scaling, settings).

aks-two-resource-groups [IN] OBSERVATION

AKS automatically creates two resource groups: one user-specified and one auto-created containing all infrastructure resources (VMs, VMSS, storage).

aks-virtual-nodes-burst-to-aci [IN] OBSERVATION

Virtual nodes enable bursting from AKS to Azure Container Instances (ACI) for rapid serverless pod scaling.

aks-virtual-nodes-separate-subnet [IN] OBSERVATION

Virtual nodes (ACI burst) deploy into a separate subnet within the same VNet as the AKS cluster; no application modifications are required.

aks-vm-size-dynamic-selection [IN] OBSERVATION

As of May 2025, AKS dynamically selects the default VM SKU based on available capacity and quota if not specified by the user.

aks-vm-size-dynamically-selected [IN] OBSERVATION

As of May 2025, AKS dynamically selects the default VM SKU based on available capacity and quota if no VM size is specified.

aks-vmss-determines-scale-down-node-removal [IN] OBSERVATION

For VMSS-backed AKS clusters, the VMSS API determines which nodes are removed during scale-down operations.

aks-waitforfirstconsumer-topology-aware [IN] OBSERVATION

Setting volumeBindingMode: WaitForFirstConsumer on an AKS StorageClass enables topology-aware provisioning, delaying volume binding until a pod is scheduled.

aks-windows-containers-multi-os-node-pools [IN] OBSERVATION

AKS supports Windows Server containers via multi-OS (Linux + Windows) node pools within a single cluster.

aks-windows-containers-multi-os-pools [IN] OBSERVATION

AKS supports Windows Server containers via mixed OS (Linux + Windows) node pools within a single cluster.

aks-windows-server-containers-multi-os-node-pools [IN] OBSERVATION

AKS supports Windows Server containers via multi-OS node pools within a single cluster.

aks-windows-volume-mount-drive-letter [IN] OBSERVATION

Windows containers in AKS use drive letters for volume mount paths (e.g., mountPath: "d:") instead of Unix-style paths.

appgw-backend-pool-cross-vnet-requires-peering-or-vpn [IN] OBSERVATION

Application Gateway backend pool members in other VNets require VNet peering or VPN gateway for connectivity.

appgw-backend-pool-not-tied-availability-set [IN] OBSERVATION

Application Gateway backend pool members are not tied to an availability set.

appgw-backend-pool-not-tied-to-availability-set [IN] OBSERVATION

Application Gateway backend pool members are not tied to an availability set — they can be distributed freely.

appgw-backend-pool-not-tied-to-availability-sets [IN] OBSERVATION

Application Gateway backend pool members are not tied to availability sets and can span cross-cluster, cross-datacenter, or outside Azure (requires IP connectivity).

appgw-cross-vnet-backend-requires-peering [IN] OBSERVATION

Application Gateway backend pool members in other VNets require VNet peering or VPN gateway for connectivity.

appgw-cross-vnet-requires-peering-or-vpn [IN] OBSERVATION

Application Gateway backend pool members in other VNets require VNet peering or VPN gateway for connectivity; on-premises backends need ExpressRoute or VPN tunnels.

appgw-custom-health-probes-per-backend [IN] OBSERVATION

Custom health probes are recommended for each Application Gateway backend pool to monitor health with configurable hostname, path, interval, failure threshold, and response body matching.

appgw-dns-name-stable-for-lifetime [IN] OBSERVATION

Application Gateway DNS name is stable for the gateway's lifetime — use a CNAME alias pointing to it.

appgw-end-to-end-tls-via-http-settings [IN] OBSERVATION

Application Gateway end-to-end TLS encryption is controlled by the HTTP settings component (port and protocol configuration to backend).

appgw-http2-disabled-by-default-client-only [IN] OBSERVATION

Application Gateway HTTP/2 is disabled by default and works only between client and gateway (backend always HTTP/1.1)

appgw-layer-7-lb-layer-4 [IN] OBSERVATION

Application Gateway is a Layer 7 load balancer; Azure Load Balancer is Layer 4

appgw-multisite-100-plus-websites-wildcard [IN] OBSERVATION

Application Gateway multi-site listeners support 100+ websites per gateway and wildcard hostnames (up to 5 hostnames per listener)

appgw-one-listener-one-routing-rule [IN] OBSERVATION

Each Application Gateway listener maps to one routing rule

appgw-one-public-one-private-ip-max [IN] OBSERVATION

Application Gateway supports only one public and one private frontend IP address per gateway instance.

appgw-path-routing-url-path-only [IN] OBSERVATION

Application Gateway path-based routing matches URL path only, not query parameters

appgw-private-link-zero-trust [IN] OBSERVATION

Application Gateway supports Private Link for private connectivity to backends and private-only deployment to eliminate data exfiltration risk, enabling zero-trust architectures.

appgw-routes-by-http-attributes [IN] OBSERVATION

Application Gateway makes routing decisions based on HTTP attributes (URL path, host headers), not just IP/port

appgw-ssl-tls-termination-offload [IN] OBSERVATION

Application Gateway provides SSL/TLS termination, offloading encryption processing from backend servers.

appgw-supports-autoscaling-and-zone-redundancy [IN] OBSERVATION

Application Gateway (V2) supports autoscaling based on traffic demand and zone redundancy across availability zones.

appgw-supports-zone-redundancy-autoscaling [IN] OBSERVATION

Application Gateway supports autoscaling based on traffic demand and zone redundancy across availability zones for high availability.

appgw-use-cname-for-dns [IN] OBSERVATION

A CNAME alias should be used for Application Gateway's DNS name because it does not change over the gateway's lifecycle.

appgw-v1-dynamic-ip-changes-on-stop-start [IN] OBSERVATION

Application Gateway V1 dynamic public IP only changes on gateway stop/start, not during failures or updates.

appgw-v1-dynamic-ip-changes-on-stop-start-only [IN] OBSERVATION

Application Gateway V1 dynamic public IP only changes on gateway stop/start, not during failures or updates.

appgw-v1-port-3389-blocked [IN] OBSERVATION

Application Gateway V1 SKU blocks port 3389; V2 blocks ports 22 (Private Link) and 53.

appgw-v2-blocked-ports-22-53 [IN] OBSERVATION

Application Gateway V2 blocks ports 22 (Private Link) and 53; V1 blocks port 3389

appgw-v2-ports-1-64999-v1-ports-1-65502 [IN] OBSERVATION

Application Gateway V2 supports ports 1–64999 (ports 22 and 53 blocked); V1 supports ports 1–65502 (port 3389 blocked).

appgw-v2-static-public-ip-v1-dynamic-only [IN] OBSERVATION

Application Gateway V2 supports static public IP; V1 supports only dynamic public IP (changes only on stop/start)

appgw-vmss-unhealthy-until-upgraded [IN] OBSERVATION

VMSS backends in Application Gateway show unhealthy until instances are upgraded after being added to the pool

appgw-websocket-always-enabled [IN] OBSERVATION

Application Gateway WebSocket support is enabled by default and cannot be disabled

appservice-access-restrictions-max-512-rules [IN] OBSERVATION

App Service supports up to 512 access restriction rules per app, evaluated in priority order.

appservice-artifacts-deploy-to-wwwroot [IN] OBSERVATION

Deployment artifacts in Azure App Service are placed at /home/site/wwwroot, a mounted storage location shared by all instances.

appservice-ase-single-tenant-dedicated-vnet [IN] OBSERVATION

App Service Environment (ASE) is single-tenant, runs inside the customer's VNet, supports ILB for private IP addresses, forces TLS 1.2, and networking rules apply to all apps in the ASE subnet.

appservice-ase-single-tenant-vnet-forces-tls12 [IN] OBSERVATION

App Service Environment (ASE) is single-tenant, runs inside the customer's VNet, forces TLS 1.2, and networking rules apply to all apps in the ASE subnet.

appservice-ase-single-tenant-vnet-isolation [IN] OBSERVATION

App Service Environment (ASE) is single-tenant, runs inside the customer's VNet, supports private IP addresses via ILB, and forces TLS 1.2.

appservice-billing-model-by-tier [IN] OBSERVATION

App Service billing: Free = no cost; Shared = per-app CPU quota; Dedicated tiers = per VM instance; IsolatedV2 = per worker.

appservice-billing-model-per-tier [IN] OBSERVATION

Azure App Service billing: Free = no cost; Shared = per-app CPU quota; Dedicated (Basic–PremiumV4) = per VM instance; IsolatedV2 = per worker

appservice-container-tag-commit-id-not-latest [IN] OBSERVATION

Container images deployed to App Service should be tagged with git commit ID or timestamp — avoid using the default latest tag.

appservice-default-min-tls-1-2-both-sites [IN] OBSERVATION

Azure App Service default minimum TLS version is 1.2; must be configured separately for both the web app and SCM site

appservice-default-minimum-tls-1-2 [IN] OBSERVATION

Azure App Service default minimum TLS version is 1.2; must be configured separately for both the web app and SCM site.

appservice-default-minimum-tls-1-2-both-sites [IN] OBSERVATION

App Service default minimum TLS version is 1.2; must be configured separately for both the web app and the SCM site.

appservice-deploy-artifacts-home-site-wwwroot [IN] OBSERVATION

App Service deployment artifacts are placed at /home/site/wwwroot, a mounted storage location shared by all instances.

appservice-deployment-artifacts-home-site-wwwroot [IN] OBSERVATION

App Service deployment artifacts are placed in /home/site/wwwroot, a mounted storage location shared by all instances.

appservice-deployment-slots-consume-plan-resources [IN] OBSERVATION

App Service deployment slots count as active apps competing for resources in the plan.

appservice-deployment-slots-count-as-apps [IN] OBSERVATION

Azure App Service deployment slots count as active apps competing for resources within the plan

appservice-deployment-slots-staging [IN] OBSERVATION

Azure App Service deployment slots enable staging environments for zero-downtime deployments

appservice-deployment-slots-standard-tier-and-above [IN] OBSERVATION

App Service deployment slots are available at Standard tier and above; swap operations provide zero-downtime deployment and instant rollback.

appservice-deployment-slots-standard-tier-minimum [IN] OBSERVATION

App Service deployment slots require Standard tier or above.

appservice-free-managed-tls-certificates [IN] OBSERVATION

Azure App Service provides free managed TLS certificates for custom domains

appservice-free-shared-no-scale-out [IN] OBSERVATION

Azure App Service Free and Shared tiers cannot scale out and run on shared VMs with other customers

appservice-free-shared-no-scale-out-shared-vms [IN] OBSERVATION

App Service Free and Shared tiers cannot scale out and run on shared VMs with other customers.

appservice-free-shared-no-scaleout-shared-vms [IN] OBSERVATION

App Service Free and Shared tiers cannot scale out and run on shared VMs with other customers.

appservice-ftp-webdeploy-bypass-kudu [IN] OBSERVATION

FTP and WebDeploy deployments do not go through Kudu in App Service.

appservice-gateway-vnet-integration-cross-region-windows-only [IN] OBSERVATION

Gateway-required VNet integration is the only option for cross-region connectivity without peering or classic VNet access, but is Windows-only and does not support ExpressRoute.

appservice-gateway-vnet-integration-windows-only-cross-region [IN] OBSERVATION

Gateway-required VNet integration is legacy, Windows plans only, does not work with ExpressRoute, but can connect cross-region without peering.

appservice-hybrid-connections-no-vnet-port-443 [IN] OBSERVATION

App Service Hybrid Connections are outbound only, require port 443, use Azure Relay, and do not require a VNet.

appservice-hybrid-connections-outbound-no-vnet [IN] OBSERVATION

Hybrid Connections are outbound only, require port 443, use Azure Relay, and do not require a VNet; Hybrid Connection Manager requires Windows Server 2012+.

appservice-hybrid-connections-outbound-port-443-no-vnet [IN] OBSERVATION

App Service Hybrid Connections are outbound only, use Azure Relay on port 443, and do not require a VNet.

appservice-inbound-outbound-features-separate [IN] OBSERVATION

App Service inbound features (access restrictions, private endpoints) and outbound features (VNet integration, Hybrid Connections) are distinct — inbound features cannot solve outbound problems and vice versa.

appservice-isolatedv2-network-and-compute-isolation [IN] OBSERVATION

Azure App Service IsolatedV2 is the only tier providing both network and compute isolation, running on dedicated VNets via App Service Environment

appservice-java-zipdeploy-jar-wardeploy-war [IN] OBSERVATION

For Java App Service deployments, use zipdeploy for JAR files and wardeploy for WAR/EAR files.

appservice-keyvault-reference-syntax [IN] OBSERVATION

Azure App Service Key Vault references use syntax @Microsoft.KeyVault(SecretUri=https://<vault>.vault.azure.net/secrets/<secret>) in app settings

appservice-keyvault-secure-configuration [IN] OBSERVATION

App Service integrates with Key Vault for a zero-secret-in-code configuration pipeline: Key Vault references inject secrets into app settings via @Microsoft.KeyVault(SecretUri=...) syntax, certificates stored as Key Vault certificate objects enable autorotation, and user-assigned managed identity provides credential-free vault authentication — eliminating secrets from both application code and deployment configuration.

appservice-kudu-separate-process-windows-container-linux [IN] OBSERVATION

Kudu runs as a separate process on Windows App Service and as a second container on Linux App Service.

appservice-kudu-windows-process-linux-container [IN] OBSERVATION

Kudu runs as a separate process on Windows and as a second container on Linux.

appservice-local-cache-not-for-cms-use-with-slots [IN] OBSERVATION

App Service local cache is not recommended for content management sites (e.g., WordPress) and should always be combined with deployment slots to prevent downtime.

appservice-managed-instance-rdp-not-persisted [IN] OBSERVATION

Azure App Service Managed Instance persistent changes must be scripted via install scripts; RDP changes are not persisted across restarts

appservice-managed-instance-windows-only [IN] OBSERVATION

Azure App Service Managed Instance (preview) supports Windows only — no Linux, containers, or ASE support; requires Pv4/Pmv4 SKUs

appservice-managed-instance-windows-only-no-linux-containers [IN] OBSERVATION

App Service Managed Instance (preview) supports Windows only — it does not support Linux, containers, or ASE.

appservice-managed-instance-windows-only-no-persist-rdp [IN] OBSERVATION

App Service Managed Instance (preview) supports Windows only, does not support Linux/containers/ASE, and RDP changes are not persisted — persistent changes must be scripted via install scripts.

appservice-max-512-access-restriction-rules [IN] OBSERVATION

App Service supports a maximum of 512 access restriction rules per app, evaluated in priority order.

appservice-mutual-tls-client-certificates [IN] OBSERVATION

App Service supports mutual TLS (client certificate authentication) for B2B or internal app scenarios.

appservice-networking-inbound-outbound-separate [IN] OBSERVATION

App Service inbound and outbound networking features are distinct — inbound features cannot solve outbound problems and vice versa.

appservice-new-apps-ftps-only-by-default [IN] OBSERVATION

New Azure App Service apps default to FTPS-only; basic auth should be disabled in favor of Entra ID OAuth 2.0.

appservice-new-apps-ftps-only-default [IN] OBSERVATION

New Azure App Service apps default to FTPS-only; basic auth should be disabled in favor of Entra ID OAuth 2.0

appservice-new-apps-ftps-only-disable-basic-auth [IN] OBSERVATION

New App Service apps default to FTPS-only; basic auth should be disabled in favor of Entra ID OAuth 2.0 tokens.

appservice-outbound-ips-change-on-vm-family-switch [IN] OBSERVATION

App Service outbound IP addresses change when switching between VM families (e.g., Standard → PremiumV2 → PremiumV3 → PremiumV4).

appservice-plan-all-apps-share-vm-instances [IN] OBSERVATION

All apps in an App Service plan share the same VM instances; scaling the plan scales all apps together.

appservice-plan-apps-share-vm-instances [IN] OBSERVATION

All apps in an Azure App Service plan share the same VM instances; scaling the plan scales all apps together

appservice-plan-billing-model-by-tier [IN] OBSERVATION

App Service billing: Free = no cost; Shared = per-app CPU quota; Dedicated tiers = per VM instance; IsolatedV2 = per worker.

appservice-pmv3-memory-optimized-high-density [IN] OBSERVATION

App Service P*mv3 tiers are memory-optimized for high-density hosting (more apps per VM).

appservice-port-445-blocked-sandbox [IN] OBSERVATION

Port 445 (SMB) is blocked by default in the App Service sandbox.

appservice-port-445-smb-blocked [IN] OBSERVATION

Port 445 (SMB) is blocked by default in the App Service sandbox.

appservice-possible-outbound-addresses-property [IN] OBSERVATION

The possibleOutboundAddresses app property lists all potential outbound IPs an app might use in a scale unit.

appservice-premiumv4-no-outbound-ip-exposed [IN] OBSERVATION

PremiumV4 SKU does not expose outbound IP addresses.

appservice-private-endpoints-inbound-only [IN] OBSERVATION

Azure App Service private endpoints are inbound only and prevent data exfiltration via Private Link.

appservice-recommended-apps-per-plan-limits [IN] OBSERVATION

Recommended max apps per App Service plan: B1/S1/P1v2 = 8, B3/S3/P3v2 = 32, P3v3/P3v4/I3v2 = 64.

appservice-scale-before-deploy-at-90pct [IN] OBSERVATION

If App Service CPU/memory exceeds 90%, scale up instance count temporarily before deploying.

appservice-scm-do-build-during-deployment-false [IN] OBSERVATION

Setting SCMDOBUILDDURINGDEPLOYMENT=false disables Kudu builds when using an external build service (applies to Node.js and .NET).

appservice-scm-do-build-false-external-pipeline [IN] OBSERVATION

Setting SCMDOBUILDDURINGDEPLOYMENT=false disables Kudu builds when using an external build service (Node or .NET).

appservice-secrets-encrypted-at-rest-decrypted-at-startup [IN] OBSERVATION

App Service stores secrets encrypted at rest and decrypts them only at process startup into memory; encryption keys are rotated regularly.

appservice-settings-encrypted-at-rest [IN] OBSERVATION

Azure App Service app settings are stored encrypted at rest and decrypted only at process startup into memory; encryption keys are rotated regularly

appservice-slots-consume-plan-resources [IN] OBSERVATION

Deployment slots count as active apps and compete for resources within the App Service plan.

appservice-slots-require-standard-tier [IN] OBSERVATION

Deployment slots in Azure App Service require Standard tier or above.

appservice-sni-tls-free-ip-tls-charged [IN] OBSERVATION

SNI-based TLS connections on App Service are free; IP-based TLS connections are charged (one free IP-based binding with Standard+ tiers).

appservice-supports-windows-linux-containers [IN] OBSERVATION

Azure App Service supports .NET, Java, Node.js, Python, and PHP runtimes on both Windows and Linux, plus custom container deployments

appservice-swap-warms-then-switches-instant-rollback [IN] OBSERVATION

App Service swap operations warm up worker instances to match production scale before switching traffic, enabling zero-downtime deployment and instant rollback by swapping again.

appservice-swap-warmup-and-rollback [IN] OBSERVATION

App Service slot swap operations warm up worker instances to match production scale before switching traffic, providing zero-downtime deployment and instant rollback (swap again to roll back).

appservice-three-auth-layers [IN] OBSERVATION

Azure App Service has three distinct auth layers: RBAC (management plane), Easy Auth (application plane), and Managed Identities (app-to-resource)

appservice-three-auth-layers-rbac-easyauth-managedid [IN] OBSERVATION

App Service has three distinct auth layers: RBAC (management plane), Easy Auth (application plane), and Managed Identities (app-to-resource).

appservice-three-auth-layers-rbac-easyauth-mi [IN] OBSERVATION

App Service has three distinct authentication layers: RBAC (management plane), Easy Auth (application plane), and Managed Identities (app-to-resource).

appservice-tier-scaling-boundary [IN] OBSERVATION

App Service enforces a hard scaling boundary between shared and dedicated tiers: Free/Shared cannot scale out and run on shared multi-tenant VMs, while Dedicated tiers share VM instances across all co-located apps — meaning one app's scale affects all apps in the plan.

appservice-vnet-integration-outbound-same-region [IN] OBSERVATION

App Service VNet integration is outbound only and requires the VNet to be in the same region as the app.

appservice-vnet-integration-outbound-same-region-only [IN] OBSERVATION

App Service VNet integration is outbound only and requires the VNet to be in the same region as the app.

azure-access-and-data-orthogonal-protection-planes [IN] OBSERVATION

Azure enforces protection through two orthogonal planes that must be independently configured: the access plane (identity-rooted default-deny across network and governance layers) prevents unauthorized data access, while the data plane (dual-layer FIPS-tiered encryption at rest plus universal TLS 1.2 in transit) ensures data remains protected even if access controls are compromised — neither plane compensates for gaps in the other.

azure-activity-log-subscription-level-automatic [IN] OBSERVATION

The Activity log captures subscription-level events (e.g., VM created, VM started) and is collected automatically in a separate store.

azure-activity-log-subscription-level-separate-store [IN] OBSERVATION

The Activity Log tracks subscription-level events (VM start/stop, resource creation) in a separate store; it can be routed to Log Analytics for deeper analysis.

azure-advisor-reliability-recommendations [IN] OBSERVATION

Azure Advisor provides built-in reliability recommendations as part of the WAF Reliability pillar.

azure-availability-set-requires-2-plus-vms [IN] OBSERVATION

Availability Sets require 2 or more VMs to meet the 99.95% Azure SLA.

azure-availability-set-sla-99-95-percent [IN] OBSERVATION

Availability Sets provide a 99.95% SLA and require 2 or more VMs for high availability.

azure-availability-zones-dc-loss-asr-regional-outages [IN] OBSERVATION

Availability Zones protect against datacenter loss; Azure Site Recovery protects against regional outages.

azure-availability-zones-sla-99-99-percent [IN] OBSERVATION

Availability Zones SLA is 99.99% with 2+ VM instances across 2+ zones.

azure-availability-zones-vs-site-recovery-scope [IN] OBSERVATION

Availability Zones protect against datacenter-level failure; Azure Site Recovery protects against region-level outages.

azure-basic-lb-no-global-peering [IN] OBSERVATION

Basic load balancer front-end IPs are not reachable across global VNet peering; Standard load balancers are required.

azure-blob-reservation-capacity-only [IN] OBSERVATION

Blob storage reservations cover capacity only — not bandwidth or transaction costs.

azure-blob-storage-reservation-capacity-only [IN] OBSERVATION

Azure Blob Storage reservations cover storage capacity only — not bandwidth or transaction costs.

azure-block-storage-no-geo-redundancy [IN] OBSERVATION

Azure Managed Disks support only LRS and ZRS redundancy — no GRS option exists — meaning disk data is not automatically replicated across Azure regions.

azure-cache-for-redis-retirement [IN] OBSERVATION

All Azure Cache for Redis SKUs are being retired; migration to Azure Managed Redis is recommended.

azure-cache-redis-skus-retiring [IN] OBSERVATION

All Azure Cache for Redis SKUs have been announced for retirement; Microsoft recommends migrating to Azure Managed Redis.

azure-cloud-init-supported-most-linux [IN] OBSERVATION

Cloud-init is supported on most Azure Linux distros for automated VM provisioning.

azure-cloud-init-supported-most-linux-distributions [IN] OBSERVATION

Cloud-init is supported on most Azure Linux distributions for automated deployment and configuration on VMs and VMSS.

azure-cloud-init-supported-most-linux-distros [IN] OBSERVATION

Cloud-init is supported on most Azure Linux distributions for automated VM provisioning.

azure-compute-gallery-renamed-from-shared-image [IN] OBSERVATION

Azure Compute Gallery (formerly Shared Image Gallery) is needed for custom images at the 1,000-VM VMSS scale limit.

azure-compute-gallery-renamed-from-shared-image-gallery [IN] OBSERVATION

Azure Compute Gallery (formerly Shared Image Gallery) enables custom images with the higher 1,000-VM scale set limit.

azure-container-solutions-spectrum [IN] OBSERVATION

Azure container solutions include AKS (managed K8s), Azure Red Hat OpenShift (managed OpenShift), Azure Arc-enabled Kubernetes (unmanaged K8s for hybrid/multi-cloud), Azure Container Instances (serverless containers), and Azure Container Apps (serverless app model on K8s).

azure-container-storage-k8s-native-volume-mgmt [IN] OBSERVATION

Azure Container Storage is a Kubernetes-native volume orchestration and management service that uses existing Azure Storage offerings as backing storage.

azure-cosmos-db-reservation-throughput-only [IN] OBSERVATION

Cosmos DB reservations cover provisioned throughput only — not storage or networking costs.

azure-cosmosdb-reservation-throughput-only [IN] OBSERVATION

Cosmos DB reservations cover provisioned throughput only — storage and networking are not included.

azure-cost-optimization-dual-constraint-model [IN] OBSERVATION

Azure cost optimization operates under a dual constraint: the progressive tier pattern forces selection of a price floor to unlock required capabilities (each PaaS tier gates features behind increasing cost), while reservations discount only the primary billable unit per service (compute, capacity, or throughput) — creating a cost model where tier downgrades sacrifice features and reservation purchases leave ancillary costs at pay-as-you-go rates.

azure-cross-vnet-dns-requires-fqdn [IN] OBSERVATION

Cross-VNet DNS resolution requires using FQDNs; hostname-only queries are insufficient for resolving names across peered or linked VNets.

azure-data-encryption-dual-layer-enforcement [IN] OBSERVATION

Azure data protection operates at two independently enforced encryption layers: at-rest encryption is tiered across three FIPS compliance levels (Key Vault's software/HSM/Managed HSM hierarchy), while in-transit TLS 1.2 is universally enforced as a non-optional platform standard across SQL, Monitor, Redis, and Storage.

azure-data-plane-access-security-gradient [IN] OBSERVATION

Azure data-plane access follows a security gradient from weakest to strongest: SAS tokens provide delegated access with varying revocability (account key SAS is least secure, user delegation SAS most secure), while the Entra identity-to-authorization chain provides full RBAC-governed access — and the gradient position is determined by how deeply a workload integrates with the identity chain, with SAS appropriate for cross-boundary sharing and Entra RBAC for intra-platform access.

azure-data-plane-identity-convergence [IN] OBSERVATION

Azure data plane access increasingly supports Entra ID-based authentication alongside traditional key/SAS-based access, with identity-based access providing stronger auditability and more granular RBAC controls.

azure-databricks-reservation-dbu-only [IN] OBSERVATION

Azure Databricks reservations cover DBU costs only — not compute, storage, or networking; Databricks is the only service where reservations are not applied hourly.

azure-dcr-many-to-many-with-vms [IN] OBSERVATION

A single DCR can be associated with multiple VMs, and a single VM can be associated with multiple DCRs.

azure-default-deny-cross-layer-pattern [IN] OBSERVATION

Azure enforces default-deny at orthogonal infrastructure layers: Standard Load Balancer blocks all inbound traffic until NSG rules explicitly allow it (network layer), while Storage firewall blocks all requests until trusted networks or IPs are excepted (data layer) — architects must explicitly allowlist at every traffic boundary, not just the network perimeter.

azure-default-deny-identity-rooted [IN] OBSERVATION

Azure's cross-layer default-deny enforcement (Standard LB blocks inbound, Storage firewall blocks all requests, Policy denies non-compliant resources) is itself governed by the identity-to-authorization chain: RBAC role assignments determine who can create NSG exceptions and policy exemptions, and the additive RBAC model means identity misconfiguration can silently widen the aperture of both denial layers.

azure-default-deny-spans-governance-and-network [IN] OBSERVATION

Azure default-deny enforcement spans both governance and network layers through independent mechanisms: the network layer closes traffic by default (Standard LB inbound + storage firewall), while governance uses Policy's explicit-deny system with cumulative most-restrictive evaluation — both cascade through separate hierarchies (subnet/NSG vs management group tree) and must be independently opened.

azure-defender-cloud-auto-monitors-three-storage-items [IN] OBSERVATION

Microsoft Defender for Cloud auto-monitors three storage items: Defender for Storage enabled, secure transfer required, and network access restricted to specific networks.

azure-dependency-agent-required-for-vm-insights-map [IN] OBSERVATION

The Dependency Agent (separate from Azure Monitor Agent) is required for the VM Insights Map feature.

azure-direct-vhd-upload-32-tib-max [IN] OBSERVATION

Azure supports direct VHD upload up to 32 TiB to a managed disk without attaching it to a VM.

azure-disallow-shared-key-forces-entra-id [IN] OBSERVATION

Disallowing Shared Key authorization on a storage account forces all requests to use Microsoft Entra ID.

azure-disk-storage-reservations-premium-ssd-p30-plus [IN] OBSERVATION

Azure Disk Storage reservations apply only to Premium SSDs P30 or larger.

azure-dns-168-63-129-16-foundational-dependency [IN] OBSERVATION

The Azure DNS virtual IP 168.63.129.16 is a foundational dependency that must be preserved in custom configurations — it serves as the recursive resolver for all VNets, bypasses NSG rules as a host node IP, and must be explicitly included when VPN Gateway uses custom DNS servers.

azure-dns-cname-restrictions [IN] OBSERVATION

CNAME records cannot coexist with other record sets of the same name and cannot be created at the zone apex.

azure-dns-cross-vnet-requires-fqdn [IN] OBSERVATION

Cross-VNet DNS resolution requires using FQDNs — hostname alone is insufficient.

azure-dns-custom-must-specify-one-server [IN] OBSERVATION

Must specify at least one DNS server IP when configuring custom DNS; otherwise Azure falls back to Azure-provided name resolution.

azure-dns-custom-placeholder-reddog [IN] OBSERVATION

When custom DNS is configured, Azure provides reddog.microsoft.com as the placeholder DNS suffix instead of internal.cloudapp.net.

azure-dns-default-limits [IN] OBSERVATION

Default Azure DNS limits: 250 public DNS zones per subscription, 10,000 record sets per zone, 20 records per record set.

azure-dns-dhcp-renew-after-change [IN] OBSERVATION

After DNS setting changes, the DHCP lease must be renewed on affected VMs for the new settings to take effect.

azure-dns-dhcp-renewal-after-dns-change [IN] OBSERVATION

After changing VNet DNS settings, DHCP leases must be renewed on all affected VMs for the new settings to take effect.

azure-dns-dhcp-renewal-required-after-dns-change [IN] OBSERVATION

After changing VNet DNS server settings, DHCP leases must be renewed on all affected VMs for the new settings to take effect.

azure-dns-disable-reverse-dns-empty-arpa-zone [IN] OBSERVATION

To disable default reverse DNS, create an empty Private DNS in-addr.arpa zone and link it to the VNet.

azure-dns-etag-concurrency [IN] OBSERVATION

Azure DNS uses Etags for optimistic concurrency control on zones and record sets; PowerShell enforces Etag checks by default.

azure-dns-five-distinct-services [IN] OBSERVATION

Azure DNS encompasses five distinct services: Public DNS, Private DNS, DNS Private Resolver, Traffic Manager, and DNS Security Policy.

azure-dns-five-services [IN] OBSERVATION

Azure DNS encompasses five distinct services: Public DNS, Private DNS, DNS Private Resolver, Traffic Manager, and DNS Security Policy.

azure-dns-four-resolution-methods [IN] OBSERVATION

Azure supports four DNS resolution methods: Azure Private DNS zones (preferred), Azure-provided name resolution, customer-managed DNS servers, and Azure DNS Private Resolver.

azure-dns-internal-suffix-internal-cloudapp-net [IN] OBSERVATION

Azure-managed reverse DNS (PTR) records use the .internal.cloudapp.net suffix, and PTR records are automatically created when a VM starts and removed when the VM is stopped/deallocated.

azure-dns-ip-168-63-129-16 [IN] OBSERVATION

Azure DNS uses the static IP address 168.63.129.16 for recursive resolution from within VNets.

azure-dns-linux-requires-dnsmasq-for-caching [IN] OBSERVATION

Linux VMs require manual dnsmasq installation for DNS client-side caching; Windows has built-in DNS caching.

azure-dns-multi-vnet-operational-asymmetries [IN] OBSERVATION

Azure DNS has three operational asymmetries that affect multi-VNet and hybrid architectures: reverse DNS (PTR) lookups are scoped per-VNet so queries for IPs in peered VNets return NXDOMAIN, DHCP leases must be manually renewed on all affected VMs after changing VNet DNS server settings, and cross-VNet name resolution requires FQDNs because hostname-only resolution is insufficient across VNet boundaries.

azure-dns-network-foundations-category [IN] OBSERVATION

Azure DNS belongs to the Network Foundations service category alongside Azure Virtual Networks and Azure Private Link.

azure-dns-nic-settings-override-vnet [IN] OBSERVATION

Network interface DNS settings take precedence over virtual network DNS settings.

azure-dns-no-domain-purchasing [IN] OBSERVATION

Azure DNS does not support domain name purchasing — use App Service domains or third-party registrars.

azure-dns-no-domain-registration [IN] OBSERVATION

Azure DNS does not provide domain registration; it only hosts and resolves domains.

azure-dns-port-53-bypasses-nsg-custom [IN] OBSERVATION

Once custom DNS is configured, port 53 traffic bypasses subnet/NIC NSGs.

azure-dns-port-53-bypasses-nsgs-custom-dns [IN] OBSERVATION

Port 53 traffic to custom DNS servers bypasses NSGs on subnet and NIC after custom DNS is configured on the VNet.

azure-dns-private-resolver-hybrid-no-vms [IN] OBSERVATION

Azure DNS Private Resolver enables hybrid DNS resolution (on-premises to Azure and vice versa) without deploying VM-based DNS servers.

azure-dns-private-zone-autoregistration [IN] OBSERVATION

Azure Private DNS supports autoregistration, which automatically creates DNS records for VMs in private DNS zones.

azure-dns-private-zones-no-custom-dns-servers [IN] OBSERVATION

Azure Private DNS resolves domain names within Azure virtual networks without needing custom DNS servers.

azure-dns-private-zones-preferred [IN] OBSERVATION

Azure Private DNS zones are the preferred solution for VNet DNS name resolution.

azure-dns-provided-no-cross-vnet [IN] OBSERVATION

Azure-provided name resolution does not support cross-VNet resolution, manual record registration, or custom DNS suffixes.

azure-dns-reverse-ptr-removed-on-deallocation [IN] OBSERVATION

Reverse DNS PTR records (using .internal.cloudapp.net) are automatically created when a VM starts and removed when the VM is stopped/deallocated.

azure-dns-reverse-ptr-scoped-per-vnet [IN] OBSERVATION

Reverse DNS (PTR) lookups are scoped to a single VNet — queries for IPs in peered VNets return NXDOMAIN.

azure-dns-security-policy-vnet-level-msrc [IN] OBSERVATION

DNS Security Policy operates at the virtual network level and can block known malicious domains via Microsoft Security Response Center (MSRC) threat intelligence feed.

azure-dns-server-ips-not-edit-inside-vm [IN] OBSERVATION

DNS server IPs should not be edited directly inside VMs — they get erased during service heal events.

azure-dns-soa-cname-single-record-per-set [IN] OBSERVATION

SOA and CNAME record sets can only contain a single record per DNS standard constraints.

azure-dns-soa-host-not-modifiable [IN] OBSERVATION

The SOA record host property cannot be modified, and the zone serial number is not auto-updated.

azure-dns-soa-ns-auto-created [IN] OBSERVATION

NS and SOA record sets at the zone apex are auto-created and auto-deleted with the zone and cannot be independently deleted.

azure-dns-soa-serial-not-auto-updated [IN] OBSERVATION

The SOA record's host property cannot be modified, and the serial number is not automatically updated in Azure DNS.

azure-dns-spf-must-use-txt-type [IN] OBSERVATION

SPF records must use TXT record type in Azure DNS — the SPF record type is deprecated per RFC 7208.

azure-dns-tags-on-zones-metadata-on-record-sets [IN] OBSERVATION

Tags apply to DNS zone resources only; metadata (name-value pairs) applies to record sets.

azure-dns-throttling-per-vm [IN] OBSERVATION

Azure-provided DNS throttles queries on a per-VM basis; client-side DNS caching (e.g., dnsmasq on Linux) is recommended to mitigate throttling.

azure-dns-ttl-per-record-set [IN] OBSERVATION

TTL in Azure DNS is set per record set (not per individual record) with a range of 1 to 2,147,483,647 seconds.

azure-dns-ttl-per-record-set-not-per-record [IN] OBSERVATION

DNS TTL is set per record set (not per individual record); range is 1 to 2,147,483,647 seconds.

azure-dns-txt-record-limits [IN] OBSERVATION

Azure DNS TXT record sets support up to 4,096 characters total; individual strings are limited to 255 characters.

azure-dns-wildcard-all-except-ns-soa [IN] OBSERVATION

Wildcard DNS records (using * as the record set name) are supported for all record types except NS and SOA.

azure-dns-wildcard-all-types-except-ns-soa [IN] OBSERVATION

Azure DNS supports wildcard records for all record types except NS and SOA; wildcard record sets use \* as the name.

azure-dns-wildcard-records-all-types-except-ns-soa [IN] OBSERVATION

Azure DNS supports wildcard records for all record types except NS and SOA; use \* as the record set name.

azure-dns-windows-forwarding-timeout-4s [IN] OBSERVATION

Windows DNS forwarding timeout must exceed 4 seconds when forwarding to Azure DNS to avoid Private DNS zone records resolving to public IPs.

azure-dns-zone-unique-within-resource-group [IN] OBSERVATION

DNS zone names must be unique within a resource group, not globally unique.

azure-elastic-san-iscsi-protocol [IN] OBSERVATION

Azure Elastic SAN is a fully integrated SAN solution using the iSCSI protocol, designed for large-scale IO-intensive workloads (SQL, MariaDB, VMs, AKS).

azure-elastic-san-only-lrs-zrs [IN] OBSERVATION

Azure Elastic SAN supports only LRS and ZRS redundancy options.

azure-encryption-at-rest-tiered-by-service [IN] OBSERVATION

Azure encryption at rest operates at service-specific FIPS compliance levels: Key Vault provides tiered FIPS protection (software L1 → asymmetric HSM L2 → single-tenant Managed HSM L3), Storage uses automatic encryption with optional customer-managed keys, and NetApp Files meets FIPS 140-2 at rest — each service addresses a different certification requirement in the same encryption-at-rest framework.

azure-entra-identity-data-plane-lifecycle [IN] OBSERVATION

Azure's identity-first data-plane convergence (managed identity as universal authentication, shared key deprecation, user delegation SAS) operates within the Entra dual-model lifecycle framework — system-assigned identities provide zero-config data-plane authentication while user-assigned identities enable cross-resource sharing, making the managed identity lifecycle tradeoff the key design decision for data-plane identity architecture across all Azure services.

azure-expressroute-gateway-not-udr-next-hop [IN] OBSERVATION

ExpressRoute gateway cannot be used as a UDR next hop type in service chaining scenarios.

azure-expressroute-private-no-internet [IN] OBSERVATION

Of the three on-premises connectivity options (point-to-site VPN, site-to-site VPN, ExpressRoute), only ExpressRoute provides a fully private connection that does not traverse the internet.

azure-files-no-ra-grs-ra-gzrs [IN] OBSERVATION

Azure Files does not support RA-GRS or RA-GZRS redundancy options.

azure-files-smb-nfs-rest [IN] OBSERVATION

Azure Files supports SMB, NFS, and REST API protocols and can be mounted from Windows, Linux, and macOS.

azure-governance-hierarchy-dual-enforcement [IN] OBSERVATION

Azure governance cascades through a single management group hierarchy with two complementary enforcement mechanisms: RBAC grants accumulate additively downward (broader scopes can only widen access), while Policy restrictions tighten subtractively downward (broader scopes can only narrow what resources may exist) — creating an asymmetric funnel where identity permissions expand and resource constraints contract as scope narrows.

azure-ha-sla-topology-determined [IN] OBSERVATION

Azure HA SLA is topology-determined across three escalating deployment patterns: Availability Sets provide 99.95% SLA requiring 2+ VMs within a single datacenter, Availability Zones provide 99.99% SLA by distributing across datacenter boundaries within a region, and regional outage protection requires Azure Site Recovery as a separate mechanism — each topology level increases availability but also increases cost and architectural complexity with distinct failure mode coverage.

azure-ha-tier-and-zone-dual-requirement [IN] OBSERVATION

Azure zone-redundant high availability requires satisfying both tier and zone requirements independently: SQL Database excludes Basic/Standard DTU tiers from zone redundancy, VMSS requires explicit Availability Zone configuration for datacenter protection, and AKS multi-AZ defaults to ZRS storage only from Kubernetes 1.29 — making HA a compound tier+topology decision per service.

azure-ha-tier-topology-dual-alignment [IN] OBSERVATION

Azure high availability design requires satisfying two independent decision axes simultaneously: tier selection determines which zone-redundancy options are available (Basic/Standard DTU excluded, Hyperscale zone-redundancy locked at creation time), while topology selection determines the SLA level (Availability Sets 99.95%, Availability Zones 99.99%, cross-region via ASR), creating a matrix where an incorrect tier choice can eliminate the desired topology option entirely.

azure-ha-zone-redundancy-follows-tier-pattern [IN] OBSERVATION

Azure zone-redundant HA is an instance of the platform-wide progressive tier pattern: just as ACR gates enterprise features behind Premium and Redis gates clustering behind Premium, zone redundancy is gated behind higher tiers across SQL Database (excludes Basic/Standard DTU), Redis (excludes Basic), and Event Hubs (requires Premium/Dedicated) — tier selection determines not just feature access but also resilience ceiling.

azure-hybrid-benefit-reduces-os-licensing [IN] OBSERVATION

Azure Hybrid Benefit reduces OS licensing costs for customers with existing Windows Server or SQL Server licenses.

azure-identity-first-data-plane-convergence [IN] OBSERVATION

Azure is converging toward managed identity as the universal data-plane authentication mechanism: user-assigned identities are the recommended type for cross-resource sharing, user delegation SAS provides the most secure form of delegated access by requiring Entra credentials, and disabling shared key authorization forces all storage requests through Entra ID — creating a consistent identity-first access model that eliminates shared secrets from the data plane.

azure-immutable-storage-uses-legal-holds-or-time-based-retention [IN] OBSERVATION

Immutable storage (WORM) uses legal holds or time-based retention policies — data is readable but not modifiable or deletable during retention.

azure-infrastructure-ip-168-63-129-16-convergence [IN] OBSERVATION

Azure's infrastructure IP 168.63.129.16 serves as a convergence point for DNS resolution and DHCP, functioning as a host node IP that bypasses NSG rules for these foundational platform services.

azure-internal-standard-lb-no-outbound [IN] OBSERVATION

Internal standard load balancer provides no outbound connectivity unless explicitly configured with instance-level public IP or public load balancer.

azure-lb-decision-tree [IN] OBSERVATION

Azure load-balancing decision tree: Traffic Manager (DNS/global) → Front Door (global HTTP with edge) → Application Gateway (regional L7) → Load Balancer (regional L4)

azure-lb-included-with-standard-tier-vms [IN] OBSERVATION

Azure Load Balancer is included with Standard tier VMs but not all VM tiers.

azure-linux-2-eol-nov-2025 [IN] OBSERVATION

Azure Linux 2.0 security updates ended November 30, 2025; node images will be removed March 31, 2026. Must migrate to Azure Linux 3.

azure-linux-dns-caching-requires-dnsmasq [IN] OBSERVATION

Linux VMs in Azure do not have built-in DNS client-side caching; dnsmasq must be installed manually (Windows has built-in DNS caching).

azure-load-balancer-included-standard-tier [IN] OBSERVATION

Azure Load Balancer is included with Standard tier VMs but not all tiers.

azure-load-balancer-included-standard-tier-vms [IN] OBSERVATION

Azure Load Balancer is included with Standard tier VMs but not all VM tiers.

azure-load-balancer-layer4-appgw-layer7 [IN] OBSERVATION

Azure Load Balancer provides layer-4 traffic distribution; Application Gateway provides layer-7 distribution with TLS termination.

azure-log-analytics-built-on-azure-data-explorer [IN] OBSERVATION

Azure Monitor Log Analytics is built on top of Azure Data Explorer.

azure-log-analytics-default-result-limit-1000 [IN] OBSERVATION

Azure Monitor Log Analytics default query result limit is 1,000 entries.

azure-log-analytics-empty-tables-hidden-by-default [IN] OBSERVATION

Empty tables are hidden by default in the Log Analytics Tables view; can be toggled per-session or permanently via settings.

azure-log-analytics-export-excel-csv-powerbi [IN] OBSERVATION

Log Analytics results can be exported to Excel, CSV, or Power BI via the Share menu.

azure-log-analytics-export-to-excel-csv-powerbi [IN] OBSERVATION

Log Analytics query results can be exported to Excel, CSV, or Power BI, and can be pinned to Azure dashboards, workbooks, or Grafana.

azure-log-analytics-kql-time-range-overrides-picker [IN] OBSERVATION

A time range set inside a KQL query overrides the Log Analytics time picker setting.

azure-log-analytics-queries-save-to-packs-or-functions [IN] OBSERVATION

Log Analytics queries can be saved to query packs for sharing or saved as functions for reuse within other queries.

azure-log-analytics-queries-saved-to-packs-or-functions [IN] OBSERVATION

Log Analytics queries can be saved to query packs for sharing or saved as functions for reusable query logic.

azure-log-analytics-queries-saved-to-query-packs-or-functions [IN] OBSERVATION

Log Analytics queries can be saved to query packs for sharing or as functions for reusable query logic.

azure-log-analytics-query-scope-depends-on-entry-point [IN] OBSERVATION

Log Analytics query scope depends on entry point: Azure Monitor/workspace returns all workspace data; specific resource returns scoped data.

azure-log-analytics-save-to-query-packs-or-functions [IN] OBSERVATION

Log Analytics queries can be saved to query packs for sharing or saved as functions for reuse within other queries.

azure-log-analytics-search-job-mode-for-historical [IN] OBSERVATION

Log Analytics search job mode enables running search jobs for large-scale historical queries.

azure-log-analytics-simple-mode-auto-refreshes [IN] OBSERVATION

Log Analytics Simple mode auto-refreshes results without a Run button; KQL mode requires explicit Run or Shift+Enter.

azure-log-analytics-uses-kql [IN] OBSERVATION

Azure Monitor Log Analytics uses Kusto Query Language (KQL), the same language as Azure Data Explorer.

azure-managed-disk-direct-upload-32-tib [IN] OBSERVATION

Direct VHD upload to managed disks supports VHDs up to 32 TiB without needing to attach the disk to a VM.

azure-managed-disk-five-encryption-options [IN] OBSERVATION

Five managed disk encryption options: SSE (server-side encryption), ADE (Azure Disk Encryption), encryption at host, and confidential disk encryption with either platform-managed or customer-managed keys.

azure-managed-disk-snapshot-single-disk-crash-consistent [IN] OBSERVATION

Managed disk snapshots are read-only, crash-consistent full copies of a single disk; they cannot coordinate across multiple disks. Images capture all disks (OS + data) from a generalized VM.

azure-managed-disk-snapshot-vs-image [IN] OBSERVATION

Snapshots are single-disk read-only point-in-time copies; images capture all disks of a generalized (Sysprep'd) VM and are used to create new VMs.

azure-managed-disk-snapshots-independent-of-source [IN] OBSERVATION

Managed disk snapshots exist independently of the source disk and persist even if the source is deleted.

azure-managed-disks-50000-per-type-per-region [IN] OBSERVATION

Subscription limit for managed disks is up to 50,000 disks per type per region per subscription.

azure-managed-disks-direct-upload-32-tib [IN] OBSERVATION

Direct VHD upload to Azure Managed Disks supports VHDs up to 32 TiB without requiring attachment to a VM.

azure-managed-disks-five-types [IN] OBSERVATION

Azure Managed Disks come in five types: Ultra Disks, Premium SSD v2, Premium SSD, Standard SSD, and Standard HDD.

azure-managed-disks-image-captures-all-disks [IN] OBSERVATION

A managed disk image captures all disks (OS + data) from a generalized or deallocated VM and can be used to create many VMs.

azure-managed-disks-limit-50000-per-type-per-sub-per-region [IN] OBSERVATION

Limit of 50,000 managed disks per type per subscription per region.

azure-managed-disks-lrs-11-nines-zrs-12-nines [IN] OBSERVATION

LRS managed disks provide 11 9's of durability; ZRS managed disks provide 12 9's of durability.

azure-managed-disks-recommended-over-unmanaged [IN] OBSERVATION

Managed Disks are recommended for all new VMs; unmanaged disks can be converted to managed.

azure-managed-disks-snapshot-single-disk-crash-consistent [IN] OBSERVATION

Managed disk snapshots are read-only, crash-consistent full copies of a single disk; they exist independently of the source and cannot coordinate across multiple disks.

azure-managed-disks-three-replicas-99-999-availability [IN] OBSERVATION

Managed disks store 3 replicas of data and provide 99.999% availability SLA.

azure-managed-identity-credentials-never-accessible [IN] OBSERVATION

Managed identity credentials are never accessible to the developer.

azure-managed-identity-fic-limit-20 [IN] OBSERVATION

The limit for managed identities as Federated Identity Credentials on an Entra ID application is 20.

azure-managed-identity-no-cost [IN] OBSERVATION

Managed identities for Azure resources are free — no extra cost.

azure-managed-identity-system-assigned-sp-name-matches-resource [IN] OBSERVATION

System-assigned managed identity's service principal name matches the Azure resource name; for deployment slots the format is <app-name>/slots/<slot-name>.

azure-managed-identity-user-assigned-recommended [IN] OBSERVATION

User-assigned managed identity is the recommended type for Microsoft services.

azure-managed-identity-workflow-four-steps [IN] OBSERVATION

Managed identity usage workflow: (1) create identity, (2) assign to source compute resource, (3) authorize on target service via RBAC, (4) use Azure.Identity or MSAL SDK in code to acquire tokens — no secrets needed.

azure-managed-lustre-hpc-ai-workloads [IN] OBSERVATION

Azure Managed Lustre is a high-performance parallel file system designed for HPC and AI workloads, integrating with Blob Storage and AKS.

azure-messaging-at-least-once-universal [IN] OBSERVATION

Both Azure messaging services converge on at-least-once as the baseline delivery semantic: Event Hubs (including its Kafka endpoint) and Service Bus Peek Lock mode both guarantee message delivery but not exactly-once processing — making idempotent consumer design a universal requirement for Azure messaging workloads regardless of service choice.

azure-migration-cost-compound-constraint [IN] OBSERVATION

Azure migration planning faces compound constraints from two independent systems: tier gates determine the target capability envelope (SQL MI for lift-and-shift, Hyperscale for scale, Premium for network isolation), while reservation and pricing models impose a second constraint layer on ongoing cost (partial compute-only coverage, same total cost regardless of payment schedule) — both must be evaluated together since the tier choice locks in both the capability ceiling and the cost floor.

azure-migration-tier-gating-platform-wide [IN] OBSERVATION

Azure migration planning is tier-gated at the platform level: SQL Database and Managed Instance targets are constrained by HA/scale tier tradeoffs (General Purpose cold-cache penalty vs Hyperscale distributed architecture), while PaaS services (ACR, Redis, Event Hubs) consistently gate enterprise capabilities behind premium SKUs — architects must map every source workload requirement to the minimum Azure tier across all services in the target architecture.

azure-monitor-action-group-notification-types [IN] OBSERVATION

Action groups define alert responses including email, SMS, push notifications, Azure Functions, Logic Apps, webhooks, automation runbooks, ITSM incidents, and Event Hubs.

azure-monitor-action-group-response-types [IN] OBSERVATION

Action groups define alert responses including email, SMS, push notifications, Azure Functions, Logic Apps, webhooks, Event Hubs, ITSM incidents, and automation runbooks.

azure-monitor-activity-log-alerts-always-stateless [IN] OBSERVATION

All Azure Monitor activity log alerts are stateless (fire every time the condition is met).

azure-monitor-agent-private-key-rotation-90-days [IN] OBSERVATION

Azure Monitor Agent private keys are rotated every 90 days; agent-to-service communication uses certificate-based authentication on port 443 with TLS 1.2.

azure-monitor-agent-tls-12-cert-auth-port-443 [IN] OBSERVATION

Azure Monitor agent communication uses TLS 1.2 (HTTPS) on port 443 with certificate-based authentication; private keys are rotated every 90 days.

azure-monitor-aiops-dynamic-thresholds-smart-alerts [IN] OBSERVATION

Azure Monitor AIOps capabilities include dynamic alert thresholds and smart alerts using machine learning.

azure-monitor-alert-conditions-fired-or-resolved [IN] OBSERVATION

Azure Monitor alert conditions are system-managed with two states: fired or resolved.

azure-monitor-alert-dual-track-lifecycle [IN] OBSERVATION

Azure Monitor alerts operate on a dual-track lifecycle: three alert types (metric, log, activity) trigger system-managed conditions with two states (fired/resolved) that are orthogonal to user-managed response states (New/Acknowledged/Closed) — with alert processing rules providing cross-cutting modification of triggered alerts without editing individual alert rules.

azure-monitor-alert-processing-rules [IN] OBSERVATION

Alert processing rules modify triggered alerts by adding or suppressing action groups, applying filters, or scheduling rule processing windows.

azure-monitor-alert-processing-rules-modify-triggered [IN] OBSERVATION

Alert processing rules modify triggered alerts by adding or suppressing action groups, applying filters, or scheduling rule processing windows.

azure-monitor-alert-processing-rules-modify-triggered-alerts [IN] OBSERVATION

Alert processing rules modify triggered alerts by adding or suppressing action groups, applying filters, or scheduling.

azure-monitor-alert-rbac-requirements [IN] OBSERVATION

Creating alert rules requires read permission on target resource, write on resource group, and read on action group.

azure-monitor-alert-user-response-states [IN] OBSERVATION

Azure Monitor alert user response has three states: New, Acknowledged, or Closed; these do not change automatically.

azure-monitor-alerts-retained-30-days [IN] OBSERVATION

Azure Monitor alerts are stored for 30 days then automatically deleted.

azure-monitor-application-insights-ai-agent-monitoring [IN] OBSERVATION

Application Insights tracks AI agent performance across Microsoft Foundry, Copilot Studio, and third-party frameworks including token consumption, latency, error rates, and quality scores.

azure-monitor-application-insights-opentelemetry-based [IN] OBSERVATION

Application Insights is an OpenTelemetry-based APM feature within Azure Monitor.

azure-monitor-autoscale-is-built-in-feature [IN] OBSERVATION

Autoscale is a built-in feature of Azure Monitor that automatically adjusts resources based on application load, not a separate Azure service.

azure-monitor-autoscale-is-monitor-feature [IN] OBSERVATION

Autoscale is a feature of Azure Monitor, not a standalone service.

azure-monitor-auxiliary-plan-dcr-custom-tables-only [IN] OBSERVATION

The Auxiliary table plan only supports DCR-based custom tables, not standard Azure resource tables.

azure-monitor-basic-plan-kql-single-table-with-lookup [IN] OBSERVATION

The Basic table plan limits KQL queries to a single table, but this can be extended using the lookup operator.

azure-monitor-basic-plan-simple-log-alerts-only [IN] OBSERVATION

The Basic table plan supports only Simple Log Alerts, not full log search alert rules.

azure-monitor-contributor-creates-alerts-reader-views-only [IN] OBSERVATION

Monitoring Contributor role can create and manage alerts; Monitoring Reader role can only view alerts.

azure-monitor-custom-metrics-10-dimension-limit [IN] OBSERVATION

Azure Monitor custom metrics are limited to 10 dimensions.

azure-monitor-data-collection-rules-customize-telemetry [IN] OBSERVATION

Data collection rules customize and filter what telemetry data is collected from different sources in Azure Monitor.

azure-monitor-data-platform-shared-with-sentinel-defender [IN] OBSERVATION

The Azure Monitor data platform is shared with Microsoft Defender for Cloud and Microsoft Sentinel.

azure-monitor-dcr-customizes-and-filters-telemetry [IN] OBSERVATION

Data collection rules (DCRs) are the mechanism for customizing and filtering telemetry collected by Azure Monitor.

azure-monitor-dcr-customizes-data-collection [IN] OBSERVATION

Data collection rules (DCRs) are the mechanism for customizing and filtering telemetry collected by Azure Monitor from different sources.

azure-monitor-dcrs-customize-and-filter-collection [IN] OBSERVATION

Data collection rules (DCRs) are the mechanism for customizing, filtering, and routing telemetry data during collection in Azure Monitor.

azure-monitor-dual-ingestion-model [IN] OBSERVATION

Azure Monitor uses a dual data ingestion model: platform/custom metrics are preaggregated in a time-series database at no cost with no configuration, while logs pass through transformation pipelines that can filter and route data to optimize cost and analytics.

azure-monitor-fired-alerts-read-only [IN] OBSERVATION

Fired Azure Monitor alert instances are read-only and cannot be edited.

azure-monitor-four-signal-types [IN] OBSERVATION

Azure Monitor collects four signal types: metrics, logs, traces, and events.

azure-monitor-guest-os-log-analytics-agent-retention-31-days [IN] OBSERVATION

Guest OS metrics sent via Log Analytics agent are retained for 31 days, extendable to 2 years.

azure-monitor-guest-os-metrics-log-analytics-31d-to-2y [IN] OBSERVATION

Guest OS metrics collected via the Log Analytics agent are retained for 31 days, extendable to 2 years.

azure-monitor-guest-os-metrics-log-analytics-agent-31-days [IN] OBSERVATION

Guest OS metrics collected via Log Analytics agent are retained for 31 days, extendable to 2 years.

azure-monitor-guest-os-metrics-via-ama [IN] OBSERVATION

Guest OS metrics require an agent; Azure Monitor Agent (AMA) is the current recommended agent, replacing legacy Windows diagnostic extension and InfluxData Telegraf agent.

azure-monitor-hybrid-multicloud-via-arc [IN] OBSERVATION

Azure Monitor supports hybrid and multicloud monitoring via Azure Arc and the Azure Monitor pipeline.

azure-monitor-kql-read-only-language [IN] OBSERVATION

KQL (Kusto Query Language) is a read-only query language — it can query and analyze data but cannot modify it.

azure-monitor-log-alert-charge-based-on-time-series [IN] OBSERVATION

Log search alerts are charged based on the number of time series created from dimension splits.

azure-monitor-log-analytics-retention-31-days-extendable-2-years [IN] OBSERVATION

Guest OS metrics sent via Log Analytics agent are retained 31 days, extendable to 2 years.

azure-monitor-log-analytics-workspaces-use-kql-monitor-workspaces-use-promql [IN] OBSERVATION

Log Analytics workspaces use KQL for querying; Azure Monitor workspaces use PromQL for querying Prometheus/OpenTelemetry metrics.

azure-monitor-log-search-alert-resolution-timing [IN] OBSERVATION

Log search alert resolution varies by frequency: 10 minutes for 1-min frequency, 3 periods for 5–15 min, 2 periods for 15 min–11 hr, and 1 period for 11–12 hr frequency.

azure-monitor-log-search-alerts-charged-by-time-series [IN] OBSERVATION

Log search alert rules are charged based on the number of time series created by dimension splits.

azure-monitor-logs-all-plans-12-year-retention [IN] OBSERVATION

All Azure Monitor Logs table plans support up to 12 years total retention.

azure-monitor-logs-analytics-plan-30-day-default-retention [IN] OBSERVATION

Analytics table plan has 30-day default analytics retention (90 days for Sentinel and Application Insights), extendable to 2 years.

azure-monitor-logs-auxiliary-plan-limitations [IN] OBSERVATION

Auxiliary table plan has no workspace replication, no Customer Lockbox support, no alerts, no insights, and no data export.

azure-monitor-logs-basic-auxiliary-not-in-legacy-pricing [IN] OBSERVATION

Basic and Auxiliary table plans are not available in legacy pricing tiers.

azure-monitor-logs-basic-plan-simple-log-alerts-only [IN] OBSERVATION

The Basic table plan in Azure Monitor Logs supports only Simple Log Alerts, not full alert rules.

azure-monitor-logs-basic-plan-supports-simple-log-alerts [IN] OBSERVATION

The Basic table plan supports Simple Log Alerts and full KQL on a single table (extendable via lookup).

azure-monitor-logs-data-collection-transformations [IN] OBSERVATION

Data collection transformations can filter, transform, and route data during ingestion to optimize cost and analytics before it reaches workspace tables.

azure-monitor-logs-kql-read-only [IN] OBSERVATION

KQL (Kusto Query Language) used in Azure Monitor Logs is a read-only query language — it can process and analyze data but cannot modify it.

azure-monitor-logs-kql-read-only-language [IN] OBSERVATION

KQL (Kusto Query Language) is a read-only query language used by Azure Monitor Logs — it can analyze millions of records but cannot modify data.

azure-monitor-logs-sentinel-defender-use-log-analytics [IN] OBSERVATION

Microsoft Sentinel and Microsoft Defender for Cloud both store their security data in Azure Monitor Log Analytics workspaces.

azure-monitor-logs-summary-rules-aggregate-data [IN] OBSERVATION

Summary rules aggregate data from one or more tables as it arrives, producing summarized tables for dashboards and faster queries.

azure-monitor-logs-three-table-plans [IN] OBSERVATION

Azure Monitor Logs has three table plans: Analytics (full-featured, standard cost), Basic (reduced cost, single-table KQL), and Auxiliary (minimal cost, slow queries, no alerts/insights/export).

azure-monitor-metric-alert-multi-resource-same-type-same-region [IN] OBSERVATION

A single metric alert rule can monitor multiple resources of the same type in the same Azure region.

azure-monitor-metric-dimensions-case-insensitive [IN] OBSERVATION

Metric dimension names and values are case-insensitive in Azure Monitor.

azure-monitor-metrics-batch-api-50-resource-ids [IN] OBSERVATION

The Azure Monitor Metrics Batch REST API supports up to 50 resource IDs per call (same subscription and region).

azure-monitor-metrics-explorer-chart-limit-30-days [IN] OBSERVATION

Metrics Explorer chart query limit is 30 days per single chart; PromQL query max span is 32 days.

azure-monitor-metrics-three-types [IN] OBSERVATION

Azure Monitor Metrics supports three types: native platform metrics (free, auto-collected), native custom metrics (from apps/agents/API), and Prometheus metrics (from Kubernetes clusters).

azure-monitor-metrics-tls-12-cert-auth-port-443 [IN] OBSERVATION

Azure Monitor agent-to-service communication uses TLS 1.2 (HTTPS) with certificate-based authentication on port 443; private keys rotated every 90 days.

azure-monitor-metrics-tls-12-keys-rotated-90-days [IN] OBSERVATION

Azure Monitor Metrics uses TLS 1.2 (HTTPS) on port 443 for all communication; private keys are rotated every 90 days.

azure-monitor-monitoring-contributor-and-reader-roles [IN] OBSERVATION

Built-in monitoring roles: Monitoring Contributor can create and manage alerts; Monitoring Reader has view-only access.

azure-monitor-monitoring-contributor-creates-reader-views [IN] OBSERVATION

Monitoring Contributor role can create and manage alerts; Monitoring Reader role can only view alerts.

azure-monitor-moving-resource-may-lose-metric-history [IN] OBSERVATION

Moving or renaming an Azure resource may result in loss of metric history.

azure-monitor-native-metrics-preaggregated-prometheus-raw [IN] OBSERVATION

Native platform and custom metrics are preaggregated; Prometheus metrics store raw data.

azure-monitor-observability-depends-on-identity-chain [IN] OBSERVATION

Azure Monitor's compound risk surface is coupled to the identity system: Sentinel and Defender (sharing Log Analytics workspaces) consume identity events generated by Entra, while workspace access itself is governed by the same RBAC model that the Entra identity-to-authorization chain provides — monitoring integrity depends on identity integrity.

azure-monitor-observability-security-compound-risk [IN] OBSERVATION

Azure Monitor workspace configuration is a compound risk surface: workspace decisions (retention, table plans, DCR filtering) simultaneously affect three security/observability consumers (Monitor, Sentinel, Defender) AND govern the dual-track alert lifecycle (system-managed conditions + user response states), making workspace misconfiguration a single point of failure for both security posture and operational alerting.

azure-monitor-pipeline-extends-to-on-premises [IN] OBSERVATION

Azure Monitor pipeline extends data collection into on-premises data centers and other cloud providers, supporting large volumes or intermittent connectivity.

azure-monitor-pipeline-extends-to-onprem-multicloud [IN] OBSERVATION

Azure Monitor pipeline extends data collection to on-premises data centers and other cloud providers for large volumes or intermittent connectivity.

azure-monitor-platform-custom-metrics-preaggregated [IN] OBSERVATION

Platform and custom metrics are preaggregated in the time-series database; Prometheus metrics store raw data.

azure-monitor-platform-metrics-long-term-via-diagnostic-settings [IN] OBSERVATION

Platform metrics can be sent to a Log Analytics workspace via diagnostic settings for long-term retention beyond the 93-day default.

azure-monitor-platform-metrics-no-config-no-cost [IN] OBSERVATION

Azure Monitor platform metrics are automatically collected from Azure resources at 1-minute frequency, require no configuration, and have no cost.

azure-monitor-platform-metrics-retention-93-days [IN] OBSERVATION

Azure Monitor platform metrics are retained for 93 days.

azure-monitor-prometheus-alerts-use-promql [IN] OBSERVATION

Prometheus alerts use PromQL-based rules against Azure Monitor managed Prometheus metrics (a separate alert type from metric alerts).

azure-monitor-prometheus-metrics-retention-18-months [IN] OBSERVATION

Azure Monitor Prometheus metrics are retained for 18 months.

azure-monitor-prometheus-metrics-stored-in-workspace [IN] OBSERVATION

Prometheus metrics are stored in an Azure Monitor workspace (not subscription-level like native metrics).

azure-monitor-recommended-alert-rules-vms-aks-law [IN] OBSERVATION

Recommended (out-of-the-box) alert rules are available for VMs, AKS, and Log Analytics workspaces.

azure-monitor-retention-alerting-alignment-required [IN] OBSERVATION

Azure Monitor operational effectiveness requires alignment between the three-tier retention model (93 days platform metrics, 18 months Prometheus, up to 12 years logs) and the dual-track alert lifecycle (system-managed fired/resolved conditions with 30-day alert retention plus user response states) — because alert investigation depends on the underlying metric or log data still being within its retention window, and alert processing rules must account for data availability at each retention tier.

azure-monitor-retention-three-tier-model [IN] OBSERVATION

Azure Monitor retention spans three distinct tiers with increasing configurability: platform metrics (93 days fixed), Prometheus metrics (18 months), and logs (up to 12 years across all table plans).

azure-monitor-sentinel-defender-store-data-in-log-analytics [IN] OBSERVATION

Microsoft Sentinel and Microsoft Defender for Cloud both store their data in Log Analytics workspaces.

azure-monitor-sentinel-defender-store-in-log-analytics-workspaces [IN] OBSERVATION

Microsoft Sentinel and Microsoft Defender for Cloud both store their data in Log Analytics workspaces.

azure-monitor-shared-platform-three-consumers [IN] OBSERVATION

Azure Monitor's data platform serves as shared infrastructure for three security and observability products — Azure Monitor itself, Microsoft Sentinel, and Microsoft Defender for Cloud — with each inheriting the same retention, alerting, and transformation capabilities.

azure-monitor-six-alert-types [IN] OBSERVATION

Azure Monitor has six alert types: metric alerts, log search alerts, simple log search alerts (preview), activity log alerts, smart detection alerts, and Prometheus alerts.

azure-monitor-smart-alerts-dynamic-thresholds-ml [IN] OBSERVATION

Azure Monitor alerts support dynamic thresholds and smart alerts using machine learning for intelligent alerting.

azure-monitor-smart-detection-alerts [IN] OBSERVATION

Smart detection alerts are Application Insights auto-detection of performance and failure anomalies.

azure-monitor-smart-detection-alerts-app-insights [IN] OBSERVATION

Smart detection alerts automatically detect performance and failure anomalies in Application Insights resources.

azure-monitor-smart-detection-from-app-insights [IN] OBSERVATION

Smart detection alerts originate from Application Insights and auto-detect performance and failure anomalies.

azure-monitor-stateful-alert-condition-persists-after-deletion [IN] OBSERVATION

Stateful alert condition state is stored even after the 30-day alert deletion to prevent re-firing.

azure-monitor-stateful-condition-persists-after-deletion [IN] OBSERVATION

Stateful alert condition state is stored even after the 30-day alert deletion period to prevent re-firing of the same condition.

azure-monitor-stateful-metric-alert-resolves-after-3-checks [IN] OBSERVATION

Stateful metric alerts resolve after 3 consecutive checks where the condition is not met.

azure-monitor-three-alert-types [IN] OBSERVATION

Azure Monitor has three alert types: metric alerts (regular interval, dynamic thresholds), log alerts (KQL-based, predefined frequency), and activity log alerts (includes Resource Health and Service Health).

azure-monitor-three-alert-types-metric-log-activity [IN] OBSERVATION

Azure Monitor has three alert types: metric alerts (regular interval, dynamic thresholds), log alerts (KQL-based), and activity log alerts (including Resource Health and Service Health).

azure-monitor-three-alert-types-vm [IN] OBSERVATION

Three VM alert types: metric alerts (regular interval, support dynamic thresholds), log alerts (KQL-based, predefined frequency), and activity log alerts (includes Resource Health and Service Health).

azure-monitor-three-metric-types [IN] OBSERVATION

Azure Monitor Metrics supports three metric types: native platform metrics (free, auto-collected), native custom metrics (from apps/agents/API), and Prometheus metrics (from Kubernetes clusters).

azure-monitor-two-query-languages-kql-promql [IN] OBSERVATION

Azure Monitor uses two query languages: KQL for logs/traces in Log Analytics workspaces and PromQL for metrics in Azure Monitor workspaces.

azure-monitor-workspace-security-nexus [IN] OBSERVATION

Log Analytics workspace configuration decisions (retention periods, table plans, DCR filtering) directly impact three product consumers — Azure Monitor, Microsoft Sentinel, and Microsoft Defender for Cloud — because the dual ingestion model (metrics time-series + Log Analytics workspace) feeds all three through the shared data platform; a misconfigured workspace degrades security observability, not just operational monitoring.

azure-netapp-files-99-99-availability [IN] OBSERVATION

Azure NetApp Files provides 99.99% availability with locally redundant storage.

azure-netapp-files-9999-availability [IN] OBSERVATION

Azure NetApp Files provides 99.99% availability with locally redundant storage.

azure-netapp-files-9999-sla [IN] OBSERVATION

Azure NetApp Files provides 99.99% availability SLA with locally redundant storage; data-in-flight encryption is optional (not default).

azure-netapp-files-9999-sla-locally-redundant [IN] OBSERVATION

Azure NetApp Files provides 99.99% availability SLA with locally redundant storage; data-in-flight encryption is optional (not default).

azure-netapp-files-fips-140-2-at-rest [IN] OBSERVATION

Azure NetApp Files uses FIPS 140-2 standard for encryption at rest.

azure-netapp-files-inflight-not-encrypted-by-default [IN] OBSERVATION

Azure NetApp Files data-in-flight is NOT encrypted by default; NFSv4.1 and SMB3 encryption can be optionally enabled. Data stays within the customer-owned VNet.

azure-netapp-files-inflight-not-encrypted-default [IN] OBSERVATION

Azure NetApp Files data-in-flight is NOT encrypted by default; NFSv4.1 and SMB3 encryption can be optionally enabled; data stays within the customer-owned VNet.

azure-nic-no-separate-cost-limited-by-vm-size [IN] OBSERVATION

VM network interfaces have no separate cost but the number of NICs is limited by VM size.

azure-no-cost-for-availability-sets-or-scale-sets [IN] OBSERVATION

There is no cost for availability sets or VM scale sets themselves — only per-VM instance charges apply.

azure-nsg-augmented-rules-resource-manager-only [IN] OBSERVATION

Augmented security rules (multiple IPs, ranges, ports in a single rule) are only available in the Resource Manager deployment model.

azure-nsg-default-rule-priorities [IN] OBSERVATION

NSG default rules use priorities 65000, 65001, and 65500; custom rules (max priority 4096) always evaluate first.

azure-nsg-esp-ah-arm-templates-only [IN] OBSERVATION

ESP and AH protocols in NSG rules can only be configured via ARM templates, not through the Azure portal.

azure-nsg-five-tuple-matching [IN] OBSERVATION

NSG rules evaluate traffic using five-tuple matching: source, source port, destination, destination port, and protocol.

azure-nsg-flow-logs-retiring-sept-2027 [IN] OBSERVATION

NSG flow logs are retiring on September 30, 2027; users should migrate to VNet flow logs.

azure-nsg-host-ips-bypass-nsg [IN] OBSERVATION

Host node IPs 168.63.129.16 and 169.254.169.254 provide DHCP, DNS, IMDS, and health monitoring and are not subject to NSGs by default.

azure-nsg-inbound-after-nat-outbound-before [IN] OBSERVATION

NSG processes inbound traffic after public-to-private IP translation; outbound traffic is processed before private-to-public IP translation.

azure-nsg-inbound-after-nat-outbound-before-nat [IN] OBSERVATION

NSG processes inbound traffic after public-to-private IP translation; outbound traffic is processed before private-to-public IP translation.

azure-nsg-nat-translation-order [IN] OBSERVATION

NSG processes inbound traffic after public-to-private IP translation; outbound traffic is processed before private-to-public IP translation.

azure-nsg-no-duplicate-priority-and-direction [IN] OBSERVATION

You cannot create two NSG rules with the same priority and direction.

azure-nsg-no-duplicate-priority-direction [IN] OBSERVATION

Two NSG rules cannot have the same priority and direction; each priority value must be unique within a given direction (inbound or outbound).

azure-nsg-platform-ips-exempt-but-blockable [IN] OBSERVATION

Platform IPs 168.63.129.16 and 169.254.169.254 (DHCP, DNS, IMDS, health monitoring) are not subject to NSG rules by default but can be blocked using service tags AzurePlatformDNS, AzurePlatformIMDS, and AzurePlatformLKM.

azure-nsg-platform-ips-exempt-by-default [IN] OBSERVATION

Platform IPs 168.63.129.16 and 169.254.169.254 (DHCP, DNS, IMDS, health monitoring) are exempt from NSG rules by default but can be blocked using service tags (AzurePlatformDNS, AzurePlatformIMDS, AzurePlatformLKM).

azure-nsg-priority-range-100-4096 [IN] OBSERVATION

NSG security rule priority ranges from 100 to 4096; lower number equals higher priority; processing stops at first match.

azure-nsg-rule-removal-no-terminate [IN] OBSERVATION

Removing an NSG rule does not terminate existing connections; only new connections are affected.

azure-nsg-same-priority-direction-unique [IN] OBSERVATION

Cannot create two NSG rules with the same priority and direction within the same NSG.

azure-nsg-security-admin-rules-precedence [IN] OBSERVATION

Security admin rules from Azure Virtual Network Manager are evaluated before NSG rules; "Always allow" and "Deny" admin rules bypass NSG evaluation entirely.

azure-nsg-smtp-port-25-blocked [IN] OBSERVATION

Outbound port 25 (SMTP) is blocked for most subscription types except standard Enterprise Agreement; subscriptions created after November 15, 2017 generally cannot send email directly over port 25.

azure-nsg-stateful [IN] OBSERVATION

NSGs are stateful — if outbound traffic is allowed, the inbound response is automatically allowed (and vice versa).

azure-nva-deploy-in-separate-subnet [IN] OBSERVATION

Network virtual appliances (NVAs) must be deployed in a different subnet than the routed resources to avoid routing loops.

azure-observability-depends-on-governance-and-identity [IN] OBSERVATION

Effective Azure observability requires alignment across three independently configurable systems: the identity chain (Entra→RBAC) determines workspace data access and who can see what telemetry, the governance hierarchy (Policy+RBAC) determines which monitoring policies are enforced across subscriptions, and the network default-deny stack (NSG+firewall) determines whether telemetry data can flow from on-premises and multi-cloud sources to Log Analytics workspaces.

azure-observability-doubly-gated-by-tier-and-identity [IN] OBSERVATION

Azure observability effectiveness is doubly gated: the identity-governance chain determines who can access and manage monitoring data (workspace access, alert creation, role-based restrictions), while PaaS tier selection determines what telemetry is available and how deeply it can be retained — both axes must align for effective operational visibility.

azure-os-disk-max-4095-gib-mbr-limits-2-tib [IN] OBSERVATION

OS disk maximum capacity is 4,095 GiB; MBR limits usable size to 2 TiB (convert to GPT for more).

azure-paas-isolation-doubly-tier-gated [IN] OBSERVATION

PaaS network isolation is doubly tier-gated: Private Link's triple isolation model (backbone routing + per-resource mapping + private DNS) requires PaaS services at Premium tier or above for private endpoint support, while those same services independently gate operational capabilities (geo-replication, retention, protocol support) by tier — full production-grade isolation is a compound function of networking model and service tier.

azure-paas-progressive-tier-pattern [IN] OBSERVATION

Multiple Azure PaaS services (Redis Cache, Event Hubs, ACR) follow a progressive tier pattern where higher tiers unlock additional capabilities (clustering, Kafka support, geo-replication) rather than just scaling existing ones.

azure-paas-tier-cascading-constraint-model [IN] OBSERVATION

Azure PaaS tier selection constrains available capabilities, security features, and network isolation options, making tier choice an important early design decision for PaaS-heavy workloads.

azure-paas-tier-constrains-capability-and-security [IN] OBSERVATION

PaaS tier selection has compound impact across two independently gated dimensions: higher tiers unlock both operational capabilities (migration paths, HA options, scale features, Kafka interop) AND security posture (private link access, network isolation, content trust), meaning cost optimization directly trades against both security and migration flexibility at the platform level.

azure-performance-diagnostics-continuous-and-on-demand [IN] OBSERVATION

Performance Diagnostics has two modes: continuous (5-second intervals, preview) for ongoing monitoring and on-demand for point-in-time deep analysis.

azure-platform-ips-exempt-from-nsgs [IN] OBSERVATION

Platform IPs 168.63.129.16 and 169.254.169.254 (DHCP, DNS, IMDS, health monitoring) are not subject to NSG rules by default, but can be blocked using service tags AzurePlatformDNS, AzurePlatformIMDS, and AzurePlatformLKM.

azure-platform-metrics-time-series-near-realtime-alerting [IN] OBSERVATION

Platform metrics are stored in Azure Monitor's time-series database and support near real-time alerting with no configuration required.

azure-policy-arc-extends-to-multicloud-onprem [IN] OBSERVATION

Azure Arc extends Azure Policy governance to multi-cloud and on-premises datacenters.

azure-policy-assignments-inherit-latest-definition [IN] OBSERVATION

Updating a policy definition automatically applies to all existing assignments; assignments always use the latest definition state.

azure-policy-assignments-use-latest-definition [IN] OBSERVATION

Updating an Azure Policy definition automatically applies to all existing assignments; assignments always use the latest definition state.

azure-policy-audit-if-not-exists-checks-child-resources [IN] OBSERVATION

auditIfNotExists assesses compliance based on a child or extension resource's properties, not the resource's own properties (unlike audit).

azure-policy-audit-if-not-exists-evaluates-child-resource [IN] OBSERVATION

auditIfNotExists assesses compliance based on a child or extension resource's properties, not the resource's own properties (unlike audit).

azure-policy-best-practice-always-use-initiatives [IN] OBSERVATION

Azure Policy best practice: always use initiatives even for a single policy definition, for easier scaling later.

azure-policy-best-practice-start-with-audit [IN] OBSERVATION

Azure Policy best practice: start with audit/auditIfNotExists effects before enforcement effects (deny, modify, deployIfNotExists).

azure-policy-compliance-evaluation-every-24-hours [IN] OBSERVATION

Azure Policy automatic compliance evaluation occurs every 24 hours.

azure-policy-cumulative-most-restrictive [IN] OBSERVATION

When multiple Azure Policy assignments layer on a resource, the net result is the cumulative most restrictive combination of all applicable effects.

azure-policy-definition-displayname-128-description-512 [IN] OBSERVATION

Policy definition displayName max length is 128 characters; description max length is 512 characters.

azure-policy-definition-location-determines-assignment-scope [IN] OBSERVATION

A policy definition location must be a management group or subscription; resources must be direct members or children of the definition location's hierarchy for assignment.

azure-policy-definition-mode-all-vs-indexed [IN] OBSERVATION

Policy definition mode all evaluates resource groups, subscriptions, and all resource types; indexed only evaluates types supporting tags and location. Portal defaults to all; Azure CLI defaults to null (equivalent to indexed).

azure-policy-displayname-128-description-512 [IN] OBSERVATION

Policy definition displayName max length is 128 characters; description max length is 512 characters.

azure-policy-effect-evaluation-order [IN] OBSERVATION

Azure Policy effect evaluation order: disabled → append/modify → deny → audit → manual → auditIfNotExists → denyAction.

azure-policy-evaluation-cycle-24-hours [IN] OBSERVATION

Azure Policy automatic compliance evaluation occurs every 24 hours; additional triggers include resource create/update, new/updated assignment, and policy update.

azure-policy-explicit-deny-system [IN] OBSERVATION

Azure Policy is an explicit deny system: if any assignment denies a resource, the only way to allow it is to modify the denying assignment.

azure-policy-max-20-params-definition-400-initiative [IN] OBSERVATION

Azure Policy parameter limits: 20 parameters per policy definition, 400 parameters per initiative; up to 1,000 policies per initiative.

azure-policy-max-400-notscopes-per-assignment [IN] OBSERVATION

Azure Policy supports up to 400 exclusions (notScopes) per assignment.

azure-policy-max-500-definitions-per-scope [IN] OBSERVATION

Azure Policy limits: 500 definitions per scope, 200 initiative definitions per scope (2,500 per tenant), 200 assignments per scope, 1,000 exemptions per scope, 400 notScopes per assignment.

azure-policy-metadata-property-limit-1024-chars [IN] OBSERVATION

Each Azure Policy metadata property (version, category, preview, deprecated, portalReview) is capped at 1024 characters.

azure-policy-mode-all-vs-indexed [IN] OBSERVATION

Policy definition mode all evaluates resource groups, subscriptions, and all resource types; indexed only evaluates types supporting tags and location. Portal defaults to all; Azure CLI defaults to null (equivalent to indexed).

azure-policy-rp-modes-fully-supported [IN] OBSERVATION

Fully supported Resource Provider modes for Azure Policy: Microsoft.Kubernetes.Data, Microsoft.KeyVault.Data, Microsoft.Network.Data.

azure-policy-rp-modes-kubernetes-keyvault-network [IN] OBSERVATION

Fully supported Resource Provider modes for Azure Policy: Microsoft.Kubernetes.Data, Microsoft.KeyVault.Data, Microsoft.Network.Data; RP modes use only audit, deny, and disabled effects.

azure-policy-single-effect-per-definition [IN] OBSERVATION

Each Azure Policy definition contains exactly one effect in its policyRule.

azure-policy-three-types-builtin-custom-static [IN] OBSERVATION

Policy policyType has three values (read-only, system-set): Builtin (Microsoft-maintained), Custom (customer-created), and Static (Regulatory Compliance with Microsoft ownership).

azure-policy-type-readonly-three-values [IN] OBSERVATION

Policy policyType is read-only (set by system): Builtin (Microsoft-provided), Custom (customer-created), or Static (Regulatory Compliance with Microsoft ownership).

azure-policy-versioning-major-minor-patch [IN] OBSERVATION

Azure Policy definitions use Major.Minor.Patch versioning: Major for breaking changes, Minor for minor rule/value changes, Patch for string/metadata/security fixes.

azure-policy-vs-rbac-state-vs-actions [IN] OBSERVATION

Azure Policy evaluates resource state; Azure RBAC evaluates user actions. Policy blocks non-compliant resources regardless of who has permission.

azure-private-dns-autoregistration-creates-a-records [IN] OBSERVATION

Autoregistration in Azure Private DNS creates A records pointing to VMs' private IP addresses; records are automatically created, updated, and deleted as VMs are provisioned or removed.

azure-private-dns-autoregistration-one-zone-per-vnet [IN] OBSERVATION

A VNet can be linked to only one private DNS zone for autoregistration, but multiple VNets can link to the same private zone.

azure-private-dns-avoid-local-domain [IN] OBSERVATION

Best practice: do not use .local as a private DNS zone domain because not all operating systems support it.

azure-private-dns-conditional-forwarding-requires-resolver [IN] OBSERVATION

Conditional forwarding from Azure to on-premises requires Azure DNS Private Resolver.

azure-private-dns-cross-vnet-no-peering [IN] OBSERVATION

Cross-VNet DNS resolution via private DNS zones works without VNet peering — only a virtual network link to the shared private zone is needed.

azure-private-dns-global-resource [IN] OBSERVATION

Azure Private DNS zone data is a global resource, resilient across regions — not tied to a single VNet or region.

azure-private-dns-no-custom-dns-servers [IN] OBSERVATION

Azure Private DNS resolves domain names within Azure virtual networks without needing custom DNS servers.

azure-private-dns-reverse-dns-non-autoreg-single-fqdn [IN] OBSERVATION

Reverse DNS for private IPs in non-autoregistration linked VNets returns only a single FQDN with the internal.cloudapp.net suffix.

azure-private-dns-reverse-dns-two-fqdns [IN] OBSERVATION

Reverse DNS for private IPs in autoregistration-enabled VNets returns two FQDNs: one with internal.cloudapp.net suffix and one with the private zone suffix.

azure-private-dns-split-horizon [IN] OBSERVATION

Azure Private DNS supports split-horizon DNS: a private and public DNS zone can share the same name, returning different answers depending on whether the query originates from inside the VNet or the public internet.

azure-private-dns-split-horizon-asymmetric-reverse [IN] OBSERVATION

Azure Private DNS supports split-horizon resolution where private and public zones share names, but reverse DNS behavior is asymmetric: autoregistration-enabled VNets return two FQDNs (internal.cloudapp.net + private zone), while non-autoregistration VNets return only the internal.cloudapp.net FQDN.

azure-private-dns-supported-record-types [IN] OBSERVATION

Azure Private DNS supports record types: A, AAAA, CNAME, MX, PTR, SOA, SRV, TXT.

azure-private-dns-vnet-link-required [IN] OBSERVATION

A virtual network link connects a VNet to a private DNS zone, granting VMs in that VNet full access to resolve all records in the zone.

azure-private-link-network-security-perimeter-ga [IN] OBSERVATION

Network Security Perimeter is GA in all public cloud regions and complements Private Link for scenarios involving public internet PaaS traffic, creating a secure logical boundary.

azure-regional-vm-no-zone-visibility [IN] OBSERVATION

A regional (non-zonal) VM has no visibility into which physical or logical zone it occupies, and a failure in any zone can potentially affect it.

azure-reservation-operational-flexibility [IN] OBSERVATION

Azure reservations combine financial commitment with three dimensions of operational flexibility: scope (which subscriptions receive the discount) can be changed after purchase, monthly and upfront payment options have identical total cost (no premium for installments), and reservations can be exchanged for the same resource type or refunded within the $50,000 rolling 12-month cap — reducing the risk of commitment lock-in.

azure-reservation-partial-coverage-extends-to-data-services [IN] OBSERVATION

Azure reservations' partial-coverage model extends consistently from compute to data services: VM reservations cover compute-only (not networking, storage, or Windows licensing), Blob reservations cover capacity-only (not bandwidth or transactions), and SQL reservations cover compute-only (plus zone-redundancy add-on for General Purpose), confirming partial coverage is a platform-wide billing architecture pattern, not a per-service exception.

azure-reservation-partial-coverage-full-flexibility [IN] OBSERVATION

Azure reservation strategy operates as a partial-coverage-full-flexibility model: reservations universally cover only the primary billable unit (compute for VMs/SQL, throughput for Cosmos DB, capacity for Blob, DBUs for Databricks) while providing three dimensions of operational flexibility (scope reassignment, splitting, exchange for same-type), requiring cost optimization to combine commitment planning for the covered dimension with separate management of uncovered costs.

azure-reservation-partial-coverage-platform-universal [IN] OBSERVATION

Azure reservations provide partial cost coverage across multiple services (VM compute, Blob capacity, SQL DTU/vCore, Cosmos DB throughput, Databricks DBU) — each covering only specific cost dimensions while leaving other dimensions at pay-as-you-go rates.

azure-reservation-prepayment-deducted-first [IN] OBSERVATION

Azure Reservation costs are deducted from Azure Prepayment (formerly monetary commitment) balance first; any overage is billed separately.

azure-reservation-software-plans-cover-software-not-infra [IN] OBSERVATION

Azure Reservation software plans (SUSE Linux, Red Hat, Azure Red Hat OpenShift) cover software costs only, not VM or infrastructure costs.

azure-reservations-applied-hourly-except-databricks [IN] OBSERVATION

All Azure Reservations are applied on an hourly basis except Azure Databricks.

azure-reservations-billing-only-no-runtime-impact [IN] OBSERVATION

Azure Reservations are purely a billing construct and do not affect the runtime state of resources.

azure-reservations-blob-capacity-only [IN] OBSERVATION

Azure Reservations for Blob Storage cover capacity only — not bandwidth or transaction costs.

azure-reservations-can-be-split-and-scope-changed [IN] OBSERVATION

Azure Reservations can be split into smaller parts after purchase, and the scope can be changed after purchase.

azure-reservations-can-be-split-post-purchase [IN] OBSERVATION

Azure Reservations can be split into smaller parts after purchase, and instance size flexibility can be changed post-purchase.

azure-reservations-cosmosdb-throughput-only [IN] OBSERVATION

Azure Reservations for Cosmos DB cover provisioned throughput only — not storage or networking costs.

azure-reservations-deduct-from-prepayment-first [IN] OBSERVATION

Azure Reservation costs deduct from Azure Prepayment (Monetary Commitment) balance first; overage is billed separately.

azure-reservations-exchange-same-type-or-refund [IN] OBSERVATION

Azure Reservations can be exchanged for the same resource type or refunded within the $50,000 USD rolling 12-month cap.

azure-reservations-exchangeable-and-splittable [IN] OBSERVATION

Azure Reservations can be exchanged for the same resource type, split into smaller parts, or refunded (up to $50,000 USD in a rolling 12-month window).

azure-reservations-exchangeable-same-type [IN] OBSERVATION

Azure Reservations can be exchanged for same-type reservations after purchase.

azure-reservations-monthly-upfront-same-cost [IN] OBSERVATION

Azure Reservation monthly and up-front payment options have the same total cost — no premium for monthly payments.

azure-reservations-monthly-upfront-same-total-cost [IN] OBSERVATION

Azure Reservation monthly and up-front payment options have the same total cost; there is no premium for choosing monthly payments.

azure-reservations-prepayment-deducted-first [IN] OBSERVATION

Azure Reservation costs are deducted from Azure Prepayment (formerly monetary commitment) balance first; overage is billed separately.

azure-reservations-refund-cap-50k-12-months [IN] OBSERVATION

Azure Reservations can be refunded up to $50,000 USD in a rolling 12-month window.

azure-reservations-scope-changeable-after-purchase [IN] OBSERVATION

Azure Reservation scope (which subscriptions/resource groups receive the discount) can be changed after purchase.

azure-reservations-scope-updatable-after-purchase [IN] OBSERVATION

Azure Reservation scope controls where savings apply and can be updated after purchase.

azure-reservations-splittable-after-purchase [IN] OBSERVATION

Azure Reservations can be split into smaller parts and have instance size flexibility changed after purchase.

azure-reservations-up-to-72-percent-discount [IN] OBSERVATION

Azure Reservations provide billing discounts of up to 72% off pay-as-you-go prices with 1-year or 3-year commitment terms.

azure-reserves-5-ips-per-subnet [IN] OBSERVATION

Azure reserves 5 IP addresses per subnet: first address (network), last address (broadcast), and 3 for Azure services.

azure-resource-manager-lock-prevents-account-deletion-not-data [IN] OBSERVATION

Resource Manager locks prevent storage account deletion but do not prevent data deletion within the account.

azure-revoke-service-sas-stored-access-policy [IN] OBSERVATION

To revoke a service SAS with a stored access policy: delete the policy, rename it, or set its expiry to the past.

azure-revoke-service-sas-via-stored-access-policy [IN] OBSERVATION

To revoke a service SAS with a stored access policy: delete the policy, rename it, or set its expiry to the past.

azure-revoke-user-delegation-sas-revoke-delegation-key [IN] OBSERVATION

To revoke a user delegation SAS, revoke the user delegation key, which invalidates all SAS tokens signed with that key.

azure-revoke-user-delegation-sas-revoke-key [IN] OBSERVATION

To revoke a user delegation SAS, you must revoke the user delegation key, which invalidates all SAS tokens signed with that key.

azure-revoke-user-delegation-sas-revokes-all [IN] OBSERVATION

To revoke a user delegation SAS, you revoke the user delegation key, which invalidates all SAS tokens signed with that key.

azure-sentinel-defender-store-in-log-analytics-workspaces [IN] OBSERVATION

Microsoft Sentinel and Microsoft Defender for Cloud both store their security data in Azure Monitor Log Analytics workspaces.

azure-service-endpoints-vs-private-link [IN] OBSERVATION

Service endpoints secure PaaS resources to the VNet over public endpoints; Private Link provides private access to a specific service instance via private IP.

azure-service-sas-without-stored-access-policy-cannot-be-revoked [IN] OBSERVATION

A service SAS not associated with a stored access policy cannot be revoked; best practice is to limit expiry to one hour or less.

azure-shared-disks-require-cluster-manager [IN] OBSERVATION

Shared managed disks (attached to multiple VMs simultaneously) require a cluster manager such as WSFC or Pacemaker.

azure-site-recovery-not-restricted-to-paired-regions [IN] OBSERVATION

Azure Site Recovery enables cross-region failover and is not restricted to paired regions.

azure-site-recovery-supports-four-replication-sources [IN] OBSERVATION

Azure Site Recovery supports replication for Azure VMs between regions, on-premises VMs, Azure Stack VMs, and physical servers.

azure-site-recovery-testable-failover [IN] OBSERVATION

Azure Site Recovery supports testable failover without impacting production workloads.

azure-soft-delete-separate-for-blobs-and-containers [IN] OBSERVATION

Soft delete is available for both blobs and containers as separate settings that must be enabled independently.

azure-software-plans-cover-software-not-infra [IN] OBSERVATION

Azure software plan reservations (SUSE Linux, Red Hat, Azure Red Hat OpenShift) cover software costs only, not VM or infrastructure costs.

azure-spot-arg-pricing-90d-eviction-28d [IN] OBSERVATION

Azure Resource Graph Spot pricing history covers 90 days; eviction rate data covers 28 days via the SpotResources table.

azure-spot-pricing-history-via-resource-graph [IN] OBSERVATION

Azure Spot VM pricing history (90 days) and eviction rates (28 days) can be queried programmatically via the SpotResources table in Azure Resource Graph.

azure-spot-vm-all-regions-except-21vianet [IN] OBSERVATION

Spot VMs are available in all Azure regions except Microsoft Azure operated by 21Vianet.

azure-spot-vm-arg-pricing-90d-eviction-28d [IN] OBSERVATION

Azure Resource Graph provides 90 days of Spot VM pricing history and 28 days of eviction rate data via the SpotResources table.

azure-spot-vm-b-series-not-supported [IN] OBSERVATION

B-series and promo-version VM sizes are not supported for Spot VMs.

azure-spot-vm-cannot-convert-after-creation [IN] OBSERVATION

Spot VMs cannot be converted to standard VMs or vice versa after creation; the Spot flag is set only at creation time.

azure-spot-vm-compound-constraint-envelope [IN] OBSERVATION

Azure Spot VM viability is bounded by a compound constraint envelope: operational constraints (eviction with ~30s notice, separate quota pool, no auto-restart, deallocate-to-reprice) combine with workload exclusions (no B-series, no promo SKUs) — a workload must tolerate all constraints simultaneously, not just individually.

azure-spot-vm-default-eviction-policy-deallocate [IN] OBSERVATION

The default eviction policy for Azure Spot VMs is Deallocate (not Delete); deallocated Spot VMs still consume quota and incur storage charges.

azure-spot-vm-evicted-not-auto-restarted [IN] OBSERVATION

Evicted Spot VMs are not automatically restarted even if the spot price drops below the configured max price again.

azure-spot-vm-eviction-rate-per-hour-7day-trailing [IN] OBSERVATION

Spot VM eviction rates represent a per-hour probability of eviction based on trailing 7-day historical data.

azure-spot-vm-eviction-rate-per-hour-trailing-7d [IN] OBSERVATION

Spot VM eviction rate is a per-hour probability (e.g., 10% = 10% chance of eviction in the next hour) based on trailing 7-day history.

azure-spot-vm-eviction-rate-per-hour-trailing-7day [IN] OBSERVATION

Spot VM eviction rate is expressed as a per-hour probability based on trailing 7-day historical data.

azure-spot-vm-max-price-change-requires-deallocation [IN] OBSERVATION

Spot VM max price can only be changed after the VM is deallocated.

azure-spot-vm-max-price-minus-1-no-price-eviction [IN] OBSERVATION

Setting a Spot VM's max price to -1 prevents price-based eviction; the VM is charged at the lesser of current spot price or standard price.

azure-spot-vm-must-deallocate-to-change-max-price [IN] OBSERVATION

A Spot VM must be deallocated before its maximum price can be changed.

azure-spot-vm-no-sla-30s-eviction [IN] OBSERVATION

Azure Spot VMs have no SLA and can be evicted with approximately 30 seconds' notice via Azure Scheduled Events.

azure-spot-vm-not-auto-restarted-after-eviction [IN] OBSERVATION

Evicted Spot VMs are not automatically restarted, even if the spot price drops below the configured max price again.

azure-spot-vm-not-available-21vianet [IN] OBSERVATION

Azure Spot VMs are available in all regions except Microsoft Azure operated by 21Vianet.

azure-spot-vm-operational-constraints [IN] OBSERVATION

Azure Spot VM constraints compound: the default Deallocate eviction policy preserves disks but continues consuming quota from a separate Spot-specific pool, evicted VMs are never automatically restarted even when prices drop below the configured maximum, and setting max price to -1 prevents only price-based eviction (capacity eviction remains possible) — operators must build explicit recovery automation and quota monitoring.

azure-spot-vm-separate-quota-pool [IN] OBSERVATION

Spot VMs use a separate quota pool from standard VMs, shared between Spot VMs and Spot scale-set instances.

azure-spot-vm-supported-offer-types [IN] OBSERVATION

Spot VMs are supported for Enterprise Agreement, Pay-as-you-go (003P), Sponsored (0036P/0136P), and CSP offer types.

azure-sql-reservation-compute-only [IN] OBSERVATION

SQL Database and SQL Managed Instance reservations cover compute costs only (plus zone-redundancy add-on for General Purpose tier).

azure-sql-service-endpoint-same-region-only [IN] OBSERVATION

For Azure SQL Database, service endpoint traffic applies only within the same region.

azure-sql-service-endpoints-same-region-only [IN] OBSERVATION

Azure SQL Database service endpoints apply only within the VNet's region.

azure-standard-hdd-os-disk-retiring-sep-2028 [IN] OBSERVATION

Standard HDD as an OS disk type is retiring on September 8, 2028.

azure-standard-hdd-os-disk-retiring-sept-2028 [IN] OBSERVATION

Standard HDD as OS disk is retiring on September 8, 2028.

azure-storage-anonymous-read-access-disable-by-default [IN] OBSERVATION

Anonymous read access on Azure Blob Storage should be disabled unless explicitly required; it grants read-only access to any client and is a common security misconfiguration.

azure-storage-anonymous-read-access-disabled-recommended [IN] OBSERVATION

Anonymous read access on Azure Blob Storage should be disabled by default; it grants read-only access to any client and is a common security misconfiguration.

azure-storage-disallow-cross-tenant-object-replication [IN] OBSERVATION

Cross-tenant object replication can be disallowed to restrict replication policies to same-tenant storage accounts only.

azure-storage-encryption-at-rest-automatic [IN] OBSERVATION

All Azure Storage data is automatically encrypted at rest; customers can optionally manage their own keys via Azure Key Vault.

azure-storage-encrypts-all-data-at-rest-by-default [IN] OBSERVATION

Azure Storage encrypts all data at rest by default using Microsoft-managed keys.

azure-storage-firewall-blocks-all-by-default [IN] OBSERVATION

When Azure Storage firewall rules are enabled, all requests are blocked by default — exceptions must be added for trusted Microsoft services.

azure-storage-firewall-trusted-microsoft-services-exception [IN] OBSERVATION

When enabling storage account firewall rules, an exception for trusted Microsoft services should be added to avoid blocking Azure portal, logging, and metrics.

azure-storage-four-auth-methods [IN] OBSERVATION

Azure Storage supports four authorization methods: Microsoft Entra ID (recommended), Shared Key, SAS tokens, and AD DS (for NetApp Files).

azure-storage-private-endpoints-assign-private-ip [IN] OBSERVATION

Private endpoints assign a private IP from a VNet to the storage account, routing all traffic over a private link.

azure-storage-private-endpoints-private-ip-from-vnet [IN] OBSERVATION

Private endpoints assign a private IP from a VNet to the storage account, routing all traffic over a private link.

azure-storage-require-secure-transfer-https-only [IN] OBSERVATION

Secure transfer can be enforced on storage accounts via the supportsHttpsTrafficOnly: true ARM template setting, requiring HTTPS-only connections.

azure-storage-resource-manager-lock-does-not-protect-data [IN] OBSERVATION

Azure Resource Manager locks protect the storage account from deletion but do NOT prevent data within the account from being deleted.

azure-storage-secure-transfer-requires-https [IN] OBSERVATION

The secure transfer setting on a storage account requires HTTPS for all requests.

azure-suse-redhat-plans-software-only [IN] OBSERVATION

SUSE and Red Hat software plans cover software costs only — not underlying VM compute usage.

azure-system-assigned-identity-lifecycle [IN] OBSERVATION

System-assigned managed identity is deleted automatically with its parent resource and cannot be shared across resources (1:1 relationship).

azure-system-assigned-identity-sp-name-matches-resource [IN] OBSERVATION

System-assigned managed identity service principal name matches the Azure resource name; for deployment slots the pattern is <app-name>/slots/<slot-name>.

azure-table-storage-part-of-cosmos-db [IN] OBSERVATION

Azure Table Storage is now part of Azure Cosmos DB; Cosmos DB for Table offers throughput-optimized tables, global distribution, and automatic secondary indexes.

azure-temp-disk-drive-letters-windows-d-linux-dev-resource [IN] OBSERVATION

Windows temporary disk is drive D; Linux temporary disk is /dev/disk/azure/resource.

azure-temp-disk-path-linux-resource-windows-d [IN] OBSERVATION

Temporary disk paths: Linux = /dev/disk/azure/resource, Windows = drive D.

azure-temp-disk-paths-linux-resource-windows-d [IN] OBSERVATION

Temporary disk paths: Linux = /dev/disk/azure/resource, Windows = drive D.

azure-temp-disk-paths-linux-windows [IN] OBSERVATION

Temporary disk paths: Linux = /dev/disk/azure/resource, Windows = drive D.

azure-temp-disk-v5-plus-auto-encrypt [IN] OBSERVATION

VMs v5 and newer automatically encrypt temporary and ephemeral OS disks at rest.

azure-temporary-disk-not-managed-disk [IN] OBSERVATION

The temporary disk is not a managed disk and data can be lost on maintenance events, redeployment, or VM stop.

azure-three-availability-zones-per-supported-region [IN] OBSERVATION

There are exactly 3 Availability Zones per supported Azure region, each with distinct power, network, and cooling.

azure-tls-enforcement-universal-pattern [IN] OBSERVATION

Multiple Azure services enforce TLS for data in transit: Azure SQL enforces TLS connections, Redis recommends TLS 1.2 minimum, App Service supports TLS 1.2 configuration, and Key Vault uses TLS for API access — establishing a common encryption-in-transit pattern across the platform.

azure-traffic-manager-dns-based-global [IN] OBSERVATION

Azure Traffic Manager is a DNS-based (not network-level) traffic load balancer operating at global scope across Azure regions.

azure-user-assigned-identity-shareable [IN] OBSERVATION

User-assigned managed identities have an independent lifecycle, must be explicitly deleted, and can be shared across multiple Azure resources.

azure-user-delegation-sas-uses-entra-credentials [IN] OBSERVATION

User delegation SAS is the most secure SAS type because it uses Microsoft Entra credentials rather than account keys.

azure-v5-plus-vms-auto-encrypt-temp-disks [IN] OBSERVATION

VMs v5+ automatically encrypt temporary disks at rest without additional configuration.

azure-vhd-direct-upload-max-32-tib [IN] OBSERVATION

VHDs can be uploaded up to 32 TiB directly to managed disks without attaching to a VM.

azure-vm-associated-resources-billed-separately [IN] OBSERVATION

Each Azure VM creates associated resources (VNet, NIC, IP addresses, NSG, OS disk, optional data disks) that are each billed separately from the VM compute.

azure-vm-availability-zones-sla-99-99 [IN] OBSERVATION

Azure VMs achieve a 99.99% SLA when 2+ instances are deployed across 2+ Availability Zones in the same region.

azure-vm-b-series-cpu-credit-model [IN] OBSERVATION

B-series is the only burstable VM type — it uses a CPU credit model that accumulates credits below baseline and throttles when credits are exhausted.

azure-vm-best-practice-separate-data-disk [IN] OBSERVATION

Best practice is to keep data on a separate managed disk from the OS disk for recoverability and independent management.

azure-vm-billed-per-minute [IN] OBSERVATION

Azure VMs are billed per-minute (not per-hour); for partial hours only minutes used are charged.

azure-vm-billing-per-minute [IN] OBSERVATION

Azure VMs are billed per-minute for partial hours; storage is billed separately.

azure-vm-boot-diagnostics-enabled-by-default [IN] OBSERVATION

Boot diagnostics is enabled by default when creating a VM in the Azure portal.

azure-vm-cloud-init-linux [IN] OBSERVATION

Cloud-init is supported on most Azure Linux distributions for automated VM provisioning at first boot.

azure-vm-cloud-init-supported-linux-vmss [IN] OBSERVATION

Cloud-init is supported across most Linux distributions for automated deployment and configuration on both VMs and VMSS.

azure-vm-cloud-init-supported-most-linux [IN] OBSERVATION

Cloud-init is supported on most Azure Linux distributions for automated VM provisioning.

azure-vm-cost-three-dimensions [IN] OBSERVATION

Azure VM cost is determined by multiple dimensions: compute (instance family and size), OS licensing (with Hybrid Benefit for existing licenses), and reservations (providing discounts on the compute dimension while other dimensions remain at standard rates).

azure-vm-d-family-default-general-purpose [IN] OBSERVATION

General Purpose D-family is the default recommendation for most production workloads, offering balanced CPU-to-memory ratio.

azure-vm-d-suffix-local-nvme [IN] OBSERVATION

VM sizes with 'd' in the name (e.g., Dadsv6, Eadsv6) include local NVMe ephemeral storage with sub-millisecond latency, capped at 2,040 GiB, not persisted on deallocation.

azure-vm-d-suffix-local-nvme-ephemeral [IN] OBSERVATION

VM sizes with 'd' in the name (e.g., Dadsv6) include local NVMe ephemeral disks that are not persisted across deallocation, capped at 2,040 GiB.

azure-vm-data-residency-single-region-sea-brazil [IN] OBSERVATION

Single-region data residency storage is only available in Southeast Asia (Singapore) and Brazil South; all other regions store data at the Geo level.

azure-vm-dc-ec-confidential-computing [IN] OBSERVATION

DC and EC VM families provide confidential computing with hardware-based Trusted Execution Environments (TEEs).

azure-vm-default-core-quota-20-per-region [IN] OBSERVATION

Default Azure VM quota is 20 total cores per region per subscription, which can be raised via support ticket.

azure-vm-default-quota-20-cores-per-region [IN] OBSERVATION

Azure subscriptions have a default quota of 20 VM total cores per region, which can be increased via support ticket.

azure-vm-f-family-compute-optimized-high-cpu-ratio [IN] OBSERVATION

F-family VMs are compute optimized with a high CPU-to-memory ratio, suited for batch processing, web servers, and analytics.

azure-vm-f-family-high-cpu-to-memory-ratio [IN] OBSERVATION

F-family VMs are compute optimized with a high CPU-to-memory ratio, suited for batch processing, web servers, and analytics.

azure-vm-fx-family-high-single-core-performance [IN] OBSERVATION

FX-family VMs target specialized compute with high single-core performance for EDA, financial modeling, and scientific simulations.

azure-vm-gpu-families-nd-nc-nv-ngads [IN] OBSERVATION

Azure GPU VM families serve distinct purposes: ND for AI training/inference, NC for GPU compute, NV for visualization/VDI, NGads for gaming.

azure-vm-gpu-nc-compute-nd-training-nv-visualization [IN] OBSERVATION

Azure GPU VM families: NC-series for general GPU compute, ND-series for deep learning training/inference, NV-series for visualization and streaming.

azure-vm-gpu-nd-training-nc-compute-nv-visualization [IN] OBSERVATION

GPU VM families: ND for AI training/inference, NC for compute-intensive GPU, NV for visualization/remote graphics, NGads for gaming.

azure-vm-guest-metrics-require-ama-plus-dcr [IN] OBSERVATION

Guest OS metrics require Azure Monitor Agent (AMA) plus a data collection rule (DCR) to be configured.

azure-vm-hb-family-infiniband-rdma-mpi [IN] OBSERVATION

HB-family VM sizes support InfiniBand, RDMA, and MPI for tightly coupled parallel HPC workloads.

azure-vm-host-metrics-collected-automatically [IN] OBSERVATION

VM host metrics (CPU, network, disk from Hyper-V session) are collected automatically with no setup required.

azure-vm-hpc-hb-memory-hc-compute-hx-extreme [IN] OBSERVATION

Azure HPC VM families: HB for memory-bandwidth-sensitive HPC (weather, CFD), HC for dense computation, HX for extreme memory workloads (EDA).

azure-vm-insights-auto-installs-ama-creates-dcr [IN] OBSERVATION

VM Insights automatically installs Azure Monitor Agent and creates a default DCR; it is the recommended starting point for VM monitoring.

azure-vm-insights-map-populates-four-tables [IN] OBSERVATION

VM Insights Map feature populates four tables: VMBoundPort, VMComputer, VMConnection, and VMProcess; the main DCR writes to the InsightsMetrics table.

azure-vm-insights-tables [IN] OBSERVATION

VM Insights populates five tables: InsightsMetrics (performance), VMBoundPort, VMComputer, VMConnection, and VMProcess (dependency map data).

azure-vm-l-family-high-disk-throughput-io [IN] OBSERVATION

L-family VMs are Storage Optimized for high disk throughput and IO, suited for NoSQL databases (Cassandra, MongoDB), Redis, and data warehousing.

azure-vm-l-family-storage-optimized-high-io [IN] OBSERVATION

L-family VMs are storage optimized with high disk throughput and IO, ideal for NoSQL databases (Cassandra, MongoDB, Redis).

azure-vm-l-family-storage-optimized-high-throughput [IN] OBSERVATION

L-family VMs are storage optimized for high disk throughput and IO workloads such as Cassandra, MongoDB, and Redis.

azure-vm-m-family-largest-memory [IN] OBSERVATION

M-family VMs offer the largest memory capacities in Azure (up to multiple TB of RAM) for workloads like SAP HANA and large databases.

azure-vm-managed-disks-recommended-convertible [IN] OBSERVATION

Azure Managed Disks are recommended over unmanaged disks for production workloads; unmanaged disks can be converted to managed disks.

azure-vm-move-between-vnets-requires-recreate [IN] OBSERVATION

Moving a VM between VNets requires deleting and recreating the VM (disks can be retained).

azure-vm-nic-count-limited-by-size [IN] OBSERVATION

The number of NICs attached to a VM is limited by the VM size; there is no separate cost for NICs.

azure-vm-nic-count-limited-by-vm-size [IN] OBSERVATION

Virtual NICs have no separate cost but the number of NICs a VM can have is limited by VM size.

azure-vm-nsg-local-disk-no-cost [IN] OBSERVATION

NSGs and local temporary disks have no additional cost; NICs have no separate cost.

azure-vm-nsg-nic-no-charge [IN] OBSERVATION

Azure NSGs and NICs have no additional charge; NIC count limits are determined by VM size.

azure-vm-os-disk-default-127gib [IN] OBSERVATION

Azure VM OS disk default size is approximately 127 GiB.

azure-vm-os-disk-default-size-127gib [IN] OBSERVATION

Azure VM OS disks have a default size of approximately 127 GiB (smaller for some images).

azure-vm-os-disk-typically-127-gib [IN] OBSERVATION

Azure VM OS disk is typically 127 GiB (smaller for some images).

azure-vm-performance-diagnostics-continuous-and-ondemand [IN] OBSERVATION

Azure VM Performance Diagnostics supports two modes: continuous (5-second intervals, preview) and on-demand (point-in-time deep analysis).

azure-vm-reservation-partial-cost-coverage [IN] OBSERVATION

Azure reservations provide only partial cost coverage with explicit exclusions: VM reservations cover compute only (not networking, storage, or Windows licensing), and blob storage reservations cover capacity only (not bandwidth or transactions) — requiring separate cost management for excluded dimensions.

azure-vm-reservations-cover-compute-only [IN] OBSERVATION

VM reservations cover compute costs only — networking, storage, Windows licensing, and additional software are not included.

azure-vm-s-suffix-premium-storage [IN] OBSERVATION

The 's' suffix in Azure VM size names indicates Premium Storage (SSD) capability.

azure-vm-six-size-categories [IN] OBSERVATION

Azure VM sizes are categorized into 6 types: General Purpose (A/B/D/DC), Compute Optimized (F/FX), Memory Optimized (E/Eb/EC/M), Storage Optimized (L), GPU Accelerated (N), and FPGA Accelerated (NP).

azure-vm-size-cpu-vendor-letters [IN] OBSERVATION

In VM size names, no CPU letter indicates Intel x86-64, 'a' indicates AMD, and 'p' indicates ARM (Cobalt/Ampere Altra).

azure-vm-size-series-vs-size-naming [IN] OBSERVATION

Series name omits vCPU count (e.g., DCadsv5); full size name includes Standard prefix and vCPU count (e.g., StandardDC8ads_v5).

azure-vm-size-version-higher-is-newer [IN] OBSERVATION

VM size version numbers (v5, v6, v7) indicate hardware generations — higher is newer; the first version may omit the version number.

azure-vm-size-version-numbers-indicate-hw-generation [IN] OBSERVATION

VM size version numbers (v5, v6, v7) indicate hardware generations — higher is newer; first-generation sizes may omit the version number.

azure-vm-sizes-with-d-include-local-nvme-ephemeral [IN] OBSERVATION

VM sizes with 'd' in the name include local NVMe ephemeral storage; data is not persisted across deallocation.

azure-vm-specialized-compute-family-taxonomy [IN] OBSERVATION

Azure VM families form a specialized compute taxonomy where each series is purpose-built for a distinct workload profile: F-series provides high CPU-to-memory ratio for batch and web workloads, GPU families differentiate by use case (NC for general compute, ND for deep learning training, NV for visualization), and HPC families differentiate by bottleneck type (HB for memory bandwidth, HC for dense computation, HX for extreme memory), requiring workload characterization before VM family selection.

azure-vm-storage-priced-separately-from-compute [IN] OBSERVATION

Azure VM storage (OS disk, data disks) is priced and charged separately from compute costs.

azure-vm-temp-disk-drive-letters [IN] OBSERVATION

Windows temporary disk is drive D; Linux temporary disk is at /dev/disk/azure/resource.

azure-vm-trusted-launch-default-gen2 [IN] OBSERVATION

Trusted Launch (secure boot + vTPM) is becoming the default for new Gen2 VMs (preview feature called TLaD).

azure-vm-trusted-launch-default-gen2-preview [IN] OBSERVATION

Trusted Launch as Default (TLaD) is a preview feature where new Gen 2 VMs default to Trusted Launch with secure boot and vTPM enabled.

azure-vm-v5-plus-auto-encrypt-temp-disk [IN] OBSERVATION

VMs v5+ automatically encrypt temporary disks at rest without additional configuration.

azure-vm-v5-plus-auto-encrypt-temp-disks [IN] OBSERVATION

VMs v5 and newer automatically encrypt temporary and ephemeral OS disks at rest.

azure-vm-windows-licensing-port-1688 [IN] OBSERVATION

Windows VM licensing uses outbound port 1688 to connect to the Key Management Service.

azure-vmss-flexible-max-1000-vms [IN] OBSERVATION

VMSS Flexible orchestration supports up to 1,000 VMs with standard marketplace or Azure Compute Gallery images; managed images cap at 600.

azure-vmss-flexible-supports-mixed-spot-ondemand [IN] OBSERVATION

VMSS Flexible orchestration supports mixing Spot and on-demand VM instances within the same scale set.

azure-vmss-flexible-supports-spot-and-ondemand-mix [IN] OBSERVATION

VMSS Flexible orchestration mode supports mixing Spot and on-demand VMs together in the same scale set.

azure-vmss-flexible-supports-spot-and-ondemand-mixed [IN] OBSERVATION

VMSS Flexible orchestration supports mixing Spot and on-demand VM instances together in the same scale set.

azure-vmss-max-1000-vms-marketplace-images [IN] OBSERVATION

Virtual Machine Scale Sets support up to 1,000 VMs when using Marketplace or Compute Gallery images with managed disks.

azure-vmss-no-additional-cost [IN] OBSERVATION

There is no extra cost for the VMSS resource itself — you pay only for underlying compute, network, and storage resources.

azure-vmss-orchestration-mode-immutable [IN] OBSERVATION

VMSS orchestration mode (Uniform or Flexible) is set at creation time and cannot be changed later.

azure-vmss-requires-availability-zones-for-dc-protection [IN] OBSERVATION

Scale sets alone do not protect against datacenter failure — Availability Zones must be used for cross-datacenter protection.

azure-vmss-same-base-image-and-config [IN] OBSERVATION

All VM instances in a scale set are created from the same base OS image and configuration.

azure-vmss-same-base-image-config [IN] OBSERVATION

All VM instances in a scale set are created from the same base OS image and configuration.

azure-vnet-free [IN] OBSERVATION

Azure Virtual Network itself is free; standard charges apply only to resources deployed within it.

azure-vnet-peering-address-resize-no-downtime [IN] OBSERVATION

Address space can be added, modified, or deleted on peered VNets without downtime; peers must be synced after each resize. Not supported when peered with a classic VNet.

azure-vnet-peering-charges-ingress-egress [IN] OBSERVATION

VNet peering incurs a nominal fee on both ingress and egress traffic.

azure-vnet-peering-cross-subscription-tenant [IN] OBSERVATION

VNet peering works across subscriptions, Microsoft Entra tenants, deployment models (ARM and classic), and regions.

azure-vnet-peering-default-limit-500 [IN] OBSERVATION

Default VNet peering limit is 500 peered VNets per VNet; increased to 1,000 with Azure Virtual Network Manager connectivity configuration.

azure-vnet-peering-enterprise-backbone-connectivity [IN] OBSERVATION

VNet peering provides inter-VNet connectivity over Microsoft's backbone network with non-transitive routing, symmetric bandwidth across regions, and support for cross-subscription/cross-tenant topologies.

azure-vnet-peering-gateway-transit-one-gateway [IN] OBSERVATION

A VNet using gateway transit with a remote gateway cannot have its own gateway; the gateway must be in a Resource Manager model VNet.

azure-vnet-peering-ingress-egress-charges [IN] OBSERVATION

VNet peering incurs nominal charges for both ingress and egress traffic on peering connections; gateway transit incurs peering charges on the spoke VNet.

azure-vnet-peering-microsoft-backbone [IN] OBSERVATION

VNet peering traffic stays on the Microsoft backbone — no encryption, gateways, or public internet needed.

azure-vnet-peering-no-downtime [IN] OBSERVATION

No downtime occurs when creating VNet peering connections.

azure-vnet-peering-not-transitive [IN] OBSERVATION

VNet peering is not transitive: if A peers with B and B peers with C, A and C are not automatically connected — service chaining or mesh peering is required.

azure-vnet-peering-same-region-latency-equal [IN] OBSERVATION

Latency between VMs in peered VNets within the same region equals latency within a single VNet; throughput is limited only by the VM's allowed bandwidth, not the peering.

azure-vnet-peering-same-region-same-latency [IN] OBSERVATION

Latency between VMs in peered VNets within the same region equals latency within a single VNet.

azure-vnet-peering-subnet-level [IN] OBSERVATION

Subnet peering allows peering of specific subnets rather than entire VNet address spaces.

azure-vnet-peering-subnet-peering [IN] OBSERVATION

Subnet peering allows peering of specific subnets rather than entire VNets, narrowing the scope of connectivity.

azure-vnet-routing-never-associate-default-route-to-gatewaysubnet [IN] OBSERVATION

Never associate a route table with a 0.0.0.0/0 route to GatewaySubnet for VPN gateways — it will break gateway functionality.

azure-vnet-routing-service-tag-priority-order [IN] OBSERVATION

When multiple service tag routes match, priority is: regional tags (e.g., Storage.EastUS) > top-level tags (e.g., Storage) > AzureCloud regional tags > AzureCloud tag.

azure-vnet-service-endpoints-extend-private-address-space [IN] OBSERVATION

VNet service endpoints extend a VNet's private address space and identity to Azure PaaS services (e.g., Storage, SQL Database) over a direct connection on the Azure backbone.

azure-vnet-service-endpoints-extend-private-space [IN] OBSERVATION

VNet service endpoints extend a VNet's private address space to Azure PaaS resources (e.g., Storage, SQL Database) over a direct connection, securing those services to the VNet.

azure-vnet-subnets-span-all-azs [IN] OBSERVATION

VNets and subnets span all availability zones in a region automatically — no need to divide by AZ.

azure-vpn-gateway-custom-dns-must-include-168 [IN] OBSERVATION

When using VPN Gateway with custom DNS servers, the Azure DNS IP 168.63.129.16 must be included in the DNS server list.

azure-vpn-gateway-custom-dns-requires-azure-dns-ip [IN] OBSERVATION

When using VPN Gateway with custom DNS servers, 168.63.129.16 must be included in the DNS server list.

azuresql-99-99-availability-sla [IN] OBSERVATION

Azure SQL Database offers a 99.99% availability SLA

azuresql-99-99-sla [IN] OBSERVATION

Azure SQL Database guarantees 99.99% SLA availability (up to 99.995% per the Azure SQL family overview).

azuresql-active-geo-replication-4-secondaries [IN] OBSERVATION

Azure SQL Database active geo-replication supports up to 4 readable secondary databases in same or different regions

azuresql-always-encrypted-client-side-keys [IN] OBSERVATION

Always Encrypted keeps encryption keys on the client side; even DBAs cannot see plaintext data.

azuresql-always-encrypted-protects-from-dbas [IN] OBSERVATION

Always Encrypted keeps encryption keys outside the database engine, protecting data even from database administrators — data is encrypted at rest and in use.

azuresql-audit-destinations-storage-monitor-eventhubs [IN] OBSERVATION

SQL Auditing writes audit logs to customer-owned Azure storage, Azure Monitor logs, or Event Hubs.

azuresql-automatic-tuning-index-and-plan [IN] OBSERVATION

Azure SQL Database automatic tuning includes automatic index management and automatic plan correction.

azuresql-automatic-tuning-index-plan [IN] OBSERVATION

Azure SQL Database automatic tuning includes automatic index management and automatic plan correction.

azuresql-backup-compression-3-4x-tde-log-exception [IN] OBSERVATION

Azure SQL Database backups are compressed with typical 3–4x ratio, but TDE-encrypted transaction log backups are NOT compressed.

azuresql-backup-dr-planning-constraints [IN] OBSERVATION

Azure SQL backup has three critical constraints that compound during DR planning: TDE prevents transaction log backup compression (reducing backup storage efficiency), geo-restore is disabled when backup redundancy is set to LRS or ZRS (forcing a GRS/GZRS cost commitment for geo-recovery), and server deletion permanently destroys all databases with only LTR blob backups surviving — making redundancy selection, encryption configuration, and operational procedures interdependent DR concerns.

azuresql-backup-free-storage-equals-max-data-size [IN] OBSERVATION

Azure SQL Database provides free backup storage equal to the provisioned max data size; excess is billed per GB/month.

azuresql-backup-frequency [IN] OBSERVATION

Azure SQL Database automated backups: full weekly, differential every 12h (vCore) or 24h (DTU), transaction log ~10 minutes

azuresql-backup-redundancy-change-48h-future-only [IN] OBSERVATION

Azure SQL Database backup redundancy changes apply only to future backups, may take up to 48 hours, and existing backups remain on original storage.

azuresql-backup-str-max-35-days-basic-7 [IN] OBSERVATION

Azure SQL Database short-term retention (STR) is configurable from 1–35 days (default 7), except Basic tier which is limited to 1–7 days.

azuresql-basic-tier-max-retention-7-days [IN] OBSERVATION

Azure SQL Database Basic tier short-term backup retention maximum is 7 days (vs 35 days for other tiers)

azuresql-bc-backups-on-secondary-replicas [IN] OBSERVATION

Azure SQL Database Business Critical tier runs automated backups on secondary replicas by default, offloading the primary with no extra cost.

azuresql-best-practice-custom-roles-least-privilege [IN] OBSERVATION

Best practice: use custom database roles with least privilege; never assign permissions directly to users; limit db_owner to administrative users only.

azuresql-best-practice-roles-least-privilege [IN] OBSERVATION

Best practice: assign users to database roles with least privilege; avoid direct permission grants to users; limit db_owner role to administrative users only.

azuresql-business-critical-backups-from-secondary [IN] OBSERVATION

Azure SQL Database Business Critical tier takes backups from secondary replicas by default to offload the primary

azuresql-business-critical-backups-on-secondary [IN] OBSERVATION

Azure SQL Database Business Critical tier runs automated backups on secondary replicas by default, offloading the primary with no extra cost.

azuresql-clr-not-in-sql-database [IN] OBSERVATION

CLR support is not available in Azure SQL Database but is supported in Managed Instance.

azuresql-cmk-tde-server-or-database-level [IN] OBSERVATION

Customer-managed keys (CMK) for TDE can be configured at the logical server level (all databases) or at the individual database level.

azuresql-connectivity-architecture-diverges-by-deployment-model [IN] OBSERVATION

Azure SQL deployment model selection determines both security capabilities and connectivity architecture in tandem: Managed Instance provides native VNet integration with private IP and TCP-only protocol but lacks Network Security Perimeter support, while SQL Database requires Private Link for private connectivity but gains NSP — forcing fundamentally different network designs and security tooling per deployment model.

azuresql-cross-subscription-restore-not-supported [IN] OBSERVATION

Azure SQL Database cross-subscription restore is not supported for PITR, geo-restore, or LTR; workaround is restore then Resource Move

azuresql-default-backup-redundancy-grs [IN] OBSERVATION

Azure SQL Database default backup storage redundancy is geo-redundant (GRS); GZRS is Microsoft-recommended for maximum resilience

azuresql-default-pitr-retention-7-days [IN] OBSERVATION

Azure SQL Database default PITR retention is 7 days (configurable 1–35 days; Basic tier limited to 1–7 days)

azuresql-deleted-db-restore-same-server-only [IN] OBSERVATION

Azure SQL Database deleted database restore is only possible on the same server where the original was created

azuresql-do-not-set-trustservercertificate-true [IN] OBSERVATION

Setting TrustServerCertificate=True in production disables protection against man-in-the-middle attacks; always use TrustServerCertificate=False.

azuresql-dynamic-data-masking-no-stored-change [IN] OBSERVATION

Dynamic Data Masking masks data in query results but does not change the underlying stored data.

azuresql-dynamic-scaling-manual-no-downtime [IN] OBSERVATION

Azure SQL Database dynamic scaling is manual with no downtime; automatic autoscaling requires the serverless compute tier.

azuresql-dynamic-scaling-manual-not-auto [IN] OBSERVATION

Azure SQL Database dynamic scaling is manual with no downtime; automatic autoscaling requires serverless tier

azuresql-dynamic-scaling-vs-autoscaling [IN] OBSERVATION

Azure SQL Database dynamic scaling is manual (no downtime) while autoscaling is automatic and only available via the serverless compute tier.

azuresql-elastic-pool-shared-resources [IN] OBSERVATION

Azure SQL Database elastic pools share vCore/DTU resources across multiple databases, optimizing cost for SaaS multitenant patterns with variable workloads

azuresql-elastic-pool-shared-resources-saas [IN] OBSERVATION

Azure SQL Database elastic pools share resources across multiple databases, ideal for SaaS multitenant patterns with unpredictable usage.

azuresql-elastic-pools-vs-instance-pools [IN] OBSERVATION

Elastic pools are for Azure SQL Database; instance pools are for Azure SQL Managed Instance.

azuresql-features-ship-first [IN] OBSERVATION

New SQL Server features release to Azure SQL Database first, then to on-premises SQL Server

azuresql-firewall-rules-not-apply-to-mi [IN] OBSERVATION

IP and VNet firewall rules do NOT apply to Azure SQL Managed Instance; it uses its own networking configuration.

azuresql-first-full-backup-30-minutes [IN] OBSERVATION

Azure SQL Database completes its first full backup within approximately 30 minutes of database creation.

azuresql-free-backup-storage-equals-max-data-size [IN] OBSERVATION

Azure SQL Database free backup storage equals the provisioned maximum data size; excess is billed per GB/month

azuresql-geo-restore-requires-grs-or-gzrs [IN] OBSERVATION

Azure SQL Database geo-restore is disabled when backup redundancy is set to LRS or ZRS

azuresql-gzrs-restore-inherits-unless-overridden [IN] OBSERVATION

Restoring an Azure SQL Database from a GZRS source inherits GZRS redundancy unless explicitly overridden; the restore fails if the target region doesn't support GZRS.

azuresql-ha-business-critical-always-on-ag-replicas [IN] OBSERVATION

Business Critical / Premium tier uses Always On availability groups with 1 primary and up to 3 secondary replicas with co-located compute and SSD storage.

azuresql-ha-business-critical-read-scale-out-no-extra-cost [IN] OBSERVATION

Read Scale-Out is a Business Critical / Premium feature that offloads read-only queries to secondary replicas at no additional charge.

azuresql-ha-general-purpose-zone-uses-zrs [IN] OBSERVATION

Azure SQL Database General Purpose zone redundancy uses Zone-Redundant Storage (ZRS) for data and log files.

azuresql-ha-hyperscale-failover-cmd-not-for-secondaries [IN] OBSERVATION

The manual failover command (Invoke-AzSqlDatabaseFailover) is NOT available for readable secondary replicas of Hyperscale databases.

azuresql-ha-hyperscale-failover-not-for-readable-secondary [IN] OBSERVATION

The manual failover command is not available for readable secondary replicas of Hyperscale databases.

azuresql-ha-hyperscale-four-layer-architecture [IN] OBSERVATION

Azure SQL Hyperscale uses a four-layer distributed architecture: stateless compute, page servers (active-active pairs), log service with transaction log storage, and data files in Azure Storage.

azuresql-ha-hyperscale-zone-redundancy-creation-only [IN] OBSERVATION

Hyperscale zone redundancy can only be set at database creation time; changing it afterward requires database copy, point-in-time restore, or geo-replica.

azuresql-ha-hyperscale-zone-requires-ha-replica [IN] OBSERVATION

Hyperscale zone redundancy requires at least one HA compute replica and zone-redundant or geo-zone-redundant backup storage.

azuresql-ha-hyperscale-zr-requires-ha-replica [IN] OBSERVATION

Hyperscale zone redundancy requires at least one HA compute replica and zone-redundant or geo-zone-redundant backup storage.

azuresql-ha-local-redundancy-lrs-three-copies [IN] OBSERVATION

Azure SQL Database local redundancy uses Locally Redundant Storage (LRS), copying data three times within a single datacenter.

azuresql-ha-manual-failover-rate-limit-15min [IN] OBSERVATION

Azure SQL Database manual failover is rate-limited to once per 15 minutes per database or elastic pool.

azuresql-ha-master-db-auto-zone-redundant [IN] OBSERVATION

The master database automatically becomes zone-redundant when any database on the logical server is zone-redundant.

azuresql-ha-remote-storage-cold-cache-degradation [IN] OBSERVATION

Azure SQL Database General Purpose (remote storage model) may experience performance degradation during failover due to cold cache on the new compute node.

azuresql-ha-remote-storage-cold-cache-failover [IN] OBSERVATION

Remote storage model (General Purpose) may experience performance degradation during failover due to cold cache startup on the new compute node.

azuresql-ha-rpo-zero-local-and-zone [IN] OBSERVATION

Azure SQL Database RPO is zero (no committed data loss) for both local and zone-redundant configurations.

azuresql-ha-service-fabric-manages-failover [IN] OBSERVATION

Azure Service Fabric manages health monitoring and failover across all Azure SQL Database availability models.

azuresql-ha-three-availability-models [IN] OBSERVATION

Azure SQL Database uses three availability models mapped to service tiers: remote storage (Basic/Standard/General Purpose), local storage (Premium/Business Critical), and Hyperscale (distributed four-layer architecture).

azuresql-ha-zero-rpo-cold-cache-tradeoff [IN] OBSERVATION

Azure SQL achieves zero RPO (no committed data loss) for both local and zone-redundant HA configurations, but General Purpose tier pays a performance penalty during failover due to cold cache startup on remote storage — making RPO and RTO guarantees asymmetric.

azuresql-ha-zone-redundancy-not-available-basic-standard [IN] OBSERVATION

Zone redundancy is NOT available for Azure SQL Database Basic and Standard (DTU) service tiers.

azuresql-hybrid-benefit-requires-software-assurance [IN] OBSERVATION

Azure Hybrid Benefit for SQL requires Software Assurance on existing SQL Server licenses.

azuresql-hyperscale-128tb-max [IN] OBSERVATION

Azure SQL Database Hyperscale tier supports up to 128 TB storage with independently scalable compute and storage

azuresql-hyperscale-backup-redundancy-immutable [IN] OBSERVATION

Azure SQL Hyperscale backup redundancy can only be set at creation time and cannot be modified later

azuresql-hyperscale-distributed-scale-architecture [IN] OBSERVATION

Hyperscale achieves 128 TB scale through a four-layer distributed architecture (stateless compute, page servers, log service, remote storage), with zone redundancy requiring both HA compute replicas and zone-redundant backup storage as co-requisites.

azuresql-hyperscale-failover-not-for-readable-secondaries [IN] OBSERVATION

The manual failover command is not available for readable secondary replicas of Hyperscale databases.

azuresql-hyperscale-four-layer-architecture [IN] OBSERVATION

Hyperscale uses a four-layer distributed architecture: stateless compute, page servers (active-active pairs), log service with transaction log storage, and data files in Azure Storage.

azuresql-hyperscale-snapshot-based-backups [IN] OBSERVATION

Azure SQL Hyperscale uses storage snapshots instead of traditional SQL Server backup technology, providing instant backup and fast restore regardless of database size

azuresql-hyperscale-zone-requires-ha-replica-and-zr-backup [IN] OBSERVATION

Hyperscale zone redundancy requires at least one HA compute replica and zone-redundant or geo-zone-redundant backup storage.

azuresql-immutable-backups-ltr-only [IN] OBSERVATION

Azure SQL Database immutable backups are supported only for long-term retention (LTR), not for PITR or geo-restore

azuresql-ledger-cryptographic-tamper-evidence [IN] OBSERVATION

Azure SQL Ledger provides cryptographic proof of data integrity and tamper-evidence for regulatory compliance and auditability.

azuresql-ledger-tamper-evidence [IN] OBSERVATION

Azure SQL Ledger provides cryptographic proof of data integrity (tamper-evidence) for regulatory compliance and auditability.

azuresql-ltr-up-to-10-years [IN] OBSERVATION

Azure SQL Database long-term retention (LTR) supports up to 10 years of backup retention

azuresql-master-db-auto-zone-redundant [IN] OBSERVATION

The master database on an Azure SQL logical server automatically becomes zone-redundant when any database on that server is zone-redundant.

azuresql-max-database-sizes [IN] OBSERVATION

Azure SQL max database sizes: SQL Database = 128 TB, Managed Instance = 16 TB, SQL VMs = 256 TB.

azuresql-max-db-sizes-by-product [IN] OBSERVATION

Azure SQL Database supports up to 128 TB per database, Managed Instance up to 16 TB, and SQL Server on Azure VMs up to 256 TB.

azuresql-mi-backup-restore-to-sql-server-2022 [IN] OBSERVATION

Backups from Azure SQL Managed Instance can be restored to SQL Server 2022 (reverse portability).

azuresql-mi-backups-restorable-to-sql-server-2022 [IN] OBSERVATION

Backups from Azure SQL Managed Instance can be restored to SQL Server 2022 (reverse portability).

azuresql-mi-backward-compat-sql-server-2008 [IN] OBSERVATION

Azure SQL Managed Instance supports backward compatibility to SQL Server 2008 databases, with direct migration from SQL Server 2005 (upgraded to 2008 compatibility level).

azuresql-mi-copy-only-backups-user-initiated [IN] OBSERVATION

Only COPY_ONLY backups can be user-initiated on Azure SQL Managed Instance; automated backups handle the rest.

azuresql-mi-hybrid-benefit-requires-sa [IN] OBSERVATION

Azure Hybrid Benefit for SQL Managed Instance requires Software Assurance on existing SQL Server licenses.

azuresql-mi-instance-stop-storage-only-billing [IN] OBSERVATION

Azure SQL Managed Instance supports stop/start; when stopped, only storage is billed (no compute charges).

azuresql-mi-license-free-dr-replica [IN] OBSERVATION

A SQL Managed Instance secondary replica designated for DR only incurs no vCore licensing cost (license-free DR replica).

azuresql-mi-lift-shift-migration-target [IN] OBSERVATION

Azure SQL Managed Instance is positioned as the primary lift-and-shift target for on-premises SQL Server: backward compatibility to SQL Server 2008 enables legacy workloads, native VNet deployment with single-tenant isolation preserves network security models, and Managed Instance Link via distributed availability groups enables near-zero-downtime migration with ongoing replication.

azuresql-mi-link-distributed-ag [IN] OBSERVATION

Managed Instance link uses distributed availability groups to synchronize data between on-premises SQL Server and SQL MI for hybrid scenarios, DR, and read offload.

azuresql-mi-link-distributed-ag-hybrid [IN] OBSERVATION

Managed Instance link uses distributed availability groups to synchronize data between on-premises SQL Server and SQL MI for hybrid scenarios, DR, and read offload.

azuresql-mi-managed-instance-link-dag [IN] OBSERVATION

Azure SQL Managed Instance link uses distributed availability groups to synchronize databases between on-premises SQL Server and SQL MI for hybrid DR, read offloading, and migration.

azuresql-mi-managed-instance-link-distributed-ag [IN] OBSERVATION

Managed Instance link uses distributed availability groups to synchronize databases between on-premises SQL Server and SQL MI for hybrid scenarios, DR, and migration.

azuresql-mi-max-16tb [IN] OBSERVATION

Azure SQL Managed Instance supports a maximum database size of 16 TB.

azuresql-mi-native-vnet-single-tenant [IN] OBSERVATION

Azure SQL Managed Instance is deployed into a customer's virtual network with dedicated compute/storage and single-tenant isolation.

azuresql-mi-near-100pct-sql-server-compatibility [IN] OBSERVATION

Azure SQL Managed Instance offers near 100% compatibility with the latest SQL Server Enterprise Edition.

azuresql-mi-recommended-for-most-migrations [IN] OBSERVATION

Azure SQL Managed Instance is recommended for most migrations from on-premises SQL Server to Azure.

azuresql-mi-reservations-save-up-to-80pct [IN] OBSERVATION

Azure SQL Managed Instance reserved capacity can save up to 80% on costs compared to pay-as-you-go pricing.

azuresql-mi-server-level-roles-supported [IN] OBSERVATION

SQL Managed Instance supports server-level roles (fixed or custom); SQL Database does not.

azuresql-mi-sla-99-99 [IN] OBSERVATION

Azure SQL Managed Instance has a 99.99% uptime SLA.

azuresql-mi-ssis-executed-on-adf-ir [IN] OBSERVATION

SSIS packages are stored in SSISDB on SQL Managed Instance but executed on Azure-SSIS Integration Runtime in Azure Data Factory.

azuresql-mi-ssis-on-azure-ssis-ir-in-adf [IN] OBSERVATION

SSIS packages on SQL Managed Instance are stored in SSISDB but executed on Azure-SSIS Integration Runtime in Azure Data Factory.

azuresql-mi-stop-start-storage-only-billing [IN] OBSERVATION

Azure SQL Managed Instance supports stop/start capability; when stopped, you pay only for storage.

azuresql-mi-tcp-only-no-named-pipes [IN] OBSERVATION

Azure SQL Managed Instance supports TCP protocol only; named pipes are not supported.

azuresql-mi-tde-cert-migration-required [IN] OBSERVATION

TDE certificates must be migrated when restoring an encrypted database to SQL Managed Instance via native restore.

azuresql-mi-three-hardware-series [IN] OBSERVATION

Azure SQL Managed Instance vCore model offers three hardware options: Standard Series (Gen5) at 5.1 GB RAM/vCore, Premium Series at 7 GB RAM/vCore, and Premium Series Memory-Optimized at 13.6 GB RAM/vCore.

azuresql-mi-vnet-classic-not-supported [IN] OBSERVATION

Azure SQL Managed Instance does NOT support VNet Classic deployment model; only ARM is supported.

azuresql-migration-path-tier-constrained [IN] OBSERVATION

Azure SQL migration targets are tier-constrained at every level: Managed Instance provides lift-and-shift with SQL Server 2008 backward compatibility but within a 16 TB ceiling, while Database offers scale beyond 128 TB via Hyperscale's distributed architecture but with tier-dependent HA tradeoffs (General Purpose cold-cache penalty vs Business Critical local SSD) — making tier selection inseparable from migration planning.

azuresql-network-security-perimeter-preview-not-mi [IN] OBSERVATION

Network Security Perimeter is in preview and creates logical network boundaries around PaaS resources deployed outside VNets; it does NOT apply to SQL Managed Instance.

azuresql-pitr-creates-new-database [IN] OBSERVATION

Azure SQL Database point-in-time restore (PITR) creates a new database on the same server with a different name; it never overwrites the original

azuresql-pitr-creates-new-database-same-server [IN] OBSERVATION

Azure SQL Database point-in-time restore (PITR) creates a new database on the same server with a different name; it never overwrites the original.

azuresql-pitr-no-cross-region-or-subscription [IN] OBSERVATION

Azure SQL Database point-in-time restore (PITR) cannot restore cross-region or cross-subscription; geo-restore and LTR can restore cross-region.

azuresql-private-ip-mi-native-sqldb-private-link [IN] OBSERVATION

Azure SQL Managed Instance and SQL VMs have native private IP connectivity; Azure SQL Database requires Private Link for private IP access.

azuresql-private-ip-mi-native-sqldb-requires-private-link [IN] OBSERVATION

Azure SQL Managed Instance and SQL VMs have native private IP; Azure SQL Database requires Azure Private Link for private IP connectivity.

azuresql-rls-label-based-row-access [IN] OBSERVATION

Row-Level Security (RLS) in Azure SQL controls access to individual table rows based on user characteristics and can implement label-based access control.

azuresql-rls-label-based-security [IN] OBSERVATION

Row-Level Security (RLS) in Azure SQL controls access to individual rows based on user characteristics or execution context, and can implement label-based security concepts.

azuresql-rls-row-level-access-control [IN] OBSERVATION

Row-Level Security (RLS) in Azure SQL controls access to individual table rows based on user characteristics and can implement label-based access control.

azuresql-row-level-security-user-context [IN] OBSERVATION

Row-Level Security (RLS) in Azure SQL controls access to individual rows based on user characteristics or execution context, and can implement label-based security concepts.

azuresql-scale-vs-failover-tier-tradeoff [IN] OBSERVATION

Azure SQL HA and scale present tier-dependent tradeoffs: General Purpose achieves zero RPO but pays a cold-cache performance penalty on failover due to remote storage architecture, while Hyperscale achieves 128 TB scale through a distributed four-layer architecture (compute, page servers, log service, remote storage) — selecting between them requires weighing maximum storage requirements against failover performance characteristics.

azuresql-security-diverges-by-deployment-model [IN] OBSERVATION

Azure SQL security capabilities diverge by deployment model: SQL Database supports Network Security Perimeter while Managed Instance does not, and MI supports server-level roles that Database lacks — requiring deployment model choice based on security feature requirements.

azuresql-security-ledger-tamper-evidence [IN] OBSERVATION

Azure SQL Ledger provides cryptographic tamper-evidence for data integrity with immutable change records for regulatory compliance.

azuresql-security-network-perimeter-not-for-mi [IN] OBSERVATION

Azure Network Security Perimeter (preview) applies to Azure SQL Database PaaS resources but does NOT apply to SQL Managed Instance.

azuresql-security-network-perimeter-preview-not-mi [IN] OBSERVATION

Network Security Perimeter (preview) creates logical network boundaries around PaaS resources but does NOT apply to SQL Managed Instance.

azuresql-server-deletion-permanent [IN] OBSERVATION

Deleting an Azure SQL server permanently deletes all databases (unrecoverable), but LTR backups on blob storage survive server deletion

azuresql-serverless-general-purpose-hyperscale [IN] OBSERVATION

Azure SQL Database serverless compute is available only in General Purpose and Hyperscale tiers with per-second billing

azuresql-sla-values [IN] OBSERVATION

Azure SQL SLA values: SQL Database = 99.995%, Managed Instance = 99.99%, SQL VMs = 99.95% (availability set) or 99.99% (availability zones with 2 VMs).

azuresql-sql-database-requires-private-link-for-private-ip [IN] OBSERVATION

Azure SQL Database requires Azure Private Link for private IP access; Managed Instance and SQL VMs have native private IP by default.

azuresql-sql-vm-infra-sla-not-sql-processes [IN] OBSERVATION

SQL Server on Azure VMs SLA (99.95% availability set / 99.99% availability zones) covers infrastructure only, not SQL Server processes; Always On AGs must be implemented separately for database-level HA.

azuresql-tde-cmk-server-or-database-level [IN] OBSERVATION

Customer-managed keys (CMK) for TDE can be configured at server level or individual database level via Azure Key Vault.

azuresql-tde-enabled-by-default [IN] OBSERVATION

Transparent Data Encryption (TDE) is enabled by default on all newly created Azure SQL databases.

azuresql-tde-log-backups-not-compressed [IN] OBSERVATION

Azure SQL Database full and differential backups are compressed (3-4x ratio), but transaction log backups are NOT compressed when TDE is enabled.

azuresql-tde-no-log-backup-compression [IN] OBSERVATION

Azure SQL databases with TDE (Transparent Data Encryption) enabled do not compress transaction log backups.

azuresql-three-encryption-layers [IN] OBSERVATION

Azure SQL Database has three encryption layers: TLS (in motion), TDE (at rest), Always Encrypted (in use)

azuresql-three-layer-data-protection [IN] OBSERVATION

Azure SQL Database provides defense-in-depth data protection through three complementary mechanisms operating at different granularities: three encryption layers (TLS in-motion, TDE at-rest, Always Encrypted in-use) protect data at every lifecycle state, ledger provides cryptographic tamper-evidence with immutable change records for regulatory compliance, and row-level security controls access to individual rows based on user characteristics without application changes.

azuresql-three-products [IN] OBSERVATION

Azure SQL is a family of three products: Azure SQL Database (PaaS DBaaS), Azure SQL Managed Instance (PaaS), and SQL Server on Azure VMs (IaaS).

azuresql-tls-always-enforced [IN] OBSERVATION

TLS is always enforced on Azure SQL (ForceEncryption=Yes); connections without encryption are not possible.

azuresql-tls-do-not-trust-server-certificate-production [IN] OBSERVATION

Do NOT set TrustServerCertificate=True in production — it disables protection against man-in-the-middle attacks; use Encrypt=True;TrustServerCertificate=False.

azuresql-vcore-vs-dtu-models [IN] OBSERVATION

Azure SQL Database has two purchasing models: vCore (independent resource selection, Azure Hybrid Benefit) and DTU (bundled compute/memory/IO)

azuresql-vm-infra-sla-not-sql-processes [IN] OBSERVATION

SQL Server on Azure VMs SLA (99.95%/99.99%) covers infrastructure only — it does not cover SQL Server processes; Always On AGs must be implemented separately for database-level HA.

azuresql-vm-max-256tb [IN] OBSERVATION

SQL Server on Azure VMs supports up to 256 TB of storage.

azuresql-windows-auth-kerberos-mi-only [IN] OBSERVATION

Windows authentication (Kerberos) for Entra principals is available only on SQL Managed Instance, not SQL Database.

azuresql-workload-env-dev-lrs-prod-grs [IN] OBSERVATION

In Azure portal, setting workload environment to "Development" defaults backup redundancy to LRS; "Production" defaults to GRS.

azuresql-zone-redundant-premium-bc-only [IN] OBSERVATION

Azure SQL Database zone-redundant deployment is available for Premium and Business Critical tiers only

blob-access-tier-min-retention-cool30-cold90-archive180 [IN] OBSERVATION

Azure Blob Storage minimum retention periods: Cool = 30 days, Cold = 90 days, Archive = 180 days; early deletion penalties are prorated.

blob-access-tiers-block-blobs-only [IN] OBSERVATION

Azure Blob Storage access tiers (Hot, Cool, Cold, Archive) apply only to block blobs, not append or page blobs.

blob-archive-cannot-be-default-account-tier [IN] OBSERVATION

Azure Blob Storage Archive tier cannot be set as the default account access tier; new GPv2 accounts default to Hot.

blob-archive-metadata-readable-cool-rates [IN] OBSERVATION

Azure Blob Storage archived blob metadata remains readable and index tags can be read/written; metadata access is charged at cool tier rates.

blob-archive-metadata-readable-no-snapshots [IN] OBSERVATION

Azure Blob Storage Archive tier metadata remains read-only accessible without rehydration; blob index tags can be read or written, but snapshots are not supported for archived blobs.

blob-archive-metadata-readable-snapshots-not-supported [IN] OBSERVATION

Azure Blob Storage Archive tier metadata remains read-only accessible and blob index tags can be read or written, but snapshots are not supported for archived blobs.

blob-archive-metadata-readable-snapshots-unsupported [IN] OBSERVATION

Azure Blob Storage Archive tier metadata remains read-only accessible, but snapshots are not supported for archived blobs.

blob-archive-redundancy-lrs-grs-ragrs-only [IN] OBSERVATION

Azure Blob Storage Archive tier supports only LRS, GRS, and RA-GRS redundancy — not ZRS, GZRS, or RA-GZRS.

blob-archive-rehydration-up-to-15-hours [IN] OBSERVATION

Azure Blob Storage Archive tier rehydration can take up to 15 hours (standard or high priority); archived blobs cannot be read or modified without rehydration.

blob-archive-snapshots-not-supported [IN] OBSERVATION

Azure Blob Storage snapshots are not supported for archived blobs.

blob-archive-tier-offline [IN] OBSERVATION

Azure Blob Storage Archive tier is offline; blobs cannot be read or modified without rehydration (up to 15 hours).

blob-copy-blob-avoids-early-deletion-penalty [IN] OBSERVATION

Using Copy Blob avoids early deletion penalty (source blob remains); Set Blob Tier on a blob before minimum retention triggers the penalty.

blob-default-tier-change-billing-cooler-write-warmer-read [IN] OBSERVATION

Changing Azure Blob Storage default account tier to a cooler tier charges write operations for all inferred-tier blobs; changing to a warmer tier charges read operations plus data retrieval.

blob-default-tier-change-billing-direction [IN] OBSERVATION

Changing Azure Storage account default tier to a cooler tier charges write operations for all inferred-tier blobs; changing to a warmer tier charges read operations and data retrieval.

blob-default-tier-change-charges-all-inferred [IN] OBSERVATION

Changing the default account access tier to a cooler tier charges write operations for all inferred-tier blobs; changing to a warmer tier charges read operations and data retrieval.

blob-encryption-scope-blocks-archive [IN] OBSERVATION

Azure Blob Storage blobs using encryption scopes cannot be archived via Set Blob Tier.

blob-encryption-scopes-cannot-archive [IN] OBSERVATION

Azure Blob Storage blobs using encryption scopes cannot be archived via Set Blob Tier.

blob-last-access-time-billed-once-per-24h [IN] OBSERVATION

Azure Blob Storage last access time tracking updates are billed as "other transactions" at most once every 24 hours per object.

blob-lifecycle-access-time-billing-once-per-24h [IN] OBSERVATION

Last access time tracking updates are billed as "other transactions" at most once per 24 hours per object.

blob-lifecycle-delete-blocked-by-immutable [IN] OBSERVATION

Azure Blob Storage lifecycle delete actions do not work on blobs in immutable containers.

blob-lifecycle-encryption-scope-no-archive [IN] OBSERVATION

Azure Blob Storage lifecycle policies cannot archive blobs that use an encryption scope.

blob-lifecycle-immutable-blocks-delete [IN] OBSERVATION

Lifecycle delete actions do not work on blobs in immutable containers.

blob-lifecycle-immutable-containers-block-delete [IN] OBSERVATION

Lifecycle delete actions do not work on blobs in immutable containers.

blob-lifecycle-last-access-billed-once-per-24h [IN] OBSERVATION

Last access time tracking updates are billed as "other transactions" at most once every 24 hours per object.

blob-lifecycle-last-access-billing-once-per-24h [IN] OBSERVATION

Last access time tracking updates are billed as "other transactions" at most once per 24 hours per object.

blob-lifecycle-management-cannot-rehydrate-archive [IN] OBSERVATION

Azure Blob Storage lifecycle management policies cannot rehydrate blobs from the Archive tier.

blob-lifecycle-max-10-prefixes-10-tags [IN] OBSERVATION

Each lifecycle rule supports up to 10 case-sensitive prefix filters and 10 blob index tag conditions, combined with logical AND (no exclusion mechanism).

blob-lifecycle-monitor-event [IN] OBSERVATION

Lifecycle policy runs can be monitored by subscribing to the LifecyclePolicyCompleted event.

blob-lifecycle-no-archive-rehydration [IN] OBSERVATION

Lifecycle policies cannot rehydrate blobs from archive tier to an online tier.

blob-lifecycle-no-partial-update [IN] OBSERVATION

Azure Blob Storage lifecycle management policies must be read or written in full — partial updates are not supported.

blob-lifecycle-no-partial-updates [IN] OBSERVATION

Blob lifecycle management policies must be read or written in full — partial updates are not supported.

blob-lifecycle-policies-no-partial-update [IN] OBSERVATION

Azure Blob Storage lifecycle management policies must be read or written in full — partial updates are not supported.

blob-lifecycle-policy-24h-activation [IN] OBSERVATION

Azure Blob Storage lifecycle management policy changes take up to 24 hours to take effect and begin first execution.

blob-lifecycle-policy-24h-propagation [IN] OBSERVATION

Blob lifecycle policy changes take up to 24 hours to go into effect.

blob-lifecycle-policy-24h-to-take-effect [IN] OBSERVATION

Azure Blob Storage lifecycle management policy changes take up to 24 hours to take effect and begin first execution.

blob-lifecycle-policy-free-of-charge [IN] OBSERVATION

Azure Blob Storage lifecycle management policies are free of charge; billing applies only for underlying Set Blob Tier API calls and transaction costs, and delete operations are free.

blob-lifecycle-policy-full-read-write-only [IN] OBSERVATION

Azure Blob Storage lifecycle management policies must be read or written in full; partial updates are not supported.

blob-lifecycle-policy-no-partial-updates [IN] OBSERVATION

Azure Blob Storage lifecycle management policies must be read or written in full — partial updates are not supported.

blob-lifecycle-safe-delete-procedure [IN] OBSERVATION

Recommended lifecycle policy deletion procedure: disable all rules first, wait 24 hours, then delete the policy.

blob-lifecycle-system-containers-excluded [IN] OBSERVATION

Lifecycle policies never affect system containers ($logs, $web).

blob-lifecycle-tiering-block-blobs-only [IN] OBSERVATION

Lifecycle tier transitions apply only to block blobs; tiering is not supported for append blobs, page blobs, or premium block blob accounts.

blob-online-tiers-millisecond-first-byte-latency [IN] OBSERVATION

All Azure Blob Storage online access tiers (Hot, Cool, Cold) share the same millisecond first-byte latency; only Archive tier has latency measured in hours.

blob-online-tiers-millisecond-latency [IN] OBSERVATION

All Azure Blob Storage online tiers (Hot, Cool, Cold) share the same millisecond first-byte latency; only Archive has hours-level latency.

blob-premium-block-blob-cannot-tier [IN] OBSERVATION

Azure Premium block blob storage accounts cannot tier to hot/cool/cold/archive via Set Blob Tier or lifecycle management.

blob-premium-block-cannot-tier-lifecycle [IN] OBSERVATION

Azure Premium block blob storage accounts cannot tier blobs to hot/cool/cold/archive via Set Blob Tier or lifecycle management.

blob-smart-tier-auto-moves-hot-cool-cold [IN] OBSERVATION

Azure Blob Storage Smart tier automatically moves data between hot, cool, and cold tiers based on usage patterns.

blob-storage-client-libraries-five-languages [IN] OBSERVATION

Azure Blob Storage provides client libraries for .NET, Java, Node.js, Python, and Go.

blob-storage-sftp-nfs-support [IN] OBSERVATION

Azure Blob Storage supports SFTP and NFS 3.0 protocols in addition to HTTP/HTTPS.

blob-storage-unstructured-data [IN] OBSERVATION

Azure Blob Storage is Microsoft's object storage solution for unstructured data (text and binary).

blob-tier-availability-hot999-cool-cold99 [IN] OBSERVATION

Azure Blob Storage availability SLAs: Hot = 99.9%, Cool/Cold = 99%, Archive = 99%; with RA-GRS: Hot = 99.99%, others = 99.9%.

blob-tier-billing-warmer-cooler-write-cooler-warmer-read [IN] OBSERVATION

Azure Blob Storage tier changes from warmer to cooler are billed as write operations to the destination; cooler to warmer are billed as read operations plus data retrieval from the source.

blob-tier-change-billing-direction [IN] OBSERVATION

Moving a blob to a cooler tier is billed as a write operation to the destination tier; moving to a warmer tier is billed as a read operation from the source tier.

blueprints-artifact-size-limit-2mb [IN] OBSERVATION

Each Azure Blueprint artifact must be ≤ 2 MB in size.

blueprints-backed-by-cosmos-db [IN] OBSERVATION

Azure Blueprint objects are backed by Cosmos DB, globally replicated for low latency and high availability.

blueprints-backed-by-cosmosdb-global-replication [IN] OBSERVATION

Blueprint objects are stored in Azure Cosmos DB and globally replicated for low latency and high availability.

blueprints-contributor-cannot-assign-operator-cannot-create [IN] OBSERVATION

Blueprint Contributor can manage blueprint definitions but cannot assign them; Blueprint Operator can assign blueprints but cannot create definitions.

blueprints-contributor-vs-operator-roles [IN] OBSERVATION

Blueprint Contributor can manage blueprint definitions but cannot assign them; Blueprint Operator can assign blueprints but cannot create or modify definitions.

blueprints-deprecated-july-2026 [IN] OBSERVATION

Azure Blueprints (Preview) is deprecated on July 11, 2026; successor services are Template Specs (definition storage) and Deployment Stacks (lifecycle management).

blueprints-four-artifact-types [IN] OBSERVATION

Azure Blueprints supports four artifact types: Resource Groups, ARM templates, Policy Assignments, and Role Assignments.

blueprints-naming-limits [IN] OBSERVATION

Blueprint naming limits: definition name max 48 characters, version max 20 characters, assignment name max 90 characters.

blueprints-parameters-via-rest-api-only [IN] OBSERVATION

Blueprint-level parameters can only be created via REST API, not the Azure portal.

blueprints-persistent-definition-assignment-relationship [IN] OBSERVATION

Unlike ARM templates, Azure Blueprints maintain a persistent relationship between definition and assignment, enabling audit and tracking of deployed resources.

blueprints-persistent-relationship-vs-arm [IN] OBSERVATION

Key differentiator from ARM templates: Blueprints maintain a persistent relationship between definition and assignment for tracking and auditing; ARM templates have no post-deployment connection.

blueprints-system-identity-requires-owner [IN] OBSERVATION

System-assigned managed identity for blueprint deployment requires Owner role on the target subscription; user-assigned managed identity only requires blueprintAssignments/write.

blueprints-system-mi-requires-owner [IN] OBSERVATION

System-assigned managed identity for Blueprint deployment requires the Owner role on the target subscription; user-assigned managed identity only requires blueprintAssignments/write.

cannot-change-subnet-address-range-with-resources [IN] OBSERVATION

A subnet's address range cannot be changed while resources are deployed in it — resources must be moved or deleted first.

cannot-delete-subnet-with-resources [IN] OBSERVATION

A subnet cannot be deleted while it contains resources — all resources must be removed first.

cloud-security-benchmark-underpins-waf-security [IN] OBSERVATION

The Microsoft Cloud Security Benchmark provides the control framework that underpins WAF Security pillar guidance.

cluster-autoscaler-checks-every-10s [IN] OBSERVATION

The AKS cluster autoscaler checks the Metrics API server every 10 seconds and requires RBAC-enabled AKS running Kubernetes 1.10.x+.

cluster-autoscaler-scale-in-10min-idle [IN] OBSERVATION

The cluster autoscaler schedules node deletion after nodes are unused for 10 minutes (default threshold).

container-supply-chain-network-isolated-end-to-end [IN] OBSERVATION

Container supply chain from ACR to AKS runtime can achieve full network isolation: ACR Premium gates content trust and private endpoints while AKS verifies images via Notary V2 and Trusted Launch — and both connect through Private Link's backbone-only routing with per-resource private DNS zones eliminating public internet traversal.

container-supply-chain-registry-to-runtime [IN] OBSERVATION

Azure container supply chain verification spans two services: ACR (Premium tier required for content trust and geo-replication) provides image signing and scanning, while AKS provides Notary V2 image verification and Trusted Launch for node integrity.

datalake-gen2-built-on-blob [IN] OBSERVATION

Azure Data Lake Storage Gen2 is not a separate service; it is a capability of Blob Storage with hierarchical namespace enabled.

defender-for-cloud-multi-cloud [IN] OBSERVATION

Microsoft Defender for Cloud covers multi-cloud workloads across Azure, AWS, and GCP — not Azure-only.

elastic-san-only-lrs-zrs [IN] OBSERVATION

Azure Elastic SAN supports only LRS and ZRS redundancy options — no geo-redundant options.

entra-admin-center-url [IN] OBSERVATION

The Microsoft Entra admin center is accessible at https://entra.microsoft.com.

entra-app-deactivation-preserves-objects [IN] OBSERVATION

An application in Microsoft Entra ID can be temporarily deactivated to prevent new token issuance while preserving both the application object and service principal.

entra-app-deactivation-prevents-tokens [IN] OBSERVATION

An application can be temporarily deactivated to prevent new token issuance without deleting the application object or service principal.

entra-app-deactivation-prevents-tokens-preserves-objects [IN] OBSERVATION

An application can be deactivated to prevent new token issuance without deleting the application object or service principal.

entra-app-object-changes-reflect-home-sp-only [IN] OBSERVATION

Changes to an application object are reflected only in the home tenant's service principal, not in service principals in other tenants.

entra-app-object-changes-reflect-home-tenant-only [IN] OBSERVATION

Changes to an application object are reflected only in the home tenant's service principal, not in service principals in other tenants.

entra-app-object-global-sp-local [IN] OBSERVATION

The application object is the global representation of an application; the service principal is the local representation per tenant.

entra-app-object-one-to-many-service-principals [IN] OBSERVATION

An application object has a one-to-many relationship with service principals: one app object in the home tenant, one service principal per tenant where the app is used.

entra-app-registrations-vs-enterprise-applications [IN] OBSERVATION

Application objects are managed under App registrations; service principals are managed under Enterprise applications in the Entra admin center.

entra-app-registrations-vs-enterprise-apps-portal [IN] OBSERVATION

Application objects are managed under the App registrations page; service principals are managed under the Enterprise applications page in the Entra admin center.

entra-application-two-object-model [IN] OBSERVATION

Entra application identity requires a two-object model: application objects (managed via App registrations) define the app globally, while service principals (managed via Enterprise applications) instantiate per-tenant access — a service principal must exist in each tenant for sign-in, and the portal auto-creates both objects simultaneously, masking this distinction until multi-tenant scenarios surface it.

entra-azure-ad-b2c-end-of-sale-may-2025 [IN] OBSERVATION

Azure AD B2C is end-of-sale for new customers as of May 1, 2025.

entra-delete-app-deletes-home-sp-no-restore [IN] OBSERVATION

Deleting an application object deletes the home tenant service principal; restoring the app via App Registrations does NOT restore the service principal.

entra-deleted-user-frees-licenses [IN] OBSERVATION

When a Microsoft Entra user is deleted, their assigned licenses are freed and become available for other users.

entra-deleted-users-recoverable-30-days [IN] OBSERVATION

Deleted users in Microsoft Entra ID are soft-deleted and recoverable for 30 days.

entra-domain-services-managed-kerberos-ldap [IN] OBSERVATION

Microsoft Entra Domain Services provides managed Kerberos, NTLM, LDAP, and Group Policy services — no domain controllers to maintain.

entra-dynamic-group-org-wide-reevaluation [IN] OBSERVATION

Dynamic group membership processes all organization-wide rules when any user or device attribute changes, not just rules relevant to the changed attribute.

entra-dynamic-membership-org-wide-reevaluation [IN] OBSERVATION

When any user or device attribute changes, Microsoft Entra re-evaluates all dynamic group membership rules across the entire organization.

entra-dynamic-membership-orgwide-reevaluation [IN] OBSERVATION

Dynamic group membership processes all org-wide dynamic group rules when any user or device attribute changes — not just rules for the affected group.

entra-external-guests-no-admin-units [IN] OBSERVATION

External guests cannot be assigned to administrative units in Microsoft Entra ID.

entra-external-id-b2b-and-b2c [IN] OBSERVATION

Microsoft Entra External ID manages both B2B collaboration (partners/guests) and B2C/CIAM (customer-facing apps) with self-service registration, social login, and one-time passcodes.

entra-external-id-b2b-and-ciam [IN] OBSERVATION

Microsoft Entra External ID supports both B2B collaboration (partners/guests) and B2C/CIAM (customer-facing apps with self-service registration and social login).

entra-external-member-federates-to-home-tenant [IN] OBSERVATION

External members in Microsoft Entra ID authenticate via federation to their home tenant, while internal users have credentials managed directly in the local tenant.

entra-external-tenant-users-no-admin-units-at-creation [IN] OBSERVATION

External users in external tenants (Entra External ID) cannot be assigned to administrative units or roles at creation.

entra-four-workforce-user-types [IN] OBSERVATION

Microsoft Entra ID workforce tenants have four user types: internal member, internal guest, external member, and external guest.

entra-group-admin-roles [IN] OBSERVATION

Groups Administrator or User Administrator role is required to manage Entra groups; Privileged Role Administrator is required to enable role assignment on groups.

entra-group-membership-types [IN] OBSERVATION

Entra group membership types are: Assigned, Dynamic User, and Dynamic Device.

entra-group-name-no-leading-space [IN] OBSERVATION

Microsoft Entra group names cannot start with a space — doing so prevents the group from appearing in role assignment options.

entra-group-type-immutable [IN] OBSERVATION

Microsoft Entra group type (Security or Microsoft 365) cannot be changed after creation — must delete and recreate.

entra-groups-admin-roles [IN] OBSERVATION

Groups Administrator or User Administrator roles are required for group CRUD and membership management in Microsoft Entra ID.

entra-groups-admin-roles-groups-or-user-administrator [IN] OBSERVATION

Groups Administrator or User Administrator roles are required for group CRUD and membership management in Microsoft Entra.

entra-groups-admin-roles-required [IN] OBSERVATION

Managing Entra groups requires Groups Administrator or User Administrator role; Privileged Role Administrator is required to enable role assignment on groups.

entra-id-governance-access-lifecycle [IN] OBSERVATION

Microsoft Entra ID Governance automates the full identity lifecycle: access requests, assignments, reviews, and automatic provisioning/deprovisioning (e.g., employee onboarding/offboarding).

entra-id-governance-lifecycle-automation [IN] OBSERVATION

Microsoft Entra ID Governance automates the full identity lifecycle (joiner, mover, leaver) including access request, assignment, and review workflows.

entra-id-initial-domain-onmicrosoft [IN] OBSERVATION

Every Microsoft Entra ID directory gets an initial domain in the format <tenant>.onmicrosoft.com.

entra-id-protection-requires-p2 [IN] OBSERVATION

Microsoft Entra ID Protection (risk detection and risk-based Conditional Access) requires a P2 license.

entra-id-protection-requires-p2-license [IN] OBSERVATION

Microsoft Entra ID Protection (risk detection and risk-based Conditional Access) requires a Microsoft Entra ID P2 license.

entra-id-protection-risk-based-conditional-access [IN] OBSERVATION

Microsoft Entra ID Protection detects identity-based risks and enables risk-based Conditional Access policies at low, medium, and high risk levels.

entra-id-roles-separate-from-azure-rbac [IN] OBSERVATION

Microsoft Entra ID has its own separate set of built-in roles distinct from Azure RBAC roles.

entra-identity-dual-model-lifecycle [IN] OBSERVATION

Entra ID's dual identity model — service principals (app registrations with client credentials) and managed identities (platform-managed, no credential management) — creates a tradeoff between flexibility and operational complexity, with managed identities reducing credential management overhead.

entra-identity-to-authorization-chain [IN] OBSERVATION

Azure identity-to-authorization follows a two-stage chain with distinct lifecycle and evaluation models: Entra provides identity through either a two-object app/service-principal model (manual lifecycle) or managed identities (auto-lifecycle tied to resource), then RBAC provides authorization through additive union of all role assignments evaluated against ARM scope hierarchy — identity type determines lifecycle complexity while role assignment scope determines access breadth.

entra-initial-domain-onmicrosoft [IN] OBSERVATION

Every new Entra directory gets an initial domain like contoso.onmicrosoft.com; custom domains can be added afterward.

entra-initial-domain-onmicrosoft-com [IN] OBSERVATION

Every new Entra directory gets an initial domain in the format <name>.onmicrosoft.com; custom domains can be added afterward.

entra-internet-access-replaces-web-proxies [IN] OBSERVATION

Microsoft Entra Internet Access replaces traditional web proxies by securing access to internet and SaaS resources with web content filtering by category and domain; it is part of Global Secure Access alongside Private Access.

entra-internet-access-web-content-filtering [IN] OBSERVATION

Microsoft Entra Internet Access secures access to internet resources, SaaS apps, and Microsoft 365 with features like web content filtering.

entra-internet-access-web-filtering [IN] OBSERVATION

Microsoft Entra Internet Access secures access to internet resources, SaaS apps, and Microsoft 365 with features like web content filtering.

entra-is-product-family-not-single-product [IN] OBSERVATION

Microsoft Entra is a product family spanning identity, governance, protection, and network access — not a single product. Entra ID (formerly Azure AD) is the foundational IAM product within it.

entra-legacy-sp-no-app-registration [IN] OBSERVATION

Legacy service principals have no associated app registration and are only usable in the tenant where they were created.

entra-m365-group-email [IN] OBSERVATION

Microsoft 365 is the only Entra group type that supports a group email address.

entra-m365-group-welcome-email-auto [IN] OBSERVATION

When users are added to a Microsoft 365 group, a welcome email is sent automatically; it can be disabled using the Set-UnifiedGroup cmdlet in Exchange PowerShell.

entra-m365-group-welcome-email-disable-set-unifiedgroup [IN] OBSERVATION

Welcome emails are sent automatically when users are added to Microsoft 365 groups; they can be disabled using the Set-UnifiedGroup cmdlet in Exchange PowerShell.

entra-managed-identity-deployment-slot-name [IN] OBSERVATION

For App Service deployment slots, the system-assigned managed identity service principal name follows the format <app-name>/slots/<slot-name>.

entra-managed-identity-sp-no-app-object [IN] OBSERVATION

Managed identity service principals have no associated application object and cannot be updated or modified directly.

entra-managed-identity-token-workflow [IN] OBSERVATION

The managed identity workflow is: create/enable identity, assign it to compute resource, grant RBAC roles on target service, use Azure.Identity or MSAL SDK in code to acquire tokens — no secrets needed.

entra-multitenant-consent-creates-sp-in-consumer-tenant [IN] OBSERVATION

Admin consent for a multitenant app in a consumer tenant creates a service principal in that consumer tenant.

entra-multitenant-sp-created-on-consent [IN] OBSERVATION

In multitenant scenarios, a service principal is created in a consumer tenant when an admin or user grants consent; single-tenant apps have a service principal only in the home tenant.

entra-nested-group-restrictions [IN] OBSERVATION

Nested groups cannot: add security groups to M365 groups, add M365 groups to security/M365 groups, add on-prem synced groups, add groups to role-assignable groups; nested groups do not inherit shared resource/app access; licenses cannot be applied to nested security groups.

entra-nested-groups-inherit-conditional-access [IN] OBSERVATION

Nested groups inherit Conditional Access policy scopes and membership, but do NOT inherit shared resource or application access.

entra-nested-groups-security-only [IN] OBSERVATION

Nested groups (group within a group) are supported for security groups only, not Microsoft 365 groups.

entra-on-prem-synced-groups-no-nested-additions [IN] OBSERVATION

Groups synced from on-premises Active Directory to Entra ID cannot have other groups added to them as members.

entra-portal-creates-both-app-and-sp [IN] OBSERVATION

Registering an app via the Azure portal auto-creates both the application object and the service principal; via Microsoft Graph APIs, creating the service principal is a separate step.

entra-private-access-replaces-vpn [IN] OBSERVATION

Microsoft Entra Private Access replaces VPN by securing access to private apps and corporate networks from any device or network.

entra-privileged-auth-admin-can-delete-any-user [IN] OBSERVATION

The Privileged Authentication Administrator role can delete any user including other admins; the User Administrator role cannot delete admin users.

entra-role-assignable-groups-require-p1-p2 [IN] OBSERVATION

Role-assignable groups in Microsoft Entra require a P1 or P2 license and the Privileged Role Administrator role, and are locked to Assigned membership type.

entra-sp-required-for-tenant-access [IN] OBSERVATION

A service principal must exist in a tenant for an application to sign in or access resources in that tenant.

entra-synced-users-modify-in-onprem-ad [IN] OBSERVATION

Users synced from on-premises AD to Entra ID must be modified in Windows Server AD, not in Entra; changes require waiting for the next sync cycle.

entra-system-assigned-identity-sp-name-matches-resource [IN] OBSERVATION

A system-assigned managed identity's service principal name matches the Azure resource name; for deployment slots the format is <app-name>/slots/<slot-name>.

entra-tenant-auto-created-with-m365-azure [IN] OBSERVATION

Every Microsoft 365, Office 365, Azure, and Dynamics CRM Online tenant is automatically a Microsoft Entra tenant.

entra-three-service-principal-types [IN] OBSERVATION

Microsoft Entra ID has three types of service principals: Application, Managed Identity, and Legacy.

entra-user-creation-max-20-groups-1-admin-unit [IN] OBSERVATION

Up to 20 groups or roles can be assigned at user creation; only one administrative unit can be assigned.

entra-user-type-determines-privilege-level [IN] OBSERVATION

User type (Member vs Guest) determines privilege level, not whether the account is internal or external.

entra-verified-id-uses-did-standards [IN] OBSERVATION

Microsoft Entra Verified ID is a decentralized identity (DID) credential verification service based on open standards where the user controls their credentials.

entra-workload-id-non-human-identities [IN] OBSERVATION

Microsoft Entra Workload ID provides IAM for non-human identities: applications, services, containers, and CI/CD pipelines.

eventgrid-413-payload-too-large [IN] OBSERVATION

Event Grid returns HTTP 413 Payload Too Large when event or event array size exceeds the 1 MB limit.

eventgrid-cloudevents-input-cannot-output-eventgrid-format [IN] OBSERVATION

CloudEvents input schema cannot be transformed to Event Grid output format because CloudEvents supports extension attributes that Event Grid schema does not; Event Grid input can output either format.

eventgrid-cloudevents-structured-json-only [IN] OBSERVATION

Azure Event Grid supports CloudEvents 1.0 in Structured JSON content mode only; Binary content mode is not supported.

eventgrid-eventhubs-handler-requires-data-sender-role [IN] OBSERVATION

When using managed identity to deliver Event Grid events to Event Hubs, the identity needs the Event Hubs Data Sender RBAC role.

eventgrid-events-must-publish-as-array [IN] OBSERVATION

Events must always be published to Event Grid as a JSON array, even when sending a single event.

eventgrid-events-published-as-array [IN] OBSERVATION

Events must always be published to Event Grid in a JSON array, even for a single event.

eventgrid-max-event-size-1mb [IN] OBSERVATION

Azure Event Grid maximum event size is 1 MB; events over 64 KB are charged in 64 KB increments.

eventgrid-max-event-size-1mb-charged-64kb [IN] OBSERVATION

Event Grid maximum event size is 1 MB; events over 64 KB are charged in 64 KB increments (e.g., a 130 KB event is charged as 3 operations).

eventgrid-metadata-version-only-1 [IN] OBSERVATION

Event Grid schema metadataVersion is currently only version 1; Event Grid stamps it if omitted.

eventgrid-publish-auth-sas-or-key [IN] OBSERVATION

Publishing events to Event Grid requires SAS token or key authentication.

eventgrid-schema-413-payload-too-large [IN] OBSERVATION

Azure Event Grid returns 413 Payload Too Large when the event array exceeds the 1 MB size limit.

eventgrid-schema-not-extensible-cloudevents-recommended [IN] OBSERVATION

The Event Grid event schema is proprietary and nonextensible; Microsoft recommends migrating to CloudEvents format, though Event Grid schema is not being retired.

eventgrid-schema-not-retired-but-no-improvements [IN] OBSERVATION

Event Grid proprietary schema is not being retired but will receive no major improvements; CloudEvents is the recommended format.

eventgrid-schema-required-fields [IN] OBSERVATION

Event Grid schema required properties are: subject, eventType, eventTime, id, and data; topic is optional (Event Grid stamps it if omitted).

eventgrid-schema-required-properties [IN] OBSERVATION

Event Grid schema required properties are: subject, eventType, eventTime, id, and data; topic is optional (Event Grid stamps it if omitted).

eventgrid-subject-path-and-suffix-filtering [IN] OBSERVATION

Event Grid supports path-based filtering on the subject field (e.g., /A/B/C) and suffix filtering (e.g., .txt) for event routing.

eventgrid-subject-path-based-filtering [IN] OBSERVATION

Event Grid supports path-based filtering on the subject field (e.g., /A/B/C) and suffix filtering (e.g., .txt) for event routing.

eventgrid-subject-path-filtering [IN] OBSERVATION

Event Grid supports path-based filtering on the subject field (e.g., /A/B/C for narrow, /A for broad) and suffix filtering (e.g., .txt), enabling flexible event routing.

eventgrid-subscription-expiration-and-filtering [IN] OBSERVATION

Event Grid event subscriptions support filtering by event type and subject, and can have an expiration time for automatic cleanup.

eventgrid-subscription-expiration-time [IN] OBSERVATION

Event Grid event subscriptions can have an expiration time set for automatic cleanup of temporary subscriptions.

eventgrid-supports-availability-zones [IN] OBSERVATION

Azure Event Grid leverages Azure availability zones for regional high availability and fault tolerance.

eventgrid-three-topic-types [IN] OBSERVATION

Event Grid has three topic types: custom topics (user-created), system topics (built-in from Azure services), and partner topics (from external SaaS/ERP providers via Partner Events).

eventhubs-append-only-log-kafka-topic-equivalent [IN] OBSERVATION

An Azure Event Hub is an append-only distributed log, equivalent to a Kafka topic; partitions are ordered sequences of events within an event hub.

eventhubs-auth-entra-sas-managed-identity [IN] OBSERVATION

Azure Event Hubs authentication options include Microsoft Entra ID (RBAC), Shared Access Signatures (SAS), and Managed Identities.

eventhubs-auto-inflate-scales-up-only [IN] OBSERVATION

Azure Event Hubs auto-inflate only scales throughput units upward, never downward.

eventhubs-auto-inflate-up-only [IN] OBSERVATION

Event Hubs Auto-inflate automatically scales throughput units upward to prevent throttling but does not scale down.

eventhubs-az-zones-premium-dedicated-only [IN] OBSERVATION

Azure Event Hubs availability zone support is available on Premium and Dedicated tiers only.

eventhubs-capture-avro-default-parquet-optional [IN] OBSERVATION

Event Hubs Capture archives streaming data to Azure Blob Storage or Data Lake Storage in Avro format (default) or Parquet (via no-code editor).

eventhubs-capture-formats-avro-parquet [IN] OBSERVATION

Event Hubs Capture supports Avro (default) and Parquet (via no-code editor) formats for archival to Blob Storage or Data Lake.

eventhubs-capture-to-blob-or-datalake [IN] OBSERVATION

Azure Event Hubs Capture automatically writes streaming data in near-real-time to Azure Blob Storage or Azure Data Lake Storage for long-term retention.

eventhubs-checkpointing-consumer-responsibility [IN] OBSERVATION

Event Hubs checkpointing (saving current offset for resumption/failover) is the consumer's responsibility, not the service's; best practice is Azure Blob Storage with a separate container per consumer group.

eventhubs-consumer-ownership-isolation-model [IN] OBSERVATION

Event Hubs enforces isolated ordered processing through two complementary mechanisms: consumer groups provide independent position tracking where each group maintains its own offset cursor in the partition log, while epoch-based ownership within each group ensures single-owner-per-partition exclusivity by evicting lower-epoch consumers, together preventing both cross-group interference and within-group split-brain concurrent processing.

eventhubs-cross-protocol-produce-consume [IN] OBSERVATION

Event Hubs supports cross-protocol reading and writing: produce via Kafka and consume via AMQP (or vice versa) on the same event hub.

eventhubs-cross-protocol-read-write [IN] OBSERVATION

Event Hubs supports cross-protocol reading: produce via Kafka and consume via AMQP, or vice versa.

eventhubs-default-consumer-group-dollar-default [IN] OBSERVATION

Event Hubs default consumer group is named $Default; each consumer group independently tracks its own position in the event stream.

eventhubs-delivery-semantic-at-least-once [IN] OBSERVATION

Event Hubs delivery guarantee is at-least once; consumers should implement the idempotent consumer pattern for exactly-once semantics.

eventhubs-direct-partition-send-discouraged [IN] OBSERVATION

Sending directly to a specific Event Hubs partition is discouraged because it downgrades availability to partition-level.

eventhubs-encryption-at-rest-and-tls12 [IN] OBSERVATION

Azure Event Hubs encrypts data at rest with Microsoft-managed or customer-managed keys and enforces TLS 1.2 for data in transit.

eventhubs-epoch-consumer-one-owner-per-partition [IN] OBSERVATION

Event Hubs epoch consumers allow only one owner per partition per consumer group; a higher epoch evicts the lower epoch consumer.

eventhubs-epoch-consumer-one-per-partition [IN] OBSERVATION

Event Hubs epoch consumers allow only one owner per partition per consumer group; a higher epoch evicts lower epoch consumers.

eventhubs-epoch-one-owner-nonepoch-five-readers [IN] OBSERVATION

Epoch consumers allow only one owner per partition per consumer group (higher epoch evicts lower); non-epoch consumers allow up to 5 concurrent readers per partition; an epoch consumer connecting disconnects all non-epoch consumers.

eventhubs-events-cannot-be-explicitly-deleted [IN] OBSERVATION

Events in Event Hubs cannot be explicitly deleted; removal is automatic based on the configured retention policy.

eventhubs-five-nonepoch-readers-per-partition [IN] OBSERVATION

Up to 5 non-epoch consumers can read the same Event Hubs partition concurrently; connecting an epoch consumer disconnects all non-epoch consumers on that partition.

eventhubs-full-kafka-interop [IN] OBSERVATION

Event Hubs provides complete Kafka interoperability: existing Kafka workloads run without code changes, cross-protocol produce/consume is supported (Kafka in, AMQP out or vice versa), and the native AMQP/Kafka/HTTPS protocol stack eliminates the need for a separate Kafka cluster.

eventhubs-geo-dr-metadata-sync [IN] OBSERVATION

Azure Event Hubs Geo-DR provides metadata synchronization and failover to a secondary region.

eventhubs-https-send-only [IN] OBSERVATION

Event Hubs HTTPS protocol supports send (publish) only — no receive capability; AMQP is used by SDKs for high-throughput bidirectional scenarios.

eventhubs-ingress-exceeds-throws-egress-silent [IN] OBSERVATION

Exceeding Event Hubs ingress capacity throws an EventHubsException with ServiceBusy reason; exceeding egress capacity is silently capped without exceptions.

eventhubs-ingress-throws-egress-silent [IN] OBSERVATION

Exceeding Event Hubs ingress capacity throws EventHubsException with ServiceBusy reason; exceeding egress capacity is silently capped without exceptions.

eventhubs-kafka-at-least-once-delivery [IN] OBSERVATION

Event Hubs Kafka delivery semantic is at-least once; consumers should implement the idempotent consumer pattern.

eventhubs-kafka-compression-gzip-only-premium-dedicated [IN] OBSERVATION

Event Hubs Kafka compression supports only gzip and is available only in Premium and Dedicated tiers; AMQP consumers can read compressed Kafka traffic as decompressed messages.

eventhubs-kafka-compression-gzip-premium-dedicated [IN] OBSERVATION

Event Hubs Kafka endpoint supports only gzip compression, available in Premium and Dedicated tiers only.

eventhubs-kafka-compression-gzip-premium-dedicated-only [IN] OBSERVATION

Event Hubs Kafka compression supports only gzip, available in Premium and Dedicated tiers only.

eventhubs-kafka-cross-protocol-read-write [IN] OBSERVATION

Event Hubs supports cross-protocol reading and writing: produce via Kafka and consume via AMQP, or vice versa.

eventhubs-kafka-delivery-at-least-once [IN] OBSERVATION

Azure Event Hubs Kafka endpoint delivery semantic is at-least-once; consumers should implement the idempotent consumer pattern.

eventhubs-kafka-migration-tier-prerequisite [IN] OBSERVATION

Event Hubs Kafka migration scope is tier-determined: full protocol interoperability (no code changes, cross-protocol produce/consume) requires Standard+, while advanced features (Kafka Streams, Transactions, gzip compression) require Premium/Dedicated — making tier selection a prerequisite constraint that must be resolved before scoping any Kafka migration plan.

eventhubs-kafka-no-code-changes [IN] OBSERVATION

Existing Apache Kafka workloads can run on Azure Event Hubs without code changes or cluster management.

eventhubs-kafka-not-basic-tier [IN] OBSERVATION

Event Hubs Kafka endpoint support is available only in Standard, Premium, and Dedicated tiers — not available on Basic.

eventhubs-kafka-oauth-oauthbearer-sas-plain [IN] OBSERVATION

Event Hubs Kafka endpoint uses SASL mechanism OAUTHBEARER for OAuth 2.0 and PLAIN with username="$ConnectionString" for SAS authentication.

eventhubs-kafka-port-9093-sasl-ssl [IN] OBSERVATION

Event Hubs Kafka endpoint uses port 9093 with mandatory TLS encryption (SASL_SSL); OAuth uses OAUTHBEARER mechanism, SAS uses PLAIN mechanism with username="$ConnectionString".

eventhubs-kafka-port-9093-tls-mandatory [IN] OBSERVATION

Event Hubs Kafka endpoint uses port 9093 with mandatory TLS encryption (SASL_SSL).

eventhubs-kafka-requires-standard-or-higher [IN] OBSERVATION

Event Hubs Kafka support requires Standard, Premium, or Dedicated tier — not available on Basic.

eventhubs-kafka-sas-key-regen-no-disconnect [IN] OBSERVATION

Event Hubs SAS connections are not disconnected when the SAS key is regenerated.

eventhubs-kafka-sas-not-disconnected-on-key-regen [IN] OBSERVATION

SAS connections to the Event Hubs Kafka endpoint are not disconnected when the SAS key is regenerated.

eventhubs-kafka-streams-preview-premium-dedicated [IN] OBSERVATION

Kafka Streams on Event Hubs is in public preview, available only in Premium and Dedicated tiers; ksqlDB is not available due to Confluent licensing.

eventhubs-kafka-streams-transactions-preview-premium-dedicated [IN] OBSERVATION

Kafka Streams and Kafka Transactions on Event Hubs are in public preview and available only in Premium and Dedicated tiers.

eventhubs-max-40-tus-per-namespace [IN] OBSERVATION

Azure Event Hubs Standard tier allows a maximum of 40 throughput units per namespace, shared across all event hubs in the namespace.

eventhubs-max-5-nonepoch-consumers-per-partition [IN] OBSERVATION

Up to 5 non-epoch consumers can read the same Event Hubs partition concurrently; connecting an epoch consumer disconnects all non-epoch consumers on that partition.

eventhubs-max-parallel-consumers-equals-partitions [IN] OBSERVATION

The number of partitions in an Event Hub equals the maximum number of parallel consumers per consumer group.

eventhubs-max-publish-size-1mb [IN] OBSERVATION

Event Hubs maximum publish size is 1 MB per operation (batch or individual event).

eventhubs-messaging-comparison [IN] OBSERVATION

Azure messaging services comparison: Event Hubs for streaming/telemetry, Service Bus for enterprise messaging with transactions and sessions, Event Grid for reactive serverless event routing.

eventhubs-non-epoch-max-5-readers-per-partition [IN] OBSERVATION

Event Hubs non-epoch consumers allow up to 5 concurrent readers per partition; an epoch consumer connecting disconnects all non-epoch consumers.

eventhubs-paas-streaming-platform [IN] OBSERVATION

Azure Event Hubs is a fully managed PaaS real-time data streaming platform that ingests millions of events per second with low latency.

eventhubs-partition-count-cannot-decrease [IN] OBSERVATION

Event Hubs partition count cannot be decreased in any tier; in Standard/Basic tiers it cannot be changed at all after creation; Premium/Dedicated tiers allow increases only.

eventhubs-partition-count-no-pricing-impact [IN] OBSERVATION

Event Hubs pricing depends on throughput/processing/capacity units, not on partition count.

eventhubs-partition-key-hash-round-robin-if-omitted [IN] OBSERVATION

Event Hubs partition key is hashed to determine partition assignment; if omitted, events are distributed round-robin across partitions.

eventhubs-partition-key-static-hash [IN] OBSERVATION

Event Hubs partition keys use a static hashing function to assign events to partitions; without a key, round-robin assignment is used.

eventhubs-partition-key-static-hash-or-round-robin [IN] OBSERVATION

Event Hubs partition keys use a static hashing function to assign events to partitions; without a partition key, round-robin assignment is used. Sending directly to a partition is discouraged as it downgrades availability to partition-level.

eventhubs-partition-key-static-hash-roundrobin-default [IN] OBSERVATION

Event Hubs partition keys use a static hashing function to assign events to partitions; without a key, round-robin assignment is used.

eventhubs-partitioning-free-architectural-choice [IN] OBSERVATION

Event Hubs partitioning is a free architectural decision with deterministic routing: partition count has no pricing impact (billing depends solely on throughput/processing/capacity units), partition keys use static hashing for consistent event-to-partition assignment, and the delivery guarantee is at-least-once regardless of partition configuration — making partition count purely a throughput and ordering design choice.

eventhubs-partitions-equal-max-parallel-consumers [IN] OBSERVATION

The number of Event Hubs partitions equals the maximum number of parallel consumers per consumer group, for both AMQP epoch consumers and Kafka consumers.

eventhubs-premium-pu-options [IN] OBSERVATION

Event Hubs Premium tier processing units (PUs) are available in discrete values: 1, 2, 4, 6, 8, 10, 12, or 16 per namespace.

eventhubs-premium-pu-options-1-2-4-6-8-10-12-16 [IN] OBSERVATION

Azure Event Hubs Premium tier processing unit (PU) options are discrete values: 1, 2, 4, 6, 8, 10, 12, or 16 per namespace.

eventhubs-premium-pu-options-discrete [IN] OBSERVATION

Azure Event Hubs Premium tier processing unit (PU) options are discrete: 1, 2, 4, 6, 8, 10, 12, or 16 per namespace.

eventhubs-progressive-tier-gating [IN] OBSERVATION

Event Hubs follows a progressive tier model: Standard provides base functionality, Premium adds Kafka protocol support with configurable processing units, and higher tiers enable additional enterprise capabilities.

eventhubs-protocols-amqp-kafka-https [IN] OBSERVATION

Azure Event Hubs natively supports three protocols: AMQP 1.0, Apache Kafka (1.0+), and HTTPS.

eventhubs-retention-standard-7-premium-90 [IN] OBSERVATION

Azure Event Hubs Standard tier supports up to 7-day data retention; Premium and Dedicated tiers support up to 90-day retention.

eventhubs-retention-standard-7d-premium-90d [IN] OBSERVATION

Event Hubs event retention: Standard tier default 1h / max 7 days; Premium and Dedicated default 1h / max 90 days.

eventhubs-retention-standard-7d-premium-dedicated-90d [IN] OBSERVATION

Event Hubs event retention maximum is 7 days for Standard tier and 90 days for Premium and Dedicated tiers; default is 1 hour across all tiers.

eventhubs-sas-key-regen-no-disconnect [IN] OBSERVATION

Event Hubs SAS connections are not disconnected when the SAS key is regenerated; generated SAS tokens are not supported on the Kafka endpoint — only connection strings.

eventhubs-schema-registry-avro-json [IN] OBSERVATION

Azure Event Hubs Schema Registry supports Avro and JSON schema formats for centralized schema management across producers and consumers.

eventhubs-single-virtual-ip-endpoint [IN] OBSERVATION

Event Hubs uses a single virtual IP as its endpoint rather than per-broker endpoints, simplifying firewall rules compared to self-managed Kafka.

eventhubs-sla-up-to-9999 [IN] OBSERVATION

Azure Event Hubs SLA is up to 99.99% depending on tier and configuration.

eventhubs-standard-retention-7-days [IN] OBSERVATION

Azure Event Hubs Standard tier supports up to 7-day data retention; Premium and Dedicated tiers support up to 90-day retention.

eventhubs-standard-tu-limits [IN] OBSERVATION

One Event Hubs throughput unit (TU) provides up to 1 MB/s or 1,000 events/s ingress and up to 2 MB/s or 4,096 events/s egress; max 40 TUs per Standard tier namespace.

eventhubs-three-protocols-amqp-kafka-https [IN] OBSERVATION

Azure Event Hubs natively supports three protocols: AMQP 1.0, Apache Kafka, and HTTPS.

eventhubs-three-rbac-roles [IN] OBSERVATION

Event Hubs has three data-plane RBAC roles: Data Owner (full), Data Sender (send only), and Data Receiver (receive only).

eventhubs-three-tiers-standard-premium-dedicated [IN] OBSERVATION

Azure Event Hubs has three pricing tiers: Standard, Premium, and Dedicated, differing in retention, features, and SLA.

eventhubs-tu-1mb-ingress-2mb-egress [IN] OBSERVATION

One Event Hubs throughput unit (TU) provides up to 1 MB/s (or 1,000 events/s) ingress and up to 2 MB/s (or 4,096 events/s) egress — limits are asymmetric.

eventhubs-vs-servicebus-vs-eventgrid [IN] OBSERVATION

Event Hubs is for streaming/telemetry (append-only log), Service Bus is for enterprise messaging with transactions/sessions/dead-lettering, Event Grid is for reactive push-based event routing with server-side filtering.

expressroute-requires-bgp-vpn-optional [IN] OBSERVATION

ExpressRoute requires BGP for route exchange; VPN gateways can optionally use BGP.

ftl2-ansible-azure-in-process-3-17x-speedup [IN] OBSERVATION

FTL2 calls Ansible Azure collection modules directly in-process (no subprocess fork), achieving 3-17x speedup over ansible-playbook.

ftl2-auto-install-azure-sdk-deps [IN] OBSERVATION

FTL2 auto-installs Azure SDK pip packages (azure-mgmt-*) via autoinstalldeps=True when missing.

ftl2-azure-ansible-in-process-3-17x-speedup [IN] OBSERVATION

FTL2 calls Azure Ansible collection modules directly in-process (no subprocess fork), achieving 3-17x speedup over ansible-playbook.

ftl2-azure-example-path [IN] OBSERVATION

The FTL2 Azure example script is located at ~/git/faster-than-light2/examples/07-azure/exampleazureweb_stack.py.

ftl2-azure-fqcn-azcollection [IN] OBSERVATION

FTL2 accesses Azure modules via FQCN pattern: await ftl.azure.azcollection.azurermresourcegroup(...).

ftl2-azure-fqcn-pattern [IN] OBSERVATION

FTL2 accesses Azure modules via FQCN pattern: await ftl.azure.azcollection.azurermresourcegroup(...).

ftl2-azure-modules-via-ansible-fqcn [IN] OBSERVATION

FTL2 accesses Azure modules via Ansible FQCN pattern: azure.azcollection.azurerm* — it has no native Azure modules.

ftl2-azure-secret-bindings-glob-pattern [IN] OBSERVATION

FTL2 injects Azure credentials (clientid, secret, subscriptionid, tenant) via glob pattern matching on azure.azcollection.* so scripts never handle raw credentials.

ftl2-azure-secret-bindings-inject-credentials [IN] OBSERVATION

FTL2 secret bindings inject Azure credentials (clientid, secret, subscriptionid, tenant) automatically via glob pattern matching on azure.azcollection.* modules.

ftl2-azure-teardown-delete-resource-group [IN] OBSERVATION

FTL2 Azure teardown pattern: delete the resource group with state="absent", forcedeletenonempty=True to remove all contained resources.

ftl2-calls-ansible-modules-in-process [IN] OBSERVATION

FTL2 calls Ansible modules directly in-process (no subprocess fork), achieving 3-17x speedup over ansible-playbook.

ftl2-no-native-azure-modules [IN] OBSERVATION

FTL2 does not have native Azure modules; all Azure calls go through Ansible module machinery via the azure.azcollection collection.

ftl2-no-native-azure-modules-uses-ansible [IN] OBSERVATION

FTL2 does not have native Azure modules; all Azure calls go through Ansible module machinery via the azure.azcollection collection.

ftl2-secret-bindings-inject-azure-credentials [IN] OBSERVATION

FTL2 secret bindings inject Azure credentials (clientid, secret, subscriptionid, tenant) automatically via glob pattern matching so scripts never see raw credentials.

ftl2-state-tracking-idempotent-crash-recovery [IN] OBSERVATION

FTL2 tracks state via .ftl2-state.json enabling idempotent provisioning with crash recovery and provider filtering.

functions-consumption-linux-retiring-sept-2028 [IN] OBSERVATION

Azure Functions Linux Consumption plan is retiring September 30, 2028; no new features/language versions after September 30, 2025. Migrate to Flex Consumption.

functions-consumption-timeout-5min-default-10min-max [IN] OBSERVATION

Azure Functions Consumption plan has a default timeout of 5 minutes and a maximum of 10 minutes; all other plans default to 30 minutes with unbounded maximum.

functions-consumption-timeout-default-5-max-10 [IN] OBSERVATION

Azure Functions Consumption plan timeout defaults to 5 minutes with a maximum of 10 minutes; all other plans default to 30 minutes with unbounded maximum.

functions-custom-handlers-any-http-language [IN] OBSERVATION

Azure Functions custom handlers enable any language that can receive HTTP requests to run as a function

functions-custom-handlers-any-language-http [IN] OBSERVATION

Azure Functions custom handlers enable any language that can receive HTTP requests to be used as a function runtime.

functions-durable-functions-stateful-workflows [IN] OBSERVATION

Durable Functions is an extension for building stateful, event-driven serverless workflows in Azure Functions

functions-durable-stateful-workflows [IN] OBSERVATION

Durable Functions is an Azure Functions extension for building stateful, event-driven serverless workflows and orchestrations.

functions-five-hosting-plans [IN] OBSERVATION

Azure Functions offers five hosting plans: Flex Consumption, Premium, Dedicated (App Service), Container Apps, and Consumption.

functions-five-native-languages [IN] OBSERVATION

Azure Functions natively supports five programming languages: C#, Java, JavaScript, PowerShell, and Python; other languages (Rust, Go) are supported via custom handlers.

functions-flex-consumption-linux-only [IN] OBSERVATION

Azure Functions Flex Consumption plan supports Linux only.

functions-flex-consumption-max-1000-instances [IN] OBSERVATION

Azure Functions Flex Consumption plan scales up to 1000 instances with per-function scaling, configurable memory (512/2048/4096 MB), and Linux only.

functions-flex-consumption-no-subnet-underscores [IN] OBSERVATION

Flex Consumption subnets cannot contain underscores in their names

functions-flex-consumption-per-function-scaling [IN] OBSERVATION

Azure Functions Flex Consumption plan uniquely supports per-function scaling where different trigger types scale independently on separate instances (HTTP grouped together, Blob/Event Grid grouped, Durable grouped).

functions-flex-consumption-routes-all-traffic-through-vnet [IN] OBSERVATION

Azure Functions Flex Consumption routes all outbound traffic through the VNet by default (no Route All setting needed), unlike other plans.

functions-flex-consumption-subnet-40-ips-per-app [IN] OBSERVATION

Azure Functions Flex Consumption requires planning for 40 IP addresses per function app regardless of actual instance count; recommended subnet size is /27.

functions-flex-consumption-subnet-delegation-microsoft-app [IN] OBSERVATION

Azure Functions Flex Consumption subnet delegation is Microsoft.App/environments, different from Premium/Dedicated plans.

functions-flex-consumption-subnet-no-underscores [IN] OBSERVATION

Azure Functions Flex Consumption subnets cannot contain underscores in their names.

functions-flex-consumption-subnet-size-27 [IN] OBSERVATION

Flex Consumption recommended subnet size is /27, planning for 40 IP addresses per function app regardless of actual instance count

functions-gateway-required-vnet-dedicated-only [IN] OBSERVATION

Gateway-required VNet integration is only supported on the Dedicated (App Service) plan

functions-gateway-vnet-integration-dedicated-only [IN] OBSERVATION

Gateway-required VNet integration is only supported on the Dedicated (App Service) plan

functions-http-230s-hard-limit-all-plans [IN] OBSERVATION

Azure Functions HTTP triggers have a 230-second response time hard limit on ALL hosting plans due to Azure Load Balancer; use Durable Functions async pattern for longer processing.

functions-http-trigger-230s-hard-limit [IN] OBSERVATION

HTTP triggers on Azure Functions are capped at 230 seconds response time across ALL hosting plans due to the Azure Load Balancer idle timeout.

functions-hybrid-connections-windows-only [IN] OBSERVATION

Azure Functions Hybrid Connections (Azure Relay) are Windows only, not supported on Consumption plan or Linux.

functions-max-5000-apps-per-subscription [IN] OBSERVATION

Maximum of 5,000 function apps per Azure subscription across all hosting plans.

functions-max-5000-per-subscription [IN] OBSERVATION

Azure Functions has a maximum of 5,000 function apps per subscription across all hosting plans.

functions-networking-consumption-no-vnet [IN] OBSERVATION

Azure Functions Consumption plan does not support private endpoints, VNet integration, or outbound IP restrictions

functions-networking-consumption-no-vnet-integration [IN] OBSERVATION

Azure Functions Consumption plan does not support private endpoints, VNet integration, or outbound IP restrictions

functions-networking-flex-consumption-routes-all-by-default [IN] OBSERVATION

Flex Consumption routes all outbound traffic through VNet by default without needing Route All configuration

functions-networking-flex-consumption-subnet-delegation [IN] OBSERVATION

Flex Consumption function apps use subnet delegation Microsoft.App/environments, which differs from Premium/Dedicated plans

functions-networking-flex-consumption-subnet-size-27 [IN] OBSERVATION

Flex Consumption recommended subnet size is /27, planning for 40 IP addresses per function app regardless of actual instance count

functions-networking-hybrid-connections-windows-only [IN] OBSERVATION

Azure Functions Hybrid Connections (Azure Relay) are Windows only and not supported on Consumption plan or Linux

functions-networking-nsg-integration-subnet-outbound-only [IN] OBSERVATION

NSGs on a VNet integration subnet affect outbound traffic only; inbound rules do not apply because VNet integration is outbound-only

functions-networking-nsgs-outbound-only [IN] OBSERVATION

NSGs on Azure Functions VNet integration subnets affect outbound traffic only; inbound rules do not apply because VNet integration is outbound-only

functions-networking-premium-dedicated-subnet-sizes [IN] OBSERVATION

Premium/Dedicated function apps: recommended subnet is /24 for Windows, /26 for Linux; each instance consumes 1 IP, usage can temporarily double during scaling

functions-networking-virtual-network-triggers-require-scale-monitoring [IN] OBSERVATION

Virtual network triggers (non-HTTP) require either Flex Consumption or Premium plan with Runtime Scale Monitoring enabled for dynamic scaling

functions-no-windows-containers-any-plan [IN] OBSERVATION

No Azure Functions hosting plan supports Windows containers; only Linux containers are supported (on Premium, Dedicated, and Container Apps).

functions-nsg-integration-subnet-outbound-only [IN] OBSERVATION

NSGs on Azure Functions VNet integration subnet affect outbound traffic only; inbound rules do not apply because VNet integration is outbound-only.

functions-premium-dedicated-subnet-size-24-windows-26-linux [IN] OBSERVATION

Azure Functions Premium/Dedicated recommended subnet size is /24 for Windows and /26 for Linux; each instance consumes 1 IP and usage can temporarily double during scaling

functions-premium-dedicated-subnet-sizes [IN] OBSERVATION

Azure Functions Premium/Dedicated plans: each instance consumes 1 IP (can temporarily double during scaling); recommended subnet /24 for Windows, /26 for Linux.

functions-python-requires-linux [IN] OBSERVATION

Azure Functions Python runtime requires Linux — no Windows support.

functions-three-main-hosting-plans [IN] OBSERVATION

Azure Functions has three main hosting options: Consumption (pay-per-execution, fully serverless), Premium (pre-warmed, fastest response), and Dedicated/App Service (predictable scaling and cost)

functions-virtual-network-triggers-require-runtime-scale-monitoring [IN] OBSERVATION

Non-HTTP virtual network triggers on Azure Functions require Flex Consumption or Premium plan with Runtime Scale Monitoring enabled for dynamic scaling.

functions-vnet-not-available-consumption [IN] OBSERVATION

Azure Functions VNet integration is NOT available on the Consumption plan; it is available on Flex Consumption, Premium, Dedicated, and Container Apps plans.

functions-vnet-not-available-consumption-plan [IN] OBSERVATION

Azure Functions VNet integration is NOT available on the Consumption plan; it is available on Flex Consumption, Premium, Dedicated, and Container Apps.

gateway-subnet-required-for-vpn-gateway [IN] OBSERVATION

A dedicated GatewaySubnet is required within the VNet for VPN gateway deployments.

hpa-effective-update-interval-60s [IN] OBSERVATION

HPA checks the Metrics API every 15 seconds, but the Metrics API refreshes from Kubelet every 60 seconds, making the effective update interval 60 seconds.

hpa-no-scale-up-delay-since-1-12 [IN] OBSERVATION

HPA has no delay for scale-up events since Kubernetes 1.12; the default scale-down cooldown is 5 minutes.

hpa-no-scale-up-delay-since-k8s-1-12 [IN] OBSERVATION

HPA has no delay for scale-up events since Kubernetes 1.12; default scale-down delay is 5 minutes.

hpa-scale-down-cooldown-5min [IN] OBSERVATION

HPA default scale-down delay is 5 minutes; there is no delay for scale-up events since Kubernetes 1.12.

k8s-not-safe-hostile-multitenant [IN] OBSERVATION

Kubernetes is not safe for hostile multitenant workloads; the security domain is the entire cluster, not individual nodes. Physically isolated clusters are required for true isolation.

k8s-pv-pvc-binding-one-to-one [IN] OBSERVATION

Kubernetes persistent volume (PV) to persistent volume claim (PVC) binding is 1:1 — each PVC binds to exactly one PV.

k8s-secret-base64-not-encryption [IN] OBSERVATION

Kubernetes Secret manifest files contain data in base64 format (encoding, not encryption) and should never be committed to source control.

k8s-secret-volumes-use-tmpfs [IN] OBSERVATION

Kubernetes secret volumes use tmpfs and are never written to disk; they are namespace-scoped

k8s-secrets-tmpfs-namespace-scoped [IN] OBSERVATION

Kubernetes Secrets are stored in tmpfs (not written to disk), are namespace-scoped, and are deleted when the last requiring pod is removed.

keda-uses-scaledobject-crd [IN] OBSERVATION

KEDA uses a CRD called ScaledObject and scales based on event count rather than resource utilization metrics.

keyvault-best-practice-one-vault-per-app [IN] OBSERVATION

Best practice is one Key Vault per application per environment (Dev, Pre-Prod, Prod) to reduce blast radius.

keyvault-cert-access-control-separate [IN] OBSERVATION

Access control for Key Vault certificates is separate from access control for keys and secrets in the same vault.

keyvault-cert-creates-key-and-secret [IN] OBSERVATION

Creating a Key Vault certificate automatically creates an addressable key and an addressable secret with the same name.

keyvault-cert-issuer-vault-scoped [IN] OBSERVATION

Certificate issuer objects in Key Vault are vault-scoped and cannot be shared across vaults.

keyvault-certificates-as-certificate-objects [IN] OBSERVATION

Certificates should be stored as Key Vault certificate objects (not secrets) to enable autorotation

keyvault-certificates-as-certificate-objects-not-secrets [IN] OBSERVATION

Certificates should be stored as Key Vault certificate objects (not secrets) to enable autorotation

keyvault-certificates-store-as-certificate-objects [IN] OBSERVATION

Certificates should be stored as Key Vault certificate objects (not secrets) to enable autorotation.

keyvault-contributor-no-data-access [IN] OBSERVATION

Key Vault Contributor role is control plane only and does NOT grant access to keys, secrets, or certificates.

keyvault-control-plane-endpoint [IN] OBSERVATION

Key Vault control plane endpoint is management.azure.com:443; data plane endpoint is <vault-name>.vault.azure.net:443.

keyvault-crypto-user-cannot-delete-keys [IN] OBSERVATION

Key Vault Crypto User role can create new keys but cannot delete them

keyvault-crypto-user-create-not-delete [IN] OBSERVATION

Key Vault Crypto User role can create new keys but cannot delete them.

keyvault-custom-roles-use-dataactions [IN] OBSERVATION

Custom roles for Key Vault data plane operations use DataActions (not Actions).

keyvault-data-access-admin-cannot-change-permission-model [IN] OBSERVATION

Key Vault Data Access Administrator can add/remove Key Vault role assignments with ABAC constraints but cannot change the permission model (requires Owner or User Access Administrator).

keyvault-data-plane-multitenant [IN] OBSERVATION

The Key Vault data plane is multitenant — multiple customer vaults can share the same public IP address.

keyvault-data-plane-multitenant-shared-ip [IN] OBSERVATION

The Key Vault data plane is multitenant — multiple customer vaults can share the same public IP address.

keyvault-defense-in-depth-key-lifecycle [IN] OBSERVATION

Key Vault provides defense-in-depth for cryptographic key lifecycle: tiered protection levels (software FIPS 140-2 L1 → asymmetric HSM → single-tenant managed HSM with symmetric keys) secure keys at appropriate cryptographic strength, while layered deletion safeguards (soft-delete → purge protection → purge operator role requirement) prevent accidental or malicious key destruction.

keyvault-encryption-leaf-key-per-vault-root-per-world [IN] OBSERVATION

Key Vault encryption uses a key hierarchy where the leaf key is unique per key vault and the root key is unique per security world, protected by FIPS 140-2 Level 3+ validated modules.

keyvault-encryption-leaf-key-unique-per-vault [IN] OBSERVATION

The encryption leaf key for secrets at rest is unique per key vault; the root key is unique per security world.

keyvault-expired-certs-retrievable-but-inoperable [IN] OBSERVATION

Expired certificates can still be retrieved from Key Vault but may fail TLS validation.

keyvault-ha-auto-replication-secondary-region [IN] OBSERVATION

Key Vault contents are automatically replicated within a region and to a secondary region with automatic failover requiring no admin action.

keyvault-hsm-keys-always-non-exportable [IN] OBSERVATION

HSM-protected keys in Key Vault are always non-exportable; only RSA and EC key types support exportable private keys.

keyvault-hsm-platform-2-fips-140-3-level-3 [IN] OBSERVATION

Key Vault HSM Platform 2 protects keys at FIPS 140-3 Level 3; all new keys and key versions use HSM Platform 2.

keyvault-keys-json-web-key-format [IN] OBSERVATION

Key Vault keys are represented as JSON Web Key (JWK) objects following JOSE specifications.

keyvault-layered-deletion-protection [IN] OBSERVATION

Key Vault provides three-layer deletion protection: soft-delete enables recovery within 7–90 days, purge protection prevents permanent deletion during retention, and purge itself requires elevated privileges (Purge Operator role or subscription Owner).

keyvault-legacy-access-policies-lack-pim-support [IN] OBSERVATION

Legacy Key Vault access policies have known vulnerabilities and lack PIM (Privileged Identity Management) support; Azure RBAC is preferred.

keyvault-managed-hsm-fips-140-2-level-3 [IN] OBSERVATION

Azure Key Vault managed HSM pools are validated at FIPS 140-2 Level 3; standard vaults use FIPS 140 validated HSMs at lower levels.

keyvault-managed-hsm-single-tenant [IN] OBSERVATION

Managed HSM pools are single-tenant with isolated security domains, while standard vaults are multi-tenant.

keyvault-microsoft-never-sees-keys [IN] OBSERVATION

Azure Key Vault is designed so Microsoft cannot see or extract customer keys.

keyvault-not-a-data-store [IN] OBSERVATION

Key Vault is not a data store — customer configurations, service configs, and general content should use Azure Storage or Cosmos DB instead.

keyvault-object-scope-rbac-read-only [IN] OBSERVATION

Object-scope RBAC assignments in Key Vault only support read operations; administrative operations require vault-level permissions.

keyvault-one-vault-per-app-region-env [IN] OBSERVATION

Key Vault best practice is one vault per application, region, and environment to reduce blast radius of security events

keyvault-one-vault-per-app-region-environment [IN] OBSERVATION

Best practice is one Key Vault per application, per region, per environment to reduce blast radius of security events.

keyvault-partnered-issuers-digicert-globalsign [IN] OBSERVATION

Only DigiCert and GlobalSign are partnered certificate issuers in Key Vault supporting automatic TLS/SSL certificate issuance and renewal.

keyvault-premium-fips-140-3-level-3 [IN] OBSERVATION

Azure Key Vault Premium tier uses HSM-protected keys (Marvell LiquidSecurity HSMs) validated to FIPS 140-3 Level 3.

keyvault-premium-hsm-key-types [IN] OBSERVATION

Premium HSM key types are RSA-HSM, EC-HSM, and OCT-HSM; these keys never leave the HSM boundary.

keyvault-premium-sku-required-for-hsm-keys [IN] OBSERVATION

Key Vault Premium SKU is required for HSM-protected keys in vaults; Standard SKU supports only software-protected keys.

keyvault-private-endpoint-key-lifecycle-isolation [IN] OBSERVATION

Key Vault's layered deletion protection (soft-delete, purge protection, purge RBAC) provides key lifecycle isolation, ensuring that cryptographic material cannot be permanently destroyed without satisfying multiple independent controls.

keyvault-purge-distinct-from-delete [IN] OBSERVATION

The purge permission is a privileged operation distinct from delete; purge permanently removes a soft-deleted secret.

keyvault-purge-privileged-operation [IN] OBSERVATION

The purge permission (permanent deletion of soft-deleted secrets) is a privileged operation distinct from delete.

keyvault-purge-protection-not-default-requires-soft-delete [IN] OBSERVATION

Key Vault purge protection is not enabled by default, requires soft-delete to be enabled first, and prevents purging until the retention period expires.

keyvault-purge-protection-prevents-permanent-deletion [IN] OBSERVATION

Key Vault purge protection prevents permanent deletion of soft-deleted objects even after soft delete is enabled.

keyvault-purge-requires-purge-operator-or-owner [IN] OBSERVATION

Purging a Key Vault requires the "Key Vault Purge Operator" built-in role or subscription owner privileges.

keyvault-purge-requires-purge-operator-or-sub-owner [IN] OBSERVATION

Purging a Key Vault requires the "Key Vault Purge Operator" built-in role or subscription owner privileges.

keyvault-rbac-not-for-managed-hsm [IN] OBSERVATION

Key Vault RBAC applies only to vaults, not managed HSMs; managed HSMs have their own access control model.

keyvault-rbac-object-scope-read-only [IN] OBSERVATION

RBAC object-scope assignments on Key Vault only support read operations; administrative operations require vault-level permissions.

keyvault-rbac-over-access-policies [IN] OBSERVATION

Legacy Key Vault access policies have known security vulnerabilities and lack PIM support; Azure RBAC is the recommended permission model

keyvault-rbac-preferred-over-access-policies [IN] OBSERVATION

Azure RBAC is preferred over legacy vault access policies for Key Vault; legacy policies have known vulnerabilities and lack PIM support.

keyvault-rbac-preferred-over-legacy-access-policies [IN] OBSERVATION

Azure RBAC is preferred over legacy vault access policies for Key Vault; legacy policies have known vulnerabilities and lack PIM support.

keyvault-rbac-recommended-over-access-policies [IN] OBSERVATION

Azure RBAC is the recommended Key Vault permission model; legacy access policies have known security vulnerabilities and lack PIM support.

keyvault-rbac-switch-invalidates-access-policies [IN] OBSERVATION

Switching to Azure RBAC permission model immediately invalidates all existing Key Vault access policies.

keyvault-recovery-does-not-restore-rbac-or-eventgrid [IN] OBSERVATION

Recovering a soft-deleted Key Vault does not restore Azure RBAC role assignments or Event Grid subscriptions — these must be manually recreated.

keyvault-recovery-no-rbac-no-eventgrid [IN] OBSERVATION

Recovering a soft-deleted Key Vault does not restore Azure RBAC role assignments or Event Grid subscriptions; these must be manually recreated.

keyvault-secret-access-control-per-vault [IN] OBSERVATION

Key Vault secret access control is per-vault (not per-secret) and is separate from key access control within the same vault.

keyvault-secret-access-control-per-vault-separate-from-keys [IN] OBSERVATION

Key Vault secret access control is per-vault (not per-secret) and is separate from key access control within the same vault.

keyvault-secret-contenttype-255-chars-no-predefined [IN] OBSERVATION

The Key Vault secret contentType field is optional, max 255 characters, with no predefined values — it serves as a hint for interpreting secret data.

keyvault-secret-contenttype-max-255-chars [IN] OBSERVATION

The Key Vault secret contentType field is an optional hint with a maximum length of 255 characters and no predefined values.

keyvault-secret-encryption-leaf-key-per-vault-root-per-world [IN] OBSERVATION

Key Vault encryption leaf key is unique per key vault; the root key is unique per security world, protected by FIPS 140-2 Level 3+ validated modules.

keyvault-secret-get-works-expired-and-not-yet-valid [IN] OBSERVATION

The get operation works on expired and not-yet-valid secrets, as an exception to the nbf/exp date-time controls.

keyvault-secret-get-works-on-expired [IN] OBSERVATION

The get operation works on expired and not-yet-valid secrets, as an exception to the normal date-time controls.

keyvault-secret-get-works-on-expired-and-not-yet-valid [IN] OBSERVATION

The get operation works on expired and not-yet-valid secrets, as an exception to the nbf/exp date-time controls.

keyvault-secret-max-15-tags [IN] OBSERVATION

Key Vault secrets support a maximum of 15 tags, each with a 512-character name and 512-character value; tags are readable by anyone with list or get permission.

keyvault-secret-max-size-25kb [IN] OBSERVATION

Azure Key Vault secrets have a maximum size of 25 KB per secret.

keyvault-secret-permissive-read-model [IN] OBSERVATION

Key Vault secrets follow a permissive read model that differs from typical access-controlled resources: the 25 KB size limit constrains stored content, the contentType field is an optional unvalidated hint (max 255 chars, no predefined values), and the get operation succeeds on both expired and not-yet-valid secrets — meaning nbf/exp date controls are advisory for reads, not enforcement boundaries.

keyvault-secured-by-perimeter-overrides-trusted-services [IN] OBSERVATION

Setting Key Vault publicNetworkAccess: SecuredByPerimeter overrides the "Allow trusted Microsoft services" firewall bypass.

keyvault-soft-delete-enabled-by-default-cannot-disable [IN] OBSERVATION

Azure Key Vault soft-delete is enabled by default on new vaults and cannot be disabled once enabled.

keyvault-soft-delete-retention-7-90-days [IN] OBSERVATION

Key Vault soft delete retention period is 7–90 days; purge protection adds a second layer preventing permanent deletion even after soft delete

keyvault-soft-delete-retention-7-90-days-default-90 [IN] OBSERVATION

Key Vault soft-delete retention period is configurable from 7 to 90 days (default 90), set at vault creation time, and cannot be changed afterward.

keyvault-soft-delete-retention-7-90-days-default-90-immutable [IN] OBSERVATION

Key Vault soft-delete retention period is configurable from 7–90 days (default 90), set at vault creation time, and cannot be changed afterward.

keyvault-soft-delete-retention-7-to-90-days [IN] OBSERVATION

Key Vault soft delete recovers deleted objects within a 7–90 day retention period; purge protection prevents permanent deletion even after soft delete.

keyvault-soft-delete-retention-7-to-90-days-default-90-immutable [IN] OBSERVATION

Key Vault soft-delete retention period is configurable from 7 to 90 days (default 90), set at vault creation time and cannot be changed afterward.

keyvault-soft-deleted-name-cannot-be-reused [IN] OBSERVATION

A soft-deleted vault's name (and object names within a vault) cannot be reused until the retention period expires.

keyvault-soft-deleted-name-cannot-reuse [IN] OBSERVATION

A soft-deleted vault's name cannot be reused until the retention period expires; same restriction applies to objects within a vault.

keyvault-soft-deleted-objects-only-purge-or-recover [IN] OBSERVATION

Only two operations are possible on soft-deleted Key Vault objects: purge and recover.

keyvault-soft-deleted-objects-two-operations [IN] OBSERVATION

Only two operations are possible on soft-deleted Key Vault objects: purge and recover.

keyvault-software-keys-fips-140-2-level-1 [IN] OBSERVATION

Software-protected keys in Key Vault are validated at FIPS 140-2 Level 1 and are only available in vaults (not Managed HSM).

keyvault-standard-fips-140-level-1 [IN] OBSERVATION

Azure Key Vault Standard tier uses software-protected keys validated to FIPS 140 Level 1.

keyvault-supports-tls-12-and-13 [IN] OBSERVATION

Azure Key Vault supports TLS 1.2 and TLS 1.3; clients can enforce TLS version during negotiation.

keyvault-symmetric-keys-managed-hsm-only [IN] OBSERVATION

Symmetric keys (oct-HSM: 128, 192, 256-bit) are only supported in Managed HSMs, not in standard vaults.

keyvault-three-auth-methods-managed-identity-recommended [IN] OBSERVATION

Key Vault supports three authentication methods in order of recommendation: (1) managed identities (best practice), (2) service principal + certificate, (3) service principal + secret (not recommended).

keyvault-three-auth-methods-ranked [IN] OBSERVATION

Key Vault authentication methods in order of recommendation: (1) Managed identities (best), (2) Service principal + certificate, (3) Service principal + secret (not recommended due to bootstrap secret rotation difficulty)

keyvault-tiered-key-protection-model [IN] OBSERVATION

Key Vault enforces a three-tier key protection model: software keys (FIPS 140-2 L1) in Standard vaults, asymmetric HSM keys in Premium vaults, and symmetric/single-tenant HSM keys exclusively in Managed HSM pools.

keyvault-tls-12-and-13 [IN] OBSERVATION

Azure Key Vault supports TLS 1.2 and 1.3; clients can enforce TLS version during negotiation.

keyvault-two-authorization-models [IN] OBSERVATION

Key Vault has two authorization models: Azure RBAC (management + data plane) and Key Vault access policies (data plane only, legacy).

keyvault-two-container-types [IN] OBSERVATION

Azure Key Vault has two container types: vaults (keys, secrets, certificates) and managed HSM pools (HSM-backed keys only).

kv-administrator-role-full-data-no-management [IN] OBSERVATION

Key Vault Administrator role provides full data plane access (keys, secrets, certificates) but cannot manage the vault resource itself or manage role assignments.

kv-auth-entra-authz-rbac-or-access-policy [IN] OBSERVATION

Key Vault authenticates via Microsoft Entra ID; authorization uses either Azure RBAC (management + data plane) or Key Vault access policy (data plane only).

kv-best-practice-one-vault-per-app [IN] OBSERVATION

Best practice is to create one Key Vault per application per environment (Dev, Pre-Prod, Prod) to segregate secrets.

kv-cert-access-control-separate [IN] OBSERVATION

Certificate access control policies in Key Vault are distinct from key and secret access control policies within the same vault.

kv-cert-contacts-shared-across-vault [IN] OBSERVATION

Certificate contacts in Key Vault are shared across all certificates in the vault.

kv-cert-creates-key-and-secret [IN] OBSERVATION

Creating a Key Vault certificate automatically creates an addressable key and an addressable secret with the same name.

kv-cert-default-key-operations [IN] OBSERVATION

When no X.509 key usage is specified, Key Vault certificate default key operations are sign, verify, wrapKey, and unwrapKey.

kv-cert-default-key-ops [IN] OBSERVATION

Default Key Vault key operations when no X.509 key usage is specified are sign, verify, wrapKey, and unwrapKey.

kv-cert-issuer-vault-scoped [IN] OBSERVATION

Certificate issuer objects in Key Vault are vault-scoped and cannot be shared across vaults.

kv-cert-lifetime-actions-two-triggers-two-actions [IN] OBSERVATION

Key Vault certificate lifetime actions support two triggers (days before expiry, lifetime percentage) and two actions (emailContacts, autoRenew).

kv-cert-partnered-issuers-digicert-globalsign [IN] OBSERVATION

Only DigiCert and GlobalSign are partnered certificate issuers in Key Vault, supporting automatic TLS/SSL certificate issuance and renewal.

kv-contributor-control-plane-only [IN] OBSERVATION

Key Vault Contributor role is control plane only — it does NOT grant access to keys, secrets, or certificates.

kv-contributor-no-data-access [IN] OBSERVATION

Key Vault Contributor role is control plane only and does NOT grant access to keys, secrets, or certificates.

kv-control-plane-endpoint-management-azure [IN] OBSERVATION

Key Vault control plane endpoint is management.azure.com:443; data plane endpoint is {vault-name}.vault.azure.net:443.

kv-control-plane-endpoint-management-azure-com [IN] OBSERVATION

Key Vault control plane endpoint is management.azure.com:443; data plane endpoint is <vault-name>.vault.azure.net:443.

kv-custom-roles-use-dataactions [IN] OBSERVATION

Custom roles for Key Vault data plane operations use DataActions (not Actions).

kv-ec-curves-p256-p384-p521-secp256k1 [IN] OBSERVATION

Key Vault supports EC curves P-256, P-384, P-521, and secp256k1 (P-256K).

kv-fips-compliance-levels [IN] OBSERVATION

Key Vault FIPS compliance: software keys = FIPS 140-2 Level 1; HSM Platform 1 = FIPS 140-2 Level 2; HSM Platform 2 and Managed HSM = FIPS 140-3 Level 3.

kv-ha-auto-replication-secondary-region [IN] OBSERVATION

Key Vault contents are automatically replicated within a region and to a secondary region; failover is automatic with no admin action required.

kv-ha-automatic-secondary-region-replication [IN] OBSERVATION

Key Vault contents are automatically replicated within a region and to a secondary region; failover is automatic with no admin action needed.

kv-hsm-keys-always-non-exportable [IN] OBSERVATION

HSM-protected keys in Key Vault are always non-exportable; only RSA and EC key types support exportable private keys.

kv-hsm-platform-2-all-new-keys [IN] OBSERVATION

All new key versions in Key Vault are created on HSM Platform 2 (FIPS 140-3 Level 3).

kv-hsm-platform-2-fips-140-3-level-3 [IN] OBSERVATION

All new key versions are created on HSM Platform 2, which provides FIPS 140-3 Level 3 protection; HSM Platform 1 (legacy) provides FIPS 140-2 Level 2.

kv-keys-jwk-representation [IN] OBSERVATION

Key Vault keys are represented as JSON Web Key (JWK) objects following JOSE specifications.

kv-managed-hsm-single-tenant-isolated [IN] OBSERVATION

Managed HSM pools are single-tenant with isolated security domains, separate from Key Vault vaults.

kv-managed-hsm-supports-symmetric-keys [IN] OBSERVATION

Managed HSMs support symmetric keys (oct-HSM: 128, 192, 256-bit); standard Key Vault vaults do not support symmetric keys.

kv-object-scope-rbac-cannot-isolate-teams [IN] OBSERVATION

Object-scope RBAC in Key Vault cannot fully isolate application teams within a single vault — administrative operations still require vault-level permissions.

kv-oct-hsm-256-quantum-resistant-cnsa [IN] OBSERVATION

oct-HSM 256-bit keys with AES in Managed HSM are considered quantum-resistant per CNSA 2.0.

kv-premium-fips-140-3-level-3 [IN] OBSERVATION

Key Vault Premium tier uses HSM-protected keys (Marvell LiquidSecurity HSMs) validated at FIPS 140-3 Level 3.

kv-premium-fips-140-3-level-3-marvell [IN] OBSERVATION

Key Vault Premium tier uses HSM-protected keys (Marvell LiquidSecurity HSMs) validated at FIPS 140-3 Level 3.

kv-premium-hsm-keys-never-leave-boundary [IN] OBSERVATION

Premium HSM key types (RSA-HSM, EC-HSM, OCT-HSM) never leave the HSM boundary.

kv-rbac-applies-to-vaults-not-managed-hsm [IN] OBSERVATION

Azure RBAC for Key Vault applies only to vaults; Managed HSMs have their own separate access control model.

kv-rbac-custom-roles-use-dataactions [IN] OBSERVATION

Custom roles for Key Vault data plane operations use DataActions (not Actions) in the role definition.

kv-rbac-not-for-managed-hsm [IN] OBSERVATION

Azure RBAC for Key Vault applies only to vaults, not to Managed HSMs, which have their own access control model.

kv-rbac-vs-access-policy-authorization [IN] OBSERVATION

Key Vault supports two authorization mechanisms: Azure RBAC (management + data plane) or Key Vault access policy (data plane only).

kv-rsa-key-sizes-2048-3072-4096 [IN] OBSERVATION

Key Vault supports RSA key sizes of 2048, 3072, and 4096 bits.

kv-software-keys-not-in-managed-hsm [IN] OBSERVATION

Software-protected keys are only available in Key Vault vaults, not in Managed HSMs.

kv-standard-fips-140-level-1 [IN] OBSERVATION

Key Vault Standard tier uses software-protected keys validated at FIPS 140 Level 1.

kv-switching-rbac-invalidates-access-policies [IN] OBSERVATION

Switching to Azure RBAC permission model for Key Vault immediately invalidates all existing access policies.

lb-admin-state-overrides-health-probe [IN] OBSERVATION

Admin State can override health probe behavior for maintenance windows on Azure Load Balancer.

lb-backend-pool-cannot-contain-private-endpoints [IN] OBSERVATION

Azure Load Balancer backend pools cannot contain Private Endpoints.

lb-backend-pool-scoped-single-vnet [IN] OBSERVATION

Azure Load Balancer backend pools are scoped to a single virtual network; rules cannot span two VNets.

lb-basic-health-probes-not-supported-with-vmss [IN] OBSERVATION

Basic SKU Load Balancer health probes are not supported with Virtual Machine Scale Sets.

lb-basic-no-https-probes-no-outbound-rules [IN] OBSERVATION

Basic SKU Load Balancer does not support HTTPS health probes, outbound rules, or HA ports, and closes all TCP connections on probe failure.

lb-basic-probe-not-supported-vmss [IN] OBSERVATION

Basic SKU Load Balancer health probes are not supported with Virtual Machine Scale Sets.

lb-basic-probes-not-supported-with-vmss [IN] OBSERVATION

Basic SKU Load Balancer health probes are not supported with Virtual Machine Scale Sets.

lb-basic-sku-retired-sept-2025 [IN] OBSERVATION

Azure Load Balancer Basic SKU was retired on September 30, 2025.

lb-does-not-store-customer-data [IN] OBSERVATION

Azure Load Balancer does not store customer data — it processes traffic in real-time without persistence.

lb-ha-ports-internal-standard-only [IN] OBSERVATION

HA Ports (protocol=all, port=0) are only supported on internal Standard Load Balancer, not on Basic or Public Load Balancers.

lb-health-probe-failure-new-connections-only [IN] OBSERVATION

Health probe failure stops new connections only; existing connections persist until the flow ends, idle timeout, or VM shutdown.

lb-http-probe-blocked-ports [IN] OBSERVATION

HTTP health probes cannot use ports 19, 21, 25, 70, 110, 119, 143, 220, or 993.

lb-http-probe-fails-on-non-200 [IN] OBSERVATION

HTTP/HTTPS health probes succeed only on HTTP 200; any other status code (403, 404, 500, etc.) causes probe failure.

lb-http-probe-no-hostname-probing [IN] OBSERVATION

HTTP health probes on Azure Load Balancer do not support hostname-based probing.

lb-http-probe-restricted-ports [IN] OBSERVATION

HTTP health probes cannot use ports 19, 21, 25, 70, 110, 119, 143, 220, or 993.

lb-http-probe-threshold-immediate-on-explicit-response [IN] OBSERVATION

For HTTP health probes, explicit responses (200 or non-200) reset the probe threshold immediately; the threshold count only applies when probes time out with no response.

lb-http-probe-timeout-30-seconds [IN] OBSERVATION

HTTP/HTTPS health probe timeout is 30 seconds; TCP probes have no separate timeout (use the probe interval).

lb-https-probe-requires-sha256-no-mutual-auth [IN] OBSERVATION

HTTPS health probes require certificates with minimum SHA256 signature hash in the entire chain and do not support mutual authentication with client certificates.

lb-icmp-ip-fragmentation-not-supported [IN] OBSERVATION

ICMP and IP fragmentation are not supported by Azure Load Balancer load-balancing rules.

lb-inbound-nat-rules-no-health-probe-required [IN] OBSERVATION

Inbound NAT rules do not require a health probe; only load-balancing rules require one.

lb-inbound-nat-rules-no-probe-required [IN] OBSERVATION

Inbound NAT rules do not require a health probe; only load balancing rules require one.

lb-inbound-nat-specific-vs-rule-all [IN] OBSERVATION

Inbound NAT rules forward traffic to a specific VM instance; load-balancing rules distribute to all instances in the backend pool.

lb-internal-frontend-never-exposed-to-internet [IN] OBSERVATION

Internal Load Balancer frontend IPs are never exposed to internet endpoints; it cannot accept traffic from the internet.

lb-internal-never-exposed-to-internet [IN] OBSERVATION

Internal Load Balancer frontend IPs are never exposed to internet endpoints; it cannot accept traffic from the internet.

lb-ip-fragmentation-not-supported [IN] OBSERVATION

IP fragmentation is not supported on Azure Load Balancer rules.

lb-multiple-frontend-ips-supported [IN] OBSERVATION

An Azure Load Balancer can have multiple frontend IP configurations.

lb-no-icmp-no-ip-fragmentation [IN] OBSERVATION

ICMP and IP fragmentation are not supported by Azure Load Balancer load-balancing rules.

lb-one-public-one-internal-nic-lb-per-availability-set [IN] OBSERVATION

An availability set is limited to one public NIC-based Load Balancer and one internal NIC-based Load Balancer; IP-based LBs are exempt from this limit.

lb-operates-at-layer-4-tcp-udp [IN] OBSERVATION

Azure Load Balancer operates at Layer 4 (Transport) of the OSI model, handling TCP and UDP only — it is not application-aware.

lb-outbound-flow-to-own-internal-frontend-fails [IN] OBSERVATION

An outbound flow from a backend VM to the frontend of its own internal Load Balancer will fail.

lb-outbound-from-backend-to-own-internal-frontend-fails [IN] OBSERVATION

An outbound flow from a backend VM to the frontend of its own internal Load Balancer will fail.

lb-outbound-to-own-internal-frontend-fails [IN] OBSERVATION

An outbound flow from a backend VM to the frontend of its own internal Load Balancer will fail.

lb-pass-through-no-tls-termination [IN] OBSERVATION

Azure Load Balancer uses a pass-through architecture with no TLS termination and no proxy, enabling ultra-low latency.

lb-passthrough-no-tls-termination [IN] OBSERVATION

Azure Load Balancer uses a pass-through architecture for ultra-low latency — it does not perform TLS termination or act as a proxy.

lb-passthrough-no-tls-termination-no-proxy [IN] OBSERVATION

Azure Load Balancer uses a pass-through architecture with no TLS termination and no proxy, enabling ultra-low latency.

lb-probe-failure-no-effect-on-outbound [IN] OBSERVATION

Outbound connectivity from backend instances is not affected by health probe failure — only inbound new connections are stopped.

lb-probe-outbound-unaffected [IN] OBSERVATION

Health probe failure affects only inbound connectivity; outbound connectivity from backend instances remains unaffected.

lb-probe-port-can-differ-from-app-port [IN] OBSERVATION

The health probe port and the application port do not have to be the same on Azure Load Balancer.

lb-probe-source-ip-168-63-129-16 [IN] OBSERVATION

All IPv4 health probes originate from source IP 168.63.129.16; IPv6 probes use link-local address fe80::1234:5678:9abc.

lb-public-handles-inbound-and-outbound [IN] OBSERVATION

A public Azure Load Balancer handles both inbound (internet to VMs) and outbound (VMs to internet via private-to-public IP translation) connectivity.

lb-public-lb-inbound-and-outbound-nat [IN] OBSERVATION

Public load balancer handles both inbound load balancing and outbound NAT by translating private IPs to public IPs.

lb-public-lb-provides-outbound-nat [IN] OBSERVATION

Public load balancer provides outbound connectivity for VMs by translating private IPs to public IPs (SNAT).

lb-standard-all-probes-down-tcp-continues [IN] OBSERVATION

Standard LB: when all probes are down, established TCP flows continue. Basic LB: all TCP flows expire when all probes are down.

lb-standard-built-on-zero-trust [IN] OBSERVATION

Standard Azure Load Balancer is built on the Zero Trust network security model.

lb-standard-closed-inbound-by-default [IN] OBSERVATION

Standard Load Balancer and standard public IPs are closed to inbound traffic by default; NSGs must explicitly allow traffic.

lb-standard-zero-trust-default-deny [IN] OBSERVATION

Standard Load Balancer implements zero-trust networking by combining a closed-by-default inbound posture with the zero-trust security model — traffic must be explicitly allowed via NSG rules before any backend communication occurs.

lb-stopped-vms-can-remain-in-backend-pool [IN] OBSERVATION

Stopped VMs can remain in an Azure Load Balancer backend pool.

lb-stopped-vms-not-probed [IN] OBSERVATION

Stopped VMs are not probed by load balancer health probes until started again.

lb-stopped-vms-remain-in-backend-pool [IN] OBSERVATION

Stopped/deallocated VMs can remain in an Azure Load Balancer backend pool.

lb-three-skus-basic-standard-gateway [IN] OBSERVATION

Azure Load Balancer has three SKUs: Basic (retired), Standard, and Gateway.

lb-vms-can-join-backend-pool-when-stopped [IN] OBSERVATION

VMs can be added to a load balancer backend pool even when in a stopped state.

lb-vms-no-public-ip-needed-for-public-lb [IN] OBSERVATION

VMs do not need a public IP address to be in a public load balancer's backend pool.

lb-zero-trust-no-customer-data-stored [IN] OBSERVATION

Azure Load Balancer is built on the Zero Trust network security model and does not store customer data — it processes traffic in real-time without persistence.

lb-zero-trust-security-model [IN] OBSERVATION

Azure Standard Load Balancer is built on the Zero Trust network security model.

managed-disks-only-lrs-zrs [IN] OBSERVATION

Azure Managed Disks only support LRS and ZRS redundancy options.

managed-disks-stored-as-page-blobs [IN] OBSERVATION

Azure Managed Disks are stored as page blobs but abstract away blob, container, and storage account management.

managed-identity-lifecycle-tradeoff [IN] OBSERVATION

Azure managed identity types present a lifecycle tradeoff: system-assigned identities auto-name their service principal to match the resource and auto-delete with it, while user-assigned identities enable cross-resource sharing but require explicit creation, assignment, and deletion.

managed-identity-to-keyvault-zero-credential-pipeline [IN] OBSERVATION

Managed identity combined with Key Vault references creates a zero-credential application pipeline: identity lifecycle is automatic (system-assigned) or shareable (user-assigned), while Key Vault references inject secrets into App Service settings via @Microsoft.KeyVault syntax — no credential ever appears in code, configuration, or environment variables at any stage.

mgmt-group-arm-caches-hierarchy-30-minutes [IN] OBSERVATION

Azure Resource Manager caches management group hierarchy details for up to 30 minutes — portal may not immediately reflect moves.

mgmt-group-hierarchy-cache-30-minutes [IN] OBSERVATION

Azure Resource Manager caches management group hierarchy details for up to 30 minutes — portal may not reflect moves immediately.

mgmt-group-max-10000-per-directory [IN] OBSERVATION

A single Microsoft Entra directory supports up to 10,000 management groups.

mgmt-group-max-6-levels-depth [IN] OBSERVATION

Management group hierarchy supports up to 6 levels of depth, excluding the root management group level and the subscription level.

mgmt-group-move-requires-write-on-child-target-current [IN] OBSERVATION

Moving a subscription or management group requires Microsoft.management/managementgroups/write permission on the child, the target parent, and the current parent management group.

mgmt-group-policies-rbac-cascade-to-descendants [IN] OBSERVATION

Policies and RBAC role assignments on a management group cascade by inheritance to all descendant management groups, subscriptions, resource groups, and resources.

mgmt-group-root-access-global-admin-elevate-only [IN] OBSERVATION

No one has default access to the root management group — only Microsoft Entra Global Admins can elevate themselves to User Access Administrator on the root.

mgmt-group-root-access-requires-global-admin-elevation [IN] OBSERVATION

No one has default access to the root management group — only Microsoft Entra Global Admins can elevate themselves to manage it.

mgmt-group-root-cannot-move-or-delete [IN] OBSERVATION

The root management group cannot be moved or deleted; its ID equals the Microsoft Entra tenant ID; its display name defaults to "Tenant root group."

mgmt-group-single-parent-rule [IN] OBSERVATION

Each management group and subscription can have only one parent management group.

mgmt-group-strict-hierarchy-model [IN] OBSERVATION

Azure management groups enforce a strict single-parent tree hierarchy with cascading RBAC and Policy inheritance, where all subscriptions must be children of a management group under the immovable tenant root.

mgmt-groups-arm-cache-hierarchy-30-minutes [IN] OBSERVATION

Azure Resource Manager caches management group hierarchy details for up to 30 minutes — portal may not reflect moves immediately.

mgmt-groups-inheritance-cascades-to-all-descendants [IN] OBSERVATION

Policies and RBAC role assignments on a management group cascade by inheritance to all descendant management groups, subscriptions, resource groups, and resources.

mgmt-groups-max-10000-per-directory [IN] OBSERVATION

A single Microsoft Entra directory supports up to 10,000 management groups.

mgmt-groups-max-6-levels-depth [IN] OBSERVATION

Management group hierarchy supports up to 6 levels of depth, excluding the root management group level and the subscription level.

mgmt-groups-move-requires-write-on-child-target-current [IN] OBSERVATION

Moving a subscription or management group requires Microsoft.management/managementgroups/write permission on the child, the target parent, and the current parent management group.

mgmt-groups-root-access-global-admin-elevate [IN] OBSERVATION

No one has default access to the root management group — only Microsoft Entra Global Admins can elevate themselves to manage it.

mgmt-groups-root-cannot-move-or-delete [IN] OBSERVATION

The root management group cannot be moved or deleted; its ID equals the Microsoft Entra tenant ID, and its default display name is "Tenant root group".

mgmt-groups-single-parent-rule [IN] OBSERVATION

Each management group and subscription can have only one parent management group.

microsoft-cloud-security-benchmark-underpins-waf [IN] OBSERVATION

Microsoft Cloud Security Benchmark provides the control framework that underpins WAF Security pillar guidance.

microsoft-recommends-private-link-over-service-endpoints [IN] OBSERVATION

Microsoft recommends Azure Private Link/private endpoints over service endpoints for new deployments.

network-contributor-covers-all-subnet-operations [IN] OBSERVATION

The Network Contributor built-in role covers all subnet RBAC operations (read, write, delete, join, joinViaServiceEndpoint).

network-contributor-no-vm-deployment [IN] OBSERVATION

Network Contributor lets you manage networks but does not allow deploying VMs or directly accessing the networks.

network-contributor-role-covers-subnet-operations [IN] OBSERVATION

The Network Contributor built-in role covers all subnet RBAC operations (read, write, delete, join, joinViaServiceEndpoint).

network-security-perimeter-ga-all-public-regions [IN] OBSERVATION

Network Security Perimeter is GA in all public cloud regions and provides a secure logical boundary for public internet PaaS traffic scenarios, complementary to Private Link.

never-disable-route-propagation-on-gatewaysubnet [IN] OBSERVATION

Route propagation must never be disabled on GatewaySubnet — the gateway will stop functioning.

nsg-infrastructure-aware-stateful-evaluation [IN] OBSERVATION

NSGs provide a complete traffic evaluation model combining ordered five-tuple matching (custom rules priority 1–4096 always before default rules 65000–65500), stateful connection tracking with graceful rule changes, and platform IP exemptions for infrastructure services (168.63.129.16, 169.254.169.254).

nsg-stateful-graceful-rule-changes [IN] OBSERVATION

NSG rule changes are non-disruptive to established connections: statefulness auto-allows return traffic for permitted flows, and rule removal only blocks new connections without terminating existing ones.

nva-deploy-different-subnet-avoid-loops [IN] OBSERVATION

NVAs must be deployed in a different subnet than the routed resources to avoid routing loops.

nva-deploy-in-different-subnet-avoid-loops [IN] OBSERVATION

NVAs must be deployed in a different subnet than the resources whose traffic they route to avoid routing loops.

nva-ip-forwarding-required-nic-and-os [IN] OBSERVATION

NVA IP forwarding must be enabled at both the Azure NIC level and the OS level for traffic forwarding to work.

object-replication-block-blobs-only [IN] OBSERVATION

Object replication supports block blobs only (not append or page blobs).

object-replication-cross-tenant-default-false [IN] OBSERVATION

AllowCrossTenantReplication defaults to false for storage accounts created after December 15, 2023.

object-replication-customer-managed-failover-not-supported [IN] OBSERVATION

Customer-managed failover is not supported on either the source or destination account in an object replication policy.

object-replication-destination-readonly [IN] OBSERVATION

The destination container becomes read-only while a replication policy is active; writes return HTTP 409 Conflict.

object-replication-fails-archive-tier [IN] OBSERVATION

Object replication fails if either the source or destination blob is moved to the archive tier.

object-replication-gpv2-premium-block-blob-only [IN] OBSERVATION

Azure Blob Storage object replication is supported only on general-purpose v2 and premium block blob storage account types.

object-replication-gpv2-premium-block-only [IN] OBSERVATION

Object replication is supported only on general-purpose v2 and premium block blob storage account types.

object-replication-max-1000-rules [IN] OBSERVATION

Each object replication policy supports up to 1,000 rules.

object-replication-max-1000-rules-per-policy [IN] OBSERVATION

Each object replication policy supports up to 1,000 rules; each rule maps one source container to one destination container.

object-replication-max-2-destinations [IN] OBSERVATION

A source account can replicate to at most 2 destination accounts; a destination account can have at most 2 replication policies.

object-replication-max-2-policies-per-destination [IN] OBSERVATION

A destination storage account can have at most 2 replication policies; a source account can replicate to at most 2 destination accounts.

object-replication-no-customer-managed-failover [IN] OBSERVATION

Customer-managed failover is not supported for storage accounts participating in object replication.

object-replication-no-customer-provided-keys [IN] OBSERVATION

Object replication fails for blobs encrypted with customer-provided keys on the source account; Microsoft-managed and customer-managed keys are supported.

object-replication-no-hierarchical-namespace [IN] OBSERVATION

Object replication is not supported for storage accounts with hierarchical namespace enabled (Data Lake Storage Gen2).

object-replication-no-hns-adls-gen2 [IN] OBSERVATION

Object replication does not support storage accounts with hierarchical namespace enabled (ADLS Gen2 / Data Lake Storage).

object-replication-policy-created-on-destination [IN] OBSERVATION

Object replication policy is created on the destination account first, then linked to the source account using the same policy ID.

object-replication-policy-created-on-destination-first [IN] OBSERVATION

Object replication policy is created on the destination account first (with policyId "default"), then linked to the source account using the assigned policy ID.

object-replication-priority-sla-15min [IN] OBSERVATION

With priority replication enabled (same continent), 99% of objects replicate within 15 minutes (SLA-backed).

object-replication-requires-changefeed-versioning [IN] OBSERVATION

Object replication requires change feed on the source account and blob versioning on both source and destination accounts.

object-replication-snapshots-not-replicated [IN] OBSERVATION

Snapshots are not replicated and version IDs are not preserved during object replication.

object-replication-version-ids-not-preserved [IN] OBSERVATION

Object replication does not preserve version IDs — destination blobs receive new version IDs.

override-default-route-redirects-all-traffic [IN] OBSERVATION

Overriding 0.0.0.0/0 causes all traffic (including to Azure service public IPs) to go through the specified next hop — unless a service endpoint is enabled for that service.

paas-connectivity-dual-model [IN] OBSERVATION

Azure offers two complementary PaaS connectivity models with distinct tradeoff profiles: service endpoints are subnet-scoped, ARM-only, require no DNS changes, but cannot reach from on-premises; Private Link is instance-scoped, routes over the Microsoft backbone, requires private DNS zones, and supports on-premises access via ExpressRoute private peering — service endpoints are simpler to deploy but fundamentally less isolated and less flexible.

policy-assignment-updates-with-definition [IN] OBSERVATION

Azure Policy assignments use the latest definition state — updating a policy definition automatically applies to all existing assignments without reassignment.

policy-audit-if-not-exists-evaluates-child-resources [IN] OBSERVATION

auditIfNotExists assesses compliance based on a child or extension resource's properties, not the resource's own properties (unlike audit); it evaluates after the Resource Provider returns success.

policy-best-practice-start-with-audit [IN] OBSERVATION

Best practice: start Azure Policy with audit/auditIfNotExists effects before enforcement (deny, modify, deployIfNotExists), and always use initiatives even for a single policy definition.

policy-compliance-evaluation-every-24-hours [IN] OBSERVATION

Azure Policy automatic compliance evaluation occurs every 24 hours; additional triggers include resource create/update, new/updated assignments, and policy definition updates.

policy-cumulative-most-restrictive [IN] OBSERVATION

When multiple Azure Policy assignments layer on a resource, the net result is cumulative most restrictive — overlapping deny policies block resources; exclusions create exceptions.

policy-definition-displayname-128-description-512 [IN] OBSERVATION

Azure Policy definition displayName is capped at 128 characters and description at 512 characters.

policy-definition-location-determines-assignment-scope [IN] OBSERVATION

An Azure Policy definition must be created at a management group or subscription; it can only be assigned within that scope's hierarchy (direct members or children).

policy-definition-mode-all-vs-indexed [IN] OBSERVATION

Azure Policy mode all evaluates resource groups, subscriptions, and all resource types; mode indexed only evaluates types supporting tags and location; Azure CLI defaults to null (equivalent to indexed), while the portal defaults to all.

policy-effect-evaluation-order [IN] OBSERVATION

Azure Policy effect evaluation order: disabledappend/modifydenyauditmanualauditIfNotExistsdenyAction; append/modify run before deny because they may alter the request and prevent a deny.

policy-explicit-deny-system [IN] OBSERVATION

Azure Policy is an explicit deny system — if any assignment denies a resource, the only way to allow it is to modify the denying assignment; no override mechanism exists.

policy-governance-enforcement-model [IN] OBSERVATION

Azure Policy operates as an explicit deny system with cumulative most-restrictive evaluation — when multiple policies overlap, the strictest wins — orthogonal to RBAC which evaluates user actions rather than resource state, making Policy the resource-centric complement to RBAC's identity-centric access control.

policy-max-20-params-definition-400-initiative [IN] OBSERVATION

Azure Policy allows maximum 20 parameters per policy definition and 400 parameters per initiative definition.

policy-max-500-definitions-per-scope [IN] OBSERVATION

Azure Policy limits: 500 policy definitions per scope, 200 initiative definitions per scope (2,500 per tenant), 200 assignments per scope, 1,000 exemptions per scope, 1,000 policies per initiative.

policy-metadata-property-limit-1024-chars [IN] OBSERVATION

Each Azure Policy metadata property (version, category, preview, deprecated, portalReview) is limited to 1024 characters.

policy-resource-provider-modes-three-ga [IN] OBSERVATION

Three Resource Provider modes are fully supported (GA): Microsoft.Kubernetes.Data, Microsoft.KeyVault.Data, and Microsoft.Network.Data; RP modes support only audit, deny, and disabled effects.

policy-single-effect-per-definition [IN] OBSERVATION

Each Azure Policy definition contains exactly one effect in its policyRule; multiple effects require multiple policy definitions.

policy-twelve-supported-effects [IN] OBSERVATION

Azure Policy supports 12 effects: addToNetworkGroup, append, audit, auditIfNotExists, deny, denyAction, deployIfNotExists, disabled, manual, modify, mutate.

policy-type-read-only-three-values [IN] OBSERVATION

Azure Policy policyType is read-only (set by the system) with three values: Builtin (Microsoft-maintained), Custom (customer-created), and Static (Regulatory Compliance, Microsoft-managed).

policy-versioning-major-minor-patch [IN] OBSERVATION

Azure Policy definitions use Major.Minor.Patch versioning; major = breaking changes/new enforcement effects, minor = rule tweaks/new allowed values, patch = string/metadata/security fixes.

private-endpoint-and-private-link-service-ga [IN] OBSERVATION

Both Azure Private Endpoint and Private Link Service (behind Standard LB) are generally available; individual PaaS services onboard to Private Link on different schedules.

private-endpoint-maps-to-single-resource-instance [IN] OBSERVATION

A private endpoint maps to a specific PaaS resource instance (not the entire service), providing data leakage protection.

private-endpoint-requires-private-dns-zones [IN] OBSERVATION

Azure Private Endpoints require Azure DNS / Private DNS Zones for name resolution of the private endpoint.

private-link-both-endpoint-and-service-ga [IN] OBSERVATION

Both Azure Private Endpoint and Private Link Service (behind Standard LB) are generally available; individual PaaS services onboard on different schedules.

private-link-monitor-data-processed-nat-port [IN] OBSERVATION

Azure Monitor tracks data processed (IN/OUT) on both private endpoints and Private Link services, plus NAT port availability for Private Link Service.

private-link-monitor-data-processed-nat-ports [IN] OBSERVATION

Azure Monitor tracks data processed (IN/OUT) on both private endpoints and Private Link services, plus NAT port availability for Private Link Service.

private-link-network-security-perimeter-ga [IN] OBSERVATION

Network Security Perimeter is GA in all public cloud regions and provides a secure logical boundary for public internet PaaS traffic scenarios, complementary to Private Link.

private-link-on-premises-via-expressroute-private-peering [IN] OBSERVATION

On-premises access to Private Link services uses ExpressRoute private peering or VPN tunnels; Microsoft peering is not required.

private-link-requires-private-dns-zones [IN] OBSERVATION

Azure DNS / Private DNS Zones are required for name resolution of private endpoints.

private-link-service-requires-standard-load-balancer [IN] OBSERVATION

Azure Private Link Service requires a Standard Load Balancer (not Basic) as its backend.

private-link-supports-cross-region-connectivity [IN] OBSERVATION

Private Link has global reach — a consumer VNet in one region can connect to services behind Private Link in a different region.

private-link-traffic-stays-on-microsoft-backbone [IN] OBSERVATION

Azure Private Link traffic traverses the Microsoft backbone network and never crosses the public internet.

private-link-triple-isolation-model [IN] OBSERVATION

Private Link achieves complete PaaS network isolation through three interlocking mechanisms: backbone-only routing eliminates public internet traversal, single-resource-instance endpoint targeting prevents cross-tenant data leakage, and private DNS zone requirements ensure name resolution stays within the private network — all three must be correctly configured for the isolation model to hold.

private-link-works-cross-tenant [IN] OBSERVATION

Azure Private Link works across different Microsoft Entra tenants with an approval call flow for connection requests.

private-link-zone-resilient [IN] OBSERVATION

Azure Private Link spans Availability Zones and is zone resilient.

public-lb-handles-inbound-and-outbound [IN] OBSERVATION

Public Azure Load Balancer handles both inbound (internet to VMs) and outbound (VMs to internet via private-to-public IP translation) connectivity.

queue-storage-max-message-64kb [IN] OBSERVATION

Azure Queue Storage messages have a maximum size of 64 KB; queues can contain millions of messages.

rbac-access-evaluation-order [IN] OBSERVATION

Azure RBAC access evaluation order: token acquisition → retrieve role/deny assignments → check deny → check roles → check conditions.

rbac-actions-control-plane-dataactions-data-plane [IN] OBSERVATION

Actions/NotActions apply to the control plane; DataActions/NotDataActions apply to the data plane.

rbac-additive-arm-authorization-model [IN] OBSERVATION

Azure RBAC enforces an additive authorization model built on Azure Resource Manager: effective permissions are the union of all role assignments with no subtraction, role definition IDs remain stable across renames for automation safety, and the Owner/Contributor split specifically gates role assignment capability — making RBAC a monotonically increasing permission surface where the only way to reduce access is to remove assignments.

rbac-additive-model [IN] OBSERVATION

Azure RBAC uses an additive model — effective permissions are the union of all role assignments; no role assignment subtracts from another.

rbac-admin-cannot-manage-via-policy [IN] OBSERVATION

The Role Based Access Control Administrator role can assign roles via RBAC but explicitly cannot manage access via Azure Policy.

rbac-admin-role-cannot-use-azure-policy [IN] OBSERVATION

The Role Based Access Control Administrator role can assign roles via RBAC but cannot manage access via Azure Policy or other mechanisms.

rbac-administrator-role-rbac-only-not-policy [IN] OBSERVATION

Role Based Access Control Administrator can only manage access via Azure RBAC, not via Azure Policy or other mechanisms.

rbac-arm-no-validate-mg-in-assignable-scopes [IN] OBSERVATION

Azure Resource Manager does not validate management group existence when specified in custom role AssignableScopes.

rbac-assignment-three-elements [IN] OBSERVATION

An Azure RBAC role assignment has exactly three elements: security principal, role definition, and scope.

rbac-built-on-arm [IN] OBSERVATION

Azure RBAC is built on Azure Resource Manager; all access decisions flow through ARM's global endpoint.

rbac-conditions-evaluated-last [IN] OBSERVATION

Conditions on Azure RBAC role assignments are evaluated last; if conditions aren't met, access is denied even if the role grants the action.

rbac-conditions-on-role-assignments [IN] OBSERVATION

Azure RBAC role assignments can include conditions that are evaluated after role matching; access is denied if conditions are not met.

rbac-custom-role-cannot-scope-to-root [IN] OBSERVATION

Custom roles cannot set AssignableScopes to the root scope ("/").

rbac-custom-role-dataactions-no-management-group-scope [IN] OBSERVATION

Custom roles with DataActions cannot be assigned at management group scope.

rbac-custom-role-max-2000-assignable-scopes [IN] OBSERVATION

Custom roles support a maximum of 2,000 AssignableScopes per role definition.

rbac-custom-role-no-root-scope [IN] OBSERVATION

Custom roles cannot have AssignableScopes set to root scope ("/").

rbac-custom-role-no-root-scope-assignable [IN] OBSERVATION

Custom roles cannot set AssignableScopes to root scope ("/").

rbac-custom-role-no-wildcards-in-assignable-scopes [IN] OBSERVATION

Wildcards cannot be used in AssignableScopes for custom role definitions.

rbac-custom-role-one-management-group-in-assignable-scopes [IN] OBSERVATION

Only one management group can be defined in a custom role's AssignableScopes.

rbac-custom-role-permission-strings-case-insensitive [IN] OBSERVATION

Azure RBAC permission strings in custom role definitions are case-insensitive; wildcards are supported but limited to one wildcard (*) per action string.

rbac-custom-role-requires-write-on-all-assignable-scopes [IN] OBSERVATION

Creating, deleting, or updating custom roles requires Microsoft.Authorization/roleDefinitions/write permission on all AssignableScopes.

rbac-custom-role-rest-api-format-differs [IN] OBSERVATION

REST API input format for custom roles nests permissions under properties.permissions[], differing from the PowerShell/CLI format which uses top-level Actions/NotActions/DataActions/NotDataActions.

rbac-custom-roles-limit-5000-per-tenant [IN] OBSERVATION

Azure has a limit of 5,000 custom roles per tenant (2,000 for 21Vianet).

rbac-data-globally-replicated [IN] OBSERVATION

Azure RBAC data (definitions, assignments, deny assignments) is stored and replicated globally across all Azure regions.

rbac-deny-assignments-take-precedence [IN] OBSERVATION

Deny assignments are evaluated before allow role assignments; if a deny applies, access is blocked regardless of role assignments.

rbac-effective-permissions-formula [IN] OBSERVATION

Azure RBAC effective permissions are calculated as Actions - NotActions for management plane and DataActions - NotDataActions for data plane.

rbac-five-privileged-roles [IN] OBSERVATION

Azure RBAC has exactly 5 privileged roles: Owner, Contributor, Reader, User Access Administrator, and Role Based Access Control Administrator.

rbac-free-with-every-subscription [IN] OBSERVATION

Azure RBAC is included free with every Azure subscription at no additional cost.

rbac-group-membership-transitive [IN] OBSERVATION

Group memberships are transitive for Azure RBAC role assignment purposes — nested group members inherit roles.

rbac-must-remove-assignments-before-deleting-custom-role [IN] OBSERVATION

All role assignments must be removed before a custom role can be deleted (error: RoleDefinitionHasAssignments).

rbac-network-contributor-cannot-deploy-vms [IN] OBSERVATION

Network Contributor role allows managing networks but does not grant permission to deploy virtual machines.

rbac-network-contributor-no-vm-deploy [IN] OBSERVATION

Network Contributor role allows managing networks but does not allow deploying VMs or accessing the networks; Virtual Machine Contributor does not grant access to the connected VNet or storage account.

rbac-notactions-exclude-not-deny [IN] OBSERVATION

NotActions excludes operations from the allowed Actions set but is not a deny — it simply subtracts from allowed permissions.

rbac-notactions-subtraction-not-deny [IN] OBSERVATION

NotActions in Azure RBAC role definitions subtracts from the Actions set — it is not a deny rule; a separate role assignment granting excluded actions will still apply.

rbac-owner-vs-contributor-role-assignment [IN] OBSERVATION

Owner role can assign roles in Azure RBAC; Contributor role cannot assign roles, manage Blueprints, or share image galleries.

rbac-permission-strings-case-insensitive [IN] OBSERVATION

Azure RBAC permission strings (e.g., Microsoft.Compute/*/read) are case-insensitive.

rbac-reader-role-id-guid [IN] OBSERVATION

The Azure RBAC Reader role has the immutable ID acdd72a7-3385-48ef-bd42-f606fba81ae7.

rbac-role-assignment-conditions [IN] OBSERVATION

Azure RBAC role assignments can include conditions evaluated after role matching; access is denied if conditions are not met.

rbac-role-four-permission-components [IN] OBSERVATION

Azure RBAC role definitions have four permission components: Actions, NotActions, DataActions, and NotDataActions.

rbac-role-ids-stable-across-renames [IN] OBSERVATION

Azure RBAC role definition IDs remain stable even if a role is renamed; best practice is to reference roles by ID in automation.

rbac-scope-hierarchy [IN] OBSERVATION

Azure RBAC scope hierarchy from broadest to narrowest: management group > subscription > resource group > resource.

rbac-storage-blob-data-owner-includes-posix-acl [IN] OBSERVATION

Storage Blob Data Owner role provides full access to blob data including the ability to assign POSIX ACLs.

rbac-storage-blob-data-reader-vs-reader [IN] OBSERVATION

Storage Blob Data Reader grants access to blob data (data plane); Reader grants management plane visibility only — they are not interchangeable.

rbac-user-access-admin-manages-access-not-resources [IN] OBSERVATION

User Access Administrator role manages user access to Azure resources but cannot manage the resources themselves.

rbac-vm-contributor-no-vnet-storage-access [IN] OBSERVATION

Virtual Machine Contributor does not grant access to the virtual network or storage account the VM connects to and cannot assign RBAC roles.

rbac-vm-contributor-no-vnet-storage-rbac [IN] OBSERVATION

Virtual Machine Contributor does not grant access to the connected VNet or storage account, nor allow RBAC assignment.

rbac-vm-contributor-no-vnet-storage-rbac-access [IN] OBSERVATION

Virtual Machine Contributor role does not grant access to the connected VNet or storage account, nor allow RBAC assignment.

rbac-wildcard-one-per-action-string [IN] OBSERVATION

Wildcards (*) are supported in Azure RBAC permission strings but only one wildcard is allowed per action string.

redis-audit-logs-premium-poll-enterprise-event [IN] OBSERVATION

Azure Cache for Redis connection audit logs use poll-based collection on Premium and event-based collection on Enterprise.

redis-basic-tier-no-sla [IN] OBSERVATION

Azure Cache for Redis Basic tier has no SLA and runs on a single VM.

redis-basic-tier-no-sla-no-replication [IN] OBSERVATION

Azure Cache for Redis Basic tier has no SLA and no data replication — suitable for dev/test only.

redis-c0-shared-cpu-core [IN] OBSERVATION

Azure Cache for Redis C0 cache uses a shared CPU core with minimal memory and noisy-neighbor issues — only for simple dev/test.

redis-cache-aside-pattern [IN] OBSERVATION

Azure Cache for Redis supports the cache-aside pattern where data is loaded into cache only as needed from the backend data store.

redis-cannot-scale-down-tiers [IN] OBSERVATION

Azure Cache for Redis can scale up from Basic to Premium but cannot scale down; Enterprise tiers support scale-up and scale-out only.

redis-clustering-premium-and-enterprise-only [IN] OBSERVATION

Azure Cache for Redis clustering is available only on Premium, Enterprise, and Enterprise Flash tiers.

redis-collocate-client-cache-same-region [IN] OBSERVATION

Azure Cache for Redis client and cache must be in the same Azure region for optimal latency and reliability.

redis-colocate-client-cache-same-region [IN] OBSERVATION

Azure Cache for Redis client application and cache should be placed in the same Azure region to minimize latency.

redis-data-persistence-premium-or-enterprise [IN] OBSERVATION

Data persistence (RDB/AOF) in Azure Cache for Redis requires Premium or Enterprise tier; not available on Basic or Standard.

redis-enterprise-flash-limited-modules [IN] OBSERVATION

Azure Cache for Redis Enterprise Flash tier supports only RediSearch (preview) and RedisJSON; full Enterprise tier supports all Redis modules (RediSearch, RedisBloom, RedisJSON, RedisTimeSeries).

redis-enterprise-flash-memory-range-300gb-4-5tb [IN] OBSERVATION

Azure Cache for Redis Enterprise Flash tier uses nonvolatile memory with a memory range of 300 GB to 4.5 TB.

redis-enterprise-flash-nonvolatile-memory [IN] OBSERVATION

Azure Cache for Redis Enterprise Flash tier uses nonvolatile memory to reduce per-GB cost, supporting up to 4.5 TB.

redis-enterprise-modules-only [IN] OBSERVATION

Only Enterprise tiers support Redis Modules (RediSearch, RedisBloom, RedisJSON, RedisTimeSeries).

redis-enterprise-multi-threaded-oss-single-threaded [IN] OBSERVATION

Azure Cache for Redis Basic/Standard/Premium use single-threaded command processing; Enterprise tiers use multi-threaded Redis Enterprise.

redis-enterprise-requires-marketplace-license [IN] OBSERVATION

Azure Cache for Redis Enterprise tiers require an Azure Marketplace license; Azure credits and free MSDN subscriptions are not supported.

redis-enterprise-requires-marketplace-payment [IN] OBSERVATION

Azure Cache for Redis Enterprise tier requires an Azure subscription with a valid payment instrument (no free credits/MSDN) and Marketplace purchases must be enabled.

redis-enterprise-requires-marketplace-purchase [IN] OBSERVATION

Azure Cache for Redis Enterprise tiers require a valid payment instrument (no free credits/MSDN) and Marketplace purchase permissions.

redis-enterprise-requires-payment-instrument [IN] OBSERVATION

Azure Cache for Redis Enterprise tier requires an Azure subscription with a valid payment instrument; free credits and MSDN subscriptions are not supported.

redis-enterprise-requires-valid-payment-instrument [IN] OBSERVATION

Azure Cache for Redis Enterprise tier requires a valid payment instrument; Azure credits and free MSDN subscriptions are not supported.

redis-enterprise-scale-up-before-out [IN] OBSERVATION

For Azure Cache for Redis Enterprise tiers, scaling up is recommended before scaling out; for OSS tiers (Basic/Standard/Premium), scaling out improves performance more than scaling up.

redis-enterprise-scale-up-before-out-oss-scale-out [IN] OBSERVATION

Azure Cache for Redis Enterprise tiers should scale up before scaling out (multi-vCPU); OSS tiers benefit more from scaling out than scaling up (single-threaded).

redis-five-service-tiers [IN] OBSERVATION

Azure Cache for Redis has five service tiers: Basic, Standard, Premium, Enterprise, and Enterprise Flash.

redis-five-tiers [IN] OBSERVATION

Azure Cache for Redis offers five service tiers: Basic, Standard, Premium, Enterprise, and Enterprise Flash.

redis-geo-replication-passive-premium-active-enterprise [IN] OBSERVATION

Azure Cache for Redis Premium tier supports passive geo-replication only; Enterprise and Enterprise Flash support active geo-replication.

redis-geo-replication-passive-vs-active [IN] OBSERVATION

Azure Cache for Redis Premium tier supports passive geo-replication; Enterprise and Enterprise Flash support active geo-replication.

redis-keys-command-avoid-production [IN] OBSERVATION

The Redis KEYS command is expensive and should be avoided in production; use SCAN instead.

redis-modules-enterprise-only [IN] OBSERVATION

Redis modules (RediSearch, RedisBloom, RedisJSON, RedisTimeSeries) are available only on Enterprise tiers of Azure Cache for Redis.

redis-no-scale-down-tier [IN] OBSERVATION

Azure Cache for Redis supports scaling up from Basic to Premium but does not support scaling down to a lower tier.

redis-oss-clustering-requires-premium [IN] OBSERVATION

OSS Redis clustering requires Azure Cache for Redis Premium tier or higher.

redis-oss-clustering-requires-premium-or-higher [IN] OBSERVATION

Azure Cache for Redis OSS clustering requires Premium tier or higher; not available on Basic or Standard.

redis-oss-single-threaded-enterprise-multi-vcpu [IN] OBSERVATION

Azure Cache for Redis OSS tiers (Basic/Standard/Premium) are single-threaded for command processing; Enterprise tiers utilize multiple vCPUs.

redis-oss-versions-4-and-6-skipped-5 [IN] OBSERVATION

Azure Cache for Redis OSS tiers support Redis versions 4.0.x and 6.0.x; Redis 5.0 was skipped.

redis-persistence-premium-enterprise-only [IN] OBSERVATION

Only Premium and Enterprise tiers of Azure Cache for Redis support data persistence (RDB and AOF).

redis-persistence-storage-premium-managed-disks-enterprise [IN] OBSERVATION

Azure Cache for Redis Premium tier uses Azure Storage for data persistence; Enterprise tier uses Managed Disks.

redis-pin-root-ca-not-intermediate [IN] OBSERVATION

Azure Cache for Redis certificate pinning should target root CAs (Baltimore CyberTrust Root, Microsoft RSA Root 2017, DigiCert Global Root G2), never intermediate or leaf certificates.

redis-pin-root-ca-not-intermediate-leaf [IN] OBSERVATION

Azure Cache for Redis certificate pinning should target root CAs (Baltimore CyberTrust Root, Microsoft RSA Root 2017, DigiCert Global Root G2), never intermediate or leaf certificates.

redis-pin-root-certificates-not-intermediates [IN] OBSERVATION

When using certificate pinning with Azure Cache for Redis, pin to root certificates — intermediate certificates rotate frequently.

redis-pin-root-certs-not-intermediates [IN] OBSERVATION

When using certificate pinning with Azure Cache for Redis, pin to root certificates, not intermediate or leaf certificates, since intermediates rotate frequently.

redis-pipelining-head-of-line-blocking [IN] OBSERVATION

Redis pipelining improves throughput but large responses can consume the timeout window for subsequent responses, causing head-of-line blocking timeouts.

redis-prefer-many-small-values [IN] OBSERVATION

Redis works best with smaller values; large data should be broken into multiple keys rather than stored as large blobs.

redis-prefer-smaller-values [IN] OBSERVATION

Redis works best with smaller values; large data should be broken into multiple keys rather than stored as large blobs.

redis-private-link-all-tiers [IN] OBSERVATION

Azure Cache for Redis supports network isolation via Private Link on all tiers (Basic through Enterprise Flash).

redis-progressive-tier-capability-ladder [IN] OBSERVATION

Azure Cache for Redis tiers progressively add capabilities: Basic provides a single-node cache, Standard adds replication, Premium adds clustering and persistence, and Enterprise/Enterprise Flash add Redis Modules — though the capability progression is not strictly additive across all dimensions.

redis-sla-covers-connectivity-not-data-loss [IN] OBSERVATION

Azure Cache for Redis SLA covers connectivity to cache endpoints only, not data loss protection.

redis-sla-covers-connectivity-only [IN] OBSERVATION

Azure Cache for Redis SLA covers connectivity to cache endpoints only, not data loss protection.

redis-smaller-values-better-performance [IN] OBSERVATION

Redis works best with smaller values; large data should be broken into smaller chunks across multiple keys.

redis-supported-versions-4-and-6 [IN] OBSERVATION

Azure Cache for Redis supports OSS Redis versions 4.0.x and 6.0.x; Redis 5.0 was skipped.

redis-tls-12-required-by-default [IN] OBSERVATION

Azure Cache for Redis requires TLS by default; TLS 1.2 is the recommended minimum version.

redis-use-hostname-not-ip [IN] OBSERVATION

Azure Cache for Redis clients should use the DNS hostname, not public IP addresses, because IPs can change on scale or backend operations.

redis-version-5-skipped [IN] OBSERVATION

Azure Cache for Redis skipped Redis version 5.0 — supported versions went from 4.0.x directly to 6.0.x.

redis-versions-4x-6x-skipped-5 [IN] OBSERVATION

Azure Cache for Redis supports Redis versions 4.0.x and 6.0.x; version 5.0 was skipped.

redis-vnet-fallback-when-no-tls [IN] OBSERVATION

If TLS encrypted connections cannot be used with Azure Cache for Redis, placing cache and client inside a virtual network is the recommended mitigation.

redis-vnet-fallback-when-tls-not-possible [IN] OBSERVATION

If TLS encryption cannot be used with Azure Cache for Redis, placing cache and client inside a virtual network is the recommended mitigation.

redis-zone-redundancy-not-basic [IN] OBSERVATION

Azure Cache for Redis zone redundancy is available on Standard, Premium, and Enterprise tiers but not on Basic tier.

redis-zone-redundancy-standard-and-above [IN] OBSERVATION

Azure Cache for Redis zone redundancy is available on Standard tier and above; Basic tier does not support zone redundancy.

redis-zone-redundancy-standard-premium-enterprise [IN] OBSERVATION

Azure Cache for Redis zone redundancy is available on Standard, Premium, and Enterprise tiers — not Basic.

sas-token-security-hierarchy [IN] OBSERVATION

Azure Storage SAS tokens follow a security hierarchy: user delegation SAS (using Entra credentials) is most secure, service SAS provides resource-level scoping, and account SAS grants the broadest access — with user delegation SAS recommended as the preferred option.

service-endpoint-policies-resource-level-granularity [IN] OBSERVATION

Service endpoint policies provide resource-level granularity, allowing only specific Azure service resource instances (e.g., specific storage accounts) over service endpoints.

service-endpoints-arm-only [IN] OBSERVATION

VNet service endpoints are only available for VNets deployed via Azure Resource Manager (not classic deployment model).

service-endpoints-arm-only-not-classic [IN] OBSERVATION

VNet service endpoints are only available for Azure Resource Manager (ARM) deployments, not classic deployments.

service-endpoints-arm-subnet-scoped-no-hybrid [IN] OBSERVATION

VNet service endpoints are triple-constrained: ARM-only (no classic deployments), subnet-scoped (each subnet independently enabled), and inaccessible from on-premises — requiring IP-based whitelisting for any hybrid connectivity to service-endpoint-secured resources.

service-endpoints-azure-sql-same-region-only [IN] OBSERVATION

For Azure SQL Database, service endpoint traffic applies only within the same region.

service-endpoints-configured-per-subnet [IN] OBSERVATION

VNet service endpoints are configured per-subnet, not per-VNet — each subnet must be independently enabled.

service-endpoints-cross-tenant-storage-keyvault [IN] OBSERVATION

VNet and service resource can be in different subscriptions; some services (Storage, Key Vault) support cross-tenant service endpoints.

service-endpoints-disk-traffic-not-affected [IN] OBSERVATION

Disk traffic (managed and unmanaged) is not affected by Azure Storage service endpoint routing changes.

service-endpoints-dns-entries-unchanged [IN] OBSERVATION

DNS entries for Azure services remain unchanged and continue resolving to public IPs even after enabling VNet service endpoints.

service-endpoints-dns-unchanged [IN] OBSERVATION

Enabling VNet service endpoints does not change DNS resolution — Azure service FQDNs still resolve to public IP addresses.

service-endpoints-dns-unchanged-public-ips [IN] OBSERVATION

DNS entries for Azure services remain unchanged when service endpoints are enabled — they still resolve to public IP addresses.

service-endpoints-enabling-closes-tcp-connections [IN] OBSERVATION

Enabling or disabling service endpoints closes existing TCP connections — should be avoided during critical operations.

service-endpoints-max-200-associations [IN] OBSERVATION

A VNet can be associated with up to 200 different subscriptions and regions per supported service when using service endpoints.

service-endpoints-max-200-subscription-region-associations [IN] OBSERVATION

A VNet can be associated with up to 200 different subscriptions and regions per supported service when using service endpoints.

service-endpoints-no-cost-no-limit [IN] OBSERVATION

VNet service endpoints have no additional cost and no limit on total service endpoints per VNet; maximum 200 subscriptions/regions per service.

service-endpoints-no-on-premises-traffic [IN] OBSERVATION

On-premises traffic cannot use VNet service endpoints; on-prem access to service-endpoint-secured resources requires IP firewall rules with NAT/public IPs.

service-endpoints-not-available-from-on-premises [IN] OBSERVATION

On-premises traffic cannot use VNet service endpoints; on-prem access to service-endpoint-secured resources requires IP firewall rules with NAT/public IPs.

service-endpoints-not-for-on-premises-traffic [IN] OBSERVATION

VNet service endpoints cannot be used for on-premises to Azure traffic; on-premises must use public/NAT IPs via IP firewall rules.

service-endpoints-onprem-cannot-use [IN] OBSERVATION

On-premises traffic cannot use VNet service endpoints — on-prem access to secured resources requires IP firewall rules with public/NAT IPs.

service-endpoints-override-forced-tunneling [IN] OBSERVATION

Service endpoint routes override forced-tunneling and UDRs for Azure service traffic, keeping it on the Azure backbone.

service-endpoints-rbac-join-action-required [IN] OBSERVATION

Enabling VNet service endpoints requires the RBAC permission Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action.

service-endpoints-require-joinviaserviceendpoint-action [IN] OBSERVATION

Enabling VNet service endpoints requires the RBAC permission Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action.

service-endpoints-resource-manager-only [IN] OBSERVATION

VNet service endpoints are only available for VNets deployed via Azure Resource Manager (not classic deployment model).

service-endpoints-switch-source-ip-public-to-private [IN] OBSERVATION

Enabling VNet service endpoints switches source IP addresses from public IPv4 to private IPv4 for service traffic, which can break existing firewall rules using public IPs.

service-tag-route-precedence-regional-over-toplevel [IN] OBSERVATION

Service tag route precedence: Regional tag > Top-level tag > AzureCloud regional > AzureCloud; an explicit IP prefix always wins over a service tag.

servicebus-auto-delete-idle-min-5min [IN] OBSERVATION

Azure Service Bus auto-delete on idle minimum interval is 5 minutes.

servicebus-auto-forwarding-same-namespace [IN] OBSERVATION

Azure Service Bus auto-forwarding chains a queue or subscription to another queue or topic within the same namespace.

servicebus-auto-forwarding-same-namespace-only [IN] OBSERVATION

Azure Service Bus auto-forwarding chains a queue or subscription to another queue or topic only within the same namespace.

servicebus-dlq-secondary-subqueue [IN] OBSERVATION

Azure Service Bus dead-letter queue is a secondary subqueue on queues and topic subscriptions for holding undeliverable messages.

servicebus-duplicate-detection [IN] OBSERVATION

Azure Service Bus supports duplicate detection — queue or topic discards duplicate copies when a sender resends, enabling safe retries.

servicebus-duplicate-detection-broker-level [IN] OBSERVATION

Azure Service Bus duplicate detection discards duplicate copies at the broker level when a sender resends due to uncertain outcome.

servicebus-exactly-once-requires-app-dedup [IN] OBSERVATION

Azure Service Bus exactly-once processing requires application-level duplicate detection on top of Peek Lock mode.

servicebus-express-entities-not-supported-premium [IN] OBSERVATION

Express entities are not supported in Azure Service Bus Premium namespaces.

servicebus-geo-replication-metadata-and-data [IN] OBSERVATION

Azure Service Bus Premium Geo-Replication replicates both metadata and data (queues, topics, subscriptions, filters, message data, state changes, namespace configuration).

servicebus-jms-premium-2-standard-1-1-queues [IN] OBSERVATION

Azure Service Bus Premium tier supports full JMS 2.0; Standard tier supports only JMS 1.1 for queues.

servicebus-large-message-batching-not-supported [IN] OBSERVATION

Azure Service Bus large message batching is not supported.

servicebus-large-msg-sbmp-http-1mb-limit [IN] OBSERVATION

Azure Service Bus large messages via SBMP or HTTP are capped at 1 MB even in Premium; only AMQP supports up to 100 MB.

servicebus-legacy-sdk-retire-sep-2026 [IN] OBSERVATION

Azure Service Bus legacy SDKs (WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus, com.microsoft.azure.servicebus) retire 30 September 2026.

servicebus-load-leveling-average-not-peak [IN] OBSERVATION

Azure Service Bus queues enable load leveling: consumers process at average load rather than peak load, reducing infrastructure requirements.

servicebus-message-sessions-enable-fifo [IN] OBSERVATION

Azure Service Bus message sessions enable FIFO (first-in, first-out) guarantee and request-response patterns.

servicebus-message-sessions-fifo [IN] OBSERVATION

Azure Service Bus message sessions enable FIFO (first-in-first-out) guarantees and request-response patterns.

servicebus-namespace-dozens-active-vms [IN] OBSERVATION

Azure Service Bus namespace is a capacity slice of a large cluster spanning dozens of all-active VMs, optionally across three availability zones.

servicebus-namespace-dozens-of-vms [IN] OBSERVATION

An Azure Service Bus namespace spans dozens of all-active VMs, optionally across three availability zones.

servicebus-namespace-spans-3-azs [IN] OBSERVATION

Azure Service Bus namespaces optionally span 3 availability zones for zone-redundant storage.

servicebus-peek-lock-at-least-once [IN] OBSERVATION

Azure Service Bus Peek Lock mode provides at-least-once semantics via two-stage receive (lock then complete or abandon).

servicebus-peek-lock-three-failure-outcomes [IN] OBSERVATION

Azure Service Bus Peek Lock has three failure outcomes: abandon (explicit unlock), lock timeout expiry (automatic unlock), or application crash — all result in the message becoming available again.

servicebus-premium-cmk-encryption [IN] OBSERVATION

Azure Service Bus customer-managed key (CMK) encryption for double encryption is a Premium-only feature, configured once at namespace creation.

servicebus-premium-cmk-encryption-one-time-setup [IN] OBSERVATION

Azure Service Bus Premium supports customer-managed key (CMK) encryption for double encryption, configured as a one-time namespace setup; not available on Standard tier.

servicebus-premium-cmk-one-time-setup [IN] OBSERVATION

Azure Service Bus Premium supports customer-managed key (CMK) encryption as a one-time setup per namespace.

servicebus-premium-cpu-scaling-thresholds [IN] OBSERVATION

Azure Service Bus Premium scaling guidance: scale down below 20% CPU, scale up above 70% CPU.

servicebus-premium-geo-replication-metadata-and-data [IN] OBSERVATION

Azure Service Bus Premium Geo-Replication continuously replicates both metadata and data to a secondary region; any secondary can be promoted to primary near-instantaneously.

servicebus-premium-jms-20-standard-jms-11 [IN] OBSERVATION

Azure Service Bus Premium tier is fully JMS 2.0 compliant; Standard tier supports only JMS 1.1 subset (queues only).

servicebus-premium-jms-20-standard-jms-11-queues [IN] OBSERVATION

Azure Service Bus Premium tier supports full JMS 2.0; Standard tier supports only JMS 1.1 for queues.

servicebus-premium-jms2-standard-jms1-queues-only [IN] OBSERVATION

Azure Service Bus Premium supports JMS 1.1 and JMS 2.0; Standard supports only JMS 1.1 for queues.

servicebus-premium-jms2-standard-jms11 [IN] OBSERVATION

Azure Service Bus Premium tier supports JMS 2.0; Standard tier supports only a JMS 1.1 subset for queues.

servicebus-premium-jms20-standard-jms11-subset [IN] OBSERVATION

Azure Service Bus Premium tier is fully JMS 2.0 compliant; Standard tier supports only a JMS 1.1 subset focused on queues.

servicebus-premium-messaging-units-1-2-4-8-16 [IN] OBSERVATION

Azure Service Bus Premium tier uses messaging units (MUs) for resource isolation; valid counts are 1, 2, 4, 8, or 16 per namespace.

servicebus-premium-mu-billing-hourly [IN] OBSERVATION

Azure Service Bus Premium messaging unit (MU) billing is hourly; you only pay for additional MUs during the hours they are active.

servicebus-premium-network-security-features [IN] OBSERVATION

Network security features (service tags, service endpoints, private endpoints, IP firewall via portal) are Azure Service Bus Premium-only.

servicebus-premium-partitioning-namespace-level [IN] OBSERVATION

Azure Service Bus Premium partitioning is set at the namespace level (all entities partitioned); Standard/Basic partitioning is per-entity with 16 fixed partitions.

servicebus-primary-protocol-amqp [IN] OBSERVATION

Azure Service Bus primary wire protocol is AMQP 1.0 (ISO/IEC standard); also supports HTTP/REST.

servicebus-pull-mode-delivery [IN] OBSERVATION

Azure Service Bus delivers messages via pull mode (long-lived pull), not push.

servicebus-queue-point-to-point-topic-pub-sub [IN] OBSERVATION

Azure Service Bus queues provide point-to-point messaging; topics provide publish/subscribe (one-to-many) messaging.

servicebus-receive-delete-at-most-once [IN] OBSERVATION

Azure Service Bus Receive and Delete mode provides at-most-once semantics; message is lost if consumer crashes before processing.

servicebus-sbmp-retiring-sep-2026 [IN] OBSERVATION

Azure Service Bus SBMP protocol is retiring September 30, 2026.

servicebus-security-sas-rbac-managed-identities [IN] OBSERVATION

Azure Service Bus supports three security mechanisms: SAS (Shared Access Signatures), RBAC, and Managed Identities.

servicebus-standard-max-256kb-premium-max-100mb [IN] OBSERVATION

Azure Service Bus Standard tier max message size is 256 KB; Premium supports up to 100 MB (AMQP only).

servicebus-subscription-default-filter-true [IN] OBSERVATION

Azure Service Bus subscription default rule is a true filter that selects all messages from the topic.

servicebus-subscription-rules-filter-plus-action [IN] OBSERVATION

Azure Service Bus subscription rules consist of a filter (selects messages) and an optional action (modifies metadata).

servicebus-subscriptions-durable-by-default [IN] OBSERVATION

Azure Service Bus subscriptions are durable by default but can be configured to auto-expire.

servicebus-transactions-single-entity [IN] OBSERVATION

Azure Service Bus transactions scope to a single messaging entity (queue, topic, or subscription).

servicebus-triple-redundant-storage [IN] OBSERVATION

Azure Service Bus stores messages in triple-redundant storage, spanning availability zones if zone-enabled.

smallest-subnet-29-gives-3-usable-ips [IN] OBSERVATION

The smallest Azure subnet is /29 (8 IPs total), which yields only 3 usable IPs after the 5 reserved addresses.

storage-account-contributor-grants-key-access [IN] OBSERVATION

Storage Account Contributor is a management plane role that provides access to account keys, enabling Shared Key authorization as an indirect data access path.

storage-archive-not-supported-zrs-gzrs [IN] OBSERVATION

Archive access tier is not supported on ZRS, GZRS, or RA-GZRS storage accounts.

storage-blob-data-owner-includes-posix-acl [IN] OBSERVATION

Storage Blob Data Owner provides full blob access including POSIX ACL management; Storage Blob Data Contributor provides read/write/delete but cannot manage ACLs.

storage-blob-delegator-required-for-user-delegation-sas [IN] OBSERVATION

The Storage Blob Delegator role is required to create user delegation SAS tokens signed with Azure AD.

storage-delegator-roles-for-sas-not-data [IN] OBSERVATION

Storage Delegator roles (Blob, File, Queue, Table) are specifically for creating user delegation SAS tokens signed with Azure AD — they do not grant direct data access.

storage-firewall-blocks-all-by-default [IN] OBSERVATION

When Azure Storage firewall rules are enabled, all requests are blocked by default — exceptions must be explicitly added for trusted Microsoft services and allowed IP ranges/subnets.

storage-geo-replication-async [IN] OBSERVATION

Geo-replication (GRS/GZRS) is asynchronous, meaning potential data loss on primary region failure; failover is required for write access.

storage-grs-gzrs-16-nines [IN] OBSERVATION

GRS and GZRS both provide 16 nines durability; GRS uses LRS in primary, GZRS uses ZRS in primary; secondary always uses LRS.

storage-gzrs-microsoft-recommended [IN] OBSERVATION

GZRS is Microsoft's recommended redundancy option for maximum consistency, durability, availability, and disaster recovery performance.

storage-gzrs-recommended-max-resilience [IN] OBSERVATION

GZRS (Geo-Zone-Redundant Storage) is Microsoft's recommended redundancy option for maximum consistency, durability, availability, and disaster recovery.

storage-lrs-11-nines-durability [IN] OBSERVATION

LRS provides 11 nines (99.999999999%) durability by replicating data 3 times within a single datacenter.

storage-lrs-3-replicas-single-datacenter [IN] OBSERVATION

LRS replicates data 3 times synchronously within a single datacenter; provides 11 nines durability.

storage-paired-region-cannot-be-changed [IN] OBSERVATION

The geo-redundant secondary region is determined by Azure based on the primary region and cannot be changed by the customer.

storage-ra-grs-read-availability-9999 [IN] OBSERVATION

RA-GRS and RA-GZRS provide 99.99% read availability for the hot tier by allowing reads from the secondary region without failover.

storage-redundancy-shared-across-all-services [IN] OBSERVATION

The redundancy setting is shared across all storage services (Blob, Files, Table, Queue) within a storage account.

storage-secondary-endpoint-suffix [IN] OBSERVATION

RA-GRS/RA-GZRS secondary endpoints use the suffix -secondary appended to the account name (e.g., myaccount-secondary.blob.core.windows.net); the same account access keys work for both endpoints.

storage-secondary-endpoint-suffix-secondary [IN] OBSERVATION

The secondary region endpoint uses the suffix -secondary (e.g., myaccount-secondary.blob.core.windows.net) and shares the same access keys as the primary.

storage-secondary-region-paired-cannot-change [IN] OBSERVATION

The geo-redundant secondary region is determined by Azure based on the primary region's paired region and cannot be changed by the customer.

storage-storagev2-all-redundancy-options [IN] OBSERVATION

Standard general-purpose v2 (StorageV2) is the only storage account type that supports all redundancy options (LRS, ZRS, GRS, RA-GRS, GZRS, RA-GZRS).

storage-unmanaged-disks-no-zrs-gzrs [IN] OBSERVATION

Unmanaged disks do not support ZRS or GZRS redundancy options.

storage-write-availability-sla-999-hot [IN] OBSERVATION

Azure Storage write availability SLA is 99.9% for the hot tier and 99% for cool, cold, and archive tiers across all redundancy options.

storage-zrs-12-nines-durability [IN] OBSERVATION

ZRS provides 12 nines (99.9999999999%) durability by replicating data synchronously across 3+ availability zones.

storage-zrs-3-availability-zones [IN] OBSERVATION

ZRS replicates data synchronously across 3+ availability zones in the primary region; provides 12 nines durability.

storage-zrs-recommended-datalake-files [IN] OBSERVATION

ZRS is Microsoft's recommended redundancy option for Azure Data Lake Storage and Azure Files workloads.

subnet-cannot-delete-with-resources [IN] OBSERVATION

A subnet can only be deleted if it contains no resources; resources must be removed first.

subnet-delegation-cannot-remove-with-deployed-resources [IN] OBSERVATION

Subnet delegation cannot be removed if the delegated service still has resources deployed in the subnet.

subnet-join-requires-join-action-rbac [IN] OBSERVATION

Subnet operations require Network Contributor role or custom role with Microsoft.Network/virtualNetworks/subnets/* actions; joining requires Microsoft.Network/virtualNetworks/subnets/join/action.

subnet-names-should-start-with-letter [IN] OBSERVATION

Subnet names should start with a letter, not a number — Application Gateway won't deploy to subnets with numeric-starting names.

subnet-nat-nsg-route-table-same-subscription-location [IN] OBSERVATION

NAT gateway, NSG, and route table associated with a subnet must be in the same subscription and location as the VNet.

subnet-network-policy-controls-private-endpoint-nsg [IN] OBSERVATION

Subnet network policy for private endpoints controls whether NSGs and route tables apply to private endpoints on the subnet.

subnet-private-preview-no-default-outbound [IN] OBSERVATION

Private Subnet (Preview) prevents default outbound internet access for VMs deployed in the subnet.

subnet-private-preview-prevents-default-outbound [IN] OBSERVATION

Private Subnet (Preview) prevents default outbound internet access for VMs deployed in the subnet.

udr-virtual-network-gateway-next-hop-vpn-only [IN] OBSERVATION

UDRs with next hop type Virtual network gateway are supported only when the gateway is a VPN gateway (not ExpressRoute, Route Server, or Virtual WAN).

udr-virtual-network-gateway-vpn-only [IN] OBSERVATION

UDRs with next hop type Virtual network gateway are supported only when the gateway is a VPN gateway (not ExpressRoute, Route Server, or Virtual WAN).

vm-contributor-no-vnet-storage-access [IN] OBSERVATION

Virtual Machine Contributor does not grant access to the virtual network or storage account the VM connects to, and cannot assign RBAC roles.

vm-ephemeral-storage-operational-model [IN] OBSERVATION

Azure VM ephemeral storage follows a consistent operational model: VM sizes with 'd' suffix include local NVMe storage that does not persist across deallocation, v5+ VMs automatically encrypt this storage at rest, and platform-defined paths (Linux /dev/disk/azure/resource, Windows drive D) provide consistent access — making ephemeral storage predictable but explicitly non-durable.

vmss-all-instances-same-base-image [IN] OBSERVATION

All VM instances in a scale set are created from the same base OS image and configuration.

vmss-flexible-supports-spot-and-ondemand-mix [IN] OBSERVATION

VMSS Flexible orchestration supports mixing Spot and on-demand VM instances together in the same scale set.

vmss-immutable-infrastructure-model [IN] OBSERVATION

VMSS instances are created from a shared base image, providing consistent initial configuration across the scale set, though post-creation configuration drift remains possible through extensions and scripts.

vnet-default-route-0000-internet [IN] OBSERVATION

The default system route for 0.0.0.0/0 has next hop type Internet; overriding it sends all traffic (including Azure service public IPs) through the specified next hop unless service endpoints provide longer-prefix matches.

vnet-default-routes-rfc1918-drop [IN] OBSERVATION

Default system routes drop traffic to RFC 1918 (10/8, 172.16/12, 192.168/16) and RFC 6598 (100.64/10) ranges with next hop type None.

vnet-gateway-hierarchy-routeserver-expressroute-vpn [IN] OBSERVATION

When multiple gateways are deployed, the hierarchy is: Route Server > ExpressRoute > VPN.

vnet-nva-deploy-different-subnet-avoid-loop [IN] OBSERVATION

Virtual appliances (NVAs) should be deployed in a different subnet than the routed resources to avoid routing loops.

vnet-private-range-added-changes-next-hop [IN] OBSERVATION

If a private address range (RFC 1918/6598) is added to a VNet's address space, its next hop automatically changes from None (drop) to Virtual network.

vnet-private-range-added-changes-nexthop-to-virtualnetwork [IN] OBSERVATION

If a private IP range (RFC 1918/6598) is added to a VNet's address space, its default system route next hop changes from None to Virtual network automatically.

vnet-rfc1918-assigned-changes-next-hop-to-virtual-network [IN] OBSERVATION

When RFC 1918 or RFC 6598 address ranges are assigned to a VNet's address space, Azure automatically changes their next hop from None to Virtual network.

vnet-rfc1918-assigned-changes-nexthop-to-virtualnetwork [IN] OBSERVATION

When RFC 1918 or RFC 6598 address ranges are assigned to a VNet's address space, Azure automatically changes their next hop from None to Virtual network.

vnet-route-propagation-never-disable-gatewaysubnet [IN] OBSERVATION

Route propagation from gateways can be disabled per-subnet, but must never be disabled on the GatewaySubnet or the gateway will stop functioning.

vnet-route-selection-priority-udr-bgp-system [IN] OBSERVATION

Route selection priority in Azure VNets is: UDR > BGP > System route (but system routes for VNet/peering/service endpoints are preferred over more-specific BGP routes).

vnet-route-server-precedence-over-vpn-expressroute [IN] OBSERVATION

Route Server takes precedence over VPN and ExpressRoute gateways when deployed in the same VNet.

vnet-routing-longest-prefix-match [IN] OBSERVATION

Azure VNet routing uses longest-prefix match to determine which route wins among same-priority routes.

vnet-service-endpoint-routes-override-bgp-and-udr [IN] OBSERVATION

System routes for VNet, peerings, and service endpoints are preferred even over more-specific BGP routes; service endpoint routes override both BGP and UDRs for matching Azure service address prefixes.

vnet-service-tag-priority-regional-first [IN] OBSERVATION

Service tag route priority order: regional tags (e.g., Storage.EastUS) > top-level tags (e.g., Storage) > AzureCloud regional tags > AzureCloud tag.

vnet-service-tag-routes-max-25-per-table [IN] OBSERVATION

Maximum 25 service-tag routes per route table in Azure UDRs.

vnet-system-routes-auto-created-cannot-delete [IN] OBSERVATION

System routes are automatically created per subnet and cannot be deleted, only overridden by UDRs or BGP routes.

vnet-system-routes-cannot-be-deleted [IN] OBSERVATION

System routes are automatically created per subnet and cannot be deleted, only overridden by UDRs or BGP routes.

vnet-udr-limit-400-expandable-to-1000 [IN] OBSERVATION

Default UDR limit per route table is 400, expandable to 1,000 with Azure Virtual Network Manager.

vnet-virtual-appliance-different-subnet-avoid-loop [IN] OBSERVATION

Virtual appliances must be deployed in a different subnet than the routed resources to avoid routing loops.

vnet-vpn-expressroute-coexist-expressroute-precedence [IN] OBSERVATION

When VPN and ExpressRoute gateways coexist without Route Server, the ExpressRoute gateway takes precedence as the VNet gateway.

waf-five-pillars [IN] OBSERVATION

The Azure Well-Architected Framework has five pillars: Reliability, Security, Cost Optimization, Operational Excellence, and Performance Efficiency.

waf-includes-assessment-tool [IN] OBSERVATION

The Azure Well-Architected Framework includes an interactive assessment tool (Azure Architecture Review) for evaluating workloads against WAF principles.

waf-l7-ddos-protection-l3l4 [IN] OBSERVATION

WAF protects at Layer 7; Azure DDoS Protection protects at Layer 3/4 — they are complementary

waf-mission-critical-always-available-guidance [IN] OBSERVATION

Mission-critical workloads have dedicated WAF guidance focused on always-available, failure-resilient design.

waf-mission-critical-dedicated-guidance [IN] OBSERVATION

Mission-critical workloads have dedicated WAF guidance focused on always-available, failure-resilient design.

waf-provides-workload-specific-lenses [IN] OBSERVATION

WAF provides workload-specific lenses with tailored guidance for AI, SaaS, SAP, Mission-critical, Oracle on IaaS, Sustainability, Azure VMware Solution, and Azure Virtual Desktop.

waf-reliability-disaster-recovery-and-testing-complementary [IN] OBSERVATION

Disaster recovery and testing strategies are distinct but complementary practices within the WAF Reliability pillar.

waf-reliability-disaster-recovery-and-testing-distinct [IN] OBSERVATION

In the WAF Reliability pillar, disaster recovery and testing strategies are distinct but complementary practices.

waf-reliability-five-design-principles [IN] OBSERVATION

The WAF Reliability pillar has five core design principles: Design for business requirements, Design for resilience, Design for recovery, Design for operations, and Keep it simple.

waf-reliability-four-strategies [IN] OBSERVATION

Reliability in WAF is achieved through four strategies: redundancy, scaling, self-healing/preservation, and simplicity.

waf-reliability-maturity-model [IN] OBSERVATION

The WAF Reliability pillar includes a maturity model for assessing reliability posture progression.

waf-reliability-sre-complementary [IN] OBSERVATION

Site Reliability Engineering (SRE) is identified as a complementary operational discipline to the WAF Reliability pillar for maintaining reliability in production.

waf-reliability-target-process [IN] OBSERVATION

Reliability target planning follows a four-step flow: identify flows → failure mode analysis → set targets → monitoring/alerting.

waf-reliability-testing-and-dr-distinct [IN] OBSERVATION

Testing strategy and disaster recovery strategy are distinct but related reliability activities within the WAF Reliability pillar.

waf-reliability-testing-and-dr-drills [IN] OBSERVATION

Testing strategy and disaster recovery drills are distinct but related activities within the WAF Reliability pillar discipline.

waf-security-asset-protection-layers [IN] OBSERVATION

WAF security asset protection covers: segmentation, identity & access management, network protection, encryption, resource hardening, and secrets management.

waf-security-cia-triad [IN] OBSERVATION

The three security objectives of the WAF Security pillar are the CIA triad: Confidentiality, Integrity, and Availability.

waf-security-cia-triad-structure [IN] OBSERVATION

The WAF Security pillar is organized around the CIA triad (confidentiality, integrity, and availability).

waf-security-defense-in-depth [IN] OBSERVATION

Defense in depth is the overarching security strategy Azure recommends in the WAF Security pillar.

waf-security-five-design-principles [IN] OBSERVATION

The WAF Security pillar has five design principles: Plan your security readiness, Design to protect confidentiality, Design to protect integrity, Design to protect availability, and Sustain and evolve your security posture.

waf-security-foundation-sequence [IN] OBSERVATION

The WAF security foundation sequence is: security baselines → secure development lifecycle (SDL) → data classification → threat monitoring → threat modeling.

waf-security-maturity-model [IN] OBSERVATION

The WAF Security pillar includes a formal security maturity model for assessing organizational readiness.

waf-security-organized-around-cia-triad [IN] OBSERVATION

The WAF Security pillar is organized around the CIA triad: confidentiality, integrity, and availability.

waf-security-validation-loop-continuous [IN] OBSERVATION

The WAF Security pillar treats security testing and incident response as a continuous improvement validation loop, not a one-time activity.

waf-service-guides-per-azure-service [IN] OBSERVATION

The Azure Well-Architected Framework provides per-service WAF service guides with pillar-specific recommendations for individual Azure services.

waf-service-guides-per-service [IN] OBSERVATION

The Azure Well-Architected Framework provides per-service service guides with pillar-specific recommendations for individual Azure services.

waf-service-guides-per-service-recommendations [IN] OBSERVATION

WAF service guides provide per-service architectural recommendations aligned with WAF pillars, bridging framework-level principles and individual Azure service configuration.

acr-unified-security-model [OUT] OBSERVATION

ACR provides a unified security model for container registry access: five authentication methods cover all identity scenarios, all image transfers are HTTPS/TLS-encrypted, and access governance flows through a single control plane.

aks-full-zero-trust-secrets-at-rest [OUT] OBSERVATION

AKS achieves full zero-trust protection for secrets at rest when combining infrastructure-level network zero-trust (inherited from Azure's NSG/LB default-deny stack) with Key Vault's network-isolated defense-in-depth key lifecycle for external secret storage.

aks-runtime-security-defense-in-depth [OUT] OBSERVATION

AKS provides runtime security defense-in-depth across compute and storage layers: AppArmor and seccomp profiles restrict container actions following least-privilege, while managed disks provide automatic encryption at rest for node storage — but the defense-in-depth model has a gap at the application data layer where Kubernetes Secrets use base64 encoding rather than encryption.

aks-secrets-end-to-end-protected [OUT] OBSERVATION

AKS provides end-to-end secret protection at rest: customer-managed keys encrypt etcd storage via KMS encryption, backed by Key Vault where Microsoft cannot see or extract the encryption keys — ensuring the full chain from secret storage to key management is cryptographically secured.

aks-storage-complete-cross-os [OUT] OBSERVATION

AKS provides complete persistent storage coverage across all access modes when Azure Disk supplies ReadWriteOnce with topology-aware zone-aligned provisioning and Azure Files supplies ReadWriteMany — unless the workload requires cross-OS persistent volume sharing in mixed Windows/Linux clusters.

aks-zero-trust-infrastructure-inheritance [OUT] OBSERVATION

AKS in custom VNet inherits the full Azure zero-trust infrastructure stack: control plane NSG rules (TCP 443, 4443, 9988) operate within a dual-layer filtering model where the foundational infrastructure IP 168.63.129.16 — serving both DNS resolution and health probes — must be preserved while all other traffic defaults to deny, creating a four-layer dependency chain from infrastructure IP through network filtering to control plane access.

appservice-secret-injection-network-isolated [OUT] OBSERVATION

App Service can achieve fully network-isolated secret injection: Key Vault references inject secrets via managed identity from a vault whose defense-in-depth key lifecycle (tiered FIPS protection, three-layer deletion safeguards) is completely isolated from public internet through Private Link's triple isolation model — secrets flow from HSM to application runtime without traversing any public network path.

azure-architecture-co-design-mandate [OUT] OBSERVATION

Azure architecture design mandates simultaneous co-design of security and observability within the tier envelope: tier selection constrains the achievable security and observability ceiling (substrate choice is second-order within it), while the circular dependency between monitoring (depends on identity/governance for workspace access) and security (depends on monitoring for detection/response) prevents sequential configuration of these domains.

azure-architecture-substrate-within-tier-envelope [OUT] OBSERVATION

Compute substrate choice (AKS vs App Service) is architecturally second-order: the tier-governed triple constraint cascade bounds the achievable security, HA, and cost envelope, within which both substrates achieve equivalent defense-in-depth through the same underlying platform stack — making tier selection the first-order decision and substrate selection an implementation detail within it.

azure-cache-redis-stable-tier-investment [OUT] OBSERVATION

Azure Cache for Redis provides a stable, production-grade caching platform with progressive tier capabilities from Standard through Enterprise Flash.

azure-compute-encryption-fully-verified [OUT] OBSERVATION

Both AKS and App Service achieve fully encrypted secret lifecycle from platform key management through application delivery when combining platform-independent Key Vault integration with dual-layer FIPS-tiered encryption at rest and universal TLS in transit — unless AKS Kubernetes-native secrets expose an unencrypted gap in etcd storage.

azure-compute-secret-isolation-platform-independent [OUT] OBSERVATION

Both AKS and App Service achieve fully network-isolated secret injection through the same underlying Azure platform stack (Key Vault defense-in-depth + Private Link triple isolation + managed identity + NSG default-deny), proving the secret isolation pattern is compute-platform-independent.

azure-container-isolation-follows-platform-pattern [OUT] OBSERVATION

Container supply chain network isolation (ACR Premium private endpoints through AKS custom VNet with Private Link) is a specific instance of the broader infrastructure-to-PaaS isolation model, confirming that Azure's Private Link architecture scales consistently from generic PaaS services to specialized container workflows without requiring container-specific isolation mechanisms.

azure-container-isolation-tier-cascade-instance [OUT] OBSERVATION

Container supply chain network isolation (ACR Premium → Private Link → AKS custom VNet) is a concrete instance of the platform-wide tier-cascading constraint model: ACR Premium gates private endpoints and content trust, AKS standard LB inherits zero-trust default-deny, and the compound tier requirements across both services demonstrate that multi-service deployment pipelines inherit the tier cascade at each service boundary.

azure-design-triple-constraint-cascade [OUT] OBSERVATION

Azure architecture is governed by a triple constraint cascade: tier selection is the root decision that simultaneously constrains HA, security isolation, and operational capability; identity governance independently gates who can configure and observe each tier's capabilities; and observability is the terminal constraint, doubly gated by both tier and identity — making monitoring the first capability to degrade when either upstream constraint is misconfigured.

azure-dns-complete-hybrid-resolution [OUT] OBSERVATION

Azure DNS provides complete hybrid name resolution without VM-based forwarders: Private Resolver handles bidirectional on-premises/Azure resolution, and private zone data is globally resilient across regions — enabling a fully managed DNS architecture for hybrid environments.

azure-dns-operational-risk-compounds-zero-trust [OUT] OBSERVATION

The zero-trust infrastructure stack's dependence on 168.63.129.16 for both DNS resolution and health probing creates an operational coupling with DNS asymmetries: misconfiguring custom DNS (which requires preserving the infrastructure IP), failing to renew DHCP after DNS changes, or omitting FQDNs in cross-VNet queries can break the same infrastructure IP that health probes depend on — making DNS configuration errors a cascade failure point for load balancer health.

azure-dns-resolution-infrastructure-coupled-to-asymmetries [OUT] OBSERVATION

Azure DNS resolution depends on an immovable infrastructure IP (168.63.129.16) for recursive resolution and health probing while exhibiting three cross-VNet operational asymmetries (PTR scope, DHCP renewal, FQDN requirement) that compound in multi-VNet and hybrid architectures.

azure-five-dimension-security-fully-orthogonal [OUT] OBSERVATION

Azure achieves fully orthogonal five-dimension security enforcement — where governance, network, identity, data protection, and compute isolation can each be independently configured without hidden cross-plane dependencies — only when no infrastructure-level coupling undermines the assumed independence of the access and data protection planes.

azure-governance-dns-hidden-coupling [OUT] OBSERVATION

Azure's two nominally orthogonal security planes (governance via RBAC/Policy and network via NSG/LB) share a hidden infrastructure coupling through DNS: the 168.63.129.16 virtual IP underpins both health probing (network plane operational dependency) and recursive name resolution (required by all service discovery), creating a single point of operational risk that compounds with DNS cross-VNet asymmetries to undermine the zero-trust assumptions of both planes.

azure-governance-network-orthogonal-security-planes [OUT] OBSERVATION

Azure security operates through two orthogonal enforcement planes that must both be configured: governance (RBAC + Policy cascading through management group hierarchy) controls authorization, while network zero-trust (NSG + LB default-deny + infrastructure IP 168.63.129.16) controls traffic flow — breaching one plane does not bypass the other.

azure-identity-convergence-reinforces-security-pillars [OUT] OBSERVATION

Azure's three independently enforced security pillars (identity, governance, network) are increasingly unified as data-plane access converges toward Entra-based managed identity as the universal authentication mechanism: the convergence reduces the number of independent credential types (deprecating shared keys and non-delegated SAS tokens) while the three-pillar model ensures this identity root is enforced consistently across governance (RBAC), network (Private Link), and cryptographic (Key Vault) boundaries.

azure-identity-drives-key-protection-scope [OUT] OBSERVATION

Azure identity model choices constrain cryptographic key protection scope: the Entra identity-to-authorization chain determines Key Vault data-plane access, while Key Vault's network-isolated defense-in-depth lifecycle provides tiered FIPS protection — the identity topology (system vs user-assigned MI, app registration across tenants) bounds what key protection levels are reachable.

azure-identity-verified-end-to-end-data-plane [OUT] OBSERVATION

Azure achieves fully identity-verified end-to-end data-plane access — from Entra authentication through RBAC authorization to cryptographic key access — when the identity-to-authorization chain controls both Key Vault data-plane access and the data-plane security gradient across storage, messaging, and compute services.

azure-migration-trilemma-resolution-required [OUT] OBSERVATION

Azure migration planning requires explicit resolution of a three-dimensional optimization problem: migration tier gates (SQL MI for lift-and-shift, Hyperscale for scale, Database for new workloads) compound with the tier-cost-security trilemma where selecting a price floor simultaneously constrains the security ceiling and operational capability envelope, making migration target selection inseparable from cost and security posture decisions.

azure-monitor-complete-observability-chain [OUT] OBSERVATION

Azure Monitor achieves a complete observability chain — from identity-governed data collection through retention-aligned alerting to automated response — when workspace access controls, retention tiers, and dual-ingestion pipelines all function without auxiliary table plan limitations degrading query and alert capabilities.

azure-monitor-complete-workspace-coverage [OUT] OBSERVATION

Azure Monitor's shared workspace platform provides complete observability coverage where all telemetry flows through Log Analytics with consistent security controls, DCR-based collection, and multi-consumer access (Monitor, Sentinel, Defender).

azure-monitor-fully-actionable-all-table-plans [OUT] OBSERVATION

Azure Monitor observability is fully actionable — all ingested data can trigger alerts, feed insights, and be exported — when dual ingestion (preaggregated metrics plus log collection with DCR transformations) flows through workspaces where compound risk decisions (retention, table plans, filtering) are consistently configured across all three product consumers.

azure-network-dual-layer-filtering [OUT] OBSERVATION

Azure network traffic requires explicit allowlisting at two independent filtering layers: Standard Load Balancer enforces zero-trust default-deny at the load balancer boundary, while NSGs provide stateful, non-disruptive rule enforcement at the subnet/NIC level — both must independently permit traffic for end-to-end flow, and rule changes at either layer are non-disruptive to established connections.

azure-network-isolation-infrastructure-to-paas [OUT] OBSERVATION

Azure provides end-to-end network isolation from infrastructure to individual PaaS instances: the zero-trust infrastructure stack (default-deny LB + NSG dual filtering + infrastructure IP preservation) secures the VNet perimeter, while Private Link (backbone routing + per-resource mapping + private DNS) extends isolation to individual service instances with no public internet traversal.

azure-network-zero-trust-infrastructure-stack [OUT] OBSERVATION

Azure networking enforces zero-trust at two orthogonal layers — a foundational infrastructure IP (168.63.129.16) that must be preserved for DNS and health probes, and a dual-layer filtering model (LB default-deny + NSG statefulness) that blocks all other traffic by default — creating a posture where infrastructure services are implicitly trusted while application traffic requires explicit allowlisting at both layers.

azure-observability-security-circular-dependency [OUT] OBSERVATION

Azure observability and security form a circular dependency that must be resolved simultaneously: monitoring depends on governance and identity for workspace access, DCR configuration, and data integrity, while the access-and-data protection planes depend on observability (Sentinel, Defender, alert processing rules) for threat detection and compliance verification — neither can be fully effective without the other.

azure-observability-security-codesign-tier-bounded [OUT] OBSERVATION

Azure observability and security must be co-designed within the tier-determined capability envelope: the circular dependency (monitoring depends on identity for workspace access; security depends on monitoring for detection) cannot be resolved sequentially, while the tier cascade simultaneously constrains which monitoring capabilities (table plans, zone redundancy, retention) and security features (private endpoints, network isolation) are available for that co-design.

azure-paas-network-access-dual-layer-requirement [OUT] OBSERVATION

Azure PaaS network access requires alignment across two independently configured layers — infrastructure-level filtering (Standard LB default-deny + NSG stateful rules) and PaaS-level connectivity (service endpoints for subnet-scoped access or Private Link for per-instance backbone isolation) — either layer independently capable of blocking traffic if misconfigured.

azure-peering-extends-zero-trust-across-vnets [OUT] OBSERVATION

VNet peering extends the dual-layer filtering model across network boundaries: backbone-only routing preserves the Standard LB default-deny posture and NSG stateful evaluation across peered VNets, meaning zero-trust enforcement (explicit allowlisting at both LB and NSG layers) applies consistently within and between peered networks without requiring additional security configuration at the peering boundary.

azure-platform-security-three-pillar-convergence [OUT] OBSERVATION

Azure security converges through three independently enforced pillars that must all be configured consistently for workload-level protection: identity (Entra→RBAC→Key Vault data-plane access via tiered FIPS protection), governance (Policy+RBAC cascading through management group hierarchy with additive-then-deny evaluation), and network (zero-trust dual-layer filtering at infrastructure IP and NSG/firewall levels).

azure-secure-workload-isolation-fully-identity-verified [OUT] OBSERVATION

Azure achieves fully identity-verified workload isolation when substrate-independent defense-in-depth (container and PaaS achieving equivalent protection through the same platform stack) operates within three-pillar security convergence (identity, governance, and network all consistently configured).

azure-security-five-dimension-enforcement [OUT] OBSERVATION

Azure comprehensive workload security requires independently configuring five enforcement dimensions that decompose into two orthogonal planes: the access plane (identity via Entra, authorization via RBAC, governance via Policy) and the protection plane (network isolation via LB/NSG/Private Link, encryption at-rest and in-transit) — any unconfigured dimension creates a gap regardless of the others.

azure-spot-vm-viable-mixed-production-workload [OUT] OBSERVATION

Azure Spot VMs combined with VMSS Flexible orchestration form a viable mixed-instance production workload model: the compound constraint envelope (eviction with ~30s notice, separate quota pool, no B-series, no conversion after creation) is manageable when Flexible orchestration mixes Spot and on-demand instances in the same scale set for graceful degradation under eviction pressure.

azure-storage-defense-in-depth-complete [OUT] OBSERVATION

Azure Storage provides defense-in-depth with automatic encryption at rest (optionally customer-managed keys via Key Vault) and firewall rules that block all requests by default until exceptions are explicitly added — unless the workload relies on Resource Manager locks for data protection, since locks prevent account deletion but do not prevent data deletion within the account, leaving a gap between perceived and actual protection.

azure-storage-full-geo-read-access [OUT] OBSERVATION

Azure Storage provides full read-access geo-redundancy (RA-GRS/RA-GZRS) across all storage types, enabling read access to secondaries during primary region outages.

azure-tier-cost-security-capability-trilemma [OUT] OBSERVATION

Azure tier selection creates a three-way constraint between cost floor, security ceiling, and operational capability: the progressive tier pattern sets a minimum price to unlock required features (Premium for Private Link, Enterprise for modules), reservations provide partial compute-only savings within the chosen tier, and security isolation capabilities (network isolation, encryption options) are gated by the same tier — optimizing any two necessarily constrains the third.

azure-workload-five-dimension-isolation-complete [OUT] OBSERVATION

Azure workload isolation achieves complete coverage across all five security enforcement dimensions — network infrastructure isolation through secrets delivery mapping onto identity, governance, network, data protection, and compute boundaries — when the end-to-end isolation chain from network to secrets is fully intact across all enforcement planes.

azure-workload-isolation-network-to-secrets [OUT] OBSERVATION

End-to-end workload isolation from infrastructure network layer through secrets delivery is achievable independently of compute substrate: the zero-trust infrastructure stack (default-deny LB + NSG filtering) extends via Private Link to PaaS boundaries, and both AKS and App Service inject secrets through the same Key Vault + managed identity stack operating within that isolation boundary — creating a continuous isolation chain from network edge to application runtime.

azure-workload-isolation-substrate-independent [OUT] OBSERVATION

Both container (AKS) and PaaS (App Service) compute substrates achieve equivalent defense-in-depth through the same underlying Azure platform stack — identity-driven secret injection, private-endpoint network isolation, and orthogonal governance enforcement — making workload security posture independent of compute substrate choice.

azuresql-backup-uniform-compression [OUT] OBSERVATION

Azure SQL automated backups achieve uniform 3–4x compression across full, differential, and transaction log backup types at the configured frequency.

azuresql-comprehensive-backup-resilience [OUT] OBSERVATION

Azure SQL provides comprehensive backup resilience spanning short-term PITR and long-term retention up to 10 years across all three availability models, with Service Fabric managing automatic failover and health monitoring — unless cross-subscription restore is needed, which is not supported for any restore type (PITR, geo-restore, or LTR), requiring a disruptive restore-then-copy workaround.

azuresql-migration-with-full-data-protection [OUT] OBSERVATION

Azure SQL migration achieves full data protection when tier-constrained path selection (MI for lift-and-shift, Hyperscale for scale) combines with three-layer cryptographic integrity (three encryption layers plus ledger tamper-evidence plus row-level security) — unless the target tier's backup retention ceiling creates a recovery gap.

container-platform-identity-verified-defense-in-depth [OUT] OBSERVATION

Container platform from ACR registry to AKS runtime achieves fully Entra-identity-verified defense-in-depth across all security layers — supply chain integrity (content trust + Notary V2 signing) with end-to-end network isolation (Private Link backbone routing + per-resource mapping) and identity-integrated secrets management (managed identity→Key Vault lifecycle) — when all authentication flows consistently use the Entra model.

container-supply-chain-identity-unified [OUT] OBSERVATION

Container supply chain from ACR to AKS achieves unified Entra-based identity verification: registry authentication, image pull, and deployment authorization all flow through the same Entra identity model with lifecycle-managed credentials.

entra-identity-keyvault-secrets-lifecycle-integration [OUT] OBSERVATION

Azure identity and secrets management form an integrated lifecycle that must be designed together: Entra's dual-model identity system provides authentication (app registrations for multi-tenant, managed identities for Azure-native), while Key Vault's defense-in-depth lifecycle (tiered FIPS + layered deletion protection) secures the cryptographic material accessed via those identities.

eventhubs-kafka-production-feature-complete [OUT] OBSERVATION

Event Hubs Kafka interoperability is production-feature-complete: existing workloads migrate without code changes, cross-protocol produce/consume works natively, and at-least-once delivery semantics match standard Kafka behavior — with no feature gaps blocking production adoption.

eventhubs-kafka-seamless-topology-migration [OUT] OBSERVATION

Event Hubs provides seamless Kafka migration combining full protocol interoperability (no code changes required) with simplified networking (single virtual IP endpoint instead of per-broker addressing) and tier-gated access.

functions-full-network-isolation [OUT] OBSERVATION

Azure Functions supports full network isolation with private endpoints, VNet integration, and subnet-scoped outbound control across Premium and Dedicated hosting plans.

keyvault-rbac-complete-access-model [OUT] OBSERVATION

Key Vault RBAC provides complete fine-grained access control with separate permission boundaries for keys, secrets, and certificates, replacing legacy access policies that lack PIM support and have known vulnerabilities — unless the workload uses Managed HSM, which has its own access control model entirely outside vault RBAC.

lb-complete-layer-4-traffic-model [OUT] OBSERVATION

Azure Load Balancer provides a complete Layer-4 traffic model with ultra-low latency pass-through architecture (no TLS termination, no proxy) handling all transport-layer protocols.

redis-enterprise-flash-complete-module-platform [OUT] OBSERVATION

Redis Enterprise Flash provides a complete high-performance caching platform combining progressive tier capabilities with extended non-volatile memory range (300GB–4.5TB) and full module ecosystem.

servicebus-premium-complete-jms-platform [OUT] OBSERVATION

Azure Service Bus Premium provides a complete JMS 2.0 messaging platform with dedicated messaging unit isolation (1, 2, 4, 8, or 16 MUs), AMQP 1.0 wire protocol, and triple-redundant storage — unless the workload depends on large message batching, which Service Bus does not support, requiring application-level message chunking as a workaround.

servicebus-premium-geo-replicated-enterprise-messaging [OUT] OBSERVATION

Azure Service Bus Premium provides enterprise messaging with full geographic replication (metadata and data) and dedicated resource isolation (1–16 messaging units per namespace).

servicebus-reliable-messaging-complete [OUT] OBSERVATION

Azure Service Bus provides reliable messaging with three complementary guarantees: duplicate detection prevents double-processing at the broker level, Peek Lock ensures at-least-once delivery via two-stage receive, and message sessions enable strict FIFO ordering — but falls short of exactly-once without application-level deduplication logic.

vnet-global-peering-full-lb-reachability [OUT] OBSERVATION

VNet peering provides full load balancer reachability across regions with latency parity to single-VNet deployments within the same region.

Topics