多租戶 SaaS 授權和 API 存取控制:實作選項和最佳做法 - AWS 規定指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

多租戶 SaaS 授權和 API 存取控制:實作選項和最佳做法

虎斑病房,托馬斯·戴維斯,基定蘭德曼和托馬斯·里哈,Amazon Web Services()AWS

2024 年 5 月 (文件歷史記錄)

授權和 API 存取控制是許多軟體應用程式的挑戰,尤其是對於多租戶軟體即服務 (SaaS) 應用程式而言。當您考慮到必須保護的微服務 API 擴散,以及來自不同租用戶、使用者特性和應用程式狀態的大量存取條件時,這種複雜性就很明顯。為了有效解決這些問題,解決方案必須對微服務、前端後端 (BFF) 層以及多租戶 SaaS 應用程式的其他元件所提供的許多 API 強制執行存取控制。這種方法必須伴隨著一種機制,該機制能夠根據許多因素和屬性做出複雜的訪問決策。

傳統上,API 訪問控制和授權是由應用程序代碼中的自定義邏輯處理的。這種方法容易出錯且不安全,因為可以訪問此代碼的開發人員可能會意外或故意更改授權邏輯,從而導致未經授權的訪問。稽核應用程式程式碼中的自訂邏輯所做的決定很困難,因為稽核人員必須將自己沉浸在自訂邏輯中,以判斷其在維護任何特定標準方面的有效性。此外,API 存取控制通常是不必要的,因為沒有那麼多的 API 來保護。應用程式設計的範式轉變為支援微服務和服務導向架構,增加了必須使用授權和存取控制形式的 API 數量。此外,在多租戶 SaaS 應用程式中維護以租戶為基礎的存取權限的需求會帶來額外的授權挑戰,以保留租用。本指南中概述的最佳做法提供了幾個好處:

  • 授權邏輯可以集中化,並以不特定於任何程式設計語言的高階宣告式語言撰寫。

  • 授權邏輯是從應用程式程式碼中抽取出來的,並可作為可重複模式套用至應用程式中的所有 API。

  • 抽象可防止開發人員意外更改授權邏輯。

  • 集成到 SaaS 應用程序是一致且簡單的。

  • 抽象可防止需要為每個 API 端點編寫自定義授權邏輯。

  • 稽核作業簡化,因為稽核人員不再需要檢閱程式碼來判斷權限。

  • 本指南中概述的方法支援使用多重存取控制範例,視組織的需求而定。

  • 這種授權和存取控制方法提供了一種簡單而直接的方法,可在 SaaS 應用程式中的 API 層維護租用戶資料隔離。

  • 在授權方面,最佳做法可提供一致的方法來上線和離職租用戶。

  • 這種方法提供了不同的授權部署模型(集區或筒倉),它們具有優點和缺點,如本指南中所述。

目標業務成果

此規範指引說明可重複的授權設計模式,以及可針對多租用戶 SaaS 應用程式實作的 API 存取控制。本指引適用於開發具有複雜授權需求或嚴格 API 存取控制需求之應用程式的任何團隊。架構詳細說明原則決策點 (PDP) 或原則引擎的建立,以及原則強制執行點 (PEP) 在 API 中的整合。討論建立 PDP 的兩個特定選項:將 Amazon 驗證許可與 Cedar SDK 搭配使用,以及使用開放原則代理程式 (OPA) 搭配 Rego 政策語言。本指南也討論根據屬性型存取控制 (ABAC) 模型或角色型存取控制 (RBAC) 模型,或兩種模型的組合,來做出存取決策。我們建議您使用本指南中提供的設計模式和概念,告知並標準化您在多租戶 SaaS 應用程式中實作授權和 API 存取控制的實作。此指引有助於實現以下業務成果:

  • 多租戶 SaaS 應用程式的標準化 API 授權架構 — 此架構可區分三個元件:儲存和管理原則的原則管理點 (PAP)、評估這些原則以達成授權決策的原則決策點 (PDP),以及強制執行該決策的原則強制執行點 (PEP)。託管的授權服務,驗證的權限,作為 PAP 和 PDP。或者,您也可以使用 Cedar 或 OPA 等開放原始碼引擎,自行建置 PDP。

  • 授權邏輯與應用程式分離 — 當授權邏輯內嵌於應用程式程式碼中,或透過臨機強制機制實作時,可能會遭受意外或惡意變更,導致無意的跨租戶資料存取或其他安全性漏洞。為了協助減輕這些可能性,您可以使用 PAP (例如「已驗證的權限」) 來儲存授權原則,獨立於應用程式程式碼,並將強式治理套用至這些原則的管理。原則可以在高階宣告式語言中集中維護,這使得維護授權邏輯遠比在應用程式程式碼的多個區段中內嵌原則時要簡單得多。此方法也可確保一致地套用更新。

  • 存取控制模型的彈性方法 — 角色型存取控制 (RBAC)、屬性型存取控制 (ABAC) 或兩種模型的組合都是存取控制的有效方法。這些模型試圖通過使用不同的方法來滿足企業的授權要求。本指南比較並對比這些模型,以協助您選擇適合您組織的模型。本指南也討論這些模型如何應用於不同的授權政策語言,例如 OPA/Rego 和 Cedar。本指南中討論的架構可以成功採用其中一種或兩種模型。

  • 嚴格的 API 存取控制 — 本指南提供了一種方法,以最小的努力在應用程式中一致且持續地保護 API。這對於通常使用大量 API 來促進應用程式內部通訊的服務導向或微服務應用程式架構而言特別有用。嚴格的 API 存取控制有助於提高應用程式的安全性,使其不易受到攻擊或利用。

租用戶隔離和多租戶授權

本指南涉及租用戶隔離和多租戶授權的概念。租用戶隔離是指您在 SaaS 系統中使用的明確機制,以確保每個租用戶的資源 (即使在共用基礎結構上運作) 都是隔離的。多租戶授權是指授權輸入操作,並防止它們在錯誤的承租人上實施。假設用戶可以通過身份驗證和授權,並且仍然可以訪問另一個租戶的資源。驗證和授權不會封鎖此存取權,您必須實作租用戶隔離才能達成此目標。有關這兩個概念之間差異的更廣泛討論,請參閱 SaaS 架構基礎知識白皮書的租戶隔離部分。