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

Azure Kubernetes 服务 (AKS) 的受信任启动(预览版)

受信任启动(预览版)通过防范高级和持久攻击技术,提高了第 2 代虚拟机 (VM) 的安全性。 借助此功能,管理员能够部署包含基础虚拟机的 AKS 节点,以及经过验证和签名的启动加载程序、OS 内核与驱动程序。 通过使用安全且经过测量的启动,管理员可以获得整个启动链完整性的见解和信心。

本文可帮助你了解此新功能及其实施方式。

概述

受信任启动由多种可单独启用的协调式基础结构技术组成。 每种技术都针对错综复杂的威胁提供另一层防御。

  • vTPM - 受信任启动引入了硬件受信任平台模块 (TPM) 的虚拟化版本,符合 TPM 2.0 规范。 它充当密钥和度量的专用安全保管库。 受信任启动将其自身专用的 TPM 实例提供给 VM,该实例在安全环境中运行,任何 VM 都无法访问它。 vTPM 通过度量 VM 的整个启动链(UEFI、OS、系统和驱动程序)来启用证明。 受信任启动使用 vTPM 通过云执行远程证明。 它可用于平台运行状况检查以及做出基于信任的决策。 作为一项运行状况检查,受信任启动能够以加密方式验证 VM 是否正常启动。 如果过程失败(原因可能是 VM 正在运行未经授权的组件),Microsoft Defender for Cloud 将发出完整性警报。 这些警报包含有关哪些组件未能通过完整性检查的详细信息。

  • 安全启动 - 受信任启动的根本是安全启动 VM。 此模式在平台固件中实现,可以防止安装基于恶意软件的 Rootkit 和 Bootkit。 安全启动旨在确保只有已签名的操作系统和驱动程序能够启动。 它为 VM 上的软件堆栈建立“信任根”。 启用安全启动后,所有 OS 启动组件(启动加载程序、内核、内核驱动程序)都必须由受信任的发布者签名。 Windows 和某些 Linux 发行版都支持安全启动。 如果安全启动无法对受信任发布者签名的映像进行身份验证,则不允许启动 VM。 有关详细信息,请参阅安全启动

开始之前

  • Azure CLI 版本 2.44.1 或更高版本。 可通过运行 az --version 查找版本,运行 az upgrade 升级版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

  • aks-preview Azure CLI 扩展版本 1.0.0b6 或更高版本。

  • 在 Azure 订阅中注册 TrustedLaunchPreview 功能。

  • AKS 支持版本 1.25.2 及更高版本的受信任启动(预览版)。

  • 受信任启动仅支持 Azure 第 2 代 VM

  • 安全启动需要已签名的启动加载程序、OS 内核和驱动程序。

安装 aks-preview Azure CLI 扩展

重要

AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

若要安装 aks-preview 扩展,请运行以下命令:

az extension add --name aks-preview

运行以下命令以更新到已发布的最新扩展版本:

az extension update --name aks-preview

注册 TrustedLaunchPreview 功能标志

使用 TrustedLaunchPreview 命令注册 TrustedLaunchPreview 功能标志,如以下示例所示:

az feature register --namespace "Microsoft.ContainerService" --name "TrustedLaunchPreview"

状态显示为“已注册”需要几分钟时间。 使用 az feature show 命令验证注册状态:

az feature show --namespace "Microsoft.ContainerService" --name "TrustedLaunchPreview"

当状态反映为“已注册”时,使用 az provider register 命令刷新 Microsoft.ContainerService 资源提供程序的注册:

az provider register --namespace "Microsoft.ContainerService"

限制

  • 不支持运行 Windows Server 操作系统的群集节点。
  • 受信任启动(预览版)不支持启用了 FIPS 或基于 ARM64 的节点池。
  • 不支持可用性集,仅支持虚拟机规模集。
  • 要在 GPU 节点池上启用安全启动,需要跳过安装 GPU 驱动程序。 有关详细信息,请参阅跳过 GPU 驱动程序安装
  • 可以使用受信任启动创建临时 OS 磁盘,并且支持所有区域。 但并非所有虚拟机大小都受支持。 有关详细信息,请参阅受信任启动临时 OS 大小

部署新群集

执行以下步骤,以使用 Azure CLI 部署 AKS 群集。

  1. 使用 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 --enable-managed-identity --generate-ssh-keys
    
  2. 运行以下命令以获取 Kubernetes 群集的访问凭据。 使用 az aks get-credentials 命令,并替换群集名称和资源组名称的值。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

添加启用了受信任启动的节点池

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

以下示例使用三个节点在名为 myAKSCluster 的群集上部署了启用 vTPM 和安全启动的节点池:

az aks nodepool add --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --node-count 3 --enable-vtpm --enable-secure-boot

更新群集并启用受信任启动

使用 az aks nodepool update 命令更新启用了受信任启动的节点池。 在运行命令之前,请查看以下参数:

  • --resource-group:输入托管现有 AKS 群集的现有资源组的名称。
  • --cluster-name:输入 AKS 群集的唯一名称,例如 myAKSCluster
  • --name:输入节点池的名称,例如 mynodepool
  • --enable-secure-boot:支持安全启动验证映像是否已由受信任发布者签名。
  • --enable-vtpm:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。

注意

现有节点池必须使用受信任启动映像才能在现有节点池上启用。 因此,对于在注册 TrustedLaunchPreview 功能之前创建的节点池,你无法在启用了受信任启动时更新它们。

默认情况下,使用与 TL 兼容的配置和已注册的功能标志创建节点池会生成受信任启动映像。 如果不指定 --enable-vtpm--enable-secure-boot 参数,则默认禁用它们,并且可以稍后使用 az aks nodepool update 命令启用。

注意

安全启动需要已签名的启动加载程序、OS 内核和驱动程序。 如果启用安全启动后节点未启动,则可以验证哪些启动组件导致了 Azure Linux 虚拟机中的安全启动失败。 请参阅验证安全启动失败

以下示例更新了 myResourceGroup 中 myAKSCluster 上的节点池 mynodepool,并启用了安全启动和 vTPM:

az aks nodepool update --cluster-name myCluster --resource-group myResourceGroup --name mynodepool --enable-secure-boot --enable-vtpm 

将 Pod 分配到启用了受信任启动的节点

可以约束 Pod 并将其限制为在特定节点或节点上运行,或优先选择已启用受信任启动的节点。 可以使用 Pod 清单中的以下节点池选择器来控制此项。

对于运行 vTPM 的节点池,请应用以下项:

spec:
  nodeSelector:
        kubernetes.azure.com/trusted-launch: true

对于运行安全启动的节点池,请应用以下项:

spec:
  nodeSelector:
        kubernetes.azure.com/secure-boot: true

禁用安全启动

要在 AKS 群集上禁用安全启动,请运行以下命令:

az aks nodepool update --cluster-name myCluster --resource-group myResourceGroup --name mynodepool --disable-secure-boot 

注意

更新会自动启动节点重置映像,此操作在每个节点上可能需要几分钟时间才能完成。

禁用 vTPM

要在 AKS 群集上禁用 vTPM,请运行以下命令:

az aks nodepool update --cluster-name myCluster --resource-group myResourceGroup --name mynodepool --disable-vtpm

后续步骤

在本文中,你了解了如何启用受信任启动。 详细了解受信任启动