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

美国联邦信息处理标准 (FIPS) 140-2 是美国政府标准,用于定义信息技术产品和系统中加密模块的最低安全要求。 Azure Kubernetes 服务 (AKS) 允许你创建启用了 FIPS 140-2 的 Linux 和 Windows 节点池。 在已启用 FIPS 的节点池上运行的部署可以使用这些加密模块来增加安全性,并帮助满足 FedRAMP 合规性中的安全控制要求。 有关 FIPS 140-2 的详细信息,请参阅美国联邦信息处理标准 (FIPS) 140

重要

2027 年 3 月 17 日开始,Azure Kubernetes 服务(AKS)不再支持或提供 Ubuntu 20.04 安全更新。 将删除任何现有节点映像,并且无法缩放运行 Ubuntu 20.04 的任何节点池。 通过将 节点池升级到 Kubernetes 版本 1.35+,迁移到受支持的 Ubuntu 版本。 有关此停用的详细信息,请参阅 停用 GitHub 问题和Azure 更新停用公告。 若要随时了解公告和更新,请关注AKS 发行说明

重要

2025 年 11 月 30 日开始,Azure Kubernetes 服务(AKS)不再支持或提供 Azure Linux 2.0 安全更新。 Azure Linux 2.0 节点映像在 202512.06.0 版中冻结。 从 2026 年 3 月 31 日开始,将删除节点映像,并且无法缩放节点池。 通过将 节点池升级到 受支持的 Kubernetes 版本或迁移到 osSku AzureLinux3,迁移到受支持的 Azure Linux 版本。 有关详细信息,请参阅 停用 GitHub 问题和Azure 更新停用公告。 若要随时了解公告和更新,请关注AKS 发行说明

先决条件

  • 一个有效的 “Azure” 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户

  • 使用 az account set 命令设置订阅上下文。 例如:

    az account set --subscription "00000000-0000-0000-0000-000000000000"
    
  • 已安装 kubectl 。 您可以使用 az aks install-cli 命令在本地安装它。

  • 在本地安装 Terraform。 有关安装说明,请参阅 安装 Terraform

版本兼容性

  • 安装并配置了 Azure CLI 2.32.0 或更高版本。 要查找版本,请运行 az --version。 若要详细了解如何安装或升级 Azure CLI,请参阅安装 Azure CLI
  • 本文中的 ARM 模板示例使用 API 版本 2023-03-01 来针对 Microsoft.ContainerService/managedClustersMicrosoft.ContainerService/managedClusters/agentPools
  • 本文中的Bicep示例对 2023-03-01Microsoft.ContainerService/managedClusters 使用 API 版本 Microsoft.ContainerService/managedClusters/agentPools
  • 本文中的 Terraform 示例使用 AzureRM 提供程序 3.x。
  • 对于 Terraform FIPS 设置,请在 enable_fips_imageazurerm_kubernetes_cluster.default_node_pool 上使用 fips_enabledazurerm_kubernetes_cluster_node_pool

限制

已启用 FIPS 的节点池具有以下限制:

重要

已启用 FIPS 的 Linux 映像与用于基于 Linux 的节点池的默认 Linux 映像不同。

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

支持的操作系统版本

可以在所有受支持的 OS 类型(Linux 和 Windows)上创建启用了 FIPS 的节点池。 但是,并非所有 OS 版本都支持已启用 FIPS 的节点池。 发布新的 OS 版本后,通常会有一个等待期,然后才符合 FIPS。

下表包括支持 FIPS 的节点池支持的 OS 版本:

操作系统类型 操作系统 SKU 符合 FIPS(联邦信息处理标准) 默认
Linux Ubuntu 支持 默认已禁用
Linux Azure Linux 支持 默认已禁用
Windows操作系统 Windows Server 2022 支持 默认启用
Windows操作系统 Windows Server 2025 支持 默认启用且无法禁用

