文章目录
- 3. AppArmor 配置文件
- 4. Practice - AppArmor for curl
- 5. Practice - AppArmor for Docker Nginx
- 6. Practice - AppArmor for Kubernetes Nginx
https://kubernetes.io/zh/docs/tutorials/clusters/apparmor/https://sysdig.com/blog/manage-apparmor-profiles-in-kubernetes-with-kube-apparmor-manager/
1. apparmor 介绍
了解 Kube-apparmor-manager 如何帮助您管理 Kubernetes 上的 AppArmor 配置文件,以减少集群的攻击面。
AppArmor是一个 Linux 内核安全模块,它补充了标准的 Linux 用户和基于组的权限,以将程序限制在一组有限的资源中。
AppArmor 可以针对任何应用程序进行配置,以减少其潜在的攻击面并提供更深入的防御。您可以通过配置文件对其进行配置并将其调整为将特定程序或容器所需的访问列入白名单,例如 Linux 功能、网络访问、文件权限等。
在本博客中,我们将首先给出 AppArmor 配置文件的快速示例,以及 Kubernetes 工作负载如何使用它来减少攻击面。然后,我们将推出一个新的开源工具,KUBE-AppArmor-manager,并告诉你如何能帮助到Kubernetes集群内轻松管理AppArmor配置文件。最后但并非最不重要的一点是,我们将演示如何从图像配置文件构建 AppArmor 配置文件以防止反向 shell 攻击。
2. 准备
2.1 Kubernetes & docker版本
Kubernetes 版本至少是 v1.4
– AppArmor
在 Kubernetes v1.4
版本中才添加了对 AppArmor 的支持。早于 v1.4 版本的 Kubernetes 组件不知道新的 AppArmor 注释,并且将会 默认忽略 提供的任何 AppArmor 设置。为了确保您的 Pods 能够得到预期的保护,必须验证节点的 Kubelet 版本:
2.2 内核模块
AppArmor 内核模块已启用 – 要使 Linux 内核强制执行 AppArmor 配置文件,必须安装并且启动 AppArmor 内核模块。默认情况下,有几个发行版支持该模块,如 Ubuntu 和 SUSE,还有许多发行版提供可选支持。要检查模块是否已启用,请检查 /sys/module/apparmor/parameters/enabled
文件:
2.3 节点配置文件加载
配置文件已加载 – 通过指定每个容器都应使用 AppArmor 配置文件,AppArmor 应用于 Pod。如果指定的任何配置文件尚未加载到内核, Kubelet (>=v1.4) 将拒绝 Pod。通过检查 /sys/kernel/security/apparmor/profiles 文件,可以查看节点加载了哪些配置文件。例如:
2.4 kubelet版本
只要 Kubelet 版本包含 AppArmor 支持(>=v1.4),如果不满足任何先决条件,Kubelet 将拒绝带有 AppArmor 选项的 Pod。您还可以通过检查节点就绪状况消息来验证节点上的 AppArmor 支持(尽管这可能会在以后的版本中删除):
3. AppArmor 配置文件
AppArmor 配置文件被指定为 per-container
。要指定要用其运行 Pod 容器的 AppArmor 配置文件,请向 Pod 的元数据添加注释:
<container_name>
的名称是容器的简称,用以描述简介,并且简称为 <profile_ref>
。<profile_ref>
可以作为其中之一:
-
runtime/default
应用运行时的默认配置 -
localhost/<profile_name>
应用在名为<profile_name>
的主机上加载的配置文件 -
unconfined
表示不加载配置文件
apparmor
配置文件定义了目标受限应用程序可以访问系统上的哪些资源(如网络、系统功能或文件)。
下面是一个简单的 AppArmor 配置文件示例:
在此示例中,配置文件授予应用程序所有类型的访问权限,但写入整个文件系统除外。它包含两个规则:
-
file
: 允许对整个文件系统进行各种访问 -
deny
/** w: 拒绝在根目录下写入任何文件/。该表达式/**转换为根目录下的任何文件,以及其子目录下的文件。
通过以下步骤设置 Kubernetes 集群以便容器可以使用 apparmor 配置文件:
- 在所有集群节点上安装并启用 AppArmor。
- 将要使用的 apparmor 配置文件复制到每个节点,并将其解析为强制(enforce)模式或抱怨(complain)模式。
- 使用 AppArmor 配置文件名称注释容器工作负载。
以下是在 Pod 中使用配置文件的方法:
在上面的 pod yaml
中,名为的容器hello正在使用名为的 AppArmor
配置文件k8s-apparmor-example-deny-write
。如果 AppArmor 配置文件不存在,则 Pod 将无法创建。
每个配置文件都可以在强制模式(阻止访问不允许的资源)或抱怨模式(仅报告违规)下运行。构建 AppArmor 配置文件后,最好先将其应用到抱怨模式,然后让工作负载运行一段时间。通过分析 AppArmor 日志,您可以检测并修复任何误报活动。一旦您有足够的信心,您就可以将配置文件转为强制模式。
如果之前的配置文件在强制模式下运行,它将阻止任何文件写入活动:
这是一个简化的例子。
4. Practice - AppArmor for curl
5. Practice - AppArmor for Docker Nginx
k8s网站: https://v1-18.docs.kubernetes.io/zh/docs/tutorials/clusters/apparmor/
6. Practice - AppArmor for Kubernetes Nginx