为Azure Kubernetes 服务 (AKS)群集启用联邦信息处理标准(FIPS)(预览版)

联邦信息处理标准(FIPS)是美国政府标准,它定义了信息技术产品和系统中加密模块的最低安全要求。 本文介绍如何在群集级别为Azure Kubernetes 服务 (AKS)启用 FIPS 模式。 群集级 FIPS 强制群集中的每个节点池都使用已启用 FIPS 的 OS 映像,并阻止不符合 FIPS 的 AKS 托管 组件 。 此功能适用于具有合规要求的客户,例如 FedRAMP,他们需要一种声明性方式来确保其 AKS 群集中的 FIPS 使用情况。

Important

AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

AKS 中的 FIPS 模式是什么?

FIPS 140-2/140-3 定义了美国政府针对加密模块的标准。 在 AKS 群集上启用 FIPS 模式时:

  • 群集中的所有节点池(包括Windows节点池)都必须使用已启用 FIPS 的 OS 映像。
  • AKS 阻止创建 非 FIPS 节点池。
  • AKS 阻止未经过 FIPS 合规性验证的 AKS 托管加载项、功能和扩展。

群集级 FIPS(properties.enableFIPS)独立于各个节点池上的 FIPS(每个代理池上的 enableFIPS)。 群集级 FIPS 要求每个节点池都启用 FIPS,但禁用群集级 FIPS 不会在节点池上禁用 FIPS。 有关已启用 FIPS 的节点池的详细信息,请参阅 为 AKS 节点池启用 FIPS。

Important

FIPS 模式适用于 AKS 管理的基础结构和组件。 客户仍负责确保 自己的应用程序容器 使用符合 FIPS 的加密。

Prerequisites

  • 一个处于活动状态的 Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户。
  • 已安装并配置 Azure CLI 2.86.0 或更高版本。 若要查找版本,请运行 az --version。 若要详细了解如何安装或升级 Azure CLI,请参阅安装 Azure CLI。
  • aks-preview Azure CLI 扩展的最新版本。 --enable-fips和--disable-fips参数仅在aks-preview扩展中可用。 有关说明,请参阅安装aks-previewAzure CLI扩展。
  • 用于k8s-extension列出和删除群集扩展的Azure CLI扩展。 通过运行 az extension add --upgrade --name k8s-extension 来安装它。
  • 已安装 kubectl 。 您可以使用 az aks install-cli 命令在本地安装它。
  • EnableFIPSPreview 功能标志已在您的订阅中注册。 有关说明,请参阅 “注册 EnableFIPSPreview 功能标志”。
  • Kubernetes 版本 1.35.0 或更高版本。 若要查看区域中可用的版本,请使用 az aks get-versions 命令。 在较早版本中启用 FIPS 的群集不享有豁免:AKS 会拒绝对该群集的任何更新,直到将其升级到 1.35.0 或更高版本,或禁用 FIPS。
  • 如果使用 Azure 资源管理器(ARM)模板或 REST API,请对于Microsoft.ContainerService/managedClusters和Microsoft.ContainerService/managedClusters/agentPools使用 API 版本2026-03-02-preview或更高版本。

安装 aks-preview Azure CLI 扩展

  1. aks-preview使用az extension add命令安装扩展。

    az extension add --name aks-preview
    
  2. 使用 az extension update 命令更新到最新版本的扩展。

    az extension update --name aks-preview
    

设置环境变量。

为本文中使用的资源设置以下环境变量。 将占位符值替换为你自己的值。 然后使用命令设置订阅上下文 az account set 。

export SUBSCRIPTION_ID="<subscription-id>"
export RESOURCE_GROUP="myResourceGroup"
export CLUSTER_NAME="myAKSCluster"
export NODE_POOL_NAME="fipsnp"

az account set --subscription $SUBSCRIPTION_ID

