美国联邦信息处理标准 (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/managedClusters和Microsoft.ContainerService/managedClusters/agentPools。
- 本文中的Bicep示例对
2023-03-01和Microsoft.ContainerService/managedClusters使用 API 版本Microsoft.ContainerService/managedClusters/agentPools。
- 本文中的 Terraform 示例使用 AzureRM 提供程序 3.x。
- 对于 Terraform FIPS 设置,请在
enable_fips_image和azurerm_kubernetes_cluster.default_node_pool上使用fips_enabled和azurerm_kubernetes_cluster_node_pool。
限制
已启用 FIPS 的节点池具有以下限制:
- 已启用 FIPS 的节点池需要 Kubernetes 1.19 及更高版本。
- 若要更新用于 FIPS 的基础包或模块,必须使用 节点映像升级。
- 不会评估 FIPS 节点上的容器映像是否符合 FIPS。
- 装载 CIFS 共享失败,因为 FIPS 会禁用某些身份验证模块。 若要解决此问题,请参阅在启用了 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 创建和管理的基础结构。
创建名为
main.tf的文件,并添加以下代码以定义 Terraform 版本并指定Azure提供程序:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 3.0" } } } provider "azurerm" { features {} }添加以下代码到
main.tf来创建 Azure 资源组。 根据需要随时更改资源组的名称和位置。resource "azurerm_resource_group" "example" { name = "example-fips-rg" location = "East US" }
创建启用了 FIPS 的默认节点池的 AKS 群集
创建新的 AKS 群集时,可以在默认节点池上启用 FIPS。
在已启用 FIPS 的默认节点池的群集上创建更多节点池时,还必须使用 --enable-fips-image 参数在新节点池上启用 FIPS。
使用
az aks create命令和--enable-fips-image参数,在默认节点池上创建启用 FIPS 的 AKS 群集。az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 3 \ --enable-fips-image使用
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。
使用 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" } }使用 Azure 门户、Azure CLI或Azure PowerShell部署 ARM 模板。 有关部署 ARM 模板的详细信息,请参阅 使用 ARM 模板部署资源。
使用
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。
通过使用 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 } ] } }使用 Azure CLI、Azure PowerShell 或 Azure 门户部署Bicep文件。 有关如何用 Visual Studio Code 创建 Bicep 文件的详细信息,请参阅使用 Visual Studio Code 创建Bicep文件。
使用
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 上进行。
添加以下代码以
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" } }使用
main.tf命令在包含terraform init文件的目录中初始化 Terraform。terraform init使用
terraform plan命令创建 Terraform 执行计划。terraform plan使用
terraform apply命令应用配置,以部署启用了 FIPS 的默认节点池的群集。terraform apply使用 [
az aks get-credentials][az-aks-get-credentials] 命令连接到 AKS 群集。az aks get-credentials \ --resource-group myResourceGroup \ --name myAKSCluster使用
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 群集
使用具有参数的
az aks nodepool add命令--enable-fips-image将已启用 FIPS 的 Linux 节点池添加到现有群集。az aks nodepool add \ --resource-group myResourceGroup \ --cluster-name myAKSCluster \ --name fipsnp \ --enable-fips-image使用
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使用
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 标签,可供部署用来针对这些节点池。
在 Azure 门户中添加 Linux 节点池时当前不支持启用 FIPS。 若要添加启用了 FIPS 的 Linux 节点池,请使用本文中的 Azure CLI、ARM 模板、Bicep或 Terraform 说明。
通过使用 ARM 模板创建启用了 FIPS 的 Linux 节点池,方法是部署属性设置为
enableFips的true代理池资源。 例如:{ "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 } }使用 Azure 门户、Azure CLI或Azure PowerShell部署 ARM 模板。 有关部署 ARM 模板的详细信息,请参阅 使用 ARM 模板部署资源。
使用
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使用
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 标签,可供部署用来针对这些节点池。
使用 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 } }使用 Azure CLI、Azure PowerShell 或 Azure 门户部署Bicep文件。 有关如何用 Visual Studio Code 创建 Bicep 文件的详细信息,请参阅使用 Visual Studio Code 创建Bicep文件。
使用
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使用
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 标签,可供部署用来针对这些节点池。
在 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 = [] }使用
terraform plan和terraform apply命令应用更新后的 Terraform 配置。terraform plan terraform apply使用 [
az aks get-credentials][az-aks-get-credentials] 命令连接到 AKS 群集。az aks get-credentials \ --resource-group myResourceGroup \ --name myAKSCluster使用
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使用
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 标签,可供部署用来针对这些节点池。
有关 azurerm_kubernetes_cluster_node_pool 资源的详细信息,请参阅 Terraform Azure 提供程序文档。
添加启用了 FIPS 的 Windows 节点池
在本部分中,我们将Windows节点池添加到现有 AKS 群集。
Windows Server 2022和更高版本的节点池默认启用 FIPS,即使 enableFips 不显示 True也是如此。
Windows Server 2025 及更高版本的节点池不支持禁用 FIPS。
使用
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使用
az aks show命令验证节点池配置,并在 agentPoolProfiles 中查询 enableFIPS 值。az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table通过在节点池中创建与 Windows 节点的 RDP 连接][aks-rdp] 并检查注册表,验证Windows节点池是否有权访问 FIPS 加密库。 在运行应用程序中执行输入
regedit。在注册表中查找
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy。如果
Enabled设置为 1,则 FIPS 已启用。
已启用 FIPS 的节点池还具有 kubernetes.azure.com/fips_enabled=true 标签,可供部署用来针对这些节点池。
在 Azure 门户中没有提供用于启用或禁用 Windows 节点池 FIPS 设置的选项。 使用 Azure 门户创建的任何Windows节点池都已启用 FIPS。 默认情况下,Windows Server 2022和更高版本的节点池启用 FIPS,Windows Server 2025 及更高版本的节点池不支持禁用 FIPS。
通过将
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" } }使用 Azure 门户、Azure CLI或Azure PowerShell部署 ARM 模板。 有关部署 ARM 模板的详细信息,请参阅 使用 ARM 模板部署资源。
使用
az aks show命令验证节点池配置,并在 agentPoolProfiles 中查询 enableFIPS 值。az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table通过在节点池中创建与 Windows 节点的 RDP 连接][aks-rdp] 并检查注册表,验证Windows节点池是否有权访问 FIPS 加密库。 在运行应用程序中执行输入
regedit。在注册表中查找
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy。如果
Enabled设置为 1,则 FIPS 已启用。
已启用 FIPS 的节点池还具有 kubernetes.azure.com/fips_enabled=true 标签,可供部署用来针对这些节点池。
使用 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 } }使用 Azure CLI、Azure PowerShell 或 Azure 门户部署Bicep文件。 有关如何用 Visual Studio Code 创建 Bicep 文件的详细信息,请参阅使用 Visual Studio Code 创建Bicep文件。
使用
az aks show命令验证节点池配置,并在 agentPoolProfiles 中查询 enableFIPS 值。az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table通过在节点池中创建与 Windows 节点的 RDP 连接][aks-rdp] 并检查注册表,验证Windows节点池是否有权访问 FIPS 加密库。 在运行应用程序中执行输入
regedit。在注册表中查找
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy。如果
Enabled设置为 1,则 FIPS 已启用。
已启用 FIPS 的节点池还具有 kubernetes.azure.com/fips_enabled=true 标签,可供部署用来针对这些节点池。
将以下代码添加到
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 = [] }使用
terraform plan和terraform apply命令应用更新后的 Terraform 配置。terraform plan terraform apply使用 [
az aks get-credentials][az-aks-get-credentials] 命令连接到 AKS 群集。az aks get-credentials \ --resource-group myResourceGroup \ --name myAKSCluster使用
az aks show命令验证节点池配置,并在 agentPoolProfiles 中查询 enableFIPS 值。az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table通过在节点池中创建与 Windows 节点的 RDP 连接][aks-rdp] 并检查注册表,验证Windows节点池是否有权访问 FIPS 加密库。 在运行应用程序中执行输入
regedit。在注册表中查找
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 的 OS。 此重新映像发生在节点池更新过程期间。 无需执行额外的步骤。
使用
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 说明。
使用 ARM 模板在现有节点池上启用 FIPS,方法是更新代理池配置文件以将属性
enableFips设置为true。 例如:{ "type": "Microsoft.ContainerService/managedClusters/agentPools", "name": "[concat(parameters('clusterName'), '/np')]", "apiVersion": "2023-03-01", "properties": { "enableFips": true } }使用 Azure 门户、Azure CLI或Azure PowerShell部署更新的模板。 有关部署 ARM 模板的详细信息,请参阅 使用 ARM 模板部署资源。
使用
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,可以通过使用 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 } }使用 Azure CLI、Azure PowerShell 或 Azure 门户部署更新的Bicep文件。 有关如何用 Visual Studio Code 创建 Bicep 文件的详细信息,请参阅使用 Visual Studio Code 创建Bicep文件。
使用
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
将
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 }使用
terraform plan和terraform apply命令应用更新后的 Terraform 配置。 Terraform 检测到更改fips_enabled并触发必要的重置映像操作。terraform plan terraform apply使用 [
az aks get-credentials][az-aks-get-credentials] 命令连接到 AKS 群集。az aks get-credentials \ --resource-group myResourceGroup \ --name myAKSCluster使用
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 映像。 节点映像更改在重置映像后发生。
使用带有参数的
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。 此重新映像发生在节点池更新过程期间。 无需执行额外的步骤。
使用
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 说明。
通过更新代理池配置文件,将属性
enableFips设置为false,并在现有节点池上禁用 FIPS。 例如:{ "type": "Microsoft.ContainerService/managedClusters/agentPools", "name": "[concat(parameters('clusterName'), '/np')]", "apiVersion": "2023-03-01", "properties": { "enableFips": false } }使用 Azure 门户、Azure CLI或Azure PowerShell部署更新的模板。 有关部署 ARM 模板的详细信息,请参阅 使用 ARM 模板部署资源。
使用
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
使用 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 } }使用 Azure CLI、Azure PowerShell 或 Azure 门户部署更新的Bicep文件。 有关如何用 Visual Studio Code 创建 Bicep 文件的详细信息,请参阅使用 Visual Studio Code 创建Bicep文件。
使用
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
将
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 }使用
terraform plan和terraform apply命令应用更新后的 Terraform 配置。 Terraform 检测到更改fips_enabled并触发必要的重置映像操作。terraform plan terraform apply使用
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
当天的消息
可以在创建群集或添加节点池时使用
创建群集,并使用命令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) 中的群集安全性和升级的最佳做法。