AppArmor 是一种有效的内核安全模块,通过实现强制访问控制(MAC)策略来限制容器对主机资源的访问。本文将探讨 AppArmor 在 K8s 容器化环境中的应用,尤其是如何定义和配置策略以限制容器访问特定文件和目录,一起来看看吧!

  • 操作系统:Ubuntu 22.04.5 LTS
  • Kubernetes:v1.29.0

1、检查操作系统/集群是否支持

# 检查是否支持
kubectl describe node | grep AppArmor
# 查看内核是否启用 AppArmor
cat /sys/module/apparmor/parameters/enabled
# 容器运行时需要支持 AppArmor(docker\CRI-O\containerd 支持)
# Ubuntu、Debian、SUSE 有该内置功能,CentOS、redhat 系统未内置

2、自定义文件目录权限规则

# 文件名称自定义
vi /etc/apparmor.d/deny-write-rule
---
#include <tunables/global>
profile deny-write flags=(attach_disconnected) {              # 指定策略名,也就是命令能查到显示出来的策略名称
 #include <abstractions/base>                                 # 定义策略
 file,                                                        # 允许所有文件读写
 deny /home/** w,                                             # 递归匹配,拒绝 /home 目录下的所有目录和文件写权限
}
---

# 加载策略
apparmor_parser -q /etc/apparmor.d/deny-write-rule

# 验证配置成功
apparmor_status | grep deny

3、为 Pod 配置使用自定义的规则

  • 未配置规则前,可正常在 /home 目录下创建文件

  • 配置规则后,无法在 /home 目录下创建文件
# 引用策略
apiVersion: v1
kind: Pod
metadata:
  name: tomcat
  annotations:
    # <container_name>:Pod 中容器名称,<profile_ref>:Pod 所在宿主机上策略名,默认目录 /etc/apparmor.d
    container.apparmor.security.beta.kubernetes.io/<container_name>: localhost/<profile_ref>

# 验证无法在 /home 下创建文件
kubectl exec -it tomcat -- touch /home/test

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