Rego Playground:新特性

作者:Torin Sandall

去年這個時候,我們推出了Rego遊樂場(Rego Playground)。遊樂場提供了一個在線交互環境,用戶可以在這裡試驗和共享OPA策略。

今天,我們很興奮地發佈了一些新特性,將幫助新用戶更快地使用OPA。讓我們看看。

特性:Kubernetes、Envoy和更多的例子

任何設計用戶界面(或者任何軟件項目/產品)的人可能都很熟悉「白板」問題:所有的設計都假定系統裝載了數據。但是,當新用戶到達時,數據不存在,系統感覺是空的。

自從OPA出現以來,我們一直致力於提供詳細的文檔,以便新用戶(a)能夠查看某些內容,(b)能夠確定OPA是否能夠解決他們的問題。當然,這是假設人們希望(或有時間)閱讀文檔!也不是完全沒人有時間這麼做。

我們並沒有試圖告訴每個人都去RTFM,而是決定為遊樂場預加載一個常見用例的示例目錄,比如Kubernetes准入控制、Envoy做API的授權等等:

目錄可以搜索和過濾。隨着時間的推移,我們計劃繼續整理目錄,以確保它們在策略語言中展示通用的用例和模式。

特性:用OPA包做試驗

當你編寫了幾個策略或修改了現有的策略,接下來你通常希望看到的是如何部署OPA並將策略分發給OPA。

OPA支持一個稱為包「bundle」的特性,支持策略發現和分發。包只是包含策略和數據文件的壓縮tar包。當bundle被啟用時,OPA不斷嘗試下載和激活控制其決策制定的最新版本的策略和數據。捆綁包被設計為CDN兼容,因此策略分發可以很容易地擴展。你所要做的就是設置一個webserver來託管你的包(或依賴於AWS S3之類的服務),然而,這通常比人們想要做的工作要多。

為了幫助用戶使用捆綁包啟動和運行,我們擴展了遊樂場,將發佈的策略作為捆綁包提供。你所要做的就是點擊發佈「Publish」。

當你發佈了你的策略,遊樂場將顯示以下步驟:

  • 下載並在本地運行OPA
  • 配置OPA以使用你發佈的策略
  • 使用來自遊樂場的輸入測試策略

從同一瀏覽器窗口發佈的對策略的任何編輯都將傳播到配置為使用遊樂場包的OPA。這使你可以使用OPA的動態策略更新功能(也稱為「熱重新加載」)。

特性:改進了對上下文感知策略的支持

當軟件系統為策略決策查詢OPA時,它們可以提供任意的JSON數據作為輸入。然而,這些數據驅動政策決策,在許多情況下,這是不夠的–需要更多關於世界狀態的信息來做出決策。在OPA中,我們通常將這些信息稱為上下文「context」。將上下文加載到OPA有多種方法,但是最常見的方法之一是將數據與策略一起緩存到內存中。

當上下文被緩存在內存中時,它是在『data』全局變量下引用的。如果你使用OPA進行Kubernetes許可控制,你可能會看到在許可控制器部署中OPA內部維護的Kubernetes集群的緩存狀態的策略(例如,data.kubernetes.ingresses)。

在遊樂場的初始版本中,我們不支持在數據下加載任意的外部JSON值。這主要是為了讓UI儘可能簡單,而且從技術上講,你可以在策略本身中定義任何JSON值–在策略中定義的對JSON的引用與在OPA中緩存的原始JSON的引用是相同的。

因此,雖然可以在遊樂場內試驗上下文感知策略,但它有點不明顯。在最新的版本中,現在有一個空的數據「DATA」面板(以及輸入「INPUT」和輸出「OUTPUT」),讓你可以加載數據下的任意JSON值: