• Kubernetes学习笔记-保障集群内节点和网络安全(2)配置节点的安全上下文20220828



    除了让pod使用宿主节点的linux命名空间,还可以在pod或所属容器的描述中通过security-context选项配置其他与安全性相关的特性。这个选项可以运行于整个pod,或每个pod中单独的容器。
    了解安全上上下文中可以配置的内容
    配置安全上下文可以允许你做很多事:

    • 指定容器运行进程中的用户(用户ID)
    • 阻止容器使用root用户运行(容器的默认运行用户通常在其镜像中指定,所以可能需要阻止容器以root用户运行)
    • 使用特权模式运行容器,使其对宿主节点的内核具有完全的访问权限
    • 与以上相反,通过添加或禁用内核功能,配置细粒度的内核访问权限
    • 设置SELinux(Security Enhanced Linux,安全增强型linux)选项,加强对容器的限制
    • 阻止进程写入容器的根文件系统


    1)使用指定用户运行容器
    为了使用一个与镜像中不同的用户id来运行pod,需要设置该pod的securityContext.runAsUser选项
    guest用户id:405


    2)阻止容器以root用户运行
    yaml文件配置属性
    runAsNonRoot:true


    3)使用特权模式运行pod
    有时pod需要做它们的宿主节点的能做的任何事,如操作被保护的系统设备,或使用其他在通常容器中不能使用的内核功能。
    这种pod的一个样例就是kube-proxy pod。为了获取宿主机内核的完整权限,该pod需要在特权模式下运行。可以将容器的securityContext中的privileged设置为true实现。


    4)为容器单独添加内核功能
    前面介绍了一种给予容器无限力量的方法,一个更加安全的做法就是只给予它使用真正需要的内核功能的权限。kunernetes允许为特定的容器添加内核功能,或禁用部分内核功能,以允许对容器进行更加精细的权限控制,限制攻击者潜入的影响。
    如果需要允许容器修改系统时间,可以在容器的capbilities里的add一项名CAP_SYS_TIME的功能。
    注意:Linux内核功能的名称通常以CAP_开头。但在pod的spec中指定内核功能时,必须省略CAP_前缀


    5)在容器中禁用内核功能
    默认情况下容器拥有CAP_CHOWN权限,允许进程修改文件系统中文件的所有者。为了阻止容器此种行为,在yaml中的securityContext.capabilitirs.drop列表中加入此项,以禁用这个修改文件所有者的内核功能。


    6)阻止对容器根文件系统的写入
    为了安全原因,需要阻止容器中的进程对容器的根文件系统进行写入,仅允许他们写入挂载的存储卷。
    将容器的securityContext.readOnlyRootFileSystem设置为true
    提示:为了增强安全性,请将在生产环境中运行的容器的readOnlyRootFilesystem选项设置为true
    设置pod级别的安全上下文
    前面例子都是针对单独的容器设置的安全上下文。这些选项中一部分也可以从pod级别设定(通过pod.spec.securityContext属性)。它们会作为一个pod中的每一个容器默认安全上下文,但是会被容器级别的安全上下文覆盖。下面是pod级别安全上下文独有的内容。


    7)容器使用不同用户运行时共享存储卷
    之前章节讲的使用存储卷在pod的不同容器中共享数据,可以顺利在一个容器中写入数据,在另一个容器中读出这些数据,前提是这两个容器都以root用户运行,对存储卷中的所有文件拥有全部权限。如果两个不同用户它们不一定能读取或者写入另一个容器的文件。
    kunernetes允许为pod中所有容器指定supplemental组,以允许它们无论哪个用户id运行都可以共享文件,可以通过设置以下两个属性设置:

    • fsGroup
    • supplementalGroups
  • 相关阅读:
    更换内存条需要注意什么
    python -pandas -处理excel合并单元格问题
    ClickHouse的Join算法
    ssh连接腾讯云服务器
    QoS策略
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园服装租赁系统864e2
    vector实现——memcpy拷贝问题
    Servlet表单提交、前后端数据交换、页面跳转
    【数据结构初阶】八、非线性表里的二叉树(二叉树的实现 -- C语言链式结构)
    org.apache.ibatis.binding.BindingException: Parameter ‘xxx‘ not found 总结
  • 原文地址:https://blog.csdn.net/wwxsoft/article/details/126603963