热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实操教程丨使用Pod安全策略强化K8S安全

什么是Pod安全策略?

实操教程丨使用Pod安全策略强化K8S安全

实操教程丨使用Pod安全策略强化K8S安全

什么是Pod安全策略?

Kubernetes Pod安全策略(PSP)是Kubernetes安全版块中极为重要的组件。Pod安全策略是集群级别的资源,用于控制Pod安全相关选项,并且还是一种强化Kubernetes工作负载安全性的机制。Kubernetes平台团队或集群运维人员可以利用它来控制pod的创建以及限制特定的用户、组或应用程序可以使用的功能。

举个简单的例子,使用PSP你可以:

  • 防止特权Pod启动并控制特权升级。

  • 限制Pod可以访问的主机命名空间、网络和文件系统

  • 限制可以运行pod的用户/组。

  • 限制Pod可以访问的Volume

  • 限制其他参数,如运行时配置文件或只读根文件系统

在本文中,我们将向你展示在Rancher中如何通过启用一个简单的Pod安全策略来强化你的Kubernetes安全。

实操教程丨使用Pod安全策略强化K8S安全

Pod安全策略真的可以增强K8S的安全性吗?

是的,Pod安全策略确实可以增强Kubernetes的安全性。它提供了Kubernetes原生控制机制,可以防止威胁而不影响性能,这与agent必须拦截主机上的每个动作有所区别。

如果你尚未在集群中启用PSP(或执行访问控制之类的等效方法),则Kubernetes用户可能会生成特权集群。这将会被恶意利用,例如提升特权进而突破容器隔离并访问其他Pod/服务。

如果没有限制Pod spec特权的机制,攻击者可以通过 docker 命令执行任何操作,例如,运行特权容器、使用节点资源等。

想要快速验证以上说法,你可以执行以下脚本( 千万不要在生产集群上操作 ):

❯ ./kubectl-root-in-host.sh

bash-4.4# whoami

root

bash-4.4# hostname

sudo--alvaro-rancher-rancheragent-0-all

你可以获得对Kubernetes节点的即时root访问权限。是不是有点后怕呢?

通过遵循最小特权的概念,你可以安全地在集群中实现PSP,并确保在Kubernetes Pod或工作负载中没有不需要的权限。除了Kubernetes安全的核心理念外,最小特权原则也是一种通用的安全最佳实践,同时还是诸如PCI、SOC2或HIPAA等合规性标准的核心要求。

总结一下:

  • PSP将为Pod授予的安全功能提供默认安全约束,该pod可以是集群上任何用户创建的

  • PSP还能通过满足特定合规性基准的要求帮助你验证合规性

最小特权是一个概念,也是一个实践,可以将用户、账号和计算过程的访问权限限制为仅执行日常合法活动所需要的资源。

实操教程丨使用Pod安全策略强化K8S安全

在你的集群中启用Pod安全策略

在Kubernetes中Pod安全策略可以实现为Admission Controller。要在你的集群中启用PSP,确保 PodSecurityPolicyenable-admission-plugins 列表内,作为参数传递给你的Kubernetes API配置的参数:

--enable-admission-plugins=...,PodSecurityPolicy

提供托管Kubernetes集群(你无法直接访问API配置)的云提供商通常会提供高级设置,用户可以在整个集群范围内启用PSP。在其他情况下,你可能需要编辑/etc/kubernetes/manifests/kube-apiserver.yaml文件,并将其添加到相应的命令参数中。

在Rancher中,你可以在UI上编辑集群来轻松启用PSP:

实操教程丨使用Pod安全策略强化K8S安全

在Rancher中启用PSP

你可以选择默认应用哪个Pod安全策略。在本例中,我们选择了 restricted (受限)。

使用一个Admission controller来启用PSP的好处在于它提供了一个即时预防机制,甚至可以在调度之前停止部署过度特权的Pod。缺点就是你启用一个PSP之后,每个pod都需要经过PSP的批准,使其部署和过渡更加困难。

实操教程丨使用Pod安全策略强化K8S安全

Rancher中启用基本Pod安全策略demo

