通过


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

Azure Kubernetes 服务 (AKS)中应用程序和群集的安全概念

容器安全性保护整个端到端的流水线,从生成到在 Azure Kubernetes 服务 (AKS) 中运行的应用程序工作负载。

安全供应链包括生成环境和注册表。

Kubernetes 包括安全组件,如 Pod 安全标准和机密。 Azure包括用于容器的Active Directory、Microsoft Defender、Azure Policy、Azure 密钥保管库、网络安全组和协调群集升级等组件。 AKS 将这些安全组件结合在一起,以实现:

  • 提供完整的身份验证和授权案例。
  • 应用 AKS 内置Azure Policy来保护应用程序。
  • 使用 Microsoft Defender for Containers 获取从生成到应用程序的端到端见解。
  • 让 AKS 群集运行最新的 OS 安全更新和 Kubernetes 版本。
  • 提供安全的 Pod 流量和对敏感凭据的访问。

本文介绍用于保护 AKS 中应用程序的核心概念。

重要

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

生成安全性

作为供应链的入口点,在将映像生成提升至管道之前,对其进行静态分析非常重要。 这包括漏洞和合规性评估。 并不是因为存在漏洞而导致生成失败,因为那样会破坏开发。 而是要根据开发团队可以采取行动的漏洞看待“供应商状态”以进行细分。 还可以使用“宽限期”,让开发人员有时间修正已识别的问题

注册表安全性

评估注册表中映像的漏洞状态会检测偏移并捕获并非来自你的生成环境的映像。 使用 Notary V2 将签名附加到映像,以确保部署来自受信任的位置。

群集安全性

在 AKS 中,Kubernetes 主组件是由 Microsoft 提供、管理和维护的托管服务的一部分。 每个 AKS 群集都有自己的单租户专用 Kubernetes 主服务器,以提供 API 服务器、计划程序等。有关详细信息,请参阅 Azure Kubernetes 服务 的可控制性管理。

默认情况下,Kubernetes API 服务器使用公共 IP 地址和完全限定的域名 (FQDN)。 可以使用授权的 IP 范围来限制对 API 服务器终结点的访问。 还可以创建完全专用群集,来限制 API 服务器对虚拟网络的访问。

可以使用 Kubernetes 基于角色的访问控制(Kubernetes RBAC)和 Azure RBAC 来控制对 API 服务器的访问。 有关详细信息,请参阅 Microsoft Entra与 AKS 的集成

节点安全性

AKS 节点是你管理和维护的 Azure 虚拟机(VM)。

  • Linux 节点运行优化版本的 Ubuntu 或 Azure Linux。
  • Windows Server节点使用 containerd 容器运行时运行优化的Windows Server版本。

创建或纵向扩展了 AKS 群集时,会自动使用最新的 OS 安全更新和配置来部署节点。

注意

正在运行的 AKS 群集:

  • Linux 节点池的 Kubernetes 1.19 版本及更高版本使用 containerd 作为其容器运行时。 Windows Server 2019和Windows Server 2022节点池使用 containerd 作为其容器运行时。 有关详细信息,请参阅 使用 containerd 添加 Windows Server 节点池。
  • Kubernetes 版本 1.19 及更早版本 - Linux 节点池使用 Docker 作为其容器运行时。

有关 Linux 和Windows工作器节点的安全升级过程的详细信息,请参阅 Security 修补节点

运行Azure第 2 代 VM 的 AKS 群集包括对 Trusted Launch 的支持。 此功能通过组合可以独立启用的技术(例如安全启动和受信任的平台模块的虚拟化版本)来保护高级和持久性攻击技术。 管理员可以使用经过验证和签名的启动加载程序、OS 内核和驱动程序部署 AKS 工作器节点,以确保基础 VM 整个启动链的完整性。

容器与安全性优化的操作系统选项

AKS 发布了对两个新的优化 Linux OS 选项的支持。 Azure Linux OS Guard(预览版)Microsoft创建并针对Azure进行优化。 OS Guard 基于具有专用配置的 Azure Linux 构建,以支持具有安全优化的容器化工作负荷。 Flatcar Container Linux for AKS(预览版) 是基于 CNCF 的供应商中立的容器优化不可变 OS,非常适合在多云和本地环境中运行。 与其他 Linux OS 选项相比,这些 OS 选项可提供更高的安全性,例如:

  • Azure Linux OS Guard 和 Flatcar Container Linux for AKS 都有一个在运行时无法修改的不可变操作系统。 所有 OS 二进制文件、库和静态配置都是只读的,位即位完整性通常受到加密保护。 这些特殊用途操作系统以独立镜像形式提供,没有任何形式的包管理或其他传统方式来更改操作系统。 用户工作负荷在隔离环境(例如容器)中运行,被沙盒处理以独立于操作系统。
  • Azure Linux OS Guard 和 Flatcar Container Linux for AKS 都使用 SELinux 进行强制访问控制。
  • Azure Linux OS Guard 强制实施 FIPSTrusted Launch启用,通过组合安全启动和虚拟化版本的受信任平台模块(vTPM)来增强对高级和持久性攻击的合规性和保护。

在选择容器优化操作系统选项时,AKS 建议执行以下操作:

一张截图显示的表格将优化的操作系统选项,比如适用于 AKS 的 Flatcar Container Linux 和 Azure Linux OS Guard,与通用操作系统选项(如 Ubuntu 和 Azure Linux)进行比较。

节点授权

节点授权是一种特殊用途的授权模式,专门授权 kubelet API 请求以防御东-西攻击。 AKS 1.24 + 群集上默认启用节点授权。

节点部署