请求启用 FIPS 的 Ubuntu 时,如果默认的 Ubuntu 版本不支持 FIPS,则 AKS 默认为最新的支持 FIPS 的 Ubuntu 版本。 例如,Linux 节点池默认使用 Ubuntu 22.04。 由于 22.04 当前不支持 FIPS,AKS 默认使用 Ubuntu 20.04 作为启用 Linux FIPS 的节点池。

注意

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

创建 Terraform 配置文件

Terraform 配置文件定义 Terraform 创建和管理的基础结构。

  1. 创建名为 main.tf 的文件,并添加以下代码以定义 Terraform 版本并指定Azure提供程序:

    terraform {
      required_version = ">= 1.0"
    
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  2. 添加以下代码到 main.tf 来创建 Azure 资源组。 根据需要随时更改资源组的名称和位置。

    resource "azurerm_resource_group" "example" {
      name     = "example-fips-rg"
      location = "East US"
    }
    

创建启用了 FIPS 的默认节点池的 AKS 群集

创建新的 AKS 群集时,可以在默认节点池上启用 FIPS。

在已启用 FIPS 的默认节点池的群集上创建更多节点池时,还必须使用 --enable-fips-image 参数在新节点池上启用 FIPS。

  1. 使用 az aks create 命令和 --enable-fips-image 参数,在默认节点池上创建启用 FIPS 的 AKS 群集。

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 3 \
        --enable-fips-image
    
  2. 使用az aks show命令验证节点池是否启用了 FIPS,并查询 agentPoolProfiles 中的 enableFIPS 值。

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

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

    Name       enableFips
    ---------  ------------
    nodepool1  True
    

在 AKS 群集创建期间启用 FIPS 目前在 Azure 门户中不支持。 若要创建启用了 FIPS 的默认节点池的群集,请使用本文中的 Azure CLI、ARM 模板、Bicep或 Terraform 说明。

在集群中已启用 FIPS 的默认节点池上创建更多节点池时,您还必须在新节点池上通过将 enableFips 设置为 true 来启用 FIPS。

  1. 使用 ARM 模板在默认节点池上创建启用 FIPS 的 AKS 群集,方法是在代理池配置文件中将 enableFips 属性设置为 true。 例如:

    {
      "type": "Microsoft.ContainerService/managedClusters",
      "location": "[parameters('location')]",
      "name": "[parameters('clusterName')]",
      "properties": {
        "kubernetesVersion": "1.27",
        "enableRBAC": true,
        "dnsPrefix": "[parameters('dnsPrefix')]",
        "agentPoolProfiles": [
          {
            "name": "nodepool1",
            "count": 3,
            "vmSize": "Standard_D2s_v3",
            "osType": "Linux",
            "osSKU": "Ubuntu",
            "type": "VirtualMachineScaleSets",
            "mode": "System",
            "enableFips": true
          }
        ]
      },
      "identity": {
        "type": "SystemAssigned"
      }
    }
    
  2. 使用 Azure 门户、Azure CLI或Azure PowerShell部署 ARM 模板。 有关部署 ARM 模板的详细信息,请参阅 使用 ARM 模板部署资源

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

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

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

    Name       enableFips
    ---------  ------------
    nodepool1  True
    

在集群中已启用 FIPS 的默认节点池上创建更多节点池时,您还必须在新节点池上通过将 enableFIPS 设置为 true 来启用 FIPS。

  1. 通过使用 Bicep 在代理池配置文件中将 enableFIPS 设置为 true,在默认节点池上创建启用 FIPS 的 AKS 群集。 例如:

    param location string
    param clusterName string
    param dnsPrefix string
    
    resource aks 'Microsoft.ContainerService/managedClusters@2023-03-01' = {
      name: clusterName
      location: location
      identity: {
        type: 'SystemAssigned'
      }
      properties: {
        kubernetesVersion: '1.27'
        enableRBAC: true
        dnsPrefix: dnsPrefix
        agentPoolProfiles: [
          {
            name: 'nodepool1'
            count: 3
            vmSize: 'Standard_D2s_v3'
            osType: 'Linux'
            osSKU: 'Ubuntu'
            type: 'VirtualMachineScaleSets'
            mode: 'System'
            enableFIPS: true
          }
        ]
      }
    }
    
  2. 使用 Azure CLI、Azure PowerShell 或 Azure 门户部署Bicep文件。 有关如何用 Visual Studio Code 创建 Bicep 文件的详细信息,请参阅使用 Visual Studio Code 创建Bicep文件

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

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

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

    Name       enableFips
    ---------  ------------
    nodepool1  True
    

在具有已启用 FIPS 的默认节点池的群集上创建更多节点池时,您还必须通过在新的节点池上将 fips_enabled 设置为 true 来启用 FIPS,具体操作是在 azurerm_kubernetes_cluster_node_pool 上进行。

  1. 添加以下代码以 main.tf 在默认节点池上创建启用了 FIPS 的 AKS 群集:

    resource "azurerm_kubernetes_cluster" "example" {
      name                = "example-aks-cluster"
      location            = azurerm_resource_group.example.location
      resource_group_name = azurerm_resource_group.example.name
      dns_prefix          = "example-aks"
    
      default_node_pool {
        name              = "nodepool1"
        node_count        = 3
        vm_size           = "Standard_D2s_v3"
        os_sku            = "Ubuntu"
        enable_fips_image = true
      }
    
      identity {
        type = "SystemAssigned"
      }
    }
    
  2. 使用main.tf命令在包含terraform init文件的目录中初始化 Terraform。

    terraform init
    
  3. 使用 terraform plan 命令创建 Terraform 执行计划。

    terraform plan
    
  4. 使用 terraform apply 命令应用配置,以部署启用了 FIPS 的默认节点池的群集。

    terraform apply
    
  5. 使用 [az aks get-credentials][az-aks-get-credentials] 命令连接到 AKS 群集。

    az aks get-credentials \
        --resource-group myResourceGroup \
        --name myAKSCluster
    
  6. 使用az aks show命令验证节点池是否启用了 FIPS,并查询 agentPoolProfiles 中的 enableFIPS 值。

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

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

    Name       enableFips
    ---------  ------------
    nodepool1  True
    

有关 azurerm_kubernetes_cluster 资源的详细信息,请参阅 Terraform Azure 提供程序文档

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

  1. 使用具有参数的 az aks nodepool add 命令 --enable-fips-image 将已启用 FIPS 的 Linux 节点池添加到现有群集。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name fipsnp \
        --enable-fips-image
    
  2. 使用az aks show命令验证节点池配置,并在 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.azk8s.cn/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 标签,可供部署用来针对这些节点池。

在 Azure 门户中添加 Linux 节点池时当前不支持启用 FIPS。 若要添加启用了 FIPS 的 Linux 节点池,请使用本文中的 Azure CLI、ARM 模板、Bicep或 Terraform 说明。

  1. 通过使用 ARM 模板创建启用了 FIPS 的 Linux 节点池,方法是部署属性设置为enableFipstrue代理池资源。 例如:

    {
      "type": "Microsoft.ContainerService/managedClusters/agentPools",
      "apiVersion": "2023-03-01",
      "name": "[concat(parameters('clusterName'), '/fipsnp')]",
      "properties": {
        "count": 3,
        "vmSize": "Standard_D2s_v3",
        "osType": "Linux",
        "osSKU": "Ubuntu",
        "mode": "User",
        "enableFips": true
      }
    }
    
  2. 使用 Azure 门户、Azure CLI或Azure PowerShell部署 ARM 模板。 有关部署 ARM 模板的详细信息,请参阅 使用 ARM 模板部署资源

  3. 使用az aks show命令验证节点池配置,并在 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  
    
  4. 使用 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
    
  5. 使用 kubectl debug 命令在已启用 FIPS 的节点池中的某个节点上以交互会话运行部署。

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

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

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

  1. 使用 Bicep,通过部署将enableFIPS设置为true的代理池资源,创建启用 FIPS 的 Linux 节点池。 例如:

    param clusterName string
    param nodePoolName string = 'fipsnp'
    
    resource nodePool 'Microsoft.ContainerService/managedClusters/agentPools@2023-03-01' = {
      name: '${clusterName}/${nodePoolName}'
      properties: {
        count: 3
        vmSize: 'Standard_D2s_v3'
        osType: 'Linux'
        osSKU: 'Ubuntu'
        mode: 'User'
        enableFIPS: true
      }
    }
    
  2. 使用 Azure CLI、Azure PowerShell 或 Azure 门户部署Bicep文件。 有关如何用 Visual Studio Code 创建 Bicep 文件的详细信息,请参阅使用 Visual Studio Code 创建Bicep文件

  3. 使用az aks show命令验证节点池配置,并在 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  
    
  4. 使用 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
    
  5. 使用 kubectl debug 命令在已启用 FIPS 的节点池中的某个节点上以交互会话运行部署。

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

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

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

  1. 在 AKS 群集中的 main.tf 添加以下代码,以添加启用了 FIPS 的 Linux 节点池:

    resource "azurerm_kubernetes_cluster_node_pool" "fips_linux" {
      name                   = "fipsnp"
      kubernetes_cluster_id  = azurerm_kubernetes_cluster.example.id
      vm_size                = "Standard_D2s_v3"
      os_type                = "Linux"
      os_sku                 = "Ubuntu"
      node_count             = 3
      fips_enabled           = true
    
      node_taints = []
    }
    
  2. 使用 terraform planterraform apply 命令应用更新后的 Terraform 配置。

    terraform plan
    terraform apply
    
  3. 使用 [az aks get-credentials][az-aks-get-credentials] 命令连接到 AKS 群集。

    az aks get-credentials \
        --resource-group myResourceGroup \
        --name myAKSCluster
    
  4. 使用az aks show命令验证节点池配置,并在 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  
    
  5. 使用 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
    
  6. 使用 kubectl debug 命令在已启用 FIPS 的节点池中的某个节点上以交互会话运行部署。

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

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

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

有关 azurerm_kubernetes_cluster_node_pool 资源的详细信息,请参阅 Terraform Azure 提供程序文档

添加启用了 FIPS 的 Windows 节点池

在本部分中,我们将Windows节点池添加到现有 AKS 群集。 Windows Server 2022和更高版本的节点池默认启用 FIPS,即使 enableFips 不显示 True也是如此。 Windows Server 2025 及更高版本的节点池不支持禁用 FIPS

  1. 使用 az aks nodepool add 命令创建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命令验证节点池配置,并在 agentPoolProfiles 中查询 enableFIPS 值。

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

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

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

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

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

在 Azure 门户中没有提供用于启用或禁用 Windows 节点池 FIPS 设置的选项。 使用 Azure 门户创建的任何Windows节点池都已启用 FIPS。 默认情况下,Windows Server 2022和更高版本的节点池启用 FIPS,Windows Server 2025 及更高版本的节点池不支持禁用 FIPS。

  1. 通过将osType设置为 Windows 的代理池资源来使用 ARM 模板创建Windows节点池。 例如:

    {
      "type": "Microsoft.ContainerService/managedClusters/agentPools",
      "apiVersion": "2023-03-01",
      "name": "[concat(parameters('clusterName'), '/fipsnp')]",
      "properties": {
        "count": 3,
        "vmSize": "Standard_D2s_v3",
        "osType": "Windows",
        "osSKU": "Windows2022",
        "mode": "User"
      }
    }
    
  2. 使用 Azure 门户、Azure CLI或Azure PowerShell部署 ARM 模板。 有关部署 ARM 模板的详细信息,请参阅 使用 ARM 模板部署资源

  3. 使用az aks show命令验证节点池配置,并在 agentPoolProfiles 中查询 enableFIPS 值。

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

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

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

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

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

  1. 使用 Bicep 通过将代理池资源中的osType设置为Windows来创建 Windows 节点池。 例如:

    param clusterName string
    param nodePoolName string = 'fipsnp'
    
    resource nodePool 'Microsoft.ContainerService/managedClusters/agentPools@2023-03-01' = {
      name: '${clusterName}/${nodePoolName}'
      properties: {
        count: 3
        vmSize: 'Standard_D2s_v3'
        osType: 'Windows'
        osSKU: 'Windows2022'
        mode: 'User'
        enableFIPS: true
      }
    }
    
  2. 使用 Azure CLI、Azure PowerShell 或 Azure 门户部署Bicep文件。 有关如何用 Visual Studio Code 创建 Bicep 文件的详细信息,请参阅使用 Visual Studio Code 创建Bicep文件

  3. 使用az aks show命令验证节点池配置,并在 agentPoolProfiles 中查询 enableFIPS 值。

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

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

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

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

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

  1. 将以下代码添加到 main.tf,在 AKS 群集中创建Windows节点池:

    resource "azurerm_kubernetes_cluster_node_pool" "fips_windows" {
      name                   = "fipsnp"
      kubernetes_cluster_id  = azurerm_kubernetes_cluster.example.id
      vm_size                = "Standard_D2s_v3"
      os_type                = "Windows"
      os_sku                 = "Windows2022"
      node_count             = 3
      fips_enabled           = true
    
      node_taints = []
    }
    
  2. 使用 terraform planterraform apply 命令应用更新后的 Terraform 配置。

    terraform plan
    terraform apply
    
  3. 使用 [az aks get-credentials][az-aks-get-credentials] 命令连接到 AKS 群集。

    az aks get-credentials \
        --resource-group myResourceGroup \
        --name myAKSCluster
    
  4. 使用az aks show命令验证节点池配置,并在 agentPoolProfiles 中查询 enableFIPS 值。

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

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

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

    屏幕截图显示了 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 镜像。

  1. 使用az aks nodepool update命令和--enable-fips-image参数更新节点池。

    az aks nodepool update \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name np \
        --enable-fips-image
    

    此命令会立即触发节点池的重置映像,以部署符合 FIPS 的 OS。 此重新映像发生在节点池更新过程期间。 无需执行额外的步骤。

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

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

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

    Name       enableFips
    ---------  ------------
    np         True
    nodepool1  False  
    

Azure 门户当前不支持在现有节点池上启用 FIPS 。 若要在现有节点池上启用 FIPS,请使用本文中的 Azure CLI、ARM 模板、Bicep或 Terraform 说明。

  1. 使用 ARM 模板在现有节点池上启用 FIPS,方法是更新代理池配置文件以将属性enableFips设置为 true 。 例如:

    {
      "type": "Microsoft.ContainerService/managedClusters/agentPools",
      "name": "[concat(parameters('clusterName'), '/np')]",
      "apiVersion": "2023-03-01",
      "properties": {
        "enableFips": true
      }
    }
    
  2. 使用 Azure 门户、Azure CLI或Azure PowerShell部署更新的模板。 有关部署 ARM 模板的详细信息,请参阅 使用 ARM 模板部署资源

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

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

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

    Name       enableFips
    ---------  ------------
    np         True
    nodepool1  False  
    
  1. 在现有节点池上启用 FIPS,可以通过使用 Bicep 更新代理池资源,将 enableFIPS 设置为 true。 例如:

    param clusterName string
    param nodePoolName string = 'np'
    
    resource nodePool 'Microsoft.ContainerService/managedClusters/agentPools@2023-03-01' = {
      name: '${clusterName}/${nodePoolName}'
      properties: {
        enableFIPS: true
      }
    }
    
  2. 使用 Azure CLI、Azure PowerShell 或 Azure 门户部署更新的Bicep文件。 有关如何用 Visual Studio Code 创建 Bicep 文件的详细信息,请参阅使用 Visual Studio Code 创建Bicep文件

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

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

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

    Name       enableFips
    ---------  ------------
    np         True
    nodepool1  False  
    
  1. azurerm_kubernetes_cluster_node_pool中的main.tf资源更新为通过将fips_enabled设置为true:

    resource "azurerm_kubernetes_cluster_node_pool" "example" {
      name                   = "np"
      kubernetes_cluster_id  = azurerm_kubernetes_cluster.example.id
      vm_size                = "Standard_D2s_v3"
      os_type                = "Linux"
      os_sku                 = "Ubuntu"
      node_count             = 3
      fips_enabled           = true
    }
    
  2. 使用 terraform planterraform apply 命令应用更新后的 Terraform 配置。 Terraform 检测到更改 fips_enabled 并触发必要的重置映像操作。

    terraform plan
    terraform apply
    
  3. 使用 [az aks get-credentials][az-aks-get-credentials] 命令连接到 AKS 群集。

    az aks get-credentials \
        --resource-group myResourceGroup \
        --name myAKSCluster
    
  4. 使用az aks show命令验证节点池是否启用了 FIPS,并查询 agentPoolProfiles 中的 enableFIPS 值。

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

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

    Name       enableFips
    ---------  ------------
    np         True
    nodepool1  False  
    

在现有节点池上禁用 FIPS

可以更新现有的 Linux 节点池以禁用 FIPS。 更新现有节点池时,节点映像将从当前 FIPS 映像更改为同一 OS SKU 的建议非 FIPS 映像。 节点映像更改在重置映像后发生。

  1. 使用带有参数的az aks nodepool update--disable-fips-image命令更新 Linux 节点池。

    az aks nodepool update \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name np \
        --disable-fips-image
    

    此命令会立即触发节点池的重置映像,以部署符合 FIPS 的 OS。 此重新映像发生在节点池更新过程期间。 无需执行额外的步骤。

  2. 使用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  
    

在 Azure 门户中,当前不支持在现有节点池上禁用 FIPS。 若要在现有节点池上禁用 FIPS,请使用本文中的 Azure CLI、ARM 模板、Bicep或 Terraform 说明。

  1. 通过更新代理池配置文件,将属性enableFips设置为false,并在现有节点池上禁用 FIPS。 例如:

    {
      "type": "Microsoft.ContainerService/managedClusters/agentPools",
      "name": "[concat(parameters('clusterName'), '/np')]",
      "apiVersion": "2023-03-01",
      "properties": {
        "enableFips": false
      }
    }
    
  2. 使用 Azure 门户、Azure CLI或Azure PowerShell部署更新的模板。 有关部署 ARM 模板的详细信息,请参阅 使用 ARM 模板部署资源

  3. 使用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  
    
  1. 使用 Bicep 更新代理池资源,将 enableFIPS 设置为 false,以在现有节点池上禁用 FIPS。 例如:

    param clusterName string
    param nodePoolName string = 'np'
    
    resource nodePool 'Microsoft.ContainerService/managedClusters/agentPools@2023-03-01' = {
      name: '${clusterName}/${nodePoolName}'
      properties: {
        enableFIPS: false
      }
    }
    
  2. 使用 Azure CLI、Azure PowerShell 或 Azure 门户部署更新的Bicep文件。 有关如何用 Visual Studio Code 创建 Bicep 文件的详细信息,请参阅使用 Visual Studio Code 创建Bicep文件

  3. 使用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  
    
  1. azurerm_kubernetes_cluster_node_pool中的main.tf资源更新为通过将fips_enabled设置为false:

    resource "azurerm_kubernetes_cluster_node_pool" "example" {
      name                   = "np"
      kubernetes_cluster_id  = azurerm_kubernetes_cluster.example.id
      vm_size                = "Standard_D2s_v3"
      os_type                = "Linux"
      os_sku                 = "Ubuntu"
      node_count             = 3
      fips_enabled           = false
    }
    
  2. 使用 terraform planterraform apply 命令应用更新后的 Terraform 配置。 Terraform 检测到更改 fips_enabled 并触发必要的重置映像操作。

    terraform plan
    terraform apply
    
  3. 使用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  
    

当天的消息

可以在创建群集或添加节点池时使用标志替换 Linux 节点上的Message of the Day (MOTD)

创建群集,并使用命令az aks create,将--message-of-the-day标志设置为新 MOTD 文件的路径来替换“每日消息”。

az aks create --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt

添加节点池,并使用 az aks nodepool add 命令,将 --message-of-the-day 标志设置为新 MOTD 文件的路径以替换当天消息。

az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt

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