本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
运行时系统安全性
运行时安全性为您的容器在运行时提供主动保护。其目的是检测, and/or 防止容器内发生恶意活动。这可以通过 Linux 内核中的许多机制或与 Kubernetes 集成的内核扩展来实现,例如 Linux 功能、安全计算 (seccomp) 或。 AppArmor SELinux还有诸如Amazon GuardDuty 和第三方工具之类的选项,可以减少对Linux内核机制的手动配置,从而帮助建立基准和检测异常活动。
重要
Kubernetes 目前没有提供任何用于将 seccomp 或配置文件加载到节点上的原生机制。 AppArmor SELinux 它们要么必须手动加载,要么在启动时安装到节点上。这必须在你的 Pod 中引用它们之前完成,因为调度器不知道哪些节点有配置文件。参见下文,诸如安全配置文件操作员之类的工具如何帮助将配置文件自动配置到节点。
安全上下文和内置 Kubernetes 控件
许多 Linux 运行时安全机制都与 Kubernetes 紧密集成,可以通过 Kubernetes 安全上下文进行配置。privileged标志,false默认情况下,该标志处于启用状态,则基本上等同于主机上的 root。在生产工作负载中启用特权模式几乎总是不合适的,但是还有更多的控件可以根据需要为容器提供更精细的权限。
Linux 功能
Linux 功能允许您向 Pod 或容器授予某些功能,而无需提供 root 用户的所有能力。示例包括CAP_NET_ADMIN,它允许配置网络接口或防火墙CAP_SYS_TIME,或者允许操纵系统时钟。
Seccomp
使用安全计算 (seccomp),您可以防止容器化应用程序对底层主机操作系统的内核进行某些系统调用。虽然 Linux 操作系统有几百个系统调用,但其中大部分并不是运行容器所必需的。通过限制容器可以进行的系统调用,可以有效地减少应用程序的攻击面。
Seccomp 的工作原理是拦截系统调用,并且只允许那些被列入许可名单的系统调用通过。Docker 有一个默认securityContext部分中添加以下内容,将你的容器或 Pod 配置为使用容器运行时的默认 seccomp 配置文件:
securityContext: seccompProfile: type: RuntimeDefault
从 1.22 开始(在 alpha 版本中,从 1.27 起稳定),上面的内容RuntimeDefault可以使用单个 kubel--seccomp-default然后,只有其他配置文件securityContext才需要中指定的配置文件。
也可以为需要额外权限的内容创建自己的配置文件。手动执行此操作可能非常繁琐,但是有一些工具,例如 Inspektor Gadget
AppArmor 和 SELinux
AppArmor 并 SELinux 被称为强制访问控制或 MAC 系统
AppArmor 和 SELinux 都与 Kubernetes 集成,但是从 Kubernetes 1.28 开始, AppArmor 配置文件必须通过注释
与 seccomp 配置文件一样,上面提到的安全配置文件操作员可以帮助将配置文件部署到集群中的节点上。(将来,该项目还旨在为seccomp生成配置文件, AppArmor SELinux 以及为seccomp生成配置文件。)
建议
使用 Amazon GuardDuty 进行运行时监控和检测对您的 EKS 环境的威胁
如果您目前没有用于持续监控 EKS 运行时和分析 EKS 审核日志以及扫描恶意软件和其他可疑活动的解决方案,Amazon 强烈建议那些想要简单、快速、安全、可扩展且经济实惠的一键式方法来保护 AWS 环境的客户使用 A ma GuardDuty
观看这场 AWS 在线技术讲座 “使用亚马逊增强对亚马逊 EKS 的威胁检测 GuardDuty ——AWS 在线技术讲座”
可选:使用第三方解决方案进行运行时监控
如果你不熟悉 Linux 的安全性,那么创建和管理 seccomp 和 Apparmor 配置文件可能会很困难。如果您没有时间精通,可以考虑使用第三方商业解决方案。他们中的许多人已经超越了Apparmor和seccomp等静态配置文件,并开始使用机器学习来阻止或提醒可疑活动。其中一些解决方案可以在下面的工具部分中找到。其他选项可以在适用于容器的 AWS Marketplace
在编写 seccomp 策略之前,请考虑 add/dropping Linux 功能
功能包括对可通过 syscalls 访问的内核函数进行各种检查。如果检查失败,系统调用通常会返回错误。检查可以在特定 syscall 的开头完成,也可以在内核的深处,在可能通过多个不同的系统调用(例如写入特定的特权文件)访问的区域中完成。另一方面,Seccomp 是一个系统调用过滤器,在所有系统调用运行之前将其应用于所有系统调用。进程可以设置过滤器,允许他们撤消运行某些系统调用的权限,或者撤消某些系统调用的特定参数的权利。
在使用 seccomp 之前,请考虑 adding/removing Linux 功能是否为你提供了所需的控制权。有关更多信息,请参阅为容器设置功能
看看你能否通过使用 Pod 安全策略来实现自己的目标 (PSPs)
Pod 安全策略提供了许多不同的方法来改善您的安全状况,而不会引入过多的复杂性。在冒险构建 seccomp 和 Apparmor 配置文件 PSPs 之前,请先探索中可用的选项。
警告
从 Kubernetes 1.25 起, PSPs 已被移除并替换为 Pod
工具和资源
-
安全配置文件操作员
是 Kubernetes 的一项增强功能,旨在让用户更轻松地使用 SELinux seccomp 和 Kubernetes 集群。 AppArmor 它提供了通过运行的工作负载生成配置文件和将配置文件加载到 Kubernetes 节点以在 Pod 中使用的功能。 -
Inspektor Gadget
允许检查、跟踪和分析 Kubernetes 上运行时行为的许多方面,包括协助生成 seccomp 配置文件。 -
NeuVector 由 SUSE
开源提供的零信任容器安全平台提供进程配置文件规则和文件访问规则。