k8s 安全工具

AppArmor

限制容器对资源的访问。

AppArmor 是一个 Linux 内核安全模块, 它补充了基于标准 Linux 用户和组的权限,将程序限制在一组有限的资源中。

提供更加深入的防御。 它通过调整配置文件进行配置,以允许特定程序或容器所需的访问, 如 Linux 权能字、网络访问、文件权限等。 每个配置文件都可以在 强制(enforcing) 模式(阻止访问不允许的资源)或 投诉(complain) 模式(仅报告冲突)下运行。

AppArmor 内核模块已启用,要检查模块是否已启用

1
2
cat /sys/module/apparmor/parameters/enabled
Y

如果 Kubelet 包含 AppArmor 支持(>= v1.4), 但是内核模块未启用,它将拒绝运行带有AppArmor 选项的 Pod。

查看节点加载了哪些配置文件

1
2
3
4
5
6
7
8
9
10
11
cat /sys/kernel/security/apparmor/profiles | sort

apparmor-test-deny-write (enforce)
apparmor-test-audit-write (enforce)
docker-default (enforce)
k8s-nginx (enforce)



配置 /etc/apparmor.d/ 文件
apparmor_status |grep profiles

加载配置文件

1
apparmor_parser -q nginx_apparmor

保护pod配置

AppArmor 配置文件是按 逐个容器 的形式来设置的,要指定用来运行 Pod 容器的 AppArmor 配置文件,请向 Pod 的 metadata 添加注解

1
2
3
metadata:
	container.apparmor.security.beta.kubernetes.io/<container_name>: <profile_ref>

<container_name> 的名称是配置文件所针对的容器的名称,<profile_def> 则设置要应用的配置文件。 <profile_ref> 可以是以下取值之一:

  • runtime/default 应用运行时的默认配置
  • localhost/<profile_name> 应用在主机上加载的名为 <profile_name> 的配置文件
  • unconfined 表示不加载配置文件