当前位置: 首页 > news >正文

【k8s】scc权限 restricted、anyuid、privileged

文章目录

  • 概述
  • 1. 内置的scc
  • 2. OpenShift如何确定pod的scc
    • 2.1 Pod未带SCC标签的情况
    • 2.2. Pod带有SCC标签的情况
  • 参考

概述

在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无法创建。

参考

K8S中的Pod安全策略(上):K8S学习篇3
OpenShift如何确定pod的scc?

相关文章:

【k8s】scc权限 restricted、anyuid、privileged

文章目录 概述1. 内置的scc2. OpenShift如何确定pod的scc2.1 Pod未带SCC标签的情况2.2. Pod带有SCC标签的情况 参考 概述 在OpenShift(后文简称OCP)中,很早就一个概念:Security Context Constraints ,简称SCC&#xf…...

2025华数杯国际赛A题完整论文讲解(含每一问python代码+数据+可视化图)

大家好呀,从发布赛题一直到现在,总算完成了2025“华数杯”国际大学生数学建模竞赛A题Can He Swim Faster的完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文…...

ThreadLocal 的使用场景

在现代电商平台中,ThreadLocal 常用于以下场景,特别是与线程隔离相关的业务中,以提高性能和简化上下文传递。 1. 用户上下文信息管理 场景:在用户发起的每次请求中,需要携带用户 ID、角色、权限等信息,而这…...

后端开发 Springboot整合Redis Spring Data Redis 模板

目录 redis 配置 RedisConfig 类 完整代码 代码讲解 1. 类定义和注解 2. 定义 RedisTemplate Bean 3. 配置 JSON 序列化 4. 配置 Redis 的 key 和 value 序列化方式 5. 完成配置并返回 RedisTemplate 总结 redis 服务接口实现类 类级别 注入 RedisTemplate 常用 Re…...

代码随想录算法训练营第 4 天(链表 2)| 24. 两两交换链表中的节点19.删除链表的倒数第N个节点 -

一、24. 两两交换链表中的节点 题目:24. 两两交换链表中的节点 - 力扣(LeetCode) 视频:帮你把链表细节学清楚! | LeetCode:24. 两两交换链表中的节点_哔哩哔哩_bilibili 讲解:代码随想录 dummy-…...

【RDMA学习笔记】1:RDMA(Remote Direct Memory Access)介绍

从帝国理工的PPT学习。 什么是RDMA Remote Direct Memory Access,也就是Remote的DMA,是一种硬件机制,能直接访问远端结点的内存,而不需要处理器介入。 其中: Remote:跨node进行数据传输Direct&#xff…...

网络安全常见的35个安全框架及模型

大家读完觉得有帮助记得关注和点赞!!! 01、概述 网络安全专业机构制定的一套标准、准则和程序,旨在帮助组织了解和管理面临的网络安全风险。优秀的安全框架及模型应该为用户提供一种可靠方法,帮助其实现网络安全建设…...

Elasticsearch介绍及使用

Elasticsearch 是一款基于 Lucene 库构建的开源、分布式、RESTful 风格的搜索引擎和分析引擎,具有强大的全文搜索、数据分析、机器学习等功能,广泛应用于日志分析、实时数据分析、全文检索等场景。 核心概念 索引(Index)&#xf…...

Leetocde516. 最长回文子序列 动态规划

原题链接&#xff1a;Leetocde516. 最长回文子序列 class Solution { public:int longestPalindromeSubseq(string s) {int n s.size();vector<vector<int>> dp(n, vector<int>(n, 1));for (int i 0; i < n; i) {dp[i][i] 1;if (i 1 < n &&…...

iOS 逆向学习 - Inter-Process Communication:进程间通信

iOS 逆向学习 - Inter-Process Communication&#xff1a;进程间通信 一、进程间通信概要二、iOS 进程间通信机制详解1. URL Schemes2. Pasteboard3. App Groups 和 Shared Containers4. XPC Services 三、不同进程间通信机制的差异四、总结 一、进程间通信概要 进程间通信&am…...

