在CSDN学Golang云原生(Kubernetes集群安全)

一,ABAC授权模式

Kubernetes ABAC(Attribute-Based Access Control)授权模式是一种基于属性的访问控制模型,它可以根据用户或组的属性决定是否允许他们访问 Kubernetes 集群中的资源。

在使用 ABAC 授权模式时,管理员需要定义一些规则来限制哪些用户或组有权访问集群中的不同资源。这些规则通常包括一个或多个属性和一个操作,如“查看”、“创建”、“修改”或“删除”。

下面是一些示例规则:

{"apiVersion": "abac.authorization.kubernetes.io/v1beta1","kind": "Policy","spec": {"user": "admin","namespace": "*","resource": "*","readonly": true}
}

这个示例规则表示只有 admin 用户能够读取任何命名空间下的所有资源。

要启用 ABAC 授权模式,管理员必须在 kube-apiserver 的启动参数中添加 --authorization-mode=ABAC,并指定存储策略文件路径(通过 --authorization-policy-file 选项)。另外,还需在 kubelet 的启动参数中添加 --authorization-mode=ABAC 选项。

需要注意的是,在 Kubernetes v1.19 版本之后,已经弃用了 ABAC 授权模式,并且在将来的版本中将被移除。建议使用更安全、更灵活的 RBAC (Role-Based Access Control)或其他授权模式。

二,Webhook授权模式

Kubernetes Webhook 授权模式是一种基于 HTTP 回调的访问控制模型,它可以通过向外部 Web 服务发送请求来判断用户是否有权限访问 Kubernetes 集群中的资源。

在使用 Webhook 授权模式时,管理员需要定义一个 HTTP 回调 URL,然后将该 URL 注册到 Kubernetes API Server 中。当用户发起请求时,API Server 会将请求信息发送到该 URL 上,并等待一个命名为 "status" 的 JSON 对象作为响应。

Webhook 授权模式中的回调服务可以进行各种自定义逻辑来决定用户是否有权限访问集群中的资源。例如,它可以查询 LDAP 或 Active Directory 来获取用户组成员身份、检查 JWT token 签名或者从 RBAC 角色映射文件中读取策略。

下面是一个示例 webhook 配置:

apiVersion: v1
kind: ConfigMap
metadata:name: my-auth-config
data:authz.yaml: |clusterName: my-k8s-clusterendpoint: https://my-webhook-service-endpoint.com/authz-check

这个配置表明了 webhook 认证所需要的参数:集群名称和认证服务端点 URL。

要启用 Webhook 授权模式,管理员需要在 kube-apiserver 的启动参数中添加 --authorization-mode=Webhook,并指定配置文件路径(通过 --authorization-webhook-config-file 选项)。另外还需启动 webhook 容器并监听 API 请求。

三,RBAC授权模式

Kubernetes RBAC (Role-Based Access Control) 授权模式是一种基于角色和权限的访问控制模型,它可以对 Kubernetes 集群中的资源进行精细化的授权管理。

在使用 RBAC 授权模式时,管理员需要定义三种类型的对象:

  1. Role:角色,用来定义一组权限;
  2. RoleBinding:角色绑定,将一个角色与一个用户或用户组关联起来;
  3. ClusterRole:集群级别的角色,用来定义一组跨命名空间的权限;

然后就可以通过 Kubernetes API 来创建、更新和删除这些对象。例如,下面是一个简单的 RBAC 示例:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:namespace: defaultname: pod-reader
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "watch", "list"]---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: read-podsnamespace: default
subjects:
- kind: User # 用户类型为 User 或 Group name: test-user # 要授权的用户名或用户组名 
roleRef:kind: Role # 角色类型为 Role 或 ClusterRole name: pod-reader # 要绑定到的角色名称 apiGroup: rbac.authorization.k8s.io

这个例子中创建了一个 PodReader 的角色,并将其绑定到了 test-user 用户上。该角色的权限是只读访问 Pods 资源,而且这个角色只能在 default 命名空间中使用。

要启用 RBAC 授权模式,管理员需要在 kube-apiserver 的启动参数中添加 --authorization-mode=RBAC。如果你使用的是 Kubernetes v1.6 及以上版本,则该参数默认已开启。

四,Pod的安全策略配置