在这一部分中,我们将逐步演示如何通过Rancher dashboard在集群中启用Pod安全策略,并在默认情况下使用受限策略,并了解如何防止创建特权Pod。

PSP对象本身是将要应用于pod specs的要求和约束的列表。PSP YAML如下所示:

apiVersion: policy/v1beta1

kind: PodSecurityPolicy

metadata:

name: example

spec:

allowedCapabilities:

- NET_ADMIN

- IPC_LOCK

allowedHostPaths:

- pathPrefix: /dev

- pathPrefix: /run

- pathPrefix: /

fsGroup:

rule: RunAsAny

hostNetwork: true

seLinux:

rule: RunAsAny

supplementalGroups:

rule: RunAsAny

privileged: true

runAsUser:

rule: RunAsAny

volumes:

- hostPath

- secret

以上PSP有很多允许权限,例如:

  • 它允许pod可以与其他 Linux 功能(如NET_ADMIN和IPC_LOCK)一起运行

  • 它允许从主机安装敏感路径

  • Pod可以作为特权运行

浏览Kubernetes官方文档可以获取可用的PSP控件及其默认值的完整列表:

https://kubernetes.io/docs/concepts/policy/pod-security-policy/

让我们来看一个示例,说明如何防止特权Pod在集群中运行。

在集群中启用PSP之后,请尝试部署类似的pod:

deploy-not-privileged.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

labels:

app: not-privileged-deploy

name: not-privileged-deploy

spec:

replicas: 1

selector:

matchLabels:

app: not-privileged-deploy

template:

metadata:

labels:

app: not-privileged-deploy

spec:

containers:

- image: alpine

name: alpine

stdin: true

tty: true

securityContext:

runAsUser: 1000

runAsGroup: 1000

它可以立即使用,因为我们告诉Rancher启用具有受限安全策略的PSP,该策略允许没有特权的pod正常运行,像上面那样。

检查默认PSP中的内容,如下所示:

$ kubectl get psp restricted-psp -o yaml

apiVersion: policy/v1beta1

kind: PodSecurityPolicy

metadata:

annotations:

serviceaccount.cluster.cattle.io/pod-security: restricted

serviceaccount.cluster.cattle.io/pod-security-version: "1960"

creationTimestamp: "2020-03-04T19:56:10Z"

labels:

cattle.io/creator: norman

name: restricted-psp

resourceVersion: "2686"

selfLink: /apis/policy/v1beta1/podsecuritypolicies/restricted-psp

uid: 40957380-1d44-4e43-9333-91610e3fc079

spec:

allowPrivilegeEscalation: false

fsGroup:

ranges:

- max: 65535

min: 1

rule: MustRunAs

requiredDropCapabilities:

- ALL

runAsUser:

rule: RunAsAny

seLinux:

rule: RunAsAny

supplementalGroups:

ranges:

- max: 65535

min: 1

rule: MustRunAs

volumes:

- configMap

- emptyDir

- projected

- secret

- downwardAPI

- persistentVolumeClaim

或者在Rancher的全局视角检查。选择【安全>Pod安全策略】并点击 受限 的选项。

实操教程丨使用Pod安全策略强化K8S安全

在Rancher中检查Pod安全策略

该PSP应该允许任何pod,只要它以标准用户(不是root)身份运行,并且不需要任何特权和特殊功能。

有关PSP和RBAC的其他内容,我们将在以后进行探讨。为了简单起见,加上Rancher已经为你设置了必需的绑定,因此我们现在略过这一部分。让我们尝试部署一个特权pod,例如来自 kubectl-root-in-host.sh 脚本的那个pod:

deploy-privileged.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

labels:

app: privileged-deploy

name: privileged-deploy

spec:

replicas: 1

selector:

matchLabels:

app: privileged-deploy

template:

metadata:

labels:

app: privileged-deploy

spec:

containers:

- image: alpine

name: alpine

stdin: true

tty: true

securityContext:

privileged: true

hostPID: true

hostNetwork: true

