Pod必备知识: SecurityContexts

本文涉及的产品
访问控制,不限时长
简介: Security Context主要用于限制容器的行为,从而保障系统和其他容器的安全。这一块的能力不是 Kubernetes 或者容器 runtime 本身的能力,而是 Kubernetes 和 runtime 通过用户的配置,最后下传到内核里,再通过内核的机制让 SecurityContext 来生效。所以这里介绍的内容,会比较简单或者说比较抽象一点。1.容器级别的Security Context:仅对指定容器生效2.Pod级别的Security Context:对指定Pod中的所有容器生效3.Pod Security Policies(PSP):对集群内所有Pod生效

所属技术领域:

Pod

|名词定义|

Security Context主要用于限制容器的行为,从而保障系统和其他容器的安全。这一块的能力不是 Kubernetes 或者容器 runtime 本身的能力,而是 Kubernetes 和 runtime 通过用户的配置,最后下传到内核里,再通过内核的机制让 SecurityContext 来生效。所以这里介绍的内容,会比较简单或者说比较抽象一点。
1.容器级别的Security Context:仅对指定容器生效
2.Pod级别的Security Context:对指定Pod中的所有容器生效
3.Pod Security Policies(PSP):对集群内所有Pod生效

|技术特点|

 权限和访问控制设置项:
1.Discretionary Access Control:根据用户id和组id来控制文件访问权限
2.SELinux:通过SELinux的策略配置控制用户,进程等对文件等访问控制
3.Privileged:容器是否为特权行为模式
4.Linux Capabilities:给特定进程配置privileged能力
5.AppArmor:控制可执行文件的访问控制权限(读写文件/目录,网络端口读写等)
6.Seccomp:控制进程可以操作的系统调用
7.AllowPrivilegeEscalation:控制一个进程是否能有比其父进程获取更多的权限
最后其实都是落到内核来控制它的一些权限。
图片.png

上图是对 pod 级别和容器级别配置 SecurityContext 的一个例子,如果大家对这些内容有更多的需求,可以根据这些信息去搜索更深入的资料来学习。
 securityContext的设置
kubernetes中有个字段叫securityContext,即安全上下文,它用于定义Pod或Container的权限和访问控制设置。其设置包括:

Discretionary Access Control: 根据用户ID(UID)和组ID(GID)来限制其访问资源(如:文件)的权限
针对pod设置:

apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:

runAsUser: 1000
fsGroup: 2000

volumes:

  • name: sec-ctx-vol
    emptyDir: {}
    containers:
  • name: sec-ctx-demo
    image: gcr.io/google-samples/node-hello:1.0
    volumeMounts:

    • name: sec-ctx-vol
      mountPath: /data/demo

    securityContext:
    allowPrivilegeEscalation: false
    针对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

    Security Enhanced Linux (SELinux): 给容器指定SELinux labels

...
securityContext:
seLinuxOptions:

level: "s0:c123,c456"

Running as privileged or unprivileged:以privileged或unprivileged权限运行
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo-4
spec:
containers:

  • name: sec-ctx-4
    image: gcr.io/google-samples/node-hello:1.0
    securityContext:

    privileged: true

    Linux Capabilities: 给某个特定的进程privileged权限,而不用给root用户所有的privileged权限

apiVersion: v1
kind: Pod
metadata:
name: security-context-demo-4
spec:
containers:

  • name: sec-ctx-4
    image: gcr.io/google-samples/node-hello:1.0
    securityContext:

    capabilities:
      add: ["NET_ADMIN", "SYS_TIME"]

    AppArmor: 使用程序文件来限制单个程序的权限

Seccomp: 限制一个进程访问文件描述符的权限

AllowPrivilegeEscalation: 控制一个进程是否能比其父进程获取更多的权限,AllowPrivilegeEscalation的值是bool值,如果一个容器以privileged权限运行或具有CAP_SYS_ADMIN权限,则AllowPrivilegeEscalation的值将总是true。

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

    注意:要开启容器的privileged权限,需要提前在kube-apiserver和kubelet启动时添加参数--allow-privileged=true,默认已添加。

|资料来源|

技术特点:https://www.cnblogs.com/sunsky303/p/11090540.html

相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
7月前
|
存储 Kubernetes NoSQL
k8s 学习九,pod 知识点 上
k8s 学习九,pod 知识点 上
182 0
|
存储 Kubernetes 安全
Kubernetes必备知识: PersistentVolumeClaim
PersistentVolumeClaim(简称PVC)是用户存储的请求,PVC消耗PV的资源,可以请求特定的大小和访问模式,需要指定归属于某个Namespace,在同一个Namespace的Pod才可以指定对应的PVC。 当需要不同性质的PV来满足存储需求时,可以使用StorageClass来实现。 每个 PVC 中都包含一个 spec 规格字段和一个 status 声明状态字段。
3538 0
Kubernetes必备知识: PersistentVolumeClaim
|
12月前
|
存储 Kubernetes NoSQL
【k8s 系列】k8s 学习九,pod 知识点 上
在 K8S 中, pod 是一个非常关键的存在,我们一起来看看 pod 具体是个什么?
140 0
|
7月前
|
Kubernetes API 调度
pod 知识点 下
pod 知识点 下
|
设计模式 Kubernetes Cloud Native
【探索 Kubernetes|作业管理篇 系列 7】探究 Pod 有什么用,为什么需要它
【探索 Kubernetes|作业管理篇 系列 7】探究 Pod 有什么用,为什么需要它
73 1
|
12月前
|
存储 Kubernetes API
【k8s 系列】k8s 学习十,pod 知识点 下
上一篇分享了 pod 的基本知识点,有 K8S 环境的小伙伴还是可以用起来的,还对比较简单,知道了 pod 的 yaml 文件结构,标识,基本的创建 pod 和删除 pod 的用法等等,我们继续
105 0
|
XML JSON Kubernetes
【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立)(一)
【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立)(一)
218 0
|
JSON Kubernetes Cloud Native
【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立)(二)
【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立)(二)
253 0
【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立)(二)
|
存储 Kubernetes 监控
k8s实战系列: 再谈为什么需要Kubernetes
k8s实战系列: 再谈为什么需要Kubernetes
860 1
k8s实战系列: 再谈为什么需要Kubernetes
|
存储 Kubernetes 应用服务中间件
k8s之Pod基础概念 (下)
Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理Pod运行的StatefulSet和Deployment等控制器对象,用于暴露Pod应用的Service和Ingress对象,为Pod提供存储的PersistentVolume存储资源对象等
k8s之Pod基础概念 (下)