注册 EnableFIPSPreview 功能标志

  1. 使用 EnableFIPSPreview 命令注册 az feature register 功能标志。

    az feature register --namespace "Microsoft.ContainerService" --name "EnableFIPSPreview"
    

    需要几分钟,状态才会显示为已注册。

  2. 使用 az feature show 命令验证注册状态。

    az feature show --namespace "Microsoft.ContainerService" --name "EnableFIPSPreview"
    
  3. 状态显示“已注册”时,使用Microsoft.ContainerService命令刷新az provider register资源提供程序的注册。

    az provider register --namespace Microsoft.ContainerService
    

Limitations

使用启用了 FIPS 的 AKS 群集时,以下限制适用。

被阻止的组件

某些 AKS 管理的组件尚未使用符合 FIPS 的加密库构建。 无法在启用了 FIPS 的群集上启用这些组件,也不能在使用这些组件的群集上启用 FIPS。 下表列出了被阻止的组件和用于禁用每个组件的 Azure CLI 命令。 将 --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME 添加到每个 az aks 命令中。

Important

此列表仅适用于 AKS 管理的组件。 AKS 不会验证客户应用程序容器。

被阻止的组件 禁用命令
cost-analysis az aks update --disable-cost-analysis
approuting az aks approuting disable
azure-monitor (托管 Prometheus 指标、容器洞察和应用程序监视) az aks update --disable-azure-monitor-metrics
az aks disable-addons --addons monitoring
az aks update --disable-azure-monitor-app-monitoring
blob-csi az aks update --disable-blob-driver
IngressApplicationGateway az aks disable-addons --addons ingress-appgw
calico、azure-npm az aks update --network-policy none
cilium 无法从现有群集中删除 Cilium。 创建新群集。
acns-observability az aks update --disable-acns 或 az aks update --disable-acns-observability
OpenServiceMesh az aks disable-addons --addons open-service-mesh
早于 asm-1-26 的基于 Istio 的服务网格加载项修订版本 升级到修订版本 asm-1-26 或更高版本。 有关说明,请参阅 升级基于 Istio 的服务网格加载项。
不符合 FIPS 的群集扩展,例如 Flux (GitOps)。 请参阅FIPS 列(位于扩展功能矩阵中)。 az k8s-extension delete --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --cluster-type managedClusters --name <extension-name>

如果自动化(如 Azure Policy 分配)尝试在启用了 FIPS 的群集上安装不符合 FIPS 的扩展,AKS 将拒绝安装,扩展会显示为Failed预配状态。 群集不受影响。

创建已启用 FIPS 的 AKS 群集

使用 --enable-fips 标志创建群集时,可以启用 FIPS。 群集无法使用任何被阻止的组件。

  1. 使用带有 --enable-fips 参数的 az aks create 命令创建启用了 FIPS 的 AKS 群集。

    az aks create \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --kubernetes-version 1.35 \
        --enable-fips \
        --generate-ssh-keys
    
  2. 使用 az aks show 命令查询 enableFips 值,以验证群集是否已启用 FIPS。

    az aks show \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --query "enableFips"
    

    以下示例输出显示群集已启用 FIPS:

    true
    

    如果命令未返回 true,则创建群集时未安装 aks-preview 扩展。 如果没有该扩展,Azure CLI 将 --enable-fips 视为 --enable-fips-image,并且仅在默认节点池上启用 FIPS。 安装 aks-preview 扩展,然后在 现有群集上启用 FIPS。

  3. 创建已启用 FIPS 的群集会自动创建启用了 FIPS 的节点池。 可以通过使用az aks show命令检查节点池配置,并查询 agentPoolProfiles 中的 enableFips 值来验证这一点。

    az aks show \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --query "agentPoolProfiles[].{Name:name, enableFips:enableFips}" \
        --output table
    

    以下示例输出显示默认节点池已启用 FIPS:

    Name       EnableFips
    ---------  ----------
    nodepool1  True
    

更新现有 AKS 群集以启用或禁用 FIPS

若要在现有群集上启用 FIPS,请先准备群集,然后对其进行更新。

使群集满足 FIPS 要求