该pod将不会进入集群

 Warning  FailedCreate  2s (x12 over 13s)  replicaset-controller  Error creating: pods "privileged-deploy-7569b9969d-" is forbidden: unable to validate against any pod security policy: [spec.securityContext.hostNetwork: Invalid value: true: Host network is not allowed to be used spec.securityContext.hostPID: Invalid value: true: Host PID is not allowed to be used spec.containers[0].securityContext.privileged: Invalid value: true: Privileged containers are not allowed]

PodSecurityPolicy admission controller将不允许创建这个pod,因为现有的PSP不允许使用“hostPID”、“hostNetwork” 或 “privileged”。

实操教程丨使用Pod安全策略强化K8S安全

总  结

在本文中我们通过在Rancher环境中启用一个简单的Pod安全策略来增强你的Kubernetes安全。通过使用默认的受限PSP,我们确保pod只能在不需要扩展安全权限的情况下运行。最后,我们尝试部署一个拥有众多权限的pod,并且失败了,因为现有的PSP阻止了它被调度到集群上。

Rancher Kubernetes平台拥有着超过一亿次下载量,我们深知安全问题对于用户而言的重要性。后期我们也将会推出更多与安全相关的内容,帮助Rancher用户安全、稳妥地落地Kubernetes。

实操教程丨使用Pod安全策略强化K8S安全

推荐阅读

TLS使用指南(一):如何在Rancher 2.x中进行TLS终止?

互联网金融企业的K8S实践:Istio+Rancher 2.3上手体验灰度发布

云原生资深专家:如何选择一个最佳微服务代理架构?

实操教程丨使用Pod安全策略强化K8S安全

About Rancher Labs

Rancher Labs由CloudStack之父梁胜创建。旗舰产品Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为2018年全球容器管理平台领导厂商,被Gartner评为2017年全球最酷的云基础设施供应商。

目前Rancher在全球拥有超过一亿的下载量,并拥有包括中国人寿、华为、中国平安、兴业银行、民生银行、平安证券、海航科技、厦门航空、上汽集团、海尔、米其林、丰田、本田、中船重工、中联重科、迪斯尼、IBM、Cisco、Nvidia、辉瑞制药、西门子、CCTV、中国联通等全球著名企业在内的共40000家企业客户。

实操教程丨使用Pod安全策略强化K8S安全

点击阅读原文,k3s周边生态大揭秘!

↓↓↓


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • 前言: 网上搭建k8s的文章很多,但很多都无法按其说明在阿里云ecs服务器成功搭建,所以我就花了些时间基于自己成功搭建k8s的步骤写了个操作手册,希望对想搭建k8s环境的盆友有所帮 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 本文将详细介绍如何在Mac上安装Jupyter Notebook,并提供一些常见的问题解决方法。通过这些步骤,您将能够顺利地在Mac上运行Jupyter Notebook。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 在Kubernetes上部署多个Mitmproxy代理服务器以实现高效流量管理 ... [详细]
  • Android目录遍历工具 | AppCrawler自动化测试进阶(第二部分):个性化配置详解
    终于迎来了“足不出户也能为社会贡献力量”的时刻,但有追求的测试工程师绝不会让自己的生活变得乏味。与其在家消磨时光,不如利用这段时间深入研究和提升自己的技术能力,特别是对AppCrawler自动化测试工具的个性化配置进行详细探索。这不仅能够提高测试效率,还能为项目带来更多的价值。 ... [详细]
  • EST:西湖大学鞠峰组污水厂病原菌与土著反硝化细菌是多重抗生素耐药基因的活跃表达者...
    点击蓝字关注我们编译:祝新宇校稿:鞠峰、袁凌论文ID原名:PathogenicandIndigenousDenitrifyingBacte ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • Envoy 流量分配策略优化
    在本研究中,我们对Envoy的流量分配策略进行了优化,旨在提高系统的稳定性和性能。实验环境包括一个前端代理服务(Envoy,IP地址为172.31.57.10)和五个后端服务。通过调整Envoy的配置,实现了更高效的流量分发和负载均衡,显著提升了整体系统的响应速度和可靠性。 ... [详细]
author-avatar
weidnermennenga_153
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有