kubernetes 容器运行环境安全 POLP AppArmor Seccomp

开头语

写在前面:如有问题,以你为准,

目前24年应届生,各位大佬轻喷,部分资料与图片来自网络

内容较长,页面右上角目录方便跳转

最小特权原则 POLP

最小特权原则 (Principle of least privilege,POLP):是一种信息安全概念,即为用户提供执行其工作职责所需的最小权限等级或许可。最小特权原则被广泛认为是网络安全的最佳实践,也是保护高价值数据和资产的特权访问的基本方式。

最小特权原则(POLP)重要性:

  1. 减少网络攻击面:当今,大多数高级攻击都依赖于利用特权凭证。通过限制超级用户和管理员权限,最小权限执行有 助于减少总体网络攻击面。
  2. 阻止恶意软件的传播:通过在服务器或者在应用系统上执行最小权限,恶意软件攻击(例如SQL注入攻击)将很难 提权来增加访问权限并横向移动破坏其他软件、设备。
  3. 有助于简化合规性和审核:许多内部政策和法规要求都要求组织对特权帐户实施最小权限原则,以防止对关键业务系 统的恶意破坏。最小权限执行可以帮助组织证明对特权活动的完整审核跟踪的合规性。

在团队中实施最小特权原则(POLP):

  1. 在所有服务器、业务系统中,审核整个环境以查找特权帐户(例如SS账号、管理后台账号、跳板机账号);
  2. 减少不必要的管理员权限,并确保所有用户和工具执行工作时所需的权限:
  3. 定期更改管理员账号密码;
  4. 监控管理员账号操作行为,告警通知异常活动。

AppArmor

AppArmor (Application Armor) 是一个linux 内核安全模块,可用于限制主机操作系统上运行的进程的功能,每个进程逗可以拥有自己的安全配置文件,安全配置文件用于允许或禁止特定功能,例如网络访问,文件读写执行权限等

跟SElinux 是同类产品,企业基本不用SElinux

linux 发行版内置:Ubuntu,Debian,(centos 不支持)

工作模式

Enforcement (强制模式):在这种模式下,配置文件里列出的限制条件都会得到执行,并且对于违反这些限制条件的程序会进行日志记录。

Complain (投诉模式):在这种模式下,配置文件里的限制条件不会得到执行,Apparmor只是对程序的行为进行记录。一般用于调试。

工作流程

kubernetes 容器运行环境安全 POLP AppArmor Seccomp_第1张图片

命令

  1. apparmor status:   查看AppArmor配置文件的当前状态的
  2. apparmor_parser:  将AppArmor配置文件加载到内核中
    1. apparmor_parser   #加载到内核中
    2. apparmor_parser -r  #重新加载配置
    3. apparmor parser -R #删除配置
  3. aa-complain:  将AppArmor配置文件设置为投诉模式,需要安装apparmor-utils软件包
  4. aa-enforce:  将AppArmori配置文件设置为强制模式,需要安装apparmor-utils软件包

使用 AppArmor 先决条件

使用ubuntu 搭建的集群是可以使用,centos搭建的集群是用不了的

K8s版本v1.4+,检查是否支持:kubectl describe node | grep AppArmor

Linux内核已启用AppArmor,查看cat/sys/module,/apparmor/parameters/enabled

容器运行时需要支持AppArmor,自前Dockeri已支持

yaml 配置文件

yaml 编写

kubernetes 容器运行环境安全 POLP AppArmor Seccomp_第2张图片

配置文件位置

配置文件编写

kubernetes 容器运行环境安全 POLP AppArmor Seccomp_第3张图片

实操(容器文件系统访问限制)

kubernetes 容器运行环境安全 POLP AppArmor Seccomp_第4张图片

apparmor 配置文件

kubernetes 容器运行环境安全 POLP AppArmor Seccomp_第5张图片

禁止pod 容器 对 容器中的 /tmp/ 和/data/www/  目录下的写权限

加载到内核

重点:是pod所运行的节点上,而不master

查看加载

pod yaml编写

kubernetes 容器运行环境安全 POLP AppArmor Seccomp_第6张图片

测试

kubernetes 容器运行环境安全 POLP AppArmor Seccomp_第7张图片

Seccomp (未成功)

限制容器进程系统调用

对于 Linux 来说,用户层一切资源相关操作都需要通过系统调用来完成,系统调用实现技术层次上解耦,内核只关心系统调用API的实现,而不必关心谁调用的

kubernetes 容器运行环境安全 POLP AppArmor Seccomp_第8张图片

Seccomp (Secure computing mode) 是一个Linux内核安全模块,可用于应用进程允许使用的系统调用。

容器实际上是宿主机上运行的一个进程,共享宿主机内核,如果所有容器都具有任何系统调用的能力,那么容器如果被 入侵,就很轻松绕过容器隔离更改宿主机系统权限或者进入宿主机。

这就可以使用Seccomp机制限制容器系统调用,有效减少攻击面。

Linux发行版内置:CentOS、Ubuntu

系统调用介绍

linux 系统调用列表

chmod 777 /etc/issue

其实就是调用系统中 chmod 的 api

kubernetes 容器运行环境安全 POLP AppArmor Seccomp_第9张图片

查看 node

docker info

---

 Security Options:

  seccomp

   Profile: default

   ---

配置文件

kubernetes 容器运行环境安全 POLP AppArmor Seccomp_第10张图片

/var/lib/kubelet/seccomp/ 是默认路径(固定)

设置拒绝调用列表时,注意pod启用需要一些必要的权限,否则会导致pod起不来

SCMP_ACT_ALLOW 类似于写黑名单

SCMP_ACT_ERRNO 类似于写白名单

{

    "defaultAction": "SCMP_ACT_ERRNO",

    "syscalls": [

        {

            "names": [

                "accept",

                "chown",

                "kill",

                "mmap",

                ...

            ],

            "action": "SCMP_ACT_ALLOW",

   "args": [],

   "comment": "",

   "includes": {},

   "excludes": {}

        }

    ]


}

实操

{

    "defaultAction":"SCMP_ACT_ALLOW",

    "syscalls":[

        {

            "names":[

                "chmod"

            ],

            "action":"SCMP_ACT_ERRNO"

        }

    ]

}
apiVersion: v1

kind: Pod

metadata:

  creationTimestamp: null

  labels:

    run: web

  name: web-seccomp

  namespace: test

spec:

  nodeName: node1 # 因为只在node上写了配置文件,所以指定pod创建在node1上

  containers:

  - image: busybox:1.30

    name: hello

  securityContext:

    seccompProfile:

      type: Localhost

      localhostProfile: chmod.json
[root@master cks]# kubectl get pod -n test

NAME          READY   STATUS    RESTARTS   AGE

web-seccomp   1/1     Running   0          30s

 

你可能感兴趣的:(kubernetes,kubernetes,安全,容器,云原生,运维)