在群集级别启用 FIPS 之前,请完成以下步骤。

  1. 确保群集运行 Kubernetes 版本 1.35.0 或更高版本。 如果群集正在运行早期版本,请先升级群集。 有关说明,请参阅 升级 AKS 群集。

  2. 确保每个节点池都已启用 FIPS。 更新每个 非 FIPS 节点池 以使用已启用 FIPS 的映像。 有关说明,请参阅 更新现有节点池以启用或禁用 FIPS。

    Windows Server 2022 节点池已在 OS 中启用 FIPS 运行,但其 enableFips 属性为 False,除非显式设置该属性。 也在这些节点池上运行az aks nodepool update --enable-fips-image。 对于这些节点池,更新设置属性,不会更改节点映像。

  3. 禁用或删除 被阻止的组件中列出的每个组件,包括不符合 FIPS 的群集扩展。 若要列出群集上的扩展,请使用 az k8s-extension list 命令。 若要删除扩展,请使用 az k8s-extension delete 命令。 有关详细信息,请参阅 “管理 AKS 扩展”。

    az k8s-extension list \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $CLUSTER_NAME \
        --cluster-type managedClusters \
        --query "[].{name:name, extensionType:extensionType, state:provisioningState}" \
        --output table
    

    Note

    可以在创建群集后自动安装扩展,例如通过 Azure Policy 分配。 在启用 FIPS 之前再次列出扩展。 如果某个分配持续安装不符合 FIPS 的扩展,请将该群集从该分配中豁免。

更新现有群集以启用 FIPS

准备群集后,启用 FIPS。 如果群集不满足要求,AKS 将拒绝更新,并显示说明原因的错误消息。 有关帮助,请参阅 排查群集级 FIPS 错误。

  1. 使用带有 --enable-fips 参数的 az aks update 命令更新 AKS 群集。

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-fips
    
  2. 使用 az aks show 命令查询 enableFips 值,以验证群集是否已启用 FIPS。

    az aks show \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --query "enableFips"
    

    以下示例输出显示群集已启用 FIPS:

    true
    

更新现有群集以禁用 FIPS

可以更新现有群集以禁用 FIPS。 禁用 FIPS 模式时:

  • 群集级 FIPS 强制实施已被移除。
  • 不会修改现有节点池。
  • 可以在同一群集中同时运行 FIPS 和非 FIPS 节点池。
  • 可以部署以前在启用 FIPS 时被阻止的 AKS 扩展和加载项。
  • 新节点池不再要求启用 FIPS。

Note

禁用 FIPS 不会自动将已启用 FIPS 的节点池转换为非 FIPS。 如果需要,可以单独更新节点池。 有关说明,请参阅 在现有节点池上禁用 FIPS。 Windows Server 2025 节点池无法禁用 FIPS。

  1. 使用带有 --disable-fips 参数的 az aks update 命令更新 AKS 群集。

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --disable-fips
    
  2. 使用 az aks show 命令查询 enableFips 的值,以验证群集是否未启用 FIPS。

    az aks show \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --query "enableFips"
    

    以下示例输出显示群集未启用 FIPS:

    false
    

将节点池添加到已启用 FIPS 的 AKS 群集

已启用 FIPS 的群集中的每个新节点池都必须启用 FIPS。 使用带有 --enable-fips-image 参数的 az aks nodepool add 命令添加节点池。 如果省略 --enable-fips-image,AKS 将拒绝请求。

az aks nodepool add \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $CLUSTER_NAME \
    --name $NODE_POOL_NAME \
    --enable-fips-image

排查群集级 FIPS 错误

当请求与群集级 FIPS 冲突时,AKS 会拒绝它,通常会出现 BadRequest 描述原因的错误。 有关常见错误消息以及如何解决这些问题,请参阅 排查 AKS 中的群集级 FIPS 错误。

清理资源

如果不再需要在本文中创建的资源,请使用 az group delete 此命令删除资源组和所有相关资源。

az group delete --name $RESOURCE_GROUP --yes --no-wait