受信任的启动 通过防范高级和持久性攻击技术来提高第 2 代虚拟机(VM)的安全性。 借助此功能,管理员能够部署包含基础虚拟机的 AKS 节点,以及经过验证和签名的启动加载程序、OS 内核与驱动程序。 通过使用安全且经过测量的启动,管理员可以获得整个启动链完整性的见解和信心。
本文可帮助你了解此新功能及其实施方式。
重要
从 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 发行说明。
概述
可信启动由多种相互协调的基础结构技术组成,且这些技术可以独立启用。 每种技术都针对错综复杂的威胁提供另一层防御。
vTPM - 受信任的启动引入了硬件 受信任平台模块 (TPM)的虚拟化版本,符合 TPM 2.0 规范。 它充当密钥和度量的专用安全保管库。 受信任启动为 VM 提供专属的 TPM 实例,该实例运行在任何 VM 都无法触及的安全环境中。 vTPM 通过度量虚拟机的整个启动链(UEFI、操作系统、系统和驱动程序)来支持证明。 可信启动使用 vTPM 进行由云端执行的远程证明。 它用于平台运行状况检查和做出基于信任的决策。 作为运行状况检查,受信任的启动可以加密验证 VM 是否已正确启动。 如果过程失败(原因可能是 VM 正在运行未经授权的组件),Microsoft Defender for Cloud 将发出完整性警报。 这些警报包含有关哪些组件未能通过完整性检查的详细信息。
安全启动 - 受信任启动的根基是虚拟机的安全启动。 此模式由平台固件实现,可防止恶意软件类 Rootkit 和 Bootkit 被安装。 安全启动旨在确保只有已签名的操作系统和驱动程序能够启动。 它为 VM 上的软件堆栈建立“信任根”。 启用安全启动后,所有 OS 启动组件(启动加载程序、内核、内核驱动程序)都必须由受信任的发布者签名。 Windows 和某些 Linux 发行版都支持安全启动。 如果安全启动无法对受信任发布者签名的映像进行身份验证,则不允许启动 VM。 有关详细信息,请参阅 [安全启动][secure-boot-overview]。
开始之前
- Azure CLI 版本 2.66.0 或更高版本。 可通过运行
az --version查找版本,运行az upgrade升级版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。
- 安全启动需要已签名的启动加载程序、OS 内核和驱动程序。
限制
- AKS 在 Kubernetes 1.25.2 及更高版本中支持可信启动。
- 可信启动仅支持 Azure 第 2 代虚拟机。
- 不支持具有 Windows Server作系统的节点池。
- 无法在与Pod 沙盒相同的节点池中启用受信任启动。 有关详细信息,请参阅 节点映像文档。
- 受信任的启动只能在与 Ubuntu 22.04 的 FIPS 相同的节点池中启用。
- 受信任启动不支持虚拟节点。
- 不支持可用性集,只支持虚拟机规模集。
- 要在 GPU 节点池上启用安全启动,需要跳过安装 GPU 驱动程序。 有关详细信息,请参阅跳过 GPU 驱动程序安装。
- 可以使用受信任启动创建临时 OS 磁盘,并且所有区域都受支持。 但并非所有虚拟机大小都受支持。 有关详细信息,请参阅 受信任的启动临时 OS 大小。
- Flatcar Container Linux for AKS 不支持在 AKS 上的可信启动。
创建启用了受信任启动的 AKS 群集
创建群集时,启用 vTPM 或安全启动会自动设置节点池以使用自定义的受信任启动映像。 此映像专为支持由受信任启动启用的安全功能而配置。
使用 az aks create 命令创建 AKS 群集。 在运行命令之前,请查看以下参数:
-
--name:输入 AKS 群集的唯一名称,例如 myAKSCluster。 -
--resource-group:输入用于托管 AKS 群集资源的现有资源组的名称。 -
--enable-secure-boot:启用安全启动来验证由受信任的发布者签名的映像。 -
--enable-vtpm:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。
注意
安全启动需要已签名的启动加载程序、OS 内核和驱动程序。 如果启用安全启动后节点未启动,则可以验证哪些启动组件导致了 Azure Linux 虚拟机中的安全启动失败。 请参阅验证安全启动失败。
以下示例使用 myResourceGroup 中的 一个节点创建了名为 myAKSCluster的群集,并启用了安全启动和 vTPM:
az aks create \ --name myAKSCluster \ --resource-group myResourceGroup \ --node-count 1 \ --enable-secure-boot \ --enable-vtpm \ --generate-ssh-keys-
运行以下命令以获取 Kubernetes 群集的访问凭据。 使用 az aks get-credentials 命令,并替换群集名称和资源组名称的值。
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
使用受信任的启动参数创建模板。 在创建模板之前,请查看以下参数:
-
enableSecureBoot:启用安全启动来验证由受信任的发布者签名的映像。 -
enableVTPM:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。
在模板中,为
enableVTPM和enableSecureBoot提供值。 用于 CLI 部署的同一架构也存在于"properties"下的Microsoft.ContainerService/managedClusters/agentPools定义中,如以下示例所示:"properties": { ..., "securityProfile": { "enableVTPM": "true", "enableSecureBoot": "true", } }-
使用 vTPM 部署模板,并在群集上启用安全启动。 有关详细说明,请参阅 使用 ARM 模板部署 AKS 群集 。
添加启用受信任启动的节点池
创建节点池时,启用 vTPM 或安全启动会自动设置节点池以使用自定义的受信任启动映像。 此映像专门配置用于支持由可信启动启用的安全功能。
使用
az aks nodepool add命令添加启用了“受信任启动”的节点池。 在运行命令之前,请查看以下参数:-
--cluster-name:输入 AKS 群集的名称。 -
--resource-group:输入用于托管 AKS 群集资源的现有资源组的名称。 -
--name:输入节点池的唯一名称。 节点池的名称只能包含小写字母数字字符,并且必须以小写字母开头。 对于 Linux 节点池,长度必须介于 1 到 11 个字符之间。 -
--node-count:Kubernetes 代理池中的节点数。 默认值为 3。 -
--enable-secure-boot:启用安全启动,以便验证由受信任发布者签名的映像。 -
--enable-vtpm:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。
注意
安全启动需要已签名的启动加载程序、OS 内核和驱动程序。 如果启用安全启动后节点未启动,则可以验证哪些启动组件导致了 Azure Linux 虚拟机中的安全启动失败。 请参阅验证安全启动失败。
以下示例演示如何在名为 myAKSCluster 且具有三个节点的群集上部署启用了 vTPM 和安全启动的节点池:
az aks nodepool add --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --node-count 3 --enable-vtpm --enable-secure-boot-
检查节点池是否正在使用受信任的启动映像。
受信任的启动节点具有以下输出:
- 包含
"TL"的节点映像版本,例如"AKSUbuntu-2204-gen2TLcontainerd"。 -
"Security-type"应为"Trusted Launch".
kubectl get nodes kubectl describe node {node-name} | grep -e node-image-version -e security-type- 包含
使用受信任的启动参数创建模板。 在创建模板之前,请查看以下参数:
-
enableSecureBoot:启用安全启动来验证由受信任的发布者签名的映像。 -
enableVTPM:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。
在模板中,为
enableVTPM和enableSecureBoot提供值。 用于 CLI 部署的相同架构也存在于"properties"下的Microsoft.ContainerService/managedClusters/agentPools定义中,如下例所示:"properties": { ..., "securityProfile": { "enableVTPM": "true", "enableSecureBoot": "true", } }-
使用 vTPM 部署模板,并在群集上启用安全启动。 有关详细说明,请参阅 使用 ARM 模板部署 AKS 群集 。
添加启用了受信任启动和 FIPS 的节点池
只能针对采用第 2 代 VM 规格的 Ubuntu 22.04 节点池同时启用可信启动和 FIPS。
对于 FIPS 特定操作(例如在现有节点池上禁用 FIPS),请参阅 为 Azure Kubernetes 服务 (AKS) 节点池启用联邦信息处理标准 (FIPS)。
使用
az aks nodepool add命令添加启用可信启动和 FIPS 的节点池。 在运行命令之前,请查看以下参数:-
--cluster-name:输入 AKS 群集的名称。 -
--resource-group:输入用于托管 AKS 群集资源的现有资源组的名称。 -
--name:输入节点池的唯一名称。 节点池的名称只能包含小写字母数字字符,并且必须以小写字母开头。 对于 Linux 节点池,长度必须介于 1 到 11 个字符之间。 -
--node-count:Kubernetes 代理池中的节点数。 默认值为 3。 -
--enable-secure-boot:启用安全启动,以便验证由受信任发布者签名的映像。 -
--enable-vtpm:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。 -
--enable-fips-image:为节点池启用符合 FIPS 的节点映像。
注意
安全启动需要已签名的启动加载程序、OS 内核和驱动程序。 如果启用安全启动后节点未启动,则可以验证哪些启动组件导致了 Azure Linux 虚拟机中的安全启动失败。 请参阅验证安全启动失败。
以下示例部署在名为 myAKSCluster 的群集上启用了 vTPM、安全启动和 FIPS 的节点池,其中包含三个节点:
az aks nodepool add --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --node-count 3 --enable-vtpm --enable-secure-boot --enable-fips-image-
检查节点池是否使用受信任的启动映像。
受信任的启动节点具有以下输出:
- 包含
"TL"和"FIPS"的节点镜像版本。 -
"Security-type"是"Trusted Launch"。
kubectl get nodes kubectl describe node {node-name} | grep -e node-image-version -e security-type- 包含
使用可信启动和 FIPS 参数创建模板。 在创建模板之前,请查看以下参数:
-
enableSecureBoot:启用安全启动来验证由受信任的发布者签名的映像。 -
enableVTPM:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。 -
enableFips:为节点池启用符合 FIPS 的节点映像。
在你的模板中,提供
enableVTPM、enableSecureBoot、enableFips的值。 用于 CLI 部署的同一架构也存在于"properties"下的Microsoft.ContainerService/managedClusters/agentPools定义中,如下例所示:"properties": { ..., "osSKU": "Ubuntu", "enableFips": true, "securityProfile": { "enableVTPM": "true", "enableSecureBoot": "true", } }-
在您的集群上部署启用了 vTPM、安全启动和 FIPS 的模板。 有关详细说明,请参阅 使用 ARM 模板部署 AKS 群集 。
在现有的受信任启动节点池上启用 vTPM 或安全启动
可以更新现有的受信任启动节点池以启用 vTPM 或安全启动。 支持以下方案:
- 创建节点池时,只需指定
--enable-secure-boot,然后即可运行 update 命令来--enable-vtpm - 创建节点池时,只需指定
--enable-vtpm,之后可以运行 update 命令来--enable-secure-boot
如果节点池当前没有受信任的启动映像,则无法更新节点池以启用安全启动或 vTPM。
检查节点池是否正在使用受信任的启动映像。
受信任的启动节点具有以下输出:
- 包含
"TL"的节点镜像版本,例如"AKSUbuntu-2204-gen2TLcontainerd"。 -
"Security-type"应为"Trusted Launch".
kubectl get nodes kubectl describe node {node-name} | grep -e node-image-version -e security-type如果节点池当前没有受信任的启动映像,则无法更新节点池以启用安全启动或 vTPM。
- 包含
使用
az aks nodepool update命令更新启用“受信任启动”的节点池。 在运行命令之前,请查看以下参数:-
--resource-group:输入托管现有 AKS 群集的现有资源组的名称。 -
--cluster-name:输入 AKS 群集的唯一名称,例如 myAKSCluster。 -
--name:输入节点池的名称,例如 mynodepool。 -
--enable-secure-boot:使安全启动能够验证映像是否已由受信任的发布者签名。 -
--enable-vtpm:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。
注意
安全启动需要已签名的启动加载程序、OS 内核和驱动程序。 如果启用安全启动后节点未启动,则可以验证哪些启动组件导致了 Azure Linux 虚拟机中的安全启动失败。 请参阅验证安全启动失败。
以下示例更新 myResourceGroup 中 myAKSCluster 上的节点池 mynodepool,并启用 vTPM。 在此方案中,在创建节点池期间启用了安全启动:
az aks nodepool update --cluster-name myCluster --resource-group myResourceGroup --name mynodepool --enable-vtpm以下示例更新 myResourceGroup 中 myAKSCluster 上的节点池 mynodepool,并启用安全启动。 在此方案中,在创建节点池期间启用了 vTPM:
az aks nodepool update --cluster-name myCluster --resource-group myResourceGroup --name mynodepool --enable-secure-boot-
检查节点池是否正在使用受信任的启动映像。
受信任的启动节点具有以下输出:
- 包含
"TL"的节点映像版本,例如"AKSUbuntu-2204-gen2TLcontainerd"。 -
"Security-type"应为"Trusted Launch".
kubectl get nodes kubectl describe node {node-name} | grep -e node-image-version -e security-type如果节点池当前没有受信任的启动映像,则无法更新节点池以启用安全启动或 vTPM。
- 包含
使用受信任的启动参数创建模板。 在创建模板之前,请查看以下参数:
-
enableSecureBoot:启用安全启动来验证由受信任的发布者签名的映像。 -
enableVTPM:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。
在模板中,为
enableVTPM和enableSecureBoot提供值。 用于 CLI 部署的相同架构也存在于"properties"下的Microsoft.ContainerService/managedClusters/agentPools定义中,如以下示例所示:"properties": { ..., "securityProfile": { "enableVTPM": "true", "enableSecureBoot": "true", } }-
使用 vTPM 部署模板,并在群集上启用安全启动。 有关详细说明,请参阅 使用 ARM 模板部署 AKS 群集 。
将 Pod 分配到启用了受信任启动的节点
可以对 Pod 施加约束,使其只能在某个特定节点或某些特定节点上运行,或者优先选择启用了受信任启动的节点。 可以使用 Pod 清单中的以下节点池选择器来控制此项。
spec:
nodeSelector:
kubernetes.azure.com/security-type = "TrustedLaunch"
在现有的受信任启动节点池上禁用 vTPM 或安全启动
可以更新现有节点池以禁用 vTPM 或安全启动。 发生这种情况时,你仍将继续使用“受信任启动”映像。 随时可以通过更新节点池来重新启用 vTPM 或安全启动。
更新节点池以使用 az aks nodepool update 命令禁用安全启动或 vTPM。 在运行命令之前,请查看以下参数:
-
--resource-group:输入托管现有 AKS 群集的现有资源组的名称。 -
--cluster-name:输入 AKS 群集的唯一名称,例如 myAKSCluster。 -
--name:输入节点池的名称,例如 mynodepool。 -
--enable-secure-boot:使安全启动能够验证映像是否已由受信任的发布者签名。 -
--enable-vtpm:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。
若要在现有节点池上禁用 vTPM,请执行以下作:
az aks nodepool update --cluster-name myCluster --resource-group myResourceGroup --name mynodepool --disable-vtpm
若要对现有节点池禁用安全启动,请执行以下操作:
az aks nodepool update --cluster-name myCluster --resource-group myResourceGroup --name mynodepool --disable-secure-boot
使用受信任的启动参数创建模板。 在创建模板之前,请查看以下参数:
-
enableSecureBoot:启用安全启动来验证由受信任的发布者签名的映像。 -
enableVTPM:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。
在你的模板中,为
enableVTPM和enableSecureBoot提供值。 用于 CLI 部署的相同架构也存在于"properties"下的Microsoft.ContainerService/managedClusters/agentPools定义中,如以下示例所示:"properties": { ..., "securityProfile": { "enableVTPM": "false", "enableSecureBoot": "false", } }-
使用 vTPM 部署模板,并在群集上禁用安全启动。 有关详细说明,请参阅 使用 ARM 模板部署 AKS 群集 。
后续步骤
在本文中,你学习了如何启用受信任启动。 详细了解Trusted Launch。