使用 seccomp 限制容器的系统调用
特性状态:Kubernetes v1.19 稳定
Seccomp 代表安全计算模式,自 Linux 内核 2.6.12 版本起就成为了其特性之一。它可用于将进程的权限置于沙盒环境中,限制进程从用户空间向内核发起的调用。Kubernetes 允许你将加载到节点上的 seccomp 配置文件自动应用到 Pod 和容器上。
确定工作负载所需的权限可能比较困难。在本教程中,你将学习如何将 seccomp 配置文件加载到本地 Kubernetes 集群中,如何将其应用到 Pod 上,以及如何开始编写仅赋予容器进程必要权限的配置文件。
目标
- 学习如何在节点上加载 seccomp 配置文件。
- 学习如何将 seccomp 配置文件应用到容器上。
- 观察容器进程所做系统调用的审计情况。
- 观察指定了不存在的配置文件时的行为。
- 观察违反 seccomp 配置文件的情况。
- 学习如何创建细粒度的 seccomp 配置文件。
- 学习如何应用容器运行时的默认 seccomp 配置文件。
开始之前
为了完成本教程中的所有步骤,你必须安装 kind 和 kubectl。
本教程中使用的命令假定你将 Docker 用作容器运行时(kind 创建的集群内部可能使用不同的容器运行时)。你也可以使用 Podman,但在这种情况下,你必须遵循特定的说明才能成功完成任务。
本教程展示了一些自 v1.25 版本起仍处于测试版(beta)的示例,以及一些仅使用通用可用的 seccomp 功能的示例。你应该确保你的集群针对所使用的版本进行了正确配置。
本教程还使用 curl 工具将示例下载到你的计算机上。如果你愿意,可以调整步骤以使用其他工具。
- 注意:无法将 seccomp 配置文件应用到在其容器 securityContext 中设置了 privileged: true(特权模式)的容器上。特权容器始终以不受限制(Unconfined)的方式运行。
下载示例 seccomp 配置文件
这些配置文件的内容将在后续进行探讨,不过现在请先继续将它们下载到名为 profiles/ 的目录中,以便能够将其加载到集群里。
audit.json
plaintext
violation.json
fine-grained.json
pods/security/seccomp/profiles/audit.json
将 pods/security/seccomp/profiles/audit.json 复制到剪贴板
json
{
"defaultAction": "SCMP_ACT_LOG"
}
运行以下命令:
bash
mkdir ./profiles
curl -L -o profiles/audit.json https://k8s.io/examples/pods/security/seccomp/profiles/audit.json
curl -L -o profiles/violation.json https://k8s.io/examples/pods/security/seccomp/profiles/violation.json
curl -L -o profiles/fine-grained.json https://k8s.io/examples/pods/security/seccomp/profiles/fine-grained.json
ls profiles在最后一步操作结束后,你应该会看到列出的三个配置文件:
audit.json fine-grained.json violation.json