Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The Federal Information Processing Standard (FIPS) is a US government standard that defines minimum security requirements for cryptographic modules in information technology products and systems. This article describes how to enable FIPS mode at the cluster level for Azure Kubernetes Service (AKS). Cluster-level FIPS enforces that every node pool in the cluster uses a FIPS-enabled OS image, and it blocks AKS-managed components that aren't FIPS-compliant. This capability is intended for customers with compliance requirements such as FedRAMP who need a single, declarative way to ensure FIPS usage across their AKS cluster. For more information on FIPS, see Federal Information Processing Standard (FIPS) 140.
Important
AKS preview features are available on a self-service, opt-in basis. Previews are provided "as is" and "as available," and they're excluded from the service-level agreements and limited warranty. AKS previews are partially covered by customer support on a best-effort basis. As such, these features aren't meant for production use. For more information, see the following support articles:
What is FIPS mode in AKS?
FIPS 140-2/140-3 defines U.S. government standards for cryptographic modules. When you enable FIPS mode on an AKS cluster:
- All node pools in the cluster, including Windows node pools, must use FIPS-enabled OS images.
- AKS blocks creation of non-FIPS node pools.
- AKS blocks AKS-managed add-ons, features, and extensions that aren't validated for FIPS compliance.
Cluster-level FIPS (properties.enableFIPS) is separate from FIPS on individual node pools (enableFIPS on each agent pool). Cluster-level FIPS requires every node pool to be FIPS-enabled, but disabling cluster-level FIPS doesn't disable FIPS on your node pools. For more information about FIPS-enabled node pools, see Enable FIPS for AKS node pools.
Important
FIPS mode applies to AKS-managed infrastructure and components. Customers remain responsible for ensuring their own application containers use FIPS-compliant cryptography.
Prerequisites
- An active Azure subscription. If you don't have an Azure subscription, create a free account before you begin.
- Azure CLI version 2.86.0 or later installed and configured. To find the version, run
az --version. For more information about installing or upgrading the Azure CLI, see Install Azure CLI. - The latest version of the
aks-previewAzure CLI extension. The--enable-fipsand--disable-fipsparameters are available only in theaks-previewextension. For instructions, see Install theaks-previewAzure CLI extension. - The
k8s-extensionAzure CLI extension, used to list and remove cluster extensions. Install it by runningaz extension add --upgrade --name k8s-extension. - kubectl installed. You can install it locally by using the
az aks install-clicommand. - The
EnableFIPSPreviewfeature flag registered on your subscription. For instructions, see Register theEnableFIPSPreviewfeature flag. - Kubernetes version 1.35.0 or later. To see the versions available in your region, use the
az aks get-versionscommand. A FIPS-enabled cluster on an earlier version isn't grandfathered: AKS rejects every update to the cluster until you upgrade it to 1.35.0 or later or disable FIPS. - If you use Azure Resource Manager (ARM) templates or the REST API, use API version
2026-03-02-previewor later forMicrosoft.ContainerService/managedClustersandMicrosoft.ContainerService/managedClusters/agentPools.
Install the aks-preview Azure CLI extension
Install the
aks-previewextension by using theaz extension addcommand.az extension add --name aks-previewUpdate to the latest version of the extension by using the
az extension updatecommand.az extension update --name aks-preview
Set environment variables
Set the following environment variables for the resources that you use in this article. Replace the placeholder values with your own. Then set your subscription context by using the az account set command.
export SUBSCRIPTION_ID="<subscription-id>"
export RESOURCE_GROUP="myResourceGroup"
export CLUSTER_NAME="myAKSCluster"
export NODE_POOL_NAME="fipsnp"
az account set --subscription $SUBSCRIPTION_ID
Register the EnableFIPSPreview feature flag
Register the
EnableFIPSPreviewfeature flag by using theaz feature registercommand.az feature register --namespace "Microsoft.ContainerService" --name "EnableFIPSPreview"It takes a few minutes for the status to show Registered.
Verify the registration status by using the
az feature showcommand.az feature show --namespace "Microsoft.ContainerService" --name "EnableFIPSPreview"When the status shows Registered, refresh the registration of the
Microsoft.ContainerServiceresource provider by using theaz provider registercommand.az provider register --namespace Microsoft.ContainerService
Limitations
The following limitations apply when using FIPS-enabled AKS clusters.
Some AKS-managed components aren't FIPS-compliant and are blocked on FIPS-enabled clusters. For the list, see Blocked components.
Node pools that use a Kata workload runtime (
KataVmIsolation,KataMshvVmIsolation, orKataCcIsolation) aren't supported.Node pools that use the preview node pool–level custom CA trust setting (
enableCustomCATrust) aren't supported. Use cluster-level custom certificate authority trust instead.All limitations documented for FIPS-enabled node pools also apply to FIPS-enabled clusters, including OS, image, and upgrade constraints. For details, see Enable Federal Information Processing Standard (FIPS) for Azure Kubernetes Service (AKS) node pools.
Blocked components
Some AKS-managed components aren't yet built with FIPS-compliant cryptographic libraries. You can't enable these components on a FIPS-enabled cluster, and you can't enable FIPS on a cluster that uses them. The following table lists the blocked components and the Azure CLI command to disable each one. Add --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME to each az aks command.
Important
This list applies only to AKS-managed components. Customer application containers aren't validated by AKS.
| Blocked component | Disable command |
|---|---|
cost-analysis |
az aks update --disable-cost-analysis |
approuting |
az aks approuting disable |
defender (Microsoft Defender for Containers security monitoring) |
az aks update --disable-defender |
azure-monitor (managed Prometheus metrics, Container insights, and application monitoring) |
az aks update --disable-azure-monitor-metricsaz aks disable-addons --addons monitoringaz aks update --disable-azure-monitor-app-monitoring |
blob-csi |
az aks update --disable-blob-driver |
ACCSGXDevicePlugin |
az aks disable-addons --addons confcom |
IngressApplicationGateway |
az aks disable-addons --addons ingress-appgw |
calico, azure-npm |
az aks update --network-policy none |
cilium |
You can't remove Cilium from an existing cluster. Create a new cluster. |
acns-observability |
az aks update --disable-acns or az aks update --disable-acns-observability |
OpenServiceMesh |
az aks disable-addons --addons open-service-mesh |
kaito |
az aks update --disable-ai-toolchain-operator |
Istio-based service mesh add-on revisions earlier than asm-1-26 |
Upgrade to revision asm-1-26 or later. For instructions, see Upgrade the Istio-based service mesh add-on. |
| Windows GPU driver installation | To add a Windows GPU node pool, skip driver installation by using --gpu-driver none. |
| Cluster extensions that aren't FIPS-compliant, such as Flux (GitOps). See the FIPS column in the extension capability matrix. | az k8s-extension delete --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --cluster-type managedClusters --name <extension-name> |
If an automation, such as an Azure Policy assignment, tries to install an extension that isn't FIPS-compliant on a FIPS-enabled cluster, AKS rejects the installation and the extension shows a Failed provisioning state. The cluster isn't affected.
Create a FIPS-enabled AKS cluster
You can enable FIPS when you create the cluster by using the --enable-fips flag. The cluster can't use any of the blocked components.
Create a FIPS-enabled AKS cluster by using the
az aks createcommand with the--enable-fipsparameter.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --kubernetes-version 1.35 \ --enable-fips \ --generate-ssh-keysVerify your cluster is FIPS-enabled by using the
az aks showcommand and query for the enableFips value.az aks show \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --query "enableFips"The following example output shows your cluster is FIPS-enabled:
trueIf the command doesn't return
true, you didn't install theaks-previewextension when you created the cluster. Without the extension, the Azure CLI treats--enable-fipsas--enable-fips-imageand enables FIPS only on the default node pool. Install theaks-previewextension, and then enable FIPS on the existing cluster.Creating a FIPS-enabled cluster automatically creates a FIPS-enabled node pool. You can verify this by inspecting the node pool configuration by using the
az aks showcommand and query for the enableFips value in agentPoolProfiles.az aks show \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --query "agentPoolProfiles[].{Name:name, enableFips:enableFips}" \ --output tableThe following example output shows the default node pool is FIPS-enabled:
Name EnableFips --------- ---------- nodepool1 True
Update an existing AKS cluster to enable or disable FIPS
To enable FIPS on an existing cluster, prepare the cluster first, and then update it.
Prepare your cluster for FIPS
Complete the following steps before you enable FIPS at the cluster level.
Make sure the cluster runs Kubernetes version 1.35.0 or later. If your cluster is running an earlier version, upgrade the cluster first. For instructions, see Upgrade an AKS cluster.
Make sure every node pool is FIPS-enabled. Update each non-FIPS node pool to use FIPS-enabled images. For instructions, see Update an existing node pool to enable or disable FIPS.
Windows Server 2022 node pools already run with FIPS enabled in the OS, but their
enableFipsproperty isFalseunless you set it. Runaz aks nodepool update --enable-fips-imageon these node pools too. For these node pools, the update sets the property and doesn't change the node image.Disable or remove every component that's listed in Blocked components, including cluster extensions that aren't FIPS-compliant. To list the extensions on your cluster, use the
az k8s-extension listcommand. To remove an extension, use theaz k8s-extension deletecommand. For more information, see Manage AKS extensions.az k8s-extension list \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --cluster-type managedClusters \ --query "[].{name:name, extensionType:extensionType, state:provisioningState}" \ --output tableNote
An extension can be installed automatically after cluster creation, for example by an Azure Policy assignment. List the extensions again right before you enable FIPS. If an assignment keeps installing an extension that isn't FIPS-compliant, exempt the cluster from that assignment.
Update an existing cluster to enable FIPS
After you prepare your cluster, enable FIPS. If the cluster doesn't meet a requirement, AKS rejects the update, and the error message describes the cause. For help, see Troubleshoot cluster-level FIPS errors.
Update an AKS cluster by using the
az aks updatecommand with the--enable-fipsparameter.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-fipsVerify your cluster is FIPS-enabled by using the
az aks showcommand and query for the enableFips value.az aks show \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --query "enableFips"The following example output shows your cluster is FIPS-enabled:
true
Update an existing cluster to disable FIPS
You can update an existing cluster to disable FIPS. When you disable FIPS mode:
- Cluster-level FIPS enforcement is removed.
- Existing node pools aren't modified.
- You can run both FIPS and non-FIPS node pools in the same cluster.
- You can deploy AKS extensions and add-ons that were previously blocked while FIPS was enabled.
- New node pools are no longer required to be FIPS-enabled.
Note
Disabling FIPS doesn't automatically convert FIPS-enabled node pools to non-FIPS. If needed, you can update node pools individually. For instructions, see Disable FIPS on an existing node pool. Windows Server 2025 node pools can't disable FIPS.
Update an AKS cluster by using the
az aks updatecommand with the--disable-fipsparameter.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --disable-fipsVerify your cluster isn't FIPS-enabled by using the
az aks showcommand and query for the enableFips value.az aks show \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --query "enableFips"The following example output shows your cluster isn't FIPS-enabled:
false
Add a node pool to a FIPS-enabled AKS cluster
Every new node pool in a FIPS-enabled cluster must be FIPS-enabled. Add a node pool by using the az aks nodepool add command with the --enable-fips-image parameter. If you omit --enable-fips-image, AKS rejects the request.
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $NODE_POOL_NAME \
--enable-fips-image
Troubleshoot cluster-level FIPS errors
When a request conflicts with cluster-level FIPS, AKS rejects it, usually with a BadRequest error that describes the cause. For common error messages and how to resolve them, see Troubleshoot cluster-level FIPS errors in AKS.
Clean up resources
When you no longer need the resources you created in this article, delete the resource group and all related resources by using the az group delete command.
az group delete --name $RESOURCE_GROUP --yes --no-wait