美国联邦信息处理标准 (FIPS) 140-2 是美国政府标准,用于定义信息技术产品和系统中加密模块的最低安全要求。 Azure Kubernetes 服务 (AKS) 允许你创建启用了 FIPS 140-2 的 Linux 和 Windows 节点池。 在已启用 FIPS 的节点池上运行的部署可以使用这些加密模块来增加安全性,并帮助满足 FedRAMP 合规性中的安全控制要求。 有关 FIPS 140-2 的详细信息,请参阅美国联邦信息处理标准 (FIPS) 140。
先决条件
安装并配置了 Azure CLI 2.32.0 或更高版本。 要查找版本,请运行 az --version
。 若要详细了解如何安装或升级 Azure CLI,请参阅安装 Azure CLI。
注意
从代理版本 3.1.17 (Linux)和 Win-3.1.17 (Windows) 开始,AKS 监视加载项通过 Ubuntu、Azure Linux 和 Windows 支持启用了 FIPS 的节点池。
限制
- 已启用 FIPS 的节点池具有下列限制:
- 已启用 FIPS 的节点池需要 Kubernetes 1.19 及更高版本。
- 若要更新用于 FIPS 的基础包或模块,必须使用 节点映像升级。
- 不会评估 FIPS 节点上的容器映像是否符合 FIPS。
- 装载 CIFS 共享失败,因为 FIPS 会禁用某些身份验证模块。 若要解决此问题,请参阅在启用了 FIPS 的节点池上装载文件共享时出现错误。
重要
已启用 FIPS 的 Linux 映像与用于基于 Linux 的节点池的默认 Linux 映像不同。
已启用 FIPS 的节点映像的版本号(例如内核版本)可能不同于未启用 FIPS 的映像。 启用了 FIPS 的节点池和节点映像的更新周期可能与未启用 FIPS 的节点池和映像不同。
支持的 OS 版本
可以在所有受支持的 OS 类型(Linux 和 Windows)上创建启用了 FIPS 的节点池。 但是,并非所有 OS 版本都支持已启用 FIPS 的节点池。 发布新的 OS 版本后,通常会有一个等待期,然后才符合 FIPS。
此表包括支持的 OS 版本:
OS 类型 | 操作系统 SKU | FIPS 符合性 |
---|---|---|
Linux | Ubuntu | 支持 |
Linux | Azure Linux | 支持 |
Windows操作系统 | Windows Server 2019 | 支持 |
Windows操作系统 | Windows Server 2022 | 支持 |
请求启用 FIPS 的 Ubuntu 时,如果默认的 Ubuntu 版本不支持 FIPS,AKS 默认为最新的 Ubuntu 支持的 FIPS 版本。 例如,Linux 节点池默认使用 Ubuntu 22.04。 由于 22.04 当前不支持 FIPS,AKS 默认使用 Ubuntu 20.04 作为启用 Linux FIPS 的节点池。
注意
以前,可以使用 GetOSOptions API 来确定给定的 OS 是否支持 FIPS。 GetOSOptions API 现已弃用,从 2024-05-01 开始,新的 AKS API 版本将不再包含它。
创建已启用 FIPS 的 Linux 节点池
使用 az aks nodepool add 命令和
--enable-fips-image
参数创建启用了 FIPS 的 Linux 节点池。az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name fipsnp \ --enable-fips-image
注意
还可以在创建群集时将
--enable-fips-image
参数与 az aks create 命令配合使用,以便在默认节点池上启用 FIPS。 向以此方式创建的群集添加节点池时,仍必须使用--enable-fips-image
参数,以创建已启用 FIPS 的节点池。使用 az aks show 命令和查询 agentPoolProfiles 中的 enableFIPS 值验证节点池是否已启用 FIPS。
az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table
以下示例输出表明 fipsnp 节点池已启用 FIPS:
Name enableFips --------- ------------ fipsnp True nodepool1 False
使用
kubectl get nodes
命令列出节点。kubectl get nodes
以下示例输出显示了群集中节点的列表。 以
aks-fipsnp
开头的节点属于已启用 FIPS 的节点池。NAME STATUS ROLES AGE VERSION aks-fipsnp-12345678-vmss000000 Ready agent 6m4s v1.19.9 aks-fipsnp-12345678-vmss000001 Ready agent 5m21s v1.19.9 aks-fipsnp-12345678-vmss000002 Ready agent 6m8s v1.19.9 aks-nodepool1-12345678-vmss000000 Ready agent 34m v1.19.9
使用
kubectl debug
命令在已启用 FIPS 的节点池中的某个节点上以交互会话运行部署。kubectl debug node/aks-fipsnp-12345678-vmss000000 -it --image=mcr.azk8s.cn/dotnet/runtime-deps:6.0
在交互会话输出中,验证是否已启用 FIPS 加密库。 输出应类似于以下示例输出:
root@aks-fipsnp-12345678-vmss000000:/# cat /proc/sys/crypto/fips_enabled 1
已启用 FIPS 的节点池还具有 kubernetes.azure.com/fips_enabled=true 标签,可供部署用来针对这些节点池。
创建已启用 FIPS 的 Windows 节点池
使用 az aks nodepool add 命令和
--enable-fips-image
参数创建启用了 FIPS 的 Windows 节点池。 与基于 Linux 的节点池不同,Windows 节点池共享相同的映像集。az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name fipsnp \ --enable-fips-image \ --os-type Windows
使用 az aks show 命令和查询 agentPoolProfiles 中的 enableFIPS 值验证节点池是否已启用 FIPS。
az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table
验证 Windows 节点池能否访问 FIPS 加密库,在已启用 FIPS 的节点池中创建到 Windows 节点的 RDP 连接并检查注册表。 在“运行”应用程序中,输入 。
在注册表中查找
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy
。如果
Enabled
设置为 1,则 FIPS 已启用。已启用 FIPS 的节点池还具有 kubernetes.azure.com/fips_enabled=true 标签,可供部署用来针对这些节点池。
更新现有节点池以启用或禁用 FIPS
可更新现有 Linux 节点池以启用或禁用 FIPS。 如果计划将节点池从非 FIPS 迁移到 FIPS,请先验证应用程序是否在测试环境中正常工作,然后再将其迁移到生产环境。 在测试环境中验证应用程序应防止 FIPS 内核阻止某些弱密码或加密算法(例如不符合 FIPS 的 MD4 算法)引起的问题。
注意
更新现有 Linux 节点池以启用或禁用 FIPS 时,节点池更新会在 FIPS 和非 FIPS 映像之间移动。 此节点池更新触发重置映像以完成更新。 这可能会导致节点池更新需要几分钟才能完成。
先决条件
Azure CLI 版本 2.64.0 或更高版本。 要查找版本,请运行 az --version
。 如果需要进行安装或升级,请参阅安装 Azure CLI。
在现有节点池上启用 FIPS
可更新现有 Linux 节点池以启用 FIPS。 更新现有节点池时,节点镜像将从当前镜像更改为同一 OS SKU 的推荐 FIPS 镜像。
使用 az aks nodepool update 命令和
--enable-fips-image
参数更新节点池。az aks nodepool update \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name np \ --enable-fips-image
此命令会立即触发节点池的重新映像,以部署符合 FIPS 的操作系统。 此重置映像发生在节点池更新期间。 无需执行额外的步骤。
使用 az aks show 命令和查询 agentPoolProfiles 中的 enableFIPS 值,验证节点池是否已启用 FIPS。
az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table
以下示例输出表明 np 节点池已启用 FIPS:
Name enableFips --------- ------------ np True nodepool1 False
使用
kubectl get nodes
命令列出节点。kubectl get nodes
以下示例输出显示了群集中节点的列表。 以
aks-np
开头的节点属于已启用 FIPS 的节点池。NAME STATUS ROLES AGE VERSION aks-np-12345678-vmss000000 Ready agent 6m4s v1.19.9 aks-np-12345678-vmss000001 Ready agent 5m21s v1.19.9 aks-np-12345678-vmss000002 Ready agent 6m8s v1.19.9 aks-nodepool1-12345678-vmss000000 Ready agent 34m v1.19.9
使用
kubectl debug
命令在已启用 FIPS 的节点池中的某个节点上以交互会话运行部署。kubectl debug node/aks-np-12345678-vmss000000 -it --image=mcr.azk8s.cn/dotnet/runtime-deps:6.0
在交互会话输出中,验证是否已启用 FIPS 加密库。 输出应类似于以下示例输出:
root@aks-np-12345678-vmss000000:/# cat /proc/sys/crypto/fips_enabled 1
已启用 FIPS 的节点池还具有 kubernetes.azure.com/fips_enabled=true 标签,可供部署用来针对这些节点池。
在现有节点池上禁用 FIPS
可更新现有 Linux 节点池以禁用 FIPS。 更新现有节点池时,节点映像将从当前 FIPS 映像更改为同一 OS SKU 的建议非 FIPS 映像。 节点映像更改将在重置映像后发生。
使用 az aks nodepool update 命令和
--disable-fips-image
参数更新 Linux 节点池。az aks nodepool update \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name np \ --disable-fips-image
此命令会立即触发节点池的重新映像,以部署符合 FIPS 的操作系统。 此重置映像发生在节点池更新期间。 无需执行额外的步骤。
使用 az aks show 命令和查询 agentPoolProfiles 中的 enableFIPS 值,验证节点池是否未启用 FIPS。
az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table
以下示例输出显示 np 节点池未启用 FIPS:
Name enableFips --------- ------------ np False nodepool1 False
当天的消息
将 --message-of-the-day
标志与文件的位置一起传递,以在创建群集或节点池时替换 Linux 节点上“当天的消息”。
使用 az aks create 命令创建包含当天消息的群集。
az aks create --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
使用 az aks nodepool add 命令添加包含当天消息的节点池。
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
后续步骤
若要详细了解 AKS 安全性,请参阅有关 Azure Kubernetes 服务 (AKS) 中的群集安全性和升级的最佳做法。