k8s scc权限和内置的restricted、anyuid、privileged详解

 更新时间:2025年07月11日 08:50:06   作者:云川之下  
这篇文章主要介绍了k8s scc权限和内置的restricted、anyuid、privileged,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

概述

在OpenShift(后文简称OCP)中,很早就一个概念:Security Context Constraints ,简称SCC,即安全上下文约束。

K8S的Pod安全策略和OCP中的SCC有一定继承(现有OCP的SCC后有K8S的pod安全策略)。

为了更好地理解K8S的容器安全策略,并且控制篇幅,我们在本篇中先介绍OCP的SCC。

1. 内置的scc

安全上下文约束是OpenShift提供的工具,用于控制平台上允许每个Pod请求的特权。

OpenShift带有8个预定义的安全上下文约束,您可以使用oc get scc命令列出这些约束。

SCCDescription说明
restricted受限拒绝访问所有主机功能,并要求Pod必须与UID和分配给名称空间的SELinux上下文一起运行。这是限制性最强的SCC,默认情况下,它用于经过身份验证的用户换句话说,这是最安全的一种SCC。
nonrootnonroot提供受限SCC的所有功能,但允许用户使用任何非root UID运行。用户必须指定UID,或者必须在容器运行时清单上指定UID。需要具有相同的其他受限制的SCC安全功能的可预测的非根UID的应用程序可以使用此SCC,只要它们在清单中通知了UID。
anyuidanyuid提供了受限SCC的所有功能,但允许用户使用任何UID和任何GID运行。在kubernetes和OpenShift之类的平台上,这等效于允许在容器内部和外部都允许UID 0或root用户。SELinux在这里起到了重要的作用,它增加了一层保护,并且使用seccomp过滤不需要的系统调用。
hostmount-anyuidhostmount-anyuid提供了受限SCC的所有功能,但允许通过Pod进行主机安装和任何UID。这主要由持久性卷回收器使用。警告:此SCC允许主机文件系统作为任何UID(包括UID 0)进行访问。请谨慎授权。与anyuid相同的警告,但在这里它会更进一步,并允许安装主机卷。请注意,描述中提到的卷回收器是受信任的工作负载,也是必不可少的基础架构.
hostnetworkhostnetwork允许使用主机网络和主机端口,但仍要求Pod必须与分配给namepac的UID和SELinux上下文一起运行e在这里,pod/容器将能够直接“查看和使用”主机网络堆栈。非零UID和预分配的SELinux上下文将有助于提供另一层安全性。
node-exporternode-exporter scc is used for the Prometheus node exporterNode-exporter 是为Prometheus设计的,用于从集群中检索指标。它允许访问主机网络,主机PIDS和主机卷,但不能访问主机IPC。也允许anyuid。不能被其他应用程序使用。
hostaccesshostaccess允许访问所有主机名称空间,但仍要求Pod必须与分配给名称空间的UID和SELinux上下文一起运行。警告:此SCC允许主机访问名称空间,文件系统和PIDS。它只能由受信任的Pod使用。谨慎行事。在描述中,主机名称空间是指在pod或容器名称空间之外,或者,我们可以将其称为节点或根Linux名称空间。确实,限制UID并使用SELinux将为保护节点设置一层安全性。但是,它是一个非常宽松的SCC,仅应由绝对必要的受信任工作负载使用。
Privilegedprivileged允许访问所有特权和主机功能,并具有以任何用户,任何组,任何fsGroup和任何SELinux上下文运行的能力。警告:这是最宽松的SCC,仅应用于集群管理。谨慎行事。此scc允许pod /容器控制主机/ worker节点甚至其他容器中的所有内容。这是最特权和最宽松的SCC策略。仅受信任的工作负载应使用此选项,并讨论是否应将其用于生产中是有效的。特权pod可以完全控制主机。

本质是scc权限列表不同:

restrictedanyuidprivileged
allowHostDirVolumePlugin: falseallowHostDirVolumePlugin: falseallowHostDirVolumePlugin: true
allowHostIPC: falseallowHostIPC: falseallowHostIPC: true
allowHostNetwork: falseallowHostNetwork: falseallowHostNetwork: true
allowHostPID: falseallowHostPID: falseallowHostPID: true
allowHostPorts: falseallowHostPorts: falseallowHostPorts: true
allowPrivilegeEscalation: trueallowPrivilegeEscalation: trueallowPrivilegeEscalation: true
allowPrivilegedContainer: falseallowPrivilegedContainer: falseallowPrivilegedContainer: true
allowedCapabilities: nullallowedCapabilities: [allowedCapabilities: [*]
NET_RAW
FSETID
SETGID
SETUID
CHOWN
SYS_CHROOT]
allowedUnsafeSysctls:allowedUnsafeSysctls: [*]
apiVersion: security.openshift.io/v1apiVersion: security.openshift.io/v1apiVersion: security.openshift.io/v1
defaultAddCapabilities: nulldefaultAddCapabilities: nulldefaultAddCapabilities: null
fsGroup:fsGroup: RunAsAnyfsGroup: RunAsAny
groups: []groups: [system:cluster-admins]groups: [system:cluster-admins, system:nodes, system:masters]
kind: SecurityContextConstraintskind: SecurityContextConstraintskind: SecurityContextConstraints
name: restrictedname: anyuidname: privileged
resourceVersion: “3512475209”resourceVersion: “3512475203”resourceVersion: “340”
uid: bdb21b4f-dfda-456a-8aa3-7fdcd8ee2f2duid: d35f70ed-47ce-4b22-83d0-b0b2a4bc07f8uid: 1df9ef3c-1fab-4031-a2cd-3d7479069050
priority: nullpriority: 10priority: null
readOnlyRootFilesystem: falsereadOnlyRootFilesystem: falsereadOnlyRootFilesystem: false
requiredDropCapabilities: [KILL, MKNOD, SETUID, SETGID]requiredDropCapabilities: [MKNOD]requiredDropCapabilities: null
runAsUser:runAsUser: RunAsAnyrunAsUser: RunAsAny
seLinuxContext:seLinuxContext: MustRunAsseLinuxContext: RunAsAny
supplementalGroups: RunAsAnysupplementalGroups: RunAsAnysupplementalGroups: RunAsAny
users: []users: []users: [system:admin, system:serviceaccount:openshift-infra:build-controller]
volumes: [configMap, csi, downwardAPI, emptyDir, ephemeral, persistentVolumeClaim, projected, secret]volumes: [configMap, csi, downwardAPI, emptyDir, ephemeral, persistentVolumeClaim, projected, secret]volumes: [*]

2. OpenShift如何确定pod的scc

  • 如果Pod指定了SCC注解,且ServiceAccount有权限使用该SCC,则优先使用注解指定的SCC。
  • 如果未指定注解,则基于ServiceAccount的绑定权限,从严格到宽松挑选合适的SCC。
  • 无论是否指定注解,最终都需要验证ServiceAccount的绑定权限,这意味着标签并不能完全绕过权限控制。

2.1 Pod未带SCC标签的情况

  • 如果Pod没有明确指定SCC,OpenShift会按照以下流程选择一个适用的SCC:
  • 检查Pod的ServiceAccount,以及该ServiceAccount的角色绑定所允许的SCC列表。

对SCC列表按照权限的严格程度排序:

  • 从最严格的SCC(例如restricted)到最宽松的SCC(例如privileged)。
  • 从排序中选择第一个Pod能满足的SCC作为其适用的SCC。

2.2. Pod带有SCC标签的情况

OpenShift允许通过Pod的openshift.io/scc注解直接指定使用的SCC。

如果Pod通过注解明确指定了一个SCC(如openshift.io/scc=restricted),OpenShift会优先尝试使用该SCC。

然而,Pod仍需满足以下条件:

  • Pod的ServiceAccount具有绑定到该SCC的权限:OpenShift会检查绑定(RoleBinding 或 ClusterRoleBinding)中,是否允许ServiceAccount使用这个指定的SCC。
  • 如果绑定验证成功,则使用指定的SCC。
  • 如果绑定验证失败,则该Pod无法创建。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解kubelet 创建pod流程代码图解及日志说明

    详解kubelet 创建pod流程代码图解及日志说明

    这篇文章主要为大家介绍了详解kubelet 创建pod流程代码图解及日志说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Kubernetes故障排除有效维护集群的最佳实践工具

    Kubernetes故障排除有效维护集群的最佳实践工具

    这篇文章主要为大家介绍了Kubernetes故障排除有效维护集群的最佳实践工具详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Centos 8.2 升级内核通过elrepo源的方法

    Centos 8.2 升级内核通过elrepo源的方法

    这篇文章主要介绍了Centos 8.2 升级内核通过elrepo源,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • k8s自身原理service及实现图文示例解析

    k8s自身原理service及实现图文示例解析

    这篇文章主要为大家介绍了k8s自身原理service图文示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • kubernetes k8s CRD自定义资源学习笔记

    kubernetes k8s CRD自定义资源学习笔记

    这篇文章主要介绍了kubernetes k8s CRD自定义资源学习笔记,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • K8S命令如何查看日志

    K8S命令如何查看日志

    文章内容总结:K8S命令查看日志,列出所有节点、切换节点、查看容器日志及部分日志内容,个人经验分享,希望对大家有所帮助
    2024-11-11
  • Rainbond的ServiceMesh架构组件端口冲突处理解决

    Rainbond的ServiceMesh架构组件端口冲突处理解决

    这篇文章主要大家介绍了Rainbond ServiceMesh架构组件端口冲突处理方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Kubernetes存储系统数据持久化管理详解

    Kubernetes存储系统数据持久化管理详解

    这篇文章主要为大家介绍了Kubernetes存储系统数据持久化管理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • k8s入门实战deployment使用详解

    k8s入门实战deployment使用详解

    这篇文章主要为大家介绍了k8s入门实战deployment使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 云原生要素配置分离ConfigMap创建方式

    云原生要素配置分离ConfigMap创建方式

    这篇文章主要为大家介绍了云原生要素配置分离ConfigMap以及多种创建方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03

最新评论