You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
配置工作负载
使用 vArmor 实现云原生容器安全
复制全文
下载 pdf
使用 vArmor 实现云原生容器安全
vArmor 用于为 Kubernetes 集群中的工作负载提供容器加固与运行时防护,适用于需要基于 AppArmor、BPF 和 Seccomp 为云原生应用配置安全策略并验证防护效果的场景,本文介绍使用 vArmor 实现云原生容器安全的配置方法和注意事项。
背景信息
vArmor 是字节跳动开源的云原生容器沙箱系统,它借助 Linux 的 AppArmor LSMBPF LSMSeccomp 技术进行容器加固。用户可以通过 vArmor 的 CRD 在 Kubernetes 集群中管理安全策略,对指定工作负载的容器进行加固。vArmor 旨在降低利用现有技术加固容器的门槛和成本,从而平衡安全风险与防护成本。
说明
vArmor 的更多详情,请参见 什么是容器加固项目官网
vArmor 借助不同的加固技术,实现云原生容器的安全加固,其基本概念和工作原理,如下表所示。
加固技术
基本概念
工作原理
AppArmor Enforcer
基于 Linux 内核 AppArmor 模块实现的安全执行引擎。它是一种成熟的强制访问控制系统。
当系统创建 Pod 时,vArmor 会将定义好的安全策略转化为 AppArmor Profile,并通过 Webhook 机制注入到容器配置中。随后,Linux 内核会接管控制权,根据 Profile 限制容器内进程的文件读写、网络访问和系统调用能力。
BPF Enforcer
基于 eBPF(Extended Berkeley Packet Filter)技术实现的新一代安全执行引擎。
不需要向容器注入静态配置,而是将轻量级的 eBPF 沙盒程序动态挂载到内核的安全钩子(LSM Hooks)或追踪点上。当容器内进程发起系统调用时,eBPF 程序会在内核态实时检查该动作是否合法,并直接阻断违规请求。
行为建模模式
基于动态特征采集的“白名单”安全策略生成模式。
开启该模式后,vArmor 不会立刻进行拦截,而是进入“观察期”。系统会在后台静默记录目标容器在正常业务运转时的行为数据(例如启动了哪些进程、读取了哪些文件路径、发起了哪些网络调用)。观察期结束后,自动总结出一份专属的白名单策略。
不同加固技术的对比,如下表所示。
对比维度
AppArmor Enforcer
BPF Enforcer
行为建模模式
功能分类
执行器模块(拦截引擎)。
执行器模块(拦截引擎)。
策略模式(行为数据收集器)。
工作机制
静态注入 Profile,依赖内核内置模块实施拦截。
动态挂载 eBPF 程序,在系统调用层实时接管拦截。
静默观察容器运行时行为,自动总结并生成白名单策略。
主要优势
生态成熟,稳定性高,排障路径清晰。
不依赖单一内核模块,跨系统兼容性强,拦截粒度极细。
零人工配置门槛,避免因手动配置不当引发的业务中断。
依赖与限制
宿主机内核必须支持并已开启 AppArmor 功能。
宿主机内核版本需满足 eBPF 特性要求。
需保证观察期内业务流量足够丰富,否则生成的白名单可能不全。
适用场景
运行在 veLinux/Ubuntu 节点上的常规业务隔离防护。
运行在无法使用 AppArmor 的节点,或对性能有极致要求的底层防护。
复杂业务上线初期,安全工程师无法人工梳理确切权限需求的场景。
说明
  • AppArmor Enforcer 和 BPF Enforcer 在访问控制能力方面存在部分差异。但两者并不冲突,如有需求,可以在集群中同时使用。
  • 行为建模模式与两款执行器是上下游配合关系。行为建模生成的策略,最终必须交由 AppArmor 或 BPF 来执行。
前提条件
安装 varmor 组件
操作指南
步骤一:配置 VarmorPolicy
在集群中安装 varmor 组件和相关 CRD 资源后,您可以通过配置 VarmorPolicy 资源自定义容器安全策略。VarmorPolicy 主要包含两部分:
  • target:用于通过资源类型和标签选择器,指定哪些 Pod 或工作负载会应用该策略。
  • policy:用于定义具体的防护方式,例如选择 AppArmor 还是 BPF 作为执行器、使用哪种防护模式,以及要拦截哪些高危行为。
