你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为 Azure Kubernetes 服务 (AKS) 节点池启用美国联邦信息处理标准 (FIPS)

美国联邦信息处理标准 (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 的 Linux 映像与用于基于 Linux 的节点池的默认 Linux 映像不同。 若要在节点池上启用 FIPS,必须创建新的基于 Linux 的节点池。 不能在现有节点池上启用 FIPS。

已启用 FIPS 的节点映像的版本号(如内核版本)可能不同于未启用 FIPS 的映像。 已启用 FIPS 的节点池和节点映像的更新周期可能与未启用 FIPS 的节点池和映像不同。

支持的 OS 版本

可以在所有受支持的 OS 类型、Linux 和 Windows 上创建已启用 FIPS 的节点池。 但并非所有 OS 版本都支持已启用 FIPS 的节点池。 发布新的 OS 版本后,通常需要经过一段等待期才能符合 FIPS 要求。

下表包含支持的 OS 版本:

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 将默认对 Linux 已启用 FIPS 的节点池使用 Ubuntu 20.04。

注意

以前,可以使用 GetOSOptions API 来确定给定的 OS 是否支持 FIPS。 GetOSOptions API 现已弃用,从 2024-05-01 开始,新的 AKS API 版本将不再包含它。

创建已启用 FIPS 的 Linux 节点池

  1. 使用带有 --enable-fips-image 参数的 az aks nodepool add 命令创建启用 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 的节点池。

  2. 使用 az aks show 命令验证节点池是否已启用 FIPS,并在 agentPoolProfiles 中查询 enableFIPS 值。

    az aks show \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \
        -o table
    

    以下示例输出表明 fipsnp 节点池已启用 FIPS:

    Name       enableFips
    ---------  ------------
    fipsnp     True
    nodepool1  False  
    
  3. 使用 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
    
  4. 使用 kubectl debug 命令在已启用 FIPS 的节点池中的某个节点上以交互会话运行部署。

    kubectl debug node/aks-fipsnp-12345678-vmss000000 -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
    
  5. 在交互会话输出中,验证是否已启用 FIPS 加密库。 输出应类似于以下示例输出:

    root@aks-fipsnp-12345678-vmss000000:/# cat /proc/sys/crypto/fips_enabled
    1
    

已启用 FIPS 的节点池还具有 kubernetes.azure.com/fips_enabled=true 标签,可供部署用来针对这些节点池。

创建已启用 FIPS 的 Windows 节点池

  1. 使用带有 --enable-fips-image 参数的 az aks nodepool add 命令创建启用 FIPS 的 Windows 节点池。 与基于 Linux 的节点池不同,Windows 节点池共享相同的映像集。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name fipsnp \
        --enable-fips-image \
        --os-type Windows
    
  2. 使用 az aks show 命令验证节点池是否已启用 FIPS,并在 agentPoolProfiles 中查询 enableFIPS 值。

    az aks show \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \
        -o table
    
  3. 验证 Windows 节点池是否有权访问 FIPS 加密库,方法是:在已启用 FIPS 的节点池中创建与 Windows 节点的 RDP 连接并检查注册表。 在“运行”应用程序中,输入 regedit

  4. 在注册表中查找 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy

  5. 如果 Enabled 设置为 1,则 FIPS 已启用。

屏幕截图显示了 FIPS 算法策略的注册表编辑器的图片,该编辑器正在启用。

已启用 FIPS 的节点池还具有 kubernetes.azure.com/fips_enabled=true 标签,可供部署用来针对这些节点池。

后续步骤

若要详细了解 AKS 安全性,请参阅有关 Azure Kubernetes 服务 (AKS) 中的群集安全性和升级的最佳做法