

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

# 多租戶 SaaS 授權和 API 存取控制：實作選項和最佳實務
<a name="introduction"></a>

*Tabby Ward、Thomas Davis、Gideon Landeman 和 Tomas Riha，Amazon Web Services (AWS)*

*2024 年 5 月* ([文件歷史記錄](doc-history.md))

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

傳統上，API 存取控制和授權是由應用程式程式碼中的自訂邏輯處理。這種方法容易出錯且不安全，因為有權存取此程式碼的開發人員可能會意外或刻意變更授權邏輯，進而導致未經授權的存取。稽核應用程式程式碼中自訂邏輯所做的決策很困難，因為稽核人員必須將自己沉浸在自訂邏輯中，以判斷其維護任何特定標準的有效性。此外，API 存取控制通常是不必要的，因為沒有太多 APIs需要保護。應用程式設計中偏袒微服務和服務導向架構的模式轉移已增加必須使用授權和存取控制形式的 APIs 數量。此外，在多租用戶 SaaS 應用程式中維護租用戶型存取的需求，會帶來額外的授權挑戰來保留租用。本指南中概述的最佳實務提供數種好處：
+ 授權邏輯可以集中化並以高階宣告性語言撰寫，並非任何程式設計語言特有。
+ 授權邏輯會從應用程式程式碼中抽象化，並可作為可重複模式套用至應用程式中的所有 APIs。
+ 抽象防止開發人員意外變更以授權邏輯。
+ 整合到 SaaS 應用程式既一致又簡單。
+ 抽象概念可避免為每個 API 端點撰寫自訂授權邏輯的需求。
+ 稽核已簡化，因為稽核人員不再需要檢閱程式碼來判斷許可。
+ 本指南中概述的方法支援根據組織的需求使用多個存取控制範例。
+ 此授權和存取控制方法提供簡單且直接的方式，以在 SaaS 應用程式中的 API 層維持租戶資料隔離。
+ 最佳實務提供一致的方法，讓租戶在授權方面加入和離職。
+ 此方法提供不同的授權部署模型 （混合或孤立），兩者兼具優點和缺點，如本指南所述。

## 目標業務成果
<a name="business-outcomes"></a>

此方案指引說明可針對多租用戶 SaaS 應用程式實作的授權和 API 存取控制的可重複設計模式。本指南適用於開發具有複雜授權需求或嚴格 API 存取控制需求之應用程式的任何團隊。架構詳細說明政策決策點 (PDP) 或政策引擎的建立，以及在 APIs 中政策強制執行點 (PEP) 的整合。會討論建立 PDP 的兩個特定選項：搭配使用 Amazon Verified Permissions 與 Cedar SDK，以及搭配使用 Open Policy Agent (OPA) 與 Rego 政策語言。本指南也討論如何根據屬性型存取控制 (ABAC) 模型或角色型存取控制 (RBAC) 模型，或兩種模型的組合，做出存取決策。我們建議您使用本指南中提供的設計模式和概念，在多租用戶 SaaS 應用程式中通知和標準化授權和 API 存取控制的實作。本指南有助於實現下列業務成果：
+ **適用於多租戶 SaaS 應用程式的標準化 API 授權架構** – 此架構區分三個元件：儲存和管理政策的政策管理點 (PAP)、評估這些政策以達到授權決策的政策決策點 (PDP)，以及強制執行該決策的政策強制執行點 (PEP)。託管的授權服務 Verified Permissions 可同時做為 PAP 和 PDP。或者，您可以使用 Cedar 或 OPA 等開放原始碼引擎自行建置 PDP。
+ **從應用程式解耦授權邏輯** – 嵌入應用程式程式碼或透過臨機操作強制執行機制實作的授權邏輯，可能會受到意外或惡意變更，而導致意外的跨租用戶資料存取或其他安全漏洞。為了協助降低這些可能性，您可以使用 PAP，例如 Verified Permissions、獨立於應用程式程式碼存放授權政策，以及將強大的控管套用至這些政策的管理。政策可以用高階宣告式語言集中維護，這使得維護授權邏輯比在應用程式程式碼的多個區段中嵌入政策更為簡單。此方法也可確保一致地套用更新。
+ **存取控制模型的彈性方法** – 角色型存取控制 (RBAC)、屬性型存取控制 (ABAC) 或兩種模型的組合都是存取控制的有效方法。這些模型嘗試使用不同的方法來滿足企業的授權要求。本指南會比較和對比這些模型，以協助您選擇適用於組織的模型。本指南也會討論這些模型如何套用至不同的授權政策語言，例如 OPA/Rego 和 Cedar。本指南中討論的架構可成功採用其中一個或兩個模型。
+ **嚴格的 API 存取控制** – 本指南提供一種方法，可在應用程式中以最少的努力一致且普遍的方式保護 APIs。這對於通常使用大量 APIs 來促進應用程式內通訊的服務導向或微服務應用程式架構特別有用。嚴格的 API 存取控制有助於提高應用程式的安全性，並降低其遭受攻擊或利用的風險。

## 租戶隔離和多租戶授權
<a name="definitions"></a>

本指南參考租戶隔離和多租戶授權的概念。*租用戶隔離*是指您在 SaaS 系統中使用的明確機制，以確保即使每個租用戶在共用基礎設施上操作，其資源也會受到隔離。*多租戶授權*是指授權傳入動作，並防止在錯誤的租戶上實作這些動作。假設使用者可以進行身分驗證和授權，但仍可以存取另一個租用戶的資源。身分驗證和授權不會封鎖此存取，您需要實作租用戶隔離才能達成此目標。如需這兩個概念之間差異的更廣泛討論，請參閱 [SaaS 架構基礎](https://docs.aws.amazon.com/whitepapers/latest/saas-architecture-fundamentals/tenant-isolation.html)白皮書的*租戶隔離*一節。