系统将节点部署到专用虚拟网络子网中,且不分配公共 IP 地址。 出于故障排除和管理目的,SSH 默认处于启用状态,并且只能使用内部 IP 地址进行访问。 禁用 SSH 是在群集和节点池创建期间,或者对于现有群集或节点池,处于预览状态。 有关详细信息,请参阅管理 SSH 访问

节点存储

为了提供存储,节点使用Azure 托管磁盘。 对于大多数 VM 节点大小,Azure 托管磁盘 是优质磁盘,由高性能固态硬盘提供支持。 存储在托管磁盘上的数据会在 Azure 平台内自动加密。 为了提高冗余度,Azure托管磁盘在Azure数据中心内被安全复制。

恶意多租户工作负载

目前,Kubernetes 环境并不安全,因为可能存在恶意多租户使用情况。 其他安全功能(如 Pod 安全策略或用于节点的 Kubernetes RBAC)可有效阻止攻击。 若要在运行恶意多租户工作负载时获得真正的安全性,应只信任虚拟机监控程序。 Kubernetes 的安全域成为整个群集,而不是单个节点。

对于这些类型的恶意多租户工作负载,应使用物理隔离的群集。 有关如何隔离工作负荷的详细信息,请参阅 AKS 中的群集隔离最佳做法

计算隔离

由于合规性或法规要求,某些工作负荷可能需要与其他客户工作负荷高度隔离。 对于这些工作负载,Azure提供:

  • 内核隔离容器,用作 AKS 群集中的代理节点。 这些容器与特定硬件类型完全隔离,独立于Azure主机结构、主机操作系统和虚拟机监控程序。 他们专注于特定客户。 在创建 AKS 群集或添加节点池时,选择隔离 VM 大小中的一个作为“节点大小”
  • 机密容器(预览版),也基于 Kata 机密容器,加密容器内存,并在计算过程中阻止内存中的数据采用明文、可读格式和篡改。 它有助于将容器与其他容器组/Pod 和 VM 节点 OS 内核隔离开来。 机密容器(预览版)使用基于硬件的内存加密 (SEV-SNP)。
  • Pod 沙盒(预览版)在容器应用程序与容器主机的共享内核和计算资源(CPU、内存和网络)之间提供隔离边界。

网络安全

若要实现本地网络的连接和安全性,可以将 AKS 群集部署到现有Azure虚拟网络子网中。 这些虚拟网络使用 Azure 站点到站点 VPN 或快速路由连接回本地网络。 使用专用的内部 IP 地址定义 Kubernetes 入口控制器,以限制服务对内部网络连接的访问。

Azure网络安全组

若要筛选虚拟网络流量流,Azure使用网络安全组规则。 这些规则定义要允许或拒绝哪些源和目标 IP 范围、端口和协议访问资源。 会创建默认规则以允许 TLS 流量流向 Kubernetes API 服务器。 创建具有负载均衡器、端口映射或入口路由的服务。 AKS 会自动修改流量流的网络安全组。

如果为 AKS 群集提供自己的子网(无论是使用 Azure CNI 还是 Kubenet),不要修改 AKS 管理的 NIC 级网络安全组。 相反,可以创建更多子网级别的网络安全组来修改流量流。 请确保它们不会干扰管理群集所需的流量,比如负载均衡器访问、与控制平面的通信或流出量

Kubernetes 网络策略

为了限制群集中 Pod 之间的网络流量,AKS 提供了对 Kubernetes 网络策略的支持。 使用网络策略,可以基于命名空间和标签选择器来允许或拒绝群集中的特定网络路径。

应用程序安全性

为保护在 AKS 上运行的 Pod,请考虑使用 Microsoft Defender for Containers 来检测和限制针对 Pod 内运行应用程序的网络攻击。 运行持续扫描以检测应用程序漏洞状态的偏移,并实施“蓝/绿/金丝雀”流程来修补和替换易受攻击的映像。

保护容器对资源的访问

与应该向用户或组授予所需最少权限的方式一样,也应将容器限制为只能访问它们所需的操作和进程。 为了尽量减少攻击风险,避免配置需要提升的权限或 root 访问权限的应用程序和容器。 建议使用内置的 Linux 安全功能(如 AppArmorseccomp)来保护容器对资源的访问

Kubernetes 机密

通过 Kubernetes 机密,可以将敏感数据注入到 Pod,比如访问凭据或密钥。

  1. 使用 Kubernetes API 创建机密。
  2. 定义 pod 或部署,并请求特定机密。
    • 机密只会提供给具有需要它们的计划 pod 的节点。
    • 机密存储在 tmpfs 中,而不是写入磁盘
  3. 删除节点上最后一个需要机密的 Pod 后,会从节点的 tmpfs 中删除机密
    • 机密存储在给定的命名空间中,只有同一命名空间中的 Pod 能访问该机密。

使用机密会减少 Pod 或服务 YAML 清单中定义的敏感信息。 可以请求存储在 Kubernetes API 服务器中的机密,作为 YAML 清单的一部分。 此方法仅为 Pod 提供特定的机密访问权限。

注意

原始机密清单文件包含 base64 格式的机密数据。 有关详细信息,请参阅官方文档。 请将这些文件视为敏感信息,在任何情况下都不要将它们提交到源代码管理。

Kubernetes 机密存储在分布式键-值存储 etcd 中。 AKS 允许 使用客户管理的密钥对 etcd 中的机密进行静态加密

后续步骤

若要开始为 AKS 群集提供保护,请参阅升级 AKS 群集

如需相关的最佳做法,请参阅 AKS 中群集安全性和升级的最佳做法AKS 中的 Pod 安全的最佳做法

有关核心 Kubernetes 和 AKS 概念的详细信息,请参阅: