第一步PodSecurityPolicy(简称PSP):Kubernetes中Pod部署时重要的安全校验手段,能够
有效地约束应用运行时行为安全。
使用PSP对象定义一组Pod在运行时必须遵循的条件及相关字段的默认值,只有Pod满足这
些条件才会被K8s接受。(在部署的时候去校验的,在运行的时候是不管的,当你创建podd的时候会去校验)

Pod安全策略限制维度


Pod安全策略限制维度:

在之前的行为在yaml里面写一些安全配置都是有意识的去选择,如果k8s集群是别人使用的较多,但是又想约束某些行为,这时候可以使用psp,强制约束在Pod里面某些行为,要不然不允许pod运行。

Pod安全策略实现为一个准入控制器,默认没有启用,当启用后会强制实施Pod安全策略,没有满足的Pod将无法创建。因此,建议在启用PSP之前先添加策略并对其授权。

[root@master ~]# vim /etc/kubernetes/manifests/kube-apiserver.yaml- --enable-admission-plugins=NodeRestriction,PodSecurityPolicy[root@master ~]# systemctl restart kubelet

用户使用SA (ServiceAccount)创建了一个Pod,K8s会先验证这个SA是否可以访问PSP资源权限,如果可以进一步验证Pod配置是否满足PSP规则,任意一步不满足都会拒绝部署。(第一步就是让pod可以有PSP的访问权限

因此,需要实施需要有这几点:(注意PSP是一个准入控制插件)
• 创建SA服务账号
• 该SA需要具备创建对应资源权限,例如创建Pod、Deployment
• SA使用PSP资源权限:创建Role,使用PSP资源权限,再将SA绑定Role(多了一步)

在启用了准入控制器PSP,那么以后所有的Pod就需要经过PSP,但是现在PSP里面任何策略,那么所有的行为都是拒绝的。只有添加策略,符合策略的Pod才可以创建。所以在启用PSP之前可以先写好PSP的策略,应用上,以免PSP启用之后不能创建Pod。

[root@master ~]# kubectl run nginx1 --image=nginx
Error from server (Forbidden): pods "nginx1" is forbidden: no providers available to validate pod request

现在我这个策略是一个比较宽泛的范围,所以pod满足这些规则可以正常创建

[root@master ~]# cat psp.yaml
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:name: example
spec:seLinux:rule: RunAsAnysupplementalGroups:rule: RunAsAnyrunAsUser:rule: RunAsAnyfsGroup:rule: RunAsAnyvolumes:- '*'[root@master ~]# kubectl apply -f psp.yaml
podsecuritypolicy.policy/example created
[root@master ~]# kubectl get psp
NAME      PRIV    CAPS   SELINUX    RUNASUSER   FSGROUP    SUPGROUP   READONLYROOTFS   VOLUMES
example   false          RunAsAny   RunAsAny    RunAsAny   RunAsAny   false            *
[root@master ~]# kubectl run nginx1 --image=nginx
pod/nginx1 created

默认情况下容器都不是以特权模式运行

[root@master ~]# vim psp.yaml
spec:privileged: falseseLinux:rule: RunAsAny
........................................................[root@master ~]# kubectl apply -f psp.yaml
podsecuritypolicy.policy/example configured
[root@master ~]# kubectl get psp
NAME      PRIV    CAPS   SELINUX    RUNASUSER   FSGROUP    SUPGROUP   READONLYROOTFS   VOLUMES
example   false          RunAsAny   RunAsAny    RunAsAny   RunAsAny   false            *
[root@master ~]# kubectl run nginx2 --image=nginx
pod/nginx2 created

拒绝带有特权模式的Pod去创建,注意特权是针对容器的,需要在容器下面配置。

默认我们使用kubelete操作的时候是特权账号,使用普通账号,还涉及到授权。(特权账号是具有访问psp的能力,所以说不需要授权了,普通账号需要格外的授权)

[root@master ~]# vim sidecar.yaml
[root@master ~]# kubectl apply -f sidecar.yaml
Error from server (Forbidden): error when creating "sidecar.yaml": pods "web-server" is forbidden: unable to validate against any pod security policy: [spec.containers[0].securityContext.privileged: Invalid value: true: Privileged containers are not allowed]
[root@master ~]# cat sidecar.yaml
apiVersion: v1
kind: Pod
metadata:name: web-servernamespace: default
spec:containers:- name: nginximage: nginxsecurityContext:privileged: true

普通账号测试,可以看到内置的权限组的权限比较大,但是你会看到我启动的pod是不具有特权模式的pod,为什么还会提示错误

[root@master ~]# kubectl create rolebinding psp --clusterrole=edit --serviceaccount=default:psp
rolebinding.rbac.authorization.k8s.io/psp created#--as=system:serviceaccount这个是固定的格式,后面是来判断sa是否具有相关的权限
[root@master ~]# kubectl --as=system:serviceaccount:default:psp get pod
NAME                                     READY   STATUS    RESTARTS   AGE
front-end-7899dbb4cf-kkbg4               1/1     Running   0          3d20h
front-end-7899dbb4cf-np6kv               1/1     Running   0          3d20h
front-end-7899dbb4cf-qns4b               1/1     Running   0          3d20h
front-end-7899dbb4cf-sslgc               1/1     Running   0          3d20h
front-end-7899dbb4cf-tb9gr               1/1     Running   0          3d20h
nfs-client-provisioner-cb667d665-zh6b4   1/1     Running   10         9d
nginx1                                   1/1     Running   0          21h
nginx2                                   1/1     Running   0          21h
tst                                      1/1     Running   0          4d13h[root@master ~]# kubectl --as=system:serviceaccount:default:psp get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
front-end    NodePort    10.233.53.49   <none>        80:32012/TCP   3d13h
kubernetes   ClusterIP   10.233.0.1     <none>        443/TCP        51d[root@master ~]# kubectl --as=system:serviceaccount:default:psp run nginx3 --image=nginx
Error from server (Forbidden): pods "nginx3" is forbidden: unable to validate against any pod security policy: []

可以看到psp也不能访问,所以需要授权让其有访问psp的权限

[root@master ~]# kubectl --as=system:serviceaccount:default:psp get psp
Error from server (Forbidden): podsecuritypolicies.policy is forbidden: User "system:serviceaccount:default:psp" cannot list resource "podsecuritypolicies" in API group "policy" at the cluster scope
[root@master ~]# kubectl create role psp --verb=use --resource=podsecuritypolicies --resource-name=psp -n default
role.rbac.authorization.k8s.io/psp created[root@master ~]# kubectl create rolebinding psp --role=psp --serviceaccount=default:psp -n default
rolebinding.rbac.authorization.k8s.io/psp created

Kubernetes 系统强化 Pod安全策略 PSP相关推荐

  1. 如何从 Kubernetes Pod 安全策略 (PSP) 迁移到 Kyverno

    自诞生以来,Kubernetes 一直是需要在微服务架构上实现可扩展容器化应用程序的企业的首选容器编排解决方案.它本质上将 Pod 作为最基本的单元来处理,它可以容纳一个或多个容器.由于 Kubern ...

  2. Kubernetes 中的 Pod 安全策略

    很多人分不清 SecurityContext 和 PodSecurityPolicy 这两个关键字的差别,其实很简单: •SecurityContext 是 Pod 中的一个字段,而 PSP 是一个独 ...

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

    什么是Pod安全策略? Kubernetes Pod安全策略(PSP)是Kubernetes安全版块中极为重要的组件.Pod安全策略是集群级别的资源,用于控制Pod安全相关选项,并且还是一种强化Kub ...

  4. 为 Kubernetes 集群启用 Pod 安全策略

    最近有客户反馈在开启了安全策略的集群中部署产品失败,因此研究了一下 Kubernetes 提供的 pod 安全策略. 文中的演示和示例均在 v1.18.17 集群中通过验证. Pod Security ...

  5. kubernetes CKS 4.3 Pod安全策略(PSP)

    4.3.1 简述 PodSecurityPolicy(简称PSP):Kubernetes中Pod部署时重要的安全校验手段,能够 有效地约束应用运行时行为安全. 使用PSP对象定义一组Pod在运行时必须 ...

  6. Linux企业运维——Kubernetes(十四)PSP安全策略

    Linux企业运维--Kubernetes(十四)PSP安全策略 文章目录 Linux企业运维--Kubernetes(十四)PSP安全策略 一.PSP安全策略简介 二.PSP安全策略配置 一.PSP ...

  7. 容器编排技术 -- Pod 安全策略

    容器编排技术 -- Pod 安全策略 1 什么是 Pod 安全策略? 1.1 RunAsUser 1.2 SELinux 1.3 SupplementalGroups 1.4 FSGroup 1.5  ...

  8. kubernetes安全:RBAC,Security Context,PSP,准入控制器

    文章目录 RBAC 权限控制前言 API 对象 RBAC 只能访问某个 namespace 的普通用户 创建用户凭证 创建角色 创建角色权限绑定 测试 只能访问某个 namespace 的 Servi ...

  9. Kubernetes——Kubernetes系统组件与架构

    摘要 Kubernetes 是谷歌开源的分布式容器编排和资源管理系统.从 2014 年发布至今,已经成为 GitHub 社区中最炙手可热的开源项目.因为以 K8s 为核心的云原生技术已经成为业界企业数 ...

  10. Kubernetes 中创建 Pod 时集群中到底发生了些什么?

    想象一下,如果我想将 nginx 部署到 Kubernetes 集群,我可能会在终端中输入类似这样的命令: $ kubectl run --image=nginx --replicas=3 然后回车. ...

最新文章

  1. 从SQL Server CloudDBA 看云数据库智能化
  2. BZOJ3992[SDOI2015]序列统计
  3. 交换机组网典型故障案例及处理思路
  4. 构想:中文文本标注工具(内附多个开源文本标注工具)
  5. 【Java】switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上
  6. vs2008中combox用法总结
  7. linux 文件按照大小排列
  8. 《netty实战》阅读笔记(2)——Netty 的数据容器ByteBuf
  9. 【英语学习】【Daily English】U02 Daily Routine L03 Tuesday night is curry night
  10. 手势UIGestureRecognizer
  11. Spring从Bean获取的实例从单例变成多例(IOC依赖注入)
  12. CREELINKS平台_处理器CeAd资源使用说明(CeAd的配置与使用)
  13. MySQL安全***实战指南之体系结构篇
  14. 推介英特尔® 黑带软件开发人员!
  15. 2021爱分析·中国房企数字化实践报告
  16. 学习编译原理的总结1
  17. 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大经典原创系列集锦与总结
  18. 微信小程序:修改单选radio大小样式
  19. Casio DT930扫描软件
  20. 【搞定工作】无惧尾款,打工就要来这里!

热门文章

  1. 【C语言】科学计数法——复习总结
  2. 基于单片机花式喷泉喷水池控制系统设计-单片机的简易电子钟加闹钟设计-51单片机车汽车流量检测电路系统-51单片机超声波三方向测距系统设计-基于51单片机超声波水位液位控制系统毕业设计
  3. 换IP软件能保证我们的网络安全吗
  4. 值得尝试的 MQTT 客户端工具
  5. [GIS原理] 10.1 空间统计描述(描述性分析、探索性数据分析)、空间自相关分析 - QQ图、权重矩阵、Moran'sl、G统计量
  6. axure通用元件库 Pc、Web端原型图组件库高保真UI rp源文件
  7. 1900型USB接口扫描枪设置虚拟串口模式提升扫描速度
  8. 由ContactsProvider的升级引发的OTA首次开机卡白米问题分析
  9. 考勤统计,一张表查询每月的员工考勤数据
  10. 理工科专业精品书系列