共用方式為

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

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

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

概述

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

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

  • 安全启动 - 受信任启动的根目录是 VM 的安全启动。 此模式在平台固件中实现,可以防止安装基于恶意软件的 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 代 VM
  • 不支持具有 Windows Server作系统的节点池。
  • 无法在 与 Pod 沙盒相同的节点池中启用受信任的启动。 有关详细信息,请参阅 节点映像文档
  • 受信任启动不支持虚拟节点。
  • 不支持可用性集,仅支持虚拟机规模集。
  • 要在 GPU 节点池上启用安全启动,需要跳过安装 GPU 驱动程序。 有关详细信息,请参阅跳过 GPU 驱动程序安装
  • 可以使用受信任的启动创建临时 OS 磁盘,并且支持所有区域。 但并非所有虚拟机大小都受支持。 有关详细信息,请参阅 受信任的启动临时 OS 大小

创建启用了受信任启动的 AKS 群集

创建群集时,启用 vTPM 或安全启动会自动设置节点池以使用自定义的受信任启动映像。 此映像专门配置为支持受信任启动启用的安全功能。

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

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  1. 使用受信任的启动参数创建模板。 在创建模板之前,请查看以下参数:

    • enableSecureBoot:使安全启动能够对受信任的发布者签名的映像进行身份验证。
    • enableVTPM:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。

    在模板中,提供值和 enableVTPMenableSecureBoot。 用于 CLI 部署的 Microsoft.ContainerService/managedClusters/agentPools 同一架构存在于定义下 "properties",如以下示例所示:

    "properties": {
        ...,
        "securityProfile": {
            "enableVTPM": "true",
            "enableSecureBoot": "true",
        }
    }
    
  2. 使用 vTPM 部署模板,并在群集上启用安全启动。 有关详细说明,请参阅 使用 ARM 模板部署 AKS 群集

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

创建节点池时,启用 vTPM 或安全启动会自动设置节点池以使用自定义的受信任启动映像。 此映像专门配置为支持受信任启动启用的安全功能。

  1. 使用命令添加启用了受信任启动的 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
    
  2. 检查节点池是否正在使用受信任的启动映像。

    受信任的启动节点具有以下输出:

    • 包含 "TL"的节点映像版本,例如 "AKSUbuntu-2204-gen2TLcontainerd"
    • "Security-type" 应为 "Trusted Launch".
    kubectl get nodes
    kubectl describe node {node-name} | grep -e node-image-version -e security-type
    
  1. 使用受信任的启动参数创建模板。 在创建模板之前,请查看以下参数:

    • enableSecureBoot:使安全启动能够对受信任的发布者签名的映像进行身份验证。
    • enableVTPM:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。

    在模板中,提供值和 enableVTPMenableSecureBoot。 用于 CLI 部署的 Microsoft.ContainerService/managedClusters/agentPools 同一架构存在于定义下 "properties",如以下示例所示:

    "properties": {
        ...,
        "securityProfile": {
            "enableVTPM": "true",
            "enableSecureBoot": "true",
        }
    }
    
  2. 使用 vTPM 部署模板,并在群集上启用安全启动。 有关详细说明,请参阅 使用 ARM 模板部署 AKS 群集

在现有的受信任启动节点池上启用 vTPM 或安全启动

可以更新现有的受信任启动节点池以启用 vTPM 或安全启动。 支持以下方案:

  • 创建节点池时,只需指定 --enable-secure-boot,即可运行 update 命令 --enable-vtpm
  • 创建节点池时,只需指定 --enable-vtpm,即可运行 update 命令 --enable-secure-boot

如果节点池当前没有受信任的启动映像,则无法更新节点池以启用安全启动或 vTPM。

  1. 检查节点池是否正在使用受信任的启动映像。

    受信任的启动节点具有以下输出:

    • 包含 "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。

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

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

    注意

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

    以下示例更新 myResourceGroupmyAKSCluster 上的节点池 mynodepool,并启用 vTPM。 在此方案中,在创建节点池期间启用了安全启动:

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

    以下示例更新 myResourceGroupmyAKSCluster 上的节点池 mynodepool,并启用安全启动。 在此方案中,在创建节点池期间启用了 vTPM:

    az aks nodepool update --cluster-name myCluster --resource-group myResourceGroup --name mynodepool --enable-secure-boot
    
  1. 检查节点池是否正在使用受信任的启动映像。

    受信任的启动节点具有以下输出:

    • 包含 "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。

  2. 使用受信任的启动参数创建模板。 在创建模板之前,请查看以下参数:

    • enableSecureBoot:使安全启动能够对受信任的发布者签名的映像进行身份验证。
    • enableVTPM:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。

    在模板中,提供值和 enableVTPMenableSecureBoot。 用于 CLI 部署的 Microsoft.ContainerService/managedClusters/agentPools 同一架构存在于定义下 "properties",如以下示例所示:

    "properties": {
        ...,
        "securityProfile": {
            "enableVTPM": "true",
            "enableSecureBoot": "true",
        }
    }
    
  3. 使用 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 
  1. 使用受信任的启动参数创建模板。 在创建模板之前,请查看以下参数:

    • enableSecureBoot:使安全启动能够对受信任的发布者签名的映像进行身份验证。
    • enableVTPM:通过测量 VM 的整个启动链来启用 vTPM 并执行证明。

    在模板中,提供值和 enableVTPMenableSecureBoot。 用于 CLI 部署的 Microsoft.ContainerService/managedClusters/agentPools 同一架构存在于定义下 "properties",如以下示例所示:

    "properties": {
        ...,
        "securityProfile": {
            "enableVTPM": "false",
            "enableSecureBoot": "false",
        }
    }
    
  2. 使用 vTPM 部署模板,并在群集上禁用安全启动。 有关详细说明,请参阅 使用 ARM 模板部署 AKS 群集

后续步骤

本文介绍了如何启用受信任的启动。 详细了解 受信任的启动