Kubernetes 的 Pod 安全策略可以帮助我们提高集群的安全性。以下是一些常见的 Pod 安全策略配置:

  1. 禁止特权容器:特权容器是具有 Linux 的 root 权限和访问主机名字空间、网络名字空间等权限的容器。禁止使用特权容器可以有效地避免攻击者利用容器逃脱沙盒。
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:name: restrict-privilege
spec:privileged: falseallowPrivilegeEscalation: false
  1. 文件系统只读:将文件系统设置为只读,可以防止攻击者在运行时修改敏感信息或植入木马。
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:name: readonly-fs
spec:volumes:- configMap- downwardAPI- emptyDir- persistentVolumeClaim- projected - secret fsGroup:rule: RunAsAny # 继承宿主机用户组 runAsUser:rule: RunAsAny # 继承宿主机用户 seLinux:rule: RunAsAny # 继承宿主机 SELinux 标签 supplementalGroups:rule: MustRunAs # 必须以指定用户组运行 
  1. AppArmor 或 Seccomp:AppArmor 和 Seccomp 是两种 Linux 安全模块,它们可以限制容器的系统调用和文件系统访问权限。
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:name: restrict-apparmor-seccomp
spec:seLinux:rule: RunAsAny # 继承宿主机 SELinux 标签 supplementalGroups:rule: MustRunAs # 必须以指定用户组运行 volumes:- configMap- downwardAPI- emptyDir- persistentVolumeClaim allowedUnsafeSysctls:- "kernel.msg*"forbiddenSysctls:- "net.ipv4.ip_forward"

在配置完 Pod 安全策略后,需要创建一个 ClusterRoleBinding 对象来将该安全策略绑定到 ServiceAccount 上:

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: psp-admin-binding
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRole name: psp-admin 
subjects:
- kind: ServiceAccount name: default namespace: default

这个例子中创建了一个名为 restrict-privilege 的 PodSecurityPolicy,并将其绑定到了默认的 ServiceAccount 上。这样,在使用该 ServiceAccount 创建 Pod 或 Deployment 时,就会自动应用这个安全策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/15922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇编语言基础知识

目录 前言: 汇编语言的产生 汇编语言的组成 内存 指令和数据 cpu对内存的读写操作 地址总线 数据总线 控制总线 内存地址空间 前言: 汇编语言是直接在硬件之上工作的 编程语言,我们首先了解硬件系统的机构,才能有效地应用…

C/C++多线程操作

文章目录 多线程C创建线程join 和detachthis_thread线程操作锁lock_guardunique_lock 条件变量 condition_variablewaitwaitfor C语言线程创建线程同步 参考 多线程 传统的C(C11标准之前)中并没有引入线程这个概念,在C11出来之前&#xff0c…

PyTorch Lightning教程四:超参数的使用

如果需要和命令行接口进行交互,可以使用Python中的argparse包,快捷方便,对于Lightning而言,可以利用它,在命令行窗口中,直接配置超参数等操作,但也可以使用LightningCLI的方法,更加轻…

WPF实战学习笔记22-添加自定义询问窗口

添加自定义询问窗口 详细代码&#xff1a;https://github.com/DongLiqiang/Mytodo/commit/221de6b2344d5c861f1d3b2fbb2480e3e3b35c26 添加自定义询问窗口显示方法 修改文件Mytodo.Extensions.DialogExtension 添加内容&#xff0c;类中添加内容 /// <summary> /// …

【编译】gcc make cmake Makefile CMakeList.txt 区别

文章目录 一 关系二 gcc2.1 编译过程2.2 编译参数2.3 静态库和动态库1 后缀名2 联系与区别 2.4 GDB 调试器1 常用命令 三 make、makefile四 cmake、cmakelist4.1 语法特性4.2 重要命令4.2 重要变量4.3 编译流程4.4 两种构建方式 五 Vscode5.0 常用快捷键5.1 界面5.2 插件5.3 .v…

使用 docker 一键部署 MySQL

目录 1. 前期准备 2. 导入镜像 3. 创建部署脚本文件 4. MySQL 服务器配置文件模板 5. 执行脚本创建容器 6. 后续工作 7. 基本维护 1. 前期准备 新部署前可以从仓库&#xff08;repository&#xff09;下载 MySQL 镜像&#xff0c;或者从已有部署中的镜像生成文件&#x…

Shell错误:/bin/bash^M: bad interpreter: No such file or directory

目录 错误原因和现象 解决方案 错误原因和现象 在执行shell脚本的时候&#xff0c;报错&#xff1a;/bin/bash^M: bad interpreter: No such file or directory。 是由于该脚本文件是在Windows平台编写&#xff0c;然后在MacOS平台中执行。 在Windows平台上文件是dos格式&…

STM32 SPI学习

SPI 串行外设设备接口&#xff08;Serial Peripheral Interface&#xff09;&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线。 SCK时钟信号由主机发出。 SPI接口主要应用在存储芯片。 SPI相关引脚&#xff1a;MOSI&#xff08;输出数据线&#xff…

C语言学习笔记---数组篇章