配置示例和重点参数说明,如下所示:
apiVersion: crd.varmor.org/v1beta1
kind: VarmorPolicy
metadata:
name: demo-policy # 安全策略名称
namespace: default # 安全策略所在命名空间
spec:
target: # 目标选择器,定义使用安全策略的对象
kind: Pod # 定义使用该安全策略的资源类型
selector:
matchLabels:
app: varmor-test # 定义使用该安全策略的 Pod 标签
policy: # 安全策略详情
enforcer: AppArmor # 使用 AppArmor 技术来实现隔离和限制
mode: EnhanceProtect # 增强防护模式,只要容器内的行为命中了下面的规则,动作会被内核直接拒绝,并返回 Permission denied
enhanceProtect: # 核心防护规则详细配置
auditViolations: true # 是否记录违规审计日志。取值:true(表示在策略生效时额外记录审计日志);false(表示不记录审计日志。是否拦截违规动作,取决于当前策略模式,例如在 EnhanceProtect 模式下,命中规则后仍会被拦截)
attackProtectionRules: # 规则详情
- rules: # 规则 1:全局禁止修改文件权限
- disable-chmod
- rules: # 规则 2:定向防止 SA Token 泄露
- mitigate-sa-leak
targets:
- "/bin/bash"
- "/bin/dash"
- "/bin/sh"
说明
  • 您也可以通过云安全中心,配置指定集群的 VarmorPolicy 策略,详情请参见 容器加固功能说明
  • 更多 vArmor 自定义规则的配置详情和示例,请参见 官方文档
步骤二:加固工作负载
创建工作负载时,需要在 Pod 标签中添加与target.selector.matchLabels匹配的标签,用于让 VarmorPolicy 选中目标 Pod。如果组件启用了 Webhook 注入能力,还需要按组件要求补充 sandbox.varmor.org/enable: "true" 等匹配标签。本文以无状态负载为例,示例和说明如下:
  1. 创建工作负载的 YAML 文件。示例文件deployment-demo.yaml代码如下:
  • apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: deployment-demo # 工作负载名称
    namespace: default # 工作负载所属命名空间
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: varmor-test # 使用 VarmorPolicy 标签指定具体的安全策略
    template:
    metadata:
    labels:
    app: varmor-test # 使用 VarmorPolicy 标签指定具体的安全策略
    sandbox.varmor.org/enable: "true" # Webhook 匹配标签,该配置必须与 varmor 组件配置的一致
    spec:
    containers:
    - name: demo
    image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0
    ports:
    - containerPort: 80
  1. 执行以下命令,创建工作负载。
  • kubectl apply -f deployment-demo.yaml
结果验证
配置确认
通过容器服务控制台
通过云安全中心控制台
  1. 在左侧导航栏中,单击 工作负载 > 对象浏览器。
  1. 分类 下拉菜单中选择 CRD,使用名称varmorpolicy检索资源对象。
  1. 单击资源名称,进入资源详情页面,可以看到创建的 VarmorPolicy 配置。
  1. 单击 操作 栏中的 编辑 Yaml删除,即可查看、修改或删除 VarmorPolicy 配置。
策略验证
在本文的 VarmorPolicy 中,开启了全局禁止修改文件权限。可以使用如下示例,验证测试是否在 Pod 中生效。
touch /tmp/a
chmod 777 /tmp/a
预期结果如下,由于 Pod 开启了全局禁止修改文件权限,因此执行chmod命令,返回失败。
bash: /bin/chmod: Permission denied
查看日志
违规日志页允许查看指定集群、工作负载触发的违规审计记录,帮助用户快速定位“哪个 Pod、命中了哪条规则、阻断了什么行为”(如访问的文件路径、被过滤的系统调用、网络访问目标等)。日志支持按集群、策略、时间等维度筛选,为策略调优与安全事件溯源提供依据。
  1. 在左侧导航栏中,选择 风险管理 > 容器加固
  1. 选择 违规日志 页签,即可查看指定集群或 Pod 中的违规日志。
最近更新时间:2026.07.14 14:30:48
这个页面对您有帮助吗?
有用
有用
无用
无用