REVIEW AREA 01 / 15
Architecture & governance
Start with business outcomes, shared responsibility, and a deliberate platform design.
1.01
Choose AKS only when Kubernetes fits the workload
HighCompare AKS with Azure Container Apps, App Service, and other managed platforms against portability, orchestration, networking, team skills, operational cost, and compliance needs. Record the decision and the workload owner before provisioning a cluster.
1.02
Choose AKS Automatic or Standard deliberately
HighEvaluate AKS Automatic for managed production defaults and Standard for infrastructure customization. Verify feature, region, networking, Windows, and operational constraints. Validate service-managed defaults rather than assuming either mode makes applications production-ready.
1.03
Review the platform against the AKS Well-Architected baseline
HighReview reliability, security, cost optimization, operational excellence, and performance efficiency using the AKS baseline architecture and Well-Architected guidance. Record design trade-offs, owners, residual risks, and evidence for each applicable control.
1.04
Document shared responsibility and operational ownership
HighDefine ownership for cluster configuration, workload patching, identities, data protection, upgrades, monitoring, incident response, and costs. AKS manages the control plane; customers still own application resilience, workload configuration, and service dependencies.
1.05
Use landing-zone governance and explicit environment boundaries
MediumPlace clusters in the intended management group, subscription, and network architecture. Define Azure Policy, resource naming and tags, budget ownership, data residency, and separation of production from nonproduction access and change paths.
1.06
Define evidence-based review outcomes and exceptions
HighFor each applicable check, record an owner, evidence, status, and a time-bound remediation or risk acceptance. Priorities are review guidance, not a universal risk score. Explicitly mark nonapplicable items and revisit the assessment after major changes.
1.07
Gate preview features and verify regional availability
HighPrefer generally available supported features for production. Review preview terms, SLA exclusions, region and cloud availability, Kubernetes minimums, and exit plans before any approved exception. Feature names alone do not establish production support.
REVIEW AREA 02 / 15
Identity & access
Use Microsoft Entra ID, least privilege, and secretless access.
2.01
Use AKS-managed Microsoft Entra authentication
HighIntegrate cluster sign-in with AKS-managed Microsoft Entra ID. Use group-based access, Conditional Access where applicable, and kubelogin; do not use the retired legacy Entra integration.
2.02
Choose and enforce least-privilege cluster authorization
HighChoose Azure RBAC for Kubernetes authorization or Kubernetes RBAC with Microsoft Entra groups. Distinguish Azure management-plane roles from in-cluster data-plane permissions, avoid routine cluster-admin access, and test denied operations.
2.03
Pull images from ACR using the kubelet managed identity
MediumGrant the kubelet identity AcrPull for a non-ABAC registry. For an ABAC-enabled registry, assign Container Registry Repository Reader at the appropriate scope; --attach-acr is not supported in that permissions mode. Keep the ACR admin account disabled.
2.04
Use managed identities for cluster infrastructure
HighUse managed identities rather than service principals for the AKS control plane and kubelet. Scope permissions separately; workloads must use their own federated identities, not inherit node permissions.
2.05
Limit access to admin kubeconfig (get-credentials --admin)
MediumTo limit who can get that Kubernetes configuration (kubeconfig) information and to limit the permissions they then have, you can use Azure role-based access control (Azure RBAC).
2.06
Use kubelogin and federated identities for automation
MediumUse the supported kubelogin authentication flow for Microsoft Entra-integrated clusters. Prefer workload identity federation or managed identity for CI/CD instead of long-lived client secrets, and validate noninteractive access from the deployment runner.
2.07
Disable local accounts and test emergency access
MediumDisable local Kubernetes accounts on Microsoft Entra-integrated clusters. Document an audited emergency-access procedure, restrict who can change the setting, and rotate previously issued cluster certificates where required.
2.08
Use time-bound privileged access where required
LowUse Microsoft Entra Privileged Identity Management for eligible group or Azure role assignments. Require approval and MFA for privileged operations, log activation, and test access expiry.
2.09
Pre-create a kubelet identity when role assignment requires it
LowUse a pre-created user-assigned kubelet identity when permissions must exist before cluster creation. Grant only the registry and infrastructure access it needs; account for role-assignment propagation delays.
2.10
Apply Conditional Access to interactive cluster access
LowEvaluate Microsoft Entra Conditional Access for administrators, including MFA and device requirements. Test the chosen kubelogin flow and document separate controls for workload and automation identities.
REVIEW AREA 03 / 15
Cluster security
Harden the platform and enforce a measurable security baseline.
3.01
Map regulated workloads to current compliance requirements
MediumMap controls to the current regulatory standard, such as PCI DSS 4.x, and validate the AKS shared-responsibility model. Use supported FIPS-enabled images where mandated; an architecture example or Azure certification does not itself make an application compliant.
3.02
Assess customer-managed encryption keys and their lifecycle
LowAKS encrypts data at rest using platform protection. If customer-managed keys are required, assess supported KMS options and Key Vault availability, permissions, purge protection, rotation, and recovery. The newer KMS data-encryption experience is documented as preview; do not treat it as a production default.
Distinguish legacy etcd KMS from the newer KMS data-encryption configuration. Check Kubernetes version, regional availability, and support status before enabling either; loss of a required key can make encrypted secrets unrecoverable.
3.03
Enforce risk-based image admission controls
MediumScan images in CI and continuously in the registry. Enforce approved registries, digest-based releases, and risk policy through supported admission controls. Verify the support status and actual enforcement of any vulnerability-aware integration, define time-bound exceptions with owners, and do not assume that registry scanning alone blocks deployment.
3.04
Integrate Key Vault using the Secrets Store CSI driver
HighUse the AKS Azure Key Vault provider with Microsoft Entra Workload ID. Enable rotation where required and test that applications reload mounted secrets. Environment variables do not automatically refresh; synchronizing to a Kubernetes Secret creates an additional stored copy.
3.05
Monitor cloud security posture with Microsoft Defender for Cloud
MediumReview Defender for Cloud recommendations and assign remediation owners. Connect security posture to Azure Policy and your incident workflow; distinguish posture assessment from the paid Defender for Containers runtime protection plan.
3.06
Clean unused cached images without confusing cleanup with remediation
HighEvaluate AKS Image Cleaner for unused images on nodes. It does not patch images or remove vulnerable containers that are currently running: rebuild the image and redeploy affected workloads to remediate those risks.
3.07
Enable Microsoft Defender for Containers
HighMicrosoft Defender for Containers provides protections for your Kubernetes clusters wherever they're running (AKS and on-premises)
3.08
Use Azure Policy for Kubernetes to ensure cluster compliance
MediumAzure Policy integrates with the Azure Kubernetes Service (AKS) to apply at-scale enforcements and safeguards on your clusters in a centralized, consistent manner.
3.09
Separate system and application node pools
MediumIn AKS Standard, dedicate appropriately sized Linux system pools to critical cluster components and run applications on user pools. Use the CriticalAddonsOnly taint where appropriate and provide production redundancy. System pools are not the managed control plane.
3.10
Migrate legacy service principals and rotate remaining credentials
HighMigrate cluster infrastructure to managed identities. Where a legacy service principal remains, rotate credentials before expiry under an audited policy and test the change; a fixed quarterly interval alone does not manage credential risk.
3.11
Use a private registry for your images, such as ACR
HighAzure Container Registry allows you to build, store, and manage container images and artifacts in a private registry
3.12
Continuously assess cluster security configuration
MediumRun supported CIS-aligned configuration assessments and review drift in RBAC, network exposure, admission policy, and workload permissions. Record accepted risks and remediation dates rather than treating an assessment score as proof of compliance.
3.13
Evaluate confidential computing for specific threat models
LowEvaluate the supported AKS confidential-computing options against your workload and compliance needs. Distinguish application enclaves from confidential virtual machines and confidential containers; verify SKU, region, attestation, OS, and feature support rather than assuming every container automatically runs inside an enclave.
3.14
Define app separation requirements (namespace/nodepool/cluster)
HighPlan for multi-tenant clusters and separation of resources and use logical or physical isolation in your AKS clusters
3.15
Evaluate Dedicated Hosts only for explicit isolation requirements
LowUse Azure Dedicated Hosts when dedicated physical capacity is required and supported for the node configuration. Plan host capacity, failure domains, maintenance, and additional cost; this does not remove application-level security responsibilities.
3.16
Enforce Pod Security Standards and least-privilege containers
HighApply Pod Security Admission or equivalent Azure Policy controls. Progress from audit to enforcement; for Linux workloads prefer restricted settings, non-root users, seccomp RuntimeDefault, dropped capabilities, read-only filesystems, and no privilege escalation. Document narrowly scoped exceptions.
3.17
Protect node metadata and minimize node identity permissions
HighMinimize node managed-identity permissions and use federated workload identities. AKS IMDS restriction is documented as preview, applies to non-host-network pods, and requires assessment of support terms and compatibility. Do not assume a generic NetworkPolicy blocks all metadata or host-network access.
REVIEW AREA 05 / 15
Networking & ingress
Design address space, private connectivity, ingress, and outbound dependencies.
5.01
Choose Azure CNI Overlay or Pod Subnet deliberately
MediumPrefer Azure CNI Overlay for efficient address use, or Azure CNI Pod Subnet when directly routable pod addresses are required. Validate OS and policy-engine compatibility. Kubenet is a legacy model retiring on 31 March 2028; do not select it for new deployments.
5.02
Plan node and pod address capacity including upgrade surge
HighSize address space for the actual network model, maximum nodes, maxPods, scale-out, and concurrent surge upgrades. Overlay separates pod and node address space; flat networking consumes VNet pod addresses. Include private endpoints, load balancers, peering, and future growth.
5.03
Choose supported L7 ingress and plan Gateway API migration
MediumUse a supported ingress or Gateway API implementation for HTTP routing, TLS, and policy. Upstream Ingress NGINX maintenance ended in March 2026; AKS application routing NGINX critical-security-patch support runs through November 2026. Evaluate application routing Gateway API, Application Gateway for Containers, or Istio ingress against feature and support requirements.
5.04
Protect internet-facing HTTP applications with an appropriate WAF
MediumChoose a supported WAF architecture, such as Azure Front Door Premium or Application Gateway WAF, when required by the threat model. Tune managed rules, restrict origin access, validate TLS and health probes, and test that the origin cannot bypass the WAF.
5.05
Restrict ingress hostnames and Gateway API delegation
LowConstrain approved hostnames, cross-namespace references, and who can attach routes to shared gateways. Use admission controls and Gateway API allowedRoutes/ReferenceGrant rules as appropriate; test that tenants cannot claim another application hostname.
5.06
Expose only the load balancers that need public access
HighUse internal load balancers for private services and public endpoints only for intentional internet-facing applications. An internal load balancer still needs authentication, network controls, DNS, and a tested access path.
5.07
Enforce pod network policy using a supported engine
MediumApply and test ingress and egress policies with explicit DNS and dependency allowances. Azure CNI Powered by Cilium is recommended for supported Linux configurations; validate Windows support separately. A configured policy engine without effective policies does not isolate workloads.
5.08
Configure default network policies in each namespace
MediumStart by creating a deny all policy in each namespace and then add specific policies.
5.09
Filter egress traffic with AzFW/NVA if your security requirements mandate it (egress lockdown)
MediumUse Azure Firewall to secure and control all egress traffic going outside of the cluster.
5.10
Don't expose your container registry on Internet
LowWhen possible, use private link to only allow private network to reach your registry.
5.11
Test workload access to metadata and host-network services
MediumExplicitly test access to 169.254.169.254 and host-network workloads from ordinary application pods. Network policy behavior depends on the data plane and host-network semantics. AKS IMDS restriction is documented as preview and does not restrict host-network pods; assess support terms before adoption and minimize node identity permissions.
5.12
Use private clusters if your requirements mandate it
HighIn a private cluster, the control plane or API server has internal IP addresses and is not exposed to Internet
Plan private DNS and an approved network path for administrators and deployment runners, such as a connected management host, VPN, or ExpressRoute. Azure Bastion provides access to a management VM rather than acting as a direct Kubernetes API proxy. Review command invoke permissions separately because that management-plane path can reach a private cluster without direct client network connectivity.
5.13
Choose global routing based on protocol and failover requirements
MediumUse Azure Front Door for global HTTP(S) edge routing and WAF integration, or Traffic Manager for DNS-based routing of supported endpoints. Configure health checks, TLS, DNS TTLs, origin restrictions, and failover tests; neither service automatically replicates application state.
5.14
Set maxPods explicitly for the chosen networking model
HighCheck the default and supported maximum pod density for the actual OS, network model, VM size, and provisioning method. Do not assume a universal default of 30. Account for DaemonSets, system reservations, IP capacity, and storage attachment limits.
5.15
If using a public API endpoint, restrict the IP addresses that can access it
MediumTo improve the security of your clusters and minimize the risk of attacks, we recommend limiting the IP address ranges that can access the API server.
5.16
Choose and monitor an explicit outbound connectivity design
MediumChoose a supported outboundType such as NAT gateway, load balancer, or user-defined routing based on throughput and inspection requirements. Size SNAT capacity and allow AKS dependencies. NAT Gateway is not a firewall; private clusters still need an explicit egress plan.
5.17
Evaluate Pod Subnet allocation when flat pod routing is needed
MediumFor VNet-routable pod IPs, evaluate Azure CNI Pod Subnet dynamic or static block allocation against supported features and scale limits. Plan separate node and pod subnet capacity; use Overlay when direct pod reachability is not required.
5.18
Use private endpoints or service endpoints where appropriate
MediumFor PaaS dependencies, select private endpoints or supported service endpoints based on service capability and trust boundaries. Configure private DNS and public-access restrictions explicitly; a private AKS API endpoint does not make workload dependencies private.
5.19
Adopt a service mesh only for explicit application requirements
MediumEvaluate a supported mesh, such as the AKS Istio add-on, when service identity, mutual TLS, traffic policy, or detailed telemetry justify its operational cost. Validate supported revisions, upgrades, resource overhead, and failure behavior; a mesh is not a prerequisite for every microservice application.
5.20
Use a bring-your-own CNI only with clear support ownership
LowUse bring-your-own CNI only when its capabilities are necessary and the team can operate and support it. Review AKS support boundaries, Kubernetes and OS compatibility, IPAM, policy enforcement, upgrades, and recovery; Azure does not operate a third-party CNI on your behalf.
5.21
Use per-node-pool subnets when the network design requires them
MediumEvaluate separate node-pool subnets for address-space organization, routing, or security requirements. Validate support for the selected Azure CNI mode and subnet delegation, private DNS, and policy behavior; subnet separation alone is not tenant isolation.
5.22
Reserve nonoverlapping service, pod, node, and connected-network ranges
MediumValidate service, pod, node-subnet, peered-VNet, VPN, and on-premises address ranges before deployment. Apply the rules of the selected network model, including Overlay routing and masquerading behavior, and test reachability to all dependencies. Address conflicts can make destinations unreachable.
5.23
Validate DNS resolution and private-zone ownership
HighTest cluster DNS, upstream DNS, private endpoints, and cross-network name resolution from pods and deployment runners. Monitor DNS latency and failures, scale CoreDNS when needed, and evaluate LocalDNS only against current feature availability and workload requirements.
5.24
Evaluate Azure CNI Powered by Cilium for Linux data planes
MediumUse the supported managed Cilium data plane for compatible Linux workloads. Validate NetworkPolicy behavior and migration constraints; advanced L7, FQDN, and observability features can require Advanced Container Networking Services and additional cost.
5.25
Manage TLS certificate issuance and renewal
HighInventory external and internal certificates, automate issuance and renewal through a supported integration, and alert before expiry. Validate trust chains, TLS policy, secret rotation, and application reload behavior without relying on manual certificate replacement.
REVIEW AREA 06 / 15
Storage & data
Choose durable storage deliberately and test how data survives disruption.
6.01
Choose storage by durability, access mode, and performance
HighChoose Azure Disk, Azure Files, object storage, or an external data service based on latency, throughput, IOPS, concurrent access, consistency, backup, and recovery requirements. Validate the selected CSI driver and storage tier under realistic load.
6.02
Size the nodes for storage needs
MediumEach node size supports a maximum number of disks. Different node sizes also provide different amounts of local storage and network bandwidth. Plan for your application demands to deploy the appropriate size of nodes.
Different types and sizes of nodes are available. Each node (underlying VM) size provides a different amount of core resources such as CPU and memory. These VM sizes have a maximum number of disks that can be attached. Storage performance also varies between VM sizes for the maximum local and attached disk IOPS (input/output operations per second). If your applications require Azure Disks as their storage solution, plan for and choose an appropriate node VM size. The amount of CPU and memory isn't the only factor when you choose a VM size. The storage capabilities are also important.
6.03
Use CSI storage classes with deliberate reclaim policies
LowUse supported CSI drivers and dynamic provisioning where appropriate. Set access modes, expansion, binding mode, encryption, and Delete versus Retain reclaim policy deliberately; deleting a PVC can delete the underlying volume under a Delete policy.
6.04
Back up persistent application data with a supported solution
MediumUse Azure Backup for AKS or another supported, workload-aware backup solution. Confirm supported volume types, access modes, region, retention, and restore paths. Azure Site Recovery is not a general AKS cluster backup solution; snapshots alone may not be application-consistent.
6.05
Avoid keeping state in the cluster, and store data outside (AzStorage, AzSQL, Cosmos, etc)
HighWhere possible, don't store service state inside the container. Instead, use an Azure platform as a service (PaaS) that supports multiregion replication.
Service state refers to the in-memory or on-disk data that a service requires to function. State includes the data structures and member variables that the service reads and writes. Depending on how the service is architected, the state might also include files or other resources that are stored on the disk. For example, the state might include the files a database uses to store data and transaction logs.
6.06
Use ephemeral OS disks only for disposable node state
HighEvaluate ephemeral OS disks for supported VM sizes and node-image requirements. Local OS-disk data is disposable across reimage or node replacement; keep durable workload data on persistent storage or external services and validate capacity for images and logs.
6.07
For hyper performance storage option use Ultra Disks on AKS
LowAzure ultra disks offer high throughput, high IOPS, and consistent low latency disk storage for your stateful applications.
One major benefit of ultra disks is the ability to dynamically change the performance of the SSD along with your workloads without the need to restart your agent nodes. Ultra disks are suited for data-intensive workloads.
6.08
Align persistent volumes with availability-zone placement
MediumUse WaitForFirstConsumer where appropriate so volume provisioning follows scheduling constraints. LRS disks are zonal; evaluate supported ZRS disks for cross-zone attachment requirements. Test failover and attach times, because a replicated disk alone does not guarantee application availability.
6.09
Plan managed OS disk capacity and performance
HighSize managed OS disks and node storage for image layers, writable layers, temporary files, and logs. Monitor disk pressure and log rotation. Larger disk size alone is not a universal performance fix; validate the selected disk tier and VM I/O limits.
6.10
Migrate deprecated in-tree storage drivers to CSI
HighInventory PVs, StorageClasses, and automation for in-tree Azure Disk and Azure File provisioners. Use supported CSI drivers, test snapshots and restores, and review migration behavior before a Kubernetes upgrade.
REVIEW AREA 07 / 15
Resources & scaling
Right-size workloads and scale nodes and applications without surprises.
7.01
Evaluate virtual nodes only for compatible burst workloads
LowVirtual nodes use Azure Container Instances and have different networking, identity, storage, OS, and feature constraints from regular AKS nodes. Verify the current support matrix, cold-start behavior, regional quota, and cost before adopting this burst path.
7.02
Size nodes against measured workload and failure capacity
MediumChoose node sizes and counts using CPU, memory, pod density, network throughput, storage limits, and failure-domain needs. Reserve capacity for system components and upgrades, and benchmark cost and latency rather than optimizing only VM price.
7.03
Evaluate Arm64 with workload and add-on compatibility tests
MediumBenchmark supported Arm64 VM sizes for price/performance. Publish multi-architecture images and verify every sidecar, DaemonSet, driver, and security agent supports the target architecture before scheduling workloads there.
7.04
Enforce resource quotas for namespaces
LowPlan and apply resource quotas at the namespace level. If pods don't define resource requests and limits, reject the deployment. Monitor resource usage and adjust quotas as needed.
Resource requests and limits are placed in the pod specification. These limits are used by the Kubernetes scheduler at deployment time to find an available node in the cluster. But developers can forget them and thus impact other applications by over-consuming resources of the cluster
7.05
Namespaces should have LimitRange
LowA LimitRange is a policy to constrain resource allocations (to Pods or Containers) in a namespace. It's useful to ensure that pods don't forget to declare request limits
7.06
Set measured resource requests and deliberate limits
MediumSet CPU and memory requests based on observed demand; requests drive scheduling and autoscaling. Set memory limits to bound risk and choose CPU limits deliberately because throttling can increase latency. Limits do not prevent memory leaks, and containers exceeding memory limits can be OOM-killed.
7.07
Define disruption budgets that permit safe maintenance
LowUse policy/v1 PodDisruptionBudgets for replicated workloads and ensure replicas can satisfy them during drains and upgrades. PDBs constrain voluntary evictions, not node failures or every rollout; overly strict budgets can block upgrades and scale-down.
7.08
Use supported tooling for workload cost allocation
LowUse AKS cost analysis, OpenCost, or an appropriately operated cost-allocation tool to attribute spend to teams and workloads. Account for shared capacity, storage, networking, and monitoring costs; validate labels and allocation assumptions.
7.09
When required use multi-instance partitioning GPU on AKS Clusters
MediumNvidia's A100 GPU can be divided in up to seven independent instances. Each instance has their own memory and Stream Multiprocessor (SM).
7.10
If running a Dev/Test cluster use NodePool Start/Stop
MediumYour AKS workloads may not need to run continuously, for example a development cluster that has node pools running specific workloads.
7.11
Use node pool snapshots for configuration reuse, not data backup
LowNode pool snapshots capture supported node pool configuration for reuse. They do not back up application data, Kubernetes resources, or an entire cluster; ensure the referenced Kubernetes version and image remain supported.
7.12
Ensure your subscription has enough quota to scale out your nodepools
HighAzure VMs/nodes have quotas per subscription. Ensure that you have planned for these quota and proactively prepare to request for more if needed
7.13
Use scale down mode to delete/deallocate nodes
LowScale-down Mode allows you to decide whether you would like to delete or deallocate the nodes in your Azure Kubernetes Service (AKS) cluster upon scaling down.
7.14
Choose cluster autoscaler or node auto-provisioning intentionally
MediumEvaluate node auto-provisioning for supported workloads and regions, or configure the cluster autoscaler for explicit node pools. Respect coexistence restrictions, quota, disruption settings, consolidation behavior, and capacity limits; do not enable competing node scalers blindly.
7.15
Coordinate HPA, VPA, and KEDA scaling signals
MediumSet realistic requests, min/max replicas, stabilization windows, and metric availability. Avoid competing controllers for the same resource signal. Use VPA recommendations or supported update modes deliberately and load-test burst and scale-to-zero behavior.
REVIEW AREA 08 / 15
Cluster operations
Automate day-two work and make changes repeatable and recoverable.
8.01
Use proximity placement only for measured latency requirements
LowBenchmark before using proximity placement groups. Review compatibility with availability zones, capacity, and node-pool constraints; tighter placement can reduce placement flexibility and resilience. Do not trade away failure-domain separation without a documented reason.
8.02
Govern cluster extensions and managed add-ons
LowInventory installed extensions and add-ons, their supported Kubernetes versions, permissions, upgrade policies, costs, and operational owners. Remove unused components and validate lifecycle compatibility before upgrades.
8.03
Choose a governed node resource group name at creation
LowSet a node resource group name if required by naming policy, and document AKS ownership. Its name is not a security control; protect access and avoid manually modifying AKS-managed infrastructure.
8.04
Use approved private paths for node troubleshooting
MediumKeep node SSH/RDP endpoints off the public internet. Use supported AKS debug access or approved private management connectivity with time-bound permissions, audit logs, and incident ownership. Do not expose nodes merely to make troubleshooting easier.
8.05
Run supported diagnostics and configuration checks
MediumUse AKS diagnostics, Azure Monitor, and maintained troubleshooting tools. Validate tool provenance and permissions before execution. Use policy and manifest validation to detect missing requests and limits; do not install an unmaintained scanner as a production prerequisite.
8.06
Enable cluster autoscaling
MediumTo keep up with application demands in Azure Kubernetes Service (AKS), you may need to adjust the number of nodes that run your workloads. The cluster autoscaler component can watch for pods in your cluster that can't be scheduled because of resource constraints.
You can enable autoscaling module per node pool but only create one mutual autoscale profile
8.07
Use GitOps to deploy workloads in your cluster
HighGitOps works by using Git as a single source of truth for declarative infrastructure and applications
On Azure you can for instance use Azure Arc for Kubernetes but also directly GitOps addon for AKS
8.08
Implement CI/CD to deploy workloads in your cluster
HighInstead of GitOps (or in addition) you can use CI/CD to deploy workloads/tools in your cluster
8.09
Improve efficiency with K8S Tools
MediumThe Kubernetes ecosystem is strengthened by many tools that make operating it easier. Here's a few
8.10
Don't use the default namespace
MediumIt's recommended to keep all applications in a namespace other than default
8.11
Apply different types of labels to all resources
LowA common set of labels allows tools to work interoperably, describing objects in a common manner that all tools can understand. For instance, resources should have technical, business and security labels.
8.12
Fine tune your node configuration
LowCustomizing your node configuration allows you to configure or tune your operating system (OS) settings, node pools or the kubelet parameters to match the needs of the workloads.
When you create an AKS cluster or add a node pool to your cluster, you can customize a subset of commonly used OS and kubelet settings.
8.13
Restrict command invoke on private clusters
LowAKS command invoke runs through the Azure management API and can reach a private cluster without direct network connectivity. Restrict its Azure RBAC actions, audit use, and disable it when policy requires all administration through approved private paths.
8.14
Consider an appropriate node size, not too large or too small
HighOptimizing node size can lead to lots of benefits including cost optimization, optimized performance and proper resource allocation
8.15
Regularly check Azure Advisor for recommendations on your cluster
MediumAzure advisor can enhance environment monitoring and can help improve the operations of your cluster by reducing costs, etc
8.16
Write manifests following good practices using dedicated tools
LowThere are various tools that can make creating k8s manifest files much easier and can help with operational efficiency
8.17
Monitor cluster certificates and verify supported rotation
LowUnderstand AKS-managed certificate rotation and monitor cluster health and certificate expiry. Use the documented certificate rotation procedure when necessary and assess its disruption. Workload ingress certificates need a separate renewal process.
8.18
Test operational constraints before using virtual nodes
LowIf using ACI-backed virtual nodes, validate monitoring, security policy, service connectivity, storage, scheduling, and application recovery end to end. Do not assume virtual nodes are equivalent to ordinary VM-backed node pools.
8.19
Consider spot node pools for non time-sensitive workloads
LowSpot nodepools can help with cost management
8.20
Consider subscribing to EventGrid Events for AKS automation
LowAKS emits certain events that enable it to subscribe to EventGrid which can be used for automation
8.21
Protect the AKS-managed node resource group
HighManage nodes through supported AKS APIs and infrastructure as code, not by manually editing VM scale sets, load balancers, or networking in the node resource group. Evaluate node resource group lockdown and restrict unnecessary write access.
8.22
Prepare a least-privilege incident troubleshooting workflow
HighDocument diagnostics, ephemeral debug containers, log access, escalation contacts, and time-bound privileged access. Use approved images and audit actions; do not permanently install privileged debugging toolboxes across production nodes.
8.23
Test upgrade surge, drain timeouts, and rollback procedures
HighBefore upgrading, validate regional VM quota, subnet IP space, maxSurge, PDBs, drain timeout, soak time, and deprecated APIs. Rehearse workload rollback or cluster replacement; Kubernetes control-plane downgrades are not a supported rollback strategy.
8.24
Use supported declarative APIs and validate infrastructure drift
MediumPin supported resource-provider API versions and provider/module versions. Review plan or what-if output, apply changes through code review, and detect drift. Use deployment identities scoped to the environment rather than persistent cluster-admin credentials.
REVIEW AREA 09 / 15
Lifecycle & retirements
Stay supported. Track Kubernetes, node operating systems, APIs, and add-ons.
9.01
Use a supported and workload-compatible node operating system
MediumSelect a supported Ubuntu or Azure Linux release after testing drivers, agents, and application dependencies. Azure Linux 2.0 support ended on 30 November 2025 and its node images were removed starting 31 March 2026; migrate to Azure Linux 3.0 or another supported OS.
9.02
Keep Kubernetes within its supported lifecycle
HighTrack the AKS release calendar and the versions available in each deployment region with az aks get-versions. Standard support follows the supported minor-version window; eligible LTS versions require the Premium tier. Platform support is reduced support, not a substitute for an upgrade plan.
9.03
Configure node OS upgrades separately from Kubernetes upgrades
HighChoose a supported node OS upgrade channel, such as NodeImage, and test it with a dedicated maintenance window. Node OS upgrades and cluster version upgrades are separate controls. Track image rollout availability, disruption budgets, surge capacity, and completion.
9.04
Configure automatic Kubernetes upgrades and maintenance windows
MediumSelect a supported cluster auto-upgrade channel and planned maintenance windows with enough duration. Validate application compatibility in lower environments first. Maintenance windows are not an absolute guarantee that every emergency platform action is deferred.
9.05
Evaluate Premium tier and LTS against the actual release calendar
MediumUse AKS Premium tier with the AKSLongTermSupport plan for eligible versions when extended support is required. Check the published support end date and OS/add-on compatibility; LTS does not extend an independently retired node OS or remove the need for patches and upgrades.
9.06
Replace retired pod-managed identity with Workload ID
HighThe open-source pod-managed identity project was deprecated in 2022 and archived in 2023; AKS managed add-on patch support ended in September 2025. Migrate applications and SDKs to Microsoft Entra Workload ID, test token refresh, then remove obsolete identity bindings and components.
9.07
Upgrade retired Basic Load Balancer and Availability Sets
HighAKS support for Basic Load Balancer and Availability Sets ended on 30 September 2025. Follow the documented migration paths to Standard Load Balancer and supported node-pool infrastructure; validate public IPs, DNS, routes, downtime, and recovery.
9.08
Migrate kubenet before its retirement
HighAKS kubenet retirement is scheduled for 31 March 2028. Inventory affected clusters, validate the supported migration path to Azure CNI Overlay, and rehearse changes to pod addressing, network policies, routes, and external dependencies.
9.09
Complete the Ingress NGINX migration before support ends
HighUpstream Ingress NGINX maintenance ended in March 2026, and AKS application routing NGINX critical-security-patch support runs through November 2026. Test a supported Gateway API replacement in parallel, translate annotations and policy, validate TLS and traffic behavior, and plan DNS cutover and rollback.
9.10
Track release notes and future platform-initiated upgrades
HighSubscribe to AKS releases, retirement notices, Service Health, and the regional release tracker. Microsoft documents platform-initiated upgrades beginning 1 June 2027 after the unsupported-version grace period; these do not follow your maintenance window. Keep clusters supported rather than relying on that safeguard.
REVIEW AREA 10 / 15
Observability & incident response
Connect metrics, logs, traces, and actionable alerts to service objectives.
10.01
Collect and govern workload logs
HighEnable Container insights or a supported log platform with an explicit data collection rule. Define namespace filters, sensitive-data handling, retention, access control, and a cost budget. Confirm that logs are queryable during node and application failure.
10.02
Collect Prometheus metrics with a supported monitoring stack
HighUse Azure Monitor managed service for Prometheus or an operated Prometheus deployment. Configure scraping, recording and alerting rules, cardinality limits, retention, and Grafana dashboards. Container log collection is separate from Prometheus metric ingestion.
10.03
Define a distributed tracing strategy
LowChoose propagation standards, instrumentation ownership, sampling, retention, and sensitive-data controls for distributed traces. Verify that representative requests can be correlated across services and dependencies before relying on tracing in an incident.
10.04
Monitor CPU and memory utilization of the nodes
MediumWith Container insights, you can use the performance charts and health status to monitor the workload of Kubernetes clusters hosted on AKS
10.05
Enable control-plane diagnostic and audit logs
HighConfigure AKS diagnostic settings for the required control-plane and audit categories. Choose audit versus audit-admin deliberately, route logs to an approved destination, and validate access, retention, query availability, and collection costs.
10.06
Query workload logs through a governed log platform
HighProvide documented queries and dashboards for application failures, restarts, and dependency issues. Use supported Container insights or another operated platform, define retention and access controls, and verify diagnostic data is available during an incident.
10.07
Use ContainerLogV2 and supported Azure Monitor agents
MediumMigrate legacy ContainerLog collection and the retired Log Analytics agent to supported Container insights collection using Azure Monitor Agent and ContainerLogV2. Validate queries, alerts, data collection rules, multiline logging, retention, and ingestion costs.
10.08
Configure alerts on the most critical metrics (see Container Insights for recommendations)
HighAlerts can provide early warnings of issues, etc in your cluster
10.09
Monitor outbound SNAT capacity and connection failures
MediumMonitor SNAT utilization, dropped connections, and outbound failure rates for the actual egress path. Tune connection reuse, idle timeouts, outbound IPs, and NAT gateway capacity; SNAT monitoring is primarily an availability and capacity control, not a replacement for egress filtering.
10.10
Subscribe to resource health notifications for your AKS cluster
HighLearn how to troubleshoot resource health issues
10.11
Define SLIs, SLOs, and actionable error-budget alerts
HighMeasure user-visible availability and latency, set service objectives, and page on actionable symptoms or error-budget burn. Include pending pods, failed scheduling, persistent-volume attachment, DNS, certificate expiry, and failed upgrades in platform alerts.
10.12
Test incident response and diagnostic-data retention
HighMaintain dashboards, runbooks, escalation paths, audit-log access, and diagnostic retention for the investigation window. Run an incident exercise and verify alerts reach an accountable responder. Protect logs from leaking secrets and excessive collection costs.
10.13
Correlate OpenTelemetry traces with workload metrics and logs
MediumInstrument application request paths with OpenTelemetry or a supported Application Insights integration. Preserve correlation IDs, control sampling and cardinality, and validate that dependency failures can be traced across service boundaries without exposing sensitive data.
REVIEW AREA 11 / 15
Reliability & disaster recovery
Validate availability, recovery objectives, backups, and regional failover.
11.01
Define non-functional requirements such as SLAs, RTO (Recovery Time Objective) and RPO (Recovery Point Objective)
HighBefore going to production, it is very important to decide the target of availability and recovery time you are looking for. This will help you to decide the right backup strategy but also the architecture of your solution.
11.02
Rehearse recovery into a clean, isolated environment
HighRegularly rebuild the platform from infrastructure as code in an isolated recovery environment. Restore application configuration and data, measure RTO/RPO, and test dependencies and access. Never delete production merely to conduct a recovery rehearsal.
11.03
Distribute production workloads across availability zones
HighUse supported zonal node pools and topology spread constraints to separate replicas across nodes and zones. Validate sufficient surviving capacity, zonal storage behavior, load balancing, and failure recovery; availability zones are separate datacenter failure domains within a region.
11.04
Design multiregion recovery around business requirements
MediumChoose active-active or active-passive regions based on RTO/RPO, data residency, latency, dependencies, and available capacity. Regions need not be an Azure region pair; validate service support, replication, quota, and independence explicitly.
11.05
Test global traffic failover and failback
LowSelect Front Door or Traffic Manager according to protocol and routing needs. Test health probes, DNS caching, TLS, session behavior, regional dependencies, and failback. Routing changes do not recover or synchronize application data.
11.06
Create a storage migration plan
LowYour applications might use Azure Storage for their data. Because your applications are spread across multiple AKS clusters in different regions, you need to keep the storage synchronized
11.07
Select an AKS tier with the required control-plane SLA
HighUse Standard or Premium tier for the financially backed Kubernetes API-server uptime SLA. Microsoft documents 99.95% with availability zones and 99.9% without; Free tier has no financially backed SLA. These are control-plane commitments, not an end-to-end application SLA; verify current contractual terms.
11.08
Spread replicas across nodes and zones
LowUse topology spread constraints or appropriate anti-affinity to keep replicas in separate failure domains. Balance strict scheduling rules against available recovery capacity, and test both node loss and zone loss under representative load.
11.09
If using a private registry (ACR), configure region replication to store images in multiple regions
MediumCompanies that want a local presence, or a hot backup, choose to run services from multiple Azure regions.
As a best practice, placing a container registry in each region where images are run allows network-close operations, enabling fast, reliable image layer transfers. Geo-replication enables an Azure container registry to function as a single registry, serving multiple regions with multi-master regional registries.
11.10
Configure your registry to use zone redundancy
MediumUse Azure availability zones to create a resilient and high availability Azure container registry within an Azure region.
11.11
Move Container Registry to a dedicated resource group
LowBecause container registries are resources that are used across multiple container hosts, a registry should reside in its own resource group.
Although you might experiment with a specific host type, such as Azure Container Instances, you’ll likely want to delete the container instance when you’re done. However, you might also want to keep the collection of images you pushed to Azure Container Registry. By placing your registry in its own resource group, you minimize the risk of accidentally deleting the collection of images in the registry when you delete the container instance resource group.
11.12
Evaluate ACR soft delete against support and retention requirements
LowWhere supported, evaluate ACR soft delete to recover accidentally deleted artifacts within the configured retention period. Check current feature status, limitations, and costs; soft delete does not replace immutable release retention, replication, or tested disaster recovery.
11.13
Back up supported cluster resources and persistent volumes
HighConfigure Azure Backup for AKS or a supported alternative with explicit scope, retention, and recovery objectives. Check the current support matrix for Azure Disk/Azure Files, snapshot versus vaulted backup, regions, and cross-region restore. Back up external databases separately.
Perform full restore drills, including identities, CRDs, secrets, application dependencies, and data consistency. A successful backup job does not prove that the application can be recovered.
11.14
Exercise failure scenarios under representative load
HighRehearse pod, node, zone, DNS, registry, egress, and dependency failures in a controlled environment. Use fault injection only with explicit scope and safety controls, verify service objectives, and track remediation actions from each exercise.
REVIEW AREA 12 / 15
Windows workloads
Account for Windows-specific compatibility, identity, and operational constraints.
12.01
Match Windows base images to a supported node OS
HighValidate the supported Windows host/container compatibility matrix. Windows Server 2019 node-pool support ended on 1 March 2026 and images are scheduled for removal on 1 April 2027. Migrate to a supported LTSC release such as Windows Server 2022 or 2025 after compatibility testing.
12.02
Test graceful shutdown and recovery on Windows
MediumTest SIGTERM-equivalent Windows shutdown behavior, preStop hooks, terminationGracePeriodSeconds, and actual application cleanup on supported Windows images. Avoid blanket claims that graceful termination is unavailable; design for abrupt failure and verify behavior during upgrades.
12.03
Restrict Windows HostProcess and administrative privileges
MediumRun applications as a non-administrative identity where supported. Windows does not use Linux privileged-container semantics, but HostProcess containers can access the host and require tightly restricted admission, identities, and namespaces.
12.04
Set and monitor Windows memory requests and limits
MediumSize Windows nodes and container memory using measured working sets and system reservations. Validate eviction and OOM behavior for the actual Windows/runtime version, alert on pressure, and test recovery rather than assuming Linux memory-management behavior.
12.05
Choose a supported Azure CNI model for Windows
HighUse a Windows-supported Azure CNI configuration, including Overlay where supported for the selected versions. Kubenet and the Linux Cilium data plane are not Windows networking options. Validate policy-engine and IPAM support before provisioning.
12.06
Keep windows containers patch level in sync with host patch level
HighWindows Server nodes in AKS must be upgraded to get the latest patch fixes and updates. Windows Updates are not enabled on nodes in AKS. AKS releases new node pool images as soon as patches are available, it is the customers responsibility to upgrade node pools to stay current on patches and hotfix.
12.07
Validate network policy enforcement on Windows
HighDo not assume Linux and Windows share the same network policy capabilities. Azure NPM on Windows is unsupported from 30 September 2026; select a supported alternative such as Calico after validating the exact OS, network model, and version matrix.
12.08
Enable Group Managed Service Accounts (GMSA) for your Windows Server nodes
MediumGroup Managed Service Accounts (GMSA) is a managed domain account for multiple servers that provides automatic password management, simplified service principal name (SPN) management and the ability to delegate the management to other administrators.
12.09
If required for AKS Windows workloads, HostProcess containers can be used
MediumHostProcess / Privileged containers extend the Windows container model to enable a wider range of Kubernetes cluster management scenarios.
12.10
Taint Windows nodes
LowAdding taints, tolerations and node selectors will help avoid having pods scheduled in the wrong OS node pool
12.11
Migrate Windows Azure NPM policy before relying on enforcement
MediumInventory Windows pools using Azure Network Policy Manager, whose AKS Windows support ended on 30 September 2026. Follow supported migration guidance and test positive and negative connectivity cases with the replacement engine.
12.12
Validate accelerated networking for Windows node SKUs
MediumSelect a supported Windows VM size and verify accelerated networking availability and actual enablement. Benchmark throughput and latency, and include driver and node-image compatibility in upgrade testing.
12.13
Track Windows LTSC and Annual Channel retirement dates
HighWindows Server Annual Channel preview support ended on 15 May 2026, with image removal scheduled for 15 May 2027. Windows Server 2022 AKS support is scheduled to end on 30 June 2028, with image removal on 30 June 2029. Plan LTSC migration against current version and OS support matrices.
REVIEW AREA 13 / 15
Application delivery
Ship resilient workloads with safe rollouts and explicit runtime contracts.
13.01
Implement liveness probes that detect unrecoverable local failure
HighUse a liveness probe only when restarting the container can resolve a failure. Avoid coupling liveness to a shared downstream dependency, which can trigger restart storms during an outage. Test thresholds under load.
13.02
Protect slow startup with a startup probe
MediumConfigure a startup probe with a failure budget covering the measured worst-case startup. Liveness and readiness probes do not run until the startup probe succeeds; test image pulls and cold initialization separately.
13.03
Implement a proper Readiness probe
MediumSometimes, applications are temporarily unable to serve traffic. For example, an application might need to load large data or configuration files during startup, or depend on external services after startup. In such cases, you don't want to kill the application, but you don't want to send it requests either. Kubernetes provides readiness probes to detect and mitigate these situations. A pod with containers reporting that they are not ready does not receive traffic through Kubernetes Services.
13.04
Implement graceful termination and connection draining
LowHandle termination signals, configure terminationGracePeriodSeconds, and use preStop only where needed. Allow in-flight requests to drain and test rolling updates and node drains. Hooks are not guaranteed during every failure, so persist critical state safely.
13.05
Run enough replicas for the availability target
MediumUse multiple replicas for services that require high availability, and spread them across nodes and zones. Test that the remaining replicas can serve peak demand during failure or maintenance; replica count alone does not establish resilience.
13.06
Apply tags/labels to all resources
MediumEnsure that your components are tagged, it could be business, security or technical tags and these tags will help to assess or apply relevant policies.
13.07
Autoscale applications using measured demand
LowConfigure HPA or KEDA with appropriate metrics, requests, replica bounds, and stabilization windows. Test metric outages, burst traffic, dependency limits, and scale-down; ensure node scaling and regional capacity can satisfy demand.
13.08
Keep secrets out of images and use a managed secret store
HighStore application secrets in Key Vault and retrieve them with a supported integration and least-privilege identity. AKS provides encryption at rest, but Kubernetes Secrets are still accessible to authorized API clients and are not an external vault. Never commit secrets to source or bake them into images.
13.09
Use Microsoft Entra Workload ID for application access
MediumEnable the OIDC issuer and Workload ID, then federate a dedicated Kubernetes service account to a least-privilege managed identity. Use supported SDKs and the required workload identity label. Replace the retired pod-managed identity add-on; do not give applications node identity permissions.
13.10
Use namespaces with explicit access and policy boundaries
MediumUse dedicated namespaces for workloads and apply scoped RBAC, quotas, and network/admission policy. Avoid deploying applications into default or system namespaces. Namespaces provide logical separation, not a complete security boundary.
13.11
Set up requests and limits on your containers
HighWhen Containers have resource requests specified, the scheduler can make better decisions about which nodes to place Pods on. And when Containers have their limits specified, contention for resources on a node can be handled in a specified manner.
13.12
Declare an explicit workload security context
MediumUse platform-appropriate least-privilege settings. For Linux, prefer non-root, RuntimeDefault seccomp, dropped capabilities, no privilege escalation, and a read-only root filesystem. Disable automatic service account token mounting where the workload does not need it; validate projected tokens required by Workload ID.
13.13
Ensure your manifests respect good practices
MediumBest practices inside the cluster start with the configuration of your manifests. Ensure that they respect good practices
13.14
Lint Dockerfiles and enforce an image-build baseline
HighValidate base-image provenance, pinned versions, non-root execution where supported, build secrets, dependency installation, and unnecessary packages. Use maintained linters and policy checks without exposing build credentials in layers or logs.
13.15
Scan container images during the build
HighScan OS packages and application dependencies during image builds with maintained tools. Retain reports linked to immutable digests, define remediation targets, and rescan deployed versions as new vulnerabilities are disclosed.
13.16
Enforce image vulnerability thresholds and exception expiry
MediumDefine policy using exploitability, exposure, severity, and available fixes. Block unacceptable risk, record owners and expiry for exceptions, and rescan continuously. An unfixed critical vulnerability is not automatically acceptable simply because the vendor has not published a fix.
13.17
Validate container build and runtime policy
HighValidate approved base images, non-root execution where supported, exposed services, secret handling, and required labels. Apply rules based on the threat model; opening port 80 alone is not proof of noncompliance.
13.18
Assess application modernization before containerization
LowValidate runtime support, licensing, state, external dependencies, health probes, and operational ownership before moving an application to AKS. Choose supported migration tooling based on the workload rather than assuming a point-and-containerize conversion produces a production-ready service.
13.19
Apply the right deployment type to your application
LowThere are a variety of techniques to deploy new applications to production so choosing the right strategy is an important decision that needs to be made to leverage the impact of change on the consumer.
13.20
Use workload controllers instead of standalone pods
LowManage long-running applications through Deployments or StatefulSets, and finite work through Jobs or CronJobs. A standalone pod is not recreated after node loss by a workload controller; test replacement and application recovery.
13.21
Set image pull policy and deploy immutable image digests
LowUse immutable digests for reproducible deployments and choose imagePullPolicy deliberately. Always checks registry resolution but can reuse cached layers; IfNotPresent reuses cached images. Do not rely on mutable latest tags, and test registry failure behavior.
13.22
Provision Azure resources with reviewed infrastructure as code
MediumUse Bicep, ARM templates, or Terraform modules with pinned versions, environment-specific configuration, least-privilege deployment identities, and reviewed changes. Keep state protected, detect drift, and rehearse rebuilding the platform.
13.23
Use canary or blue/green deployments
MediumThis will help ensure your workloads remain online during cluster upgrades.
13.24
Evaluate Dapr only when its application capabilities are needed
LowDapr can provide service invocation, pub/sub, state management, and other distributed application APIs. Adopt it when those capabilities justify additional sidecars, control-plane components, security configuration, and lifecycle management; it is not an upgrade-availability mechanism.
13.25
Validate deprecated Kubernetes APIs before every upgrade
HighCheck release notes, API-server warnings, manifests, CRDs, Helm charts, operators, and admission webhooks for APIs removed in the target version. Upgrade dependencies first and test conversion and rollback paths in a representative environment.
13.26
Secure CI/CD with federation and scoped deployment permissions
HighUse OIDC federation from the CI platform to Azure, protect release environments, pin reviewed actions and build dependencies, and scope deployment identities to the required namespaces and resources. Keep production credentials and kubeconfig files out of logs and artifacts.
REVIEW AREA 14 / 15
Images & supply chain
Build, verify, patch, and distribute trusted container artifacts.
14.01
Scan the container image against vulnerabilities
HighScan operating-system packages and application dependencies in container images during build and continuously after publication. Triage findings using exploitability and exposure, enforce remediation targets, and verify deployed image digests. A clean scan does not prove that an image is free of vulnerabilities.
14.02
Allow deploying containers only from known registries
MediumOne of the most common custom policies that you might want to consider is to restrict the images that can be deployed in your cluster. But it can also be addressed with a proper egress lockdown or using an admission controller
14.03
Detect and respond to container runtime threats
HighEnable supported runtime threat detection, such as Microsoft Defender for Containers, and route alerts into incident response. Validate required sensors and permissions, investigate suspicious process and network activity, and rehearse containment without assuming a sensor prevents every attack.
14.04
Prevent promotion of images that violate current policy
HighContinuously rescan stored images and block release promotion or admission when they violate approved risk policy. Verify that quarantine tooling is supported and enforced by every pull path; a registry scan alone does not block deployment.
14.05
Scope registry roles to the required repositories and actions
HighSeparate image push, pull, delete, signing, and administrative permissions. For ABAC-enabled registries, use supported repository roles and conditions rather than assuming AcrPull/AcrPush applies. Audit assignments and keep the registry admin user disabled.
14.06
Network Segmentation of Docker Registries
HighLimit access to a registry by assigning virtual network private IP addresses to the registry endpoints and using Azure Private Link. Network traffic between the clients on the virtual network and the registry's private endpoints traverses the virtual network and a private link on the Microsoft backbone network, eliminating exposure from the public internet. Private Link also enables enables private registry access from on-premises through Azure ExpressRoute private peering or a VPN gateway.
14.07
Use minimal, maintained base images
MediumChoose supported, regularly patched minimal or distroless images compatible with the application. Do not use end-of-life Debian 10 examples. Removing a shell reduces attack surface but does not prevent exploitation; retain a controlled debug workflow.
14.08
Refresh container when base image is updated
LowAs you use base images for application images, use automation to build new images when the base image is updated. As those base images typically include security fixes, update any downstream application container images.
14.09
Generate SBOMs and verify artifact provenance
HighGenerate an SBOM for each release, retain build provenance, and sign immutable artifacts using supported OCI signing tools. Verify signatures and trusted identities during release or admission; signing without verification does not establish a supply-chain control.
14.10
Retain and replicate the artifacts required for recovery
MediumKeep known-good image digests, Helm charts, manifests, and signatures available for the recovery window. Test pulls from the recovery region, registry private DNS, retention rules, and access identities; avoid deleting an image still referenced by production or rollback plans.
REVIEW AREA 15 / 15
Cost & sustainability
Measure unit costs and balance efficiency with reliability and operational effort.
15.01
Allocate costs to teams and workloads
HighUse AKS cost analysis where supported or a maintained allocation tool. Combine Azure tags and Kubernetes labels with ownership, budgets, and chargeback rules. Include idle capacity, monitoring ingestion, network egress, storage, licenses, and managed add-ons.
15.02
Right-size from measured demand and unit economics
MediumReview requests, limits, node utilization, autoscaler behavior, and cost per business transaction. Reduce waste without removing failure headroom, disrupting latency objectives, or creating unschedulable workloads.
15.03
Use reservations and savings plans only for stable baseline demand
MediumModel measured compute commitments against expected VM families, regions, and utilization. Use Spot capacity only for interruption-tolerant workloads with checkpointing and fallback; never rely on Spot for essential system components.
15.04
Stop disposable environments and clean orphaned resources safely
MediumSchedule nonproduction shutdown or scale-down when supported and acceptable. Review unused disks, public IPs, snapshots, images, and workspaces with owners and retention policies before deletion; never treat an unattached disk as automatically disposable.
15.05
Evaluate sustainability without compromising service objectives
LowMeasure utilization and workload efficiency, evaluate compatible Arm64 compute, and select regions within latency and residency constraints. Consider the total operational footprint rather than assuming one VM architecture is always cheaper or lower-carbon.