联邦信息处理标准(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-previewAzure 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 扩展
aks-preview使用az extension add命令安装扩展。az extension add --name aks-preview使用
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 功能标志
使用
EnableFIPSPreview命令注册az feature register功能标志。az feature register --namespace "Microsoft.ContainerService" --name "EnableFIPSPreview"需要几分钟,状态才会显示为已注册。
使用
az feature show命令验证注册状态。az feature show --namespace "Microsoft.ContainerService" --name "EnableFIPSPreview"状态显示“已注册”时,使用
Microsoft.ContainerService命令刷新az provider register资源提供程序的注册。az provider register --namespace Microsoft.ContainerService
Limitations
使用启用了 FIPS 的 AKS 群集时,以下限制适用。
某些 AKS 托管的组件不符合 FIPS,无法在启用了 FIPS 的群集上运行。 有关该列表,请参阅 已阻止的组件。
不支持使用 Kata 工作负荷运行时(
KataVmIsolationKataMshvVmIsolation或KataCcIsolation)的节点池。不支持使用预览节点池级自定义 CA 信任设置(
enableCustomCATrust)的节点池。 请改用 群集级自定义证书颁发机构信任 。为启用了 FIPS 的节点池记录的所有限制也适用于已启用 FIPS 的群集,包括 OS、映像和升级约束。 有关详细信息,请参阅为Azure Kubernetes 服务 (AKS)节点池启用联邦信息处理标准(FIPS)。
被阻止的组件
某些 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-metricsaz aks disable-addons --addons monitoringaz 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。 群集无法使用任何被阻止的组件。
使用带有
--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使用
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。创建已启用 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 之前,请完成以下步骤。
确保群集运行 Kubernetes 版本 1.35.0 或更高版本。 如果群集正在运行早期版本,请先升级群集。 有关说明,请参阅 升级 AKS 群集。
确保每个节点池都已启用 FIPS。 更新每个 非 FIPS 节点池 以使用已启用 FIPS 的映像。 有关说明,请参阅 更新现有节点池以启用或禁用 FIPS。
Windows Server 2022 节点池已在 OS 中启用 FIPS 运行,但其
enableFips属性为False,除非显式设置该属性。 也在这些节点池上运行az aks nodepool update --enable-fips-image。 对于这些节点池,更新设置属性,不会更改节点映像。禁用或删除 被阻止的组件中列出的每个组件,包括不符合 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 tableNote
可以在创建群集后自动安装扩展,例如通过 Azure Policy 分配。 在启用 FIPS 之前再次列出扩展。 如果某个分配持续安装不符合 FIPS 的扩展,请将该群集从该分配中豁免。
更新现有群集以启用 FIPS
准备群集后,启用 FIPS。 如果群集不满足要求,AKS 将拒绝更新,并显示说明原因的错误消息。 有关帮助,请参阅 排查群集级 FIPS 错误。
使用带有
--enable-fips参数的az aks update命令更新 AKS 群集。az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-fips使用
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。
使用带有
--disable-fips参数的az aks update命令更新 AKS 群集。az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --disable-fips使用
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