OPA 鉴权

article/2025/9/24 1:24:30
Gatekeeper 是基于 OPA的一个 Kubernetes 策略解决方案,可替代PSP或者部分RBAC功能。
当在集群中部署了Gatekeeper组件,APIServer所有的创建、更新或者删除操作都会触发
Gatekeeper来处理,如果不满足策略则拒绝
OPA(Open Policy Agent): 是一个开源的、通用策略引擎,可以将策略编写为代码。提供
一个种高级声明性语言-Rego来编写策略,并把决策这一步骤从复杂的业务逻辑中解耦出来。
OPA可以用来做什么?
拒绝不符合条件的YAML部署
允许使用哪些仓库中的镜像
允许在哪个时间段访问系统

 

部署Gatekeeper:
kubectl apply -f https://raw.githubusercontent.com/open-policy
agent/gatekeeper/release-3.7/deploy/gatekeeper.yaml
Gatekeeper的策略由两个资源对象组成:
Template:策略逻辑实现的地方,使用rego语言
Contsraint:负责Kubernetes资源对象的过滤或者为Template提供输入参数
案例1:禁止容器启用特权
第一步,需要删除psp
vi /etc/kubernetes/manifests/kube-apiserver.yaml
...
- --enable-admission-plugins=NodeRestriction
...
systemctl restart kubelet
网站地址: https://open-policy-agent.github.io/gatekeeper/website/docs/install/
下载部署:kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/release-3.7/deploy/gatekeeper.yaml
模板
[root@k8s-master opa]# cat privileged_tpl.yaml 
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:name: privileged 
spec:crd:spec:names:kind: privilegedtargets:- target: admission.k8s.gatekeeper.shrego: |package admissionviolation[{"msg": msg}] {  # 如果violation为true说明违反约束containers = input.review.object.spec.template.spec.containersc_name := containers[0].namecontainers[0].securityContext.privileged # 如果返回false或者没获取到值说明通过msg := sprintf("提示:'%v'容器禁止启用特权!",[c_name])}约束
[root@k8s-master opa]# cat privileged_constraints.yaml 
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: privileged
metadata:name: privileged
spec:match:  # 匹配的资源kinds:- apiGroups: ["apps"]kinds:- "Deployment"- "DaemonSet"- "StatefulSet"查看
[root@k8s-master opa]# kubectl get constraints
NAME         AGE
privileged   25s[root@k8s-master opa]# kubectl get ConstraintTemplate
NAME         AGE
privileged   118s
[root@k8s-master opa]# cat T_deplyment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: nginxname: nginx
spec:replicas: 1selector:matchLabels:app: nginxstrategy: {}template:metadata:creationTimestamp: nulllabels:app: nginxspec:containers:- image: nginxname: nginxsecurityContext:privileged: trueports:- containerPort: 80resources: {}
status: {}

 

 

案例:只允许使用特定的镜像仓库

[root@k8s-master opa]# cat image-check_tpl.yaml 
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:name: image-check
spec:crd:spec:names:kind: image-checkvalidation:openAPIV3Schema: properties:  # 需要满足条件的参数prefix:type: stringtargets:- target: admission.k8s.gatekeeper.shrego: |package imageviolation[{"msg": msg}] { containers = input.review.object.spec.template.spec.containersimage := containers[0].imagenot startswith(image, input.parameters.prefix)msg := sprintf("提示:'%v'镜像地址不在可信任仓库!", [image])}[root@k8s-master opa]# cat image-check_constraints.yaml 
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: image-check
metadata:name: image-check
spec:match:kinds:- apiGroups: ["apps"] kinds:- "Deployment"- "DaemonSet"- "StatefulSet"parameters:  # 传递给opa的参数prefix: "lizhenliang/"


http://chatgpt.dhexx.cn/article/Rb1ImLED.shtml

相关文章

SAP ui5 单元测试框架 - OPA

Sent: Monday, July 4, 2016 6:41 PM 本地eclipse复现错误的步骤如下: 修改cus.crm.lead项目的pom.xml的参数如下: 1.10.0-SNAPSHOT -> 2.0.0-SNAPSHOT1.6.14 -> 1.11.0 然后,maven install 一下,run on server. 访问: localhost:8080/cus.crm.l…

81. 采用 OPA5 进行 SAP UI5 集成测试(Integration Test)的一个例子

SAP UI5 应用开发教程之八十一 - 采用 OPA5 进行 SAP UI5 集成测试(Integration Test)的一个例子 本教程之前第 28 个步骤曾经介绍过使用 OPA5 进行 SAP UI5 集成测试的知识。 SAP UI5 应用开发教程之二十八 - SAP UI5 应用的集成测试工具 OPA 介绍 本文通过一个实际的例子来…

82. 采用 OPA5 开发支持页面跳转的 SAP UI5 集成测试用例

SAP UI5 应用开发教程之八十二 - 采用 OPA5 开发支持页面跳转的 SAP UI5 集成测试用例 本教程的前一步骤,我们介绍了如何使用 OPA5 对一个包含表格控件的 SAP UI5 视图进行集成测试,即通过代码的方式,点击表格控件底部的 More 按钮,测试其是否按照我们期望的那样,加载更多…

SAP UI5 应用开发教程之八十二 - 采用 OPA5 开发支持页面跳转的 SAP UI5 集成测试用例试读版

一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP UI5 的引导过程 Bootstrap SAP UI5 应用开发教程之三:开始接触第一个 SAP UI5 控…

SAP UI5 应用开发教程之八十一 - 采用 OPA5 进行 SAP UI5 集成测试(Integration Test)的一个例子试读版

一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP UI5 的引导过程 Bootstrap SAP UI5 应用开发教程之三:开始接触第一个 SAP UI5 控…

SAP UI5 应用开发教程之八十五 - 如何用 OPA5 编写测试用例来测试用户输入文本的功能试读版

一套适合 SAP UI5 初学者循序渐进的学习教程 作者简介 Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。Jerry 是 SAP 社区导师,SAP 中国技术大使。在长达 15 年的 SAP 标准产品开发生涯里,Jerry 曾经先…

85. 如何用 OPA5 编写测试用例来测试用户输入文本的功能

SAP UI5 应用开发教程之八十五 - 如何用 OPA5 编写测试用例来测试用户输入文本的功能 本教程之前的系列文章,我们已经学习了如何在测试用例里,用代码的方式,来模拟用户点击 SAP UI5 表格控件的 More 按钮: SAP UI5 应用开发教程之八十一 - 采用 OPA5 进行 SAP UI5 集成测…

java实习生面试被问的较多的面试题(附参考答案)

1.集合有哪些子类?各自的数据结构?有什么区别? 注:HashSet底层采用HashMap实现,TreeSet底层采用TreeMap实现 2.Hashmap如何解决哈希冲突?与HashTable有何不同? hash : 翻译为“散列”&#xff…

10道经典java面试题_实习生必问(java基础)

10道经典java面试题_实习生必问(java基础) 第一,谈谈final, finally, finalize的区别。 final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因…

2020 java实习生面试题总结

2020java实习面试题总结: 本人是广州某高校大四的一名学生,下面是12月份的面试总结 一)hr的提问: 1.自我介绍(必须的) HR的关注点: 例子: 本人就读于xxx学校,xxx专业…

