AppArmor
AppArmor
【简介】
apparmor 是linux内核安全功能,可用于限制容器对资源的使用。 例如:容器使用linux内核能力,容器使用网络能力,容器对文件系统读写权限 等。
apparmor一条规则称为一个profile。profile可以 enforcing 或 complain模式运行。
- enforcing 可以理解为强制模式,需要容器必须符合规则
- complain 可以理解为兼容模式,当容器不符合规范时仅仅打印提示信息
【前提条件】
-
操作系统:Ubuntu 22.04
-
内核支持
cat /sys/module/apparmor/parameters/enabled Y
-
k8s>1.4版本,截止2023年功能仍处于beta阶段。
【示例】
-
编写apparmor插件,暂时不做深入研究语法
tee test<<EOF #include <tunables/global> profile k8s-apparmor-example-deny-write flags=(attach_disconnected) { #include <abstractions/base> file, # 拒绝所有文件写入 deny /** w, } EOF
-
加载插件
# 加载配置文件到内核 apparmor_parser -q test
# 查看是否加载成功 # grep k8s-apparmor-example-deny-write /sys/kernel/security/apparmor/profiles root@master01:~# apparmor_status |grep k8s-apparmor-example-deny-write k8s-apparmor-example-deny-write
-
创建pod并使用该apparmor插件
通过注解加载apparmor功能,注解格式如下:
container.apparmor.security.beta.kubernetes.io/<容器名称>: <profile_ref>
<profile_ref>
可以是以下取值之一:
1.runtime/default
应用运行时的默认配置
2.localhost/<profile_name>
使用本地的profile插件
3.unconfined
表示不加载配置文件kubectl run busybox \ --image=busybox \ --annotations=container.apparmor.security.beta.kubernetes.io/busybox=localhost/k8s-apparmor-example-deny-write \ -- sleep 100
-
验证功能是否生效
测试预期:无法写入文件
root@master01:~# kubectl exec busybox -- cat /proc/1/attr/current k8s-apparmor-example-deny-write (enforce)
root@master01:~# kubectl exec busybox -- touch /tmp/1 touch: /tmp/1: Permission denied command terminated with exit code 1