如何在 Kubernetes 中预定义的 Helm 图表上启用 seccomp 配置文件

问题描述 投票:0回答:1

我想在预定义的 Helm 图表上的 AWS EKS Kubernetes 集群中启用像

seccomp
这样的
RuntimeDefault
配置文件,该图表在要更新的
values.yml
文件中没有任何特定参数。我不想在本地下载图表和所有文件来进行更改
deployment.yml

正确的做法是什么?

kubernetes security kubernetes-helm amazon-eks seccomp
1个回答
1
投票

答案:

Kubernetes(当前)默认不启用

seccomp

以下是定义的 3 种可能的方法:

  1. 如果 seccomp 配置文件已在预定义 Helm 图表新版本的默认

    RuntimeDefault
    文件中定义了类型(例如
    values.yml
    ),则只需将其 Helm 图表升级到该版本即可启用它。

  2. 如果选项 1 不可行,您可以在预定义的 Helm 图表上启用它,方法是将 pod 安全上下文中的 seccomp 配置文件类型设置为

    RuntimeDefault
    ,如下所示,根据
    values.yml
    文件中使用的密钥
    deployment.yml
    文件。例如,假设
    securityContext
    是用于在
    securityContext
    文件中定义
    deployment.yml
    的键。因此,以下内容将添加到
    values.yml
    文件中:

securityContext:
  seccompProfile:
    type: RuntimeDefault
  1. 如果选项1和2不可行,您可以在本地下载其完整的helm图表,并在其
    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 过滤器。
    
    

  • 将 seccomp 引入 Kubernetes 集群时,一个好的起点是启用默认配置文件 (RuntimeDefault)。虽然本质上是通用的,并且对于大多数工作负载来说很可能过于宽松,但一些对安全性最敏感的系统调用会被阻止。此默认 seccomp 配置文件为使用 seccomp 运行容器提供了合理的默认设置,并禁用了 300 多个系统调用中的大约 44 个系统调用。可以在
here

找到被默认配置文件阻止的重要系统调用。 Docker、CRI-O 或 Containerd,所有这些都带有 Kubernetes 集群中可用的默认 seccomp 配置文件。

某些工作负载可能需要比其他工作负载更少的系统调用限制。这意味着即使使用

action: SCMP_ACT_ALLOW

配置文件,它们也可能在运行时失败。为了减轻此类故障,您可以:


    将工作负载显式运行为
  • RuntimeDefault

    
    

  • 禁用节点的
  • Unconfined

    功能。还要确保在禁用该功能的节点上安排工作负载。

    
    

  • 为工作负载创建自定义 seccomp 配置文件。
重要提示:云管理的 Kubernetes 集群(例如 Amazon EKS、GKE 等)是托管 Kubernetes 集群,因此,我们无法使用 kubelet,这意味着我们无法一次性在节点级别为所有 pod 启用它。

© www.soinside.com 2019 - 2024. All rights reserved.