C语言程序设计笔记---011 C语言数组1、一维数组的创建和初识化2、数组的初识化3、一维数组的使用3.1、一维数组在内存中的存储 4、二维数组的创建和初识化4.1、二维数组的使用4.1.1、打印二维数组的元素例程 4.2、二维数组在内存中的存储4.3、数组越界4.3.1、数组越界例程 4.4、…

深入了解 LoRaWAN® MAC 命令

本文深入探讨了用于 LoRaWAN 网络管理的 MAC 命令。它面向终端设备软件开发人员和使用 LoRa 构建设备的团队经理,这些设备实现了LoRaWAN 链路层规范 v1.0.4。本文帮助您了解不同类型的 MAC 命令、每个命令的用途以及如何解释这些命令。 已经使用LoRaMAC-Node™等软件来处理 MA…

C# Blazor 学习笔记(2):组件模板化/插槽

文章目录 前言组件模板为什么要组件模板不使用组件模板使用后 代码部分 和直接绑定数据有和区别&#xff1f; 前言 组件模板化我们在WPF经常遇到&#xff0c;这里将一下Blazor是如何解决的。 组件模板 为什么要组件模板 虽然组件化了之后&#xff0c;我们写代码的速度已经很…

1.netty介绍

1.介绍 是JBOSS通过的java开源框架是异步的,基于事件驱动(点击一个按钮调用某个函数)的网络应用框架,高性能高可靠的网络IO程序基于TCP,面向客户端高并发应用/点对点大量数据持续传输的应用是NIO框架 (IO的一层层封装) TCP/IP->javaIO和网络编程–>NIO—>Netty 2.应用…

Linux 新硬盘分区,挂载

在Linux系统中&#xff0c;当你插入新的硬盘时&#xff0c;你需要进行一些步骤来使系统识别并使用它。以下是一些常见的步骤&#xff1a; 确保硬盘已正确连接到计算机。检查硬盘的电源和数据线是否牢固连接。 打开终端或命令行界面。 运行以下命令来扫描新硬盘&#xff1a; s…

性能测试必备监控技能windows篇

前言 在手头没有专门的第三方监控时&#xff0c;该怎么监控服务指标呢&#xff1f;本篇就windows下监控进行分享&#xff0c;也是我们在进行性能测试时&#xff0c;必须掌握的。下面我们就windows下常用的三种监视工具进行说明&#xff1a; 任务管理器 资源监视器 性能监视器…

找样机素材,就上这5个网站,免费下载~

设计师经常需要用到各种样机模型来展示直接的作品&#xff0c;今天我就分享几个可以免费下载样机模型的网站&#xff0c;大家赶紧收藏起来&#xff01; 菜鸟图库 https://www.sucai999.com/searchlist/3217.html?vNTYxMjky 菜鸟图库有多种类型的设计素材&#xff0c;像平面、…

Element-plus侧边栏踩坑

问题描述 el-menu直接嵌套el-menu-item菜单&#xff0c;折叠时不会出现文字显示和小箭头无法隐藏的问题&#xff0c;但是实际开发需求中难免需要把el-menu-item封装为组件 解决 vue3项目中嵌套两层template <template><template v-for"item in list" :k…

[ 容器 ] Docker 安全及日志管理

目录 Docker 容器与虚拟机的区别Docker 存在的安全问题Docker 架构缺陷与安全机制Docker 安全基线标准容器相关的常用安全配置方法限制流量流向镜像安全避免Docker 容器中信息泄露DockerClient 端与 DockerDaemon 的通信安全 容器的安全性问题的根源在于容器和宿主机共享内核。…

winform学习(1)------多窗口控制

在窗口中跳转到另外一个窗口&#xff0c;需要创建另外一个窗口的对象&#xff0c;然后通过窗口对象的show方法进行展示 这里展示了通过当前窗口的button按键来打开另外一个窗口 private void button1_Click(object sender, EventArgs e){Form2 form new Form2();form.Size n…

linux V4L2子系统——v4l2架构(1)之整体架构

概述 V4L&#xff08;Video for Linux&#xff09;是Linux内核中关于视频设备的API接口&#xff0c;涉及视频设备的音频和视频信息采集及处理、视频设备的控制。V4L出现于Linux内核2.1版本&#xff0c;经过修改bug和添加功能&#xff0c;Linux内核2.5版本推出了V4L2&#xff08…

MySQL主从复制及读写分离(三十四)

目录 MySQL主从复制 一、概述 1、MySQL Replication优点&#xff1a; 二、MySQL复制类型 1、异步复制&#xff08;Asynchronous repication&#xff09; 2、全同步复制&#xff08;Fully synchronous replication&#xff09; 3、半同步复制&#xff08;Semisynchronous…