我想在预定义的 Helm 图表上的 AWS EKS Kubernetes 集群中启用像
seccomp
这样的 RuntimeDefault
配置文件,该图表在要更新的 values.yml
文件中没有任何特定参数。我不想在本地下载图表和所有文件来进行更改 deployment.yml
。
正确的做法是什么?
Kubernetes(当前)默认不启用
seccomp
。
以下是定义的 3 种可能的方法:
如果 seccomp 配置文件已在预定义 Helm 图表新版本的默认
RuntimeDefault
文件中定义了类型(例如 values.yml
),则只需将其 Helm 图表升级到该版本即可启用它。
如果选项 1 不可行,您可以在预定义的 Helm 图表上启用它,方法是将 pod 安全上下文中的 seccomp 配置文件类型设置为
RuntimeDefault
,如下所示,根据 values.yml
文件中使用的密钥deployment.yml
文件。例如,假设 securityContext
是用于在 securityContext
文件中定义 deployment.yml
的键。因此,以下内容将添加到 values.yml
文件中:
securityContext:
seccompProfile:
type: RuntimeDefault
deployment.yml
文件中更新pod的规格后使用它,如下所示:spec:
securityContext:
seccompProfile:
type: RuntimeDefault
注意:无法将 seccomp 配置文件应用到在容器的
privileged: true
中设置 securityContext
运行的容器。特权容器始终作为 Unconfined
. 运行
Seccomp 代表“安全计算模式”。这是 Linux 内核的一项安全功能。简而言之,seccomp 限制进程可以进行的系统调用。对于 Kubernetes,它是一个在 pod 中的容器中运行的进程。
seccomp 会改善我们的安全状况吗?是的,因为 seccomp 可以保护内核免受进程发出的不需要的系统调用的影响,从而保护主机并帮助维持容器化环境中预期的隔离。
Seccomp 操作是通过规则来控制的,这些规则指定根据请求的系统调用采取的操作。规则在文件中定义并称为 seccomp 配置文件。
可以在此处找到示例配置文件:使用 seccomp 限制容器的系统调用
在 seccomp 配置文件中,您基本上定义要采取的
defaultAction
、覆盖的 architectures
、列出允许或禁止的特定调用。
syscalls
:指定当容器使用您尚未明确指定操作的系统调用时会发生什么。例如,
defaultAction
过滤掉系统调用。
defaultAction: SCMP_ACT_ERRNO
:指定我们可以接收系统调用的架构。
architectures
:是系统调用的列表以及遇到它们时我们采取的操作。
syscalls
意味着我们允许系统调用通过我们的 seccomp 过滤器。
找到被默认配置文件阻止的重要系统调用。 Docker、CRI-O 或 Containerd,所有这些都带有 Kubernetes 集群中可用的默认 seccomp 配置文件。
某些工作负载可能需要比其他工作负载更少的系统调用限制。这意味着即使使用
action: SCMP_ACT_ALLOW
配置文件,它们也可能在运行时失败。为了减轻此类故障,您可以:
RuntimeDefault
。
Unconfined
功能。还要确保在禁用该功能的节点上安排工作负载。