java实习生面试题_java实习生面试题大全(2019年整理)

java实习生面试题大全(2019年整理) 标准SQL语法及语句 一道关于group bySQL 语句面试题 表中有A B C 三列,用SQL 语句实现:当A 列大于B 列时选择A 列否则选择B 列,当B列大于C列时 选择B 列否则选择C 列 请用一条sql 语句查询出这三条记录并按以下条件显示…

java实习生面试题_java实习生面试题(含答案)

1.Java容器框架有哪些? Java容器框架中有两个名称分别为Collection和Set的接口 2.list,map,set,array,它们有什么区别 (推荐学习:java实习生面试题) List接口主要有三个实现类:LinkedList,ArrayList,Vector. LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本…

java实习生面试题

文章目录 一、数据结构与算法1)、数据结构2)、算法1. 排序2. 查找 二、java基础线程java基础 and equals() 1)、创建和启用多线程1.多线程安全的类 2)、死锁3)、避免(预防)和解决死锁1.死锁预防2.解决方法 三、Mysql优…

20道Java实习生笔试面试选择题(内附答案解析)

1、以下对继承的描述错误的是(A) A.Java中的继承允许一个子类继承多个父类 B.父类更具有通用性,子类更具体 C.Java中的继承存在的传递性 D.当实例化子类时会递归调用父类中的构造方法 解析:众所周知,JAVA类只支持…

Java实习生面试题汇总

Java实习生面试题汇总 简介 本人是二本大三学生,下半年大四。暑假在上海这边找实习工作,面了几家公司,所问到的问题记录在下面。 因为是在校生,没任何实习经历,一般找我面试的都是小公司,一般问的比较简…

java实习面试题整理

java实习面试题整理 1.栈(stack)和堆(heap)的区别1.和equals的区别1.throw和throws的区别1.cookie 和session 的区别1.final, finally, finalize的区别1.什么是多态1.接口的概念与特性1.内部类的概念与优点1.Static关键字1.This和…

【2022版】Dubbo面试题整理(含答案解析)

1、为什么要用 Dubbo? 随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、…

Dubbo 面试题及答案

文章目录 1.Dubbo是什么?2.为什么要用Dubbo?3.Dubbo 和 Dubbox 有什么区别?4.Dubbo 停止维护了吗?5.你读过 Dubbo 的源码吗?6.在使用过程中都遇到了些什么问题?7.Dubbo和SpringCloud的区别?spri…

史上最全40道Dubbo面试题及答案

其实关于Dubbo的面试题,我觉得最好的文档应该还是官网,因为官网有中文版,照顾了很多阅读英文文档吃力的小伙伴。但是官网内容挺多的,于是这里就结合官网和平时面试被问的相对较多的题目整理了一下。 1,说说一次Dubbo服…

2020 Dubbo面试题大全

Java面试总结汇总,整理了包括Java基础知识,集合容器,并发编程,JVM,常用开源框架Spring,MyBatis,数据库,中间件等,包含了作为一个Java工程师在面试中需要用到或者可能用到…