Dapr 集成 Open Policy Agent 實現 接口的訪問控制

大型項目中基本都包含有復雜的訪問控制策略,特別是在一些多租戶場景中,例如Kubernetes中就支持RBAC,ABAC等多種授權類型。Dapr 的 中間件 Open Policy Agent 將Rego/OPA策略應用到傳入的Dapr HTTP請求中。

Open Policy Agent

Open Policy Agent(簡稱OPA)是一個開源的策略引擎,托管于CNCF,通常用來做在微服務、API網關、Kubernetes、CI/CD等系統中做策略管理。

OPA將策略從代碼中分離出來,按照官網的說法OPA實現了策略即代碼,通過Rego聲明式語言實現決策邏輯,當系統需要做出策略時,只需攜帶請求查詢OPA即可,OPA會返回決策結果。

e0407343d3a642bdb00c3263689df942.png

OPA 通過評估查詢輸入并對照策略和數據來生成決策。OPA 和 Rego 是不分領域的,所以你可以在策略中描述幾乎任何事件。比如:

  • 哪些用戶可以訪問哪些資源。

  • 哪些子網允許出口流量進入。

  • 工作負載必須部署到哪個集群。

  • 哪些注冊表可以下載二進制文件。

  • 容器可以用哪些操作系統的能力來執行。

  • 系統在一天中的哪些時間可以被訪問。

  • 政策決定不限于簡單的是/否或允許/拒絕的答案。像查詢輸入一樣,你的策略可以生成任意的結構化數據作為輸出。

OPA 的策略可以用 Rego 編寫,這是一種專門為 OPA 設計的語言。類似于 JavaScript,OPA 使其非常容易將規則轉換為有效的 OPA 策略。

那么我們為什么需要OPA?

大型軟件中各個組件都需要進行一些策略控制,比如用戶權限校驗、創建資源校驗、某個時間段允許訪問,如果每個組件都需要實現一套策略控制,那么彼此之間會不統一,維護困難。一個自然的想法是能否將這些策略邏輯抽離出來,形成一個單獨的服務,同時這個服務可能需要提供各種不同sdk來屏蔽語言差異。

OPA正是解決這個問題,將散落在系統各處的策略進行統一,所有服務直接請求OPA即可。通過引入OPA可以降低系統耦合性,減少維護復雜度。

Http API中使用OPA授權

我們在Dapr 實現的Http服務中 引入OPA來實現Http API授權。示例代碼見:https://github.com/geffzhang/dapr-opa-test, 這將導致 foo 服務在調用服務bar-service的方法,該方法被為bar-service配置的 OPA 策略阻止

首先需要實現策略,拒絕所有訪問HTTP 請求,通過Rego實現如下:

apiVersion: dapr.io/v1alpha1

kind: Component

metadata:

name: poc-opa

spec:

type: middleware.http.opa

version: v1

metadata:

??? - name: rego

value: |

??????? package http

??????? default allow = false

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282580.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Java】BigDecimal

一、前言 在使用Java,double 進行運算時,經常出現精度丟失的問題,總是在一個正確的結果左右偏0.0000**1。 特別在實際項目中,通過一個公式校驗該值是否大于0,如果大于0我們會做一件事情,小于0我們又處理其他…

PHP獲取當前頁面URL

//獲取頁面url function curPageURL() {$pageURL http;if (!empty($_SERVER[HTTPS])) {$pageURL . "s";}$pageURL . "://";if ($_SERVER["SERVER_PORT"] ! "80") {$pageURL . $_SERVER["SERVER_NAME"].":".$_SER…

【招聘(大連)】北森云計算 .NET 專場招聘

為了更好的實現戰略布局,逐步形成以三個產品研發中心(北京、成都、大連)為主,青島和南京為輔的產品研發團隊配置。北森云第三研發中心(大連)正式成立,目前大連的人選招聘正式開啟,歡…

PHP強制下載文件

//有時我們不想讓瀏覽器直接打開文件,如PDF文件,而是要直接下載文件,那么以下函數可以強制下載文件 //函數中使用了application/octet-stream頭類型。 function downloads($filename,$dir./) {$filepath $dir.$filename;if (!file_exists($f…

F5基于證書認證的客戶端登錄

1.生成密鑰RSA類型,密碼:123456保存為Openssl格式2.上傳客戶機SecureCRT生成的公鑰 Identity.pub到用戶home目錄下.ssh文件夾中cd .sshmv Identity.pub authorized_keys ##cat .ssh/id_rsa.pub >> ~/.ssh/authorized_keys3.更改F5 ssh配置文件tmsh…

C#多線程編程-必知必會

“發現問題的能力,運用技術解決問題的能力,是一個技術人成長的關鍵”圖片故事:洋姜的花,拍攝于2022年7月23日,地點:北京奧林匹克森林公園 ,攝影師:劉先生概要:使用C#發起…

理解Go Interface

理解Go Interface1 概述Go語言中的接口很特別,而且提供了難以置信的一系列靈活性和抽象性。接口是一個自定義類型,它是一組方法的集合,要有方法為接口類型就被認為是該接口。從定義上來看,接口有兩個特點:接口本質是一種自定義類型…

『中級篇』Dockerfile詳解(17)

一般的&#xff0c;Dockerfile 分為四部分&#xff1a;基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執行指令。 ####官網學習 https://docs.docker.com/engine/reference/builder/#usage ####FROM 必須為第一個命令&#xff0c;指定基礎鏡像 FROM <image> FROM &…

洛谷 1165日志分析

題目描述 M 海運公司最近要對旗下倉庫的貨物進出情況進行統計。目前他們所擁有的唯一記錄就是一個記錄集裝箱進出情況的日志。該日志記錄了兩類操作&#xff1a;第一類操作為集裝箱入庫操作&#xff0c;以及該次入庫的集裝箱重量&#xff1b;第二類操作為集裝箱的出庫操作。這些…

KestrelServer詳解[1]:注冊監聽終結點(Endpoint)

具有跨平臺能力的KestrelServer是最重要的服務器類型。針對KestrelServer的設置均體現在KestrelServerOptions配置選項上&#xff0c;注冊的終結點是它承載的最重要的配置選項。這里所謂的終結點&#xff08;Endpoint&#xff09;與“路由”介紹的終結點不是一回事&#xff0c;…

php截取字符串,帶中文,多余的省略號代替

function subtext($text, $length) {if(mb_strlen($text, utf8) > $length) {return mb_substr($text, 0, $length, utf8)....;} else {return $text;}}$str 我們是family happy family; echo subtext($str,5); //我們是fa...

數據庫添加

<body><form action"herozhuce.php" method"post"> <div>賬號<input type"text" name"account"/></div> <div>密碼<input type"text" name"password"/></div> &…

快來加入阿里云大學【云學院】班級助理招募—機會稍縱即逝,錯過遙遙無期!...

2019獨角獸企業重金招聘Python工程師標準>>> 如果你對云計算、大數據、云安全、人工智能領域感興趣~ 如果你想從事與此相關的工作~~ 如果你又喜歡邊交流邊學習的方式~ 那么&#xff0c;加入我們吧&#xff01; 我們將為你提供一個廣闊的平臺&#xff0c;讓你接觸到云…

深入理解ajax系列第五篇——進度事件

前面的話 一般地&#xff0c;使用readystatechange事件探測HTTP請求的完成。XHR2規范草案定義了進度事件Progress Events規范&#xff0c;XMLHttpRequest對象在請求的不同階段觸發不同類型的事件&#xff0c;所以它不再需要檢査readyState屬性。這個草案定義了與客戶端服務器通…

對象(poco)深度克隆

提供深度克隆對象功能,基于編譯表達式實現&#xff0c;性能與原生代碼幾無差別&#xff0c;遠超 json/binary 序列化實現。1. 簡單示例class Person {public int Id { get; set; }public string Name { get; set; }public int Age { get; set; }public DateTime Birth { get; s…

php將數字轉化為中文大寫人民幣格式

<?phpfunction cny($ns) {static $cnums array("零","壹","貳","叁","肆","伍","陸","柒","捌","玖"),$cnyunits array("圓","角","分&…

BZOJ1787 [Ahoi2008]Meet 緊急集合 LCA

歡迎訪問~原文出處——博客園-zhouzhendong 去博客園看該題解 題目傳送門 - BZOJ1787 題意概括 有一棵節點為n個(n≤500000)的樹。接下來m次詢問(m≤500000)&#xff0c;每次給出3個點 a,b,c &#xff0c;現在讓你求一個點 p &#xff0c;使得 dis(p,a) dis(p,b) dis(p,c) 最…

Linux之ACL權限控制

ACL權限控制主要目的是提供傳統的owner,group,other的read,wirte,execute權限之外的具體權限設置&#xff0c;可以針對單一用戶或組來設置特定的權限 設置ACL權限&#xff1a;setfacl查看ACL權限&#xff1a;getfacl 比如&#xff1a;某一目錄權限為 drwx------ 2 root root 40…

WIX、Squarespace、WordPress 三者的優劣分別是什么?

層出不窮的智能建站&#xff0c;模板建站&#xff0c;源碼建站&#xff0c;云建站&#xff0c;仿站&#xff0c;各種建站概念都拋灑于紅海之中。到底什么樣的網站適合自己&#xff0c;什么樣的網站值得我們去消費&#xff0c;什么樣的網站能長久&#xff0c;是個非常值得思考的…

平滑的加權輪詢均衡算法

前言在反向代理、路由、分布式應用調度等場景中通常都需要用到負載均衡算法&#xff0c;負載均衡的關鍵要點是“均衡”&#xff0c;即確保調用請求能均衡地落到多個處理節點上&#xff0c;負載均衡算法一般使用隨機或輪詢都可以保證均衡性。現實中由于服務器性能或資源分配的差…