高级生化大纲

一&#xff0c;蛋白质化学&#xff1a; 蛋白质分离是生物化学和分子生物学研究中的一项基本技术&#xff0c;用于根据蛋白质的物理和化学特性将其从混合物中分离出来。 1. 离心分离法 离心分离法利用离心力来分离不同质量或密度的颗粒和分子。 差速离心&#xff1a;通过逐…...

YARN WebUI 服务

一、WebUI 使用 与HDFS一样&#xff0c;YARN也提供了一个WebUI服务&#xff0c;可以使用YARN Web用户界面监视群集、队列、应用程序、服务、流活动和节点信息。还可以查看集群详细配置的信息&#xff0c;检查各种应用程序和服务的日志。 1.1 首页 浏览器输入http://node2.itc…...

【Unity3D】利用IJob、Burst优化处理切割物体

参考文章&#xff1a; 【Unity】切割网格 【Unity3D】ECS入门学习&#xff08;一&#xff09;导入及基础学习_unity ecs教程-CSDN博客 【Unity3D】ECS入门学习&#xff08;十二&#xff09;IJob、IJobFor、IJobParallelFor_unity ijobparallelfor-CSDN博客 工程资源地址&…...

【大前端】Vue3 工程化项目使用详解

目录 一、前言 二、前置准备 2.1 环境准备 2.1.1 create-vue功能 2.1.2 nodejs环境 2.1.3 配置nodejs的环境变量 2.1.4 更换安装包的源 三、工程化项目创建与启动过程 3.1 创建工程化项目 3.2 项目初始化 3.3 项目启动 3.4 核心文件说明 四、VUE两种不同的API风格 …...

基于文件系统分布式锁原理

分布式锁&#xff1a;在一个公共的存储服务上打上一个标记&#xff0c;如Redis的setnx命令&#xff0c;是先到先得方式获得锁&#xff0c;ZooKeeper有点像下面的demo,比较大小的方式判决谁获得锁。 package com.ldj.mybatisflex.demo;import java.util.*; import java.util.co…...

简历整理YH

一&#xff0c;订单中心 1&#xff0c;调拨单 融通(Rocketmq)-订单中心&#xff1a;ECC_BMS123(已出单)&#xff0c;125(分配),127(发货),129(收货) 通过RocketMq接入多场景订单数据 2&#xff0c;销售单 sap&#xff08;FTP&#xff09;-订单中心&#xff0c;下发1002,1003,…...

Kotlin 协程基础三 —— 结构化并发(二)

Kotlin 协程基础系列&#xff1a; Kotlin 协程基础一 —— 总体知识概述 Kotlin 协程基础二 —— 结构化并发&#xff08;一&#xff09; Kotlin 协程基础三 —— 结构化并发&#xff08;二&#xff09; Kotlin 协程基础四 —— CoroutineScope 与 CoroutineContext Kotlin 协程…...

微信小程序实现长按录音,点击播放等功能,CSS实现语音录制动画效果

有一个需求需要在微信小程序上实现一个长按时进行语音录制&#xff0c;录制时间最大为60秒&#xff0c;录制完成后&#xff0c;可点击播放&#xff0c;播放时再次点击停止播放&#xff0c;可以反复录制&#xff0c;新录制的语音把之前的语音覆盖掉&#xff0c;也可以主动长按删…...

校园跑腿小程序---轮播图,导航栏开发

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…...

详细全面讲解C++中重载、隐藏、覆盖的区别

文章目录 总结1、重载示例代码特点1. 模板函数和非模板函数重载2. 重载示例与调用规则示例代码调用规则解释3. 特殊情况与注意事项二义性问题 函数特化与重载的交互 2. 函数隐藏&#xff08;Function Hiding&#xff09;概念示例代码特点 3. 函数覆盖&#xff08;重写&#xff…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...