为Pod或容器配置安全上下文

为Pod或容器配置安全上下文

SecurityContext的内容:

  • 自主访问控制:基于UID和GID判定对对象的访问权限
  • SELinux: 为对象赋予安全性标签
  • 特权模式或非特权模式运行
  • Linux权能: 为进程赋予root用户的部分权限
  • Apparmor:使用程序配置来限制个别程序的权能
  • seccomp:过滤进程的系统调用
  • allowPrivilegeEscalation:控制进程是否可以获得超出其父进程的特权,这个字段的值直接控制是否为容器进程设置no_new_privs标志。当容器满足以下条件之一时该值总为true:
    • 以特权模式运行
    • 具有CAP_SUS_ADMIN权限
  • readOnlyRootFileSyste:以只读方式加载容器的根文件系统

为Pod设置安全上下文

主要是securityContext字段,从后面Pod中执行的结果来看,这里的三个参数:

  • runAsUser:Linux中的uid
  • runAsGroup: Linux中的gid
  • fsGroup: Linux中的groups

securityContext字段是一个PodSecurityContext对象,为Pod配置的安全性配置会应用到这个Pod的所有容器上

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000
  volumes:
  - name: sec-ctx-vol
    emptyDir: {}
  containers:
  - name: sec-ctx-demo
    image: busybox:1.28
    command: ["sh", "-c", "sleep 1h"]
    volumeMounts:
    - name: sec-ctx-vol
      mountPath: /data/demo
    securityContext:
      allowPrivilegeEscalation: false

该文件制定Pod中所有容器内的进程都适用用户ID1000,主组3000运行。

如果忽略runAsGroup字段,则容器的主组ID默认为root(0),设置该字段后,所有容器内创建的文件会划归用户1000和组3000。

fsGroup表示容器中所有的进程也会是附组ID 2000的一部分

Pod运行时权限

image-20230505165712474

/data/demo下创建文件的权限

image-20230505165743465

为Container设置Security Context

上面一个例子我们的SecurityContext字段写在spec下,与container字段同级,表示设置的securityContext将被应用于Pod的所有容器中,如果我们只想给某一个容器设置这个值,则需要将这个字段挪到container下设置

例如:

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo-2
spec:
  securityContext:
    runAsUser: 1000
  containers:
  - name: sec-ctx-demo-2
    image: gcr.io/google-samples/node-hello:1.0
    securityContext:
      runAsUser: 2000
      allowPrivilegeEscalation: false

此时设置的securityContext就只作用于sec-cix-demo-2这个容器中

为Container设置SELinux

...
securityContext:
  seLinuxOptions:
    level: "s0:c123,c456"

说明: 要指定 SELinux,需要在宿主操作系统中装载 SELinux 安全性模块

posted @ 2023-07-24 17:21  pr1s0n  阅读(78)  评论(0)    收藏  举报