

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

# 使用 OPA 文件模型的租用戶隔離
<a name="opa-design-isolation"></a>

OPA 使用文件做出決策。這些文件可以包含租戶特定資料，因此您必須考慮如何維持租戶資料隔離。OPA 文件由基礎文件和虛擬文件組成。基礎文件包含來自外部世界的資料。這包括直接提供給 OPA 的資料、OPA 請求的資料，以及可能做為輸入傳遞給 OPA 的資料。虛擬文件是根據政策計算，並包含 OPA 政策和規則。如需詳細資訊，請參閱[ OPA 文件](https://www.openpolicyagent.org/docs/latest/philosophy/)。

若要在 OPA 中為多租戶應用程式設計文件模型，您必須先考慮在 OPA 中做出決策所需的基礎文件類型。如果這些基礎文件包含租用戶特定資料，您必須採取措施以確保這些資料不會意外暴露到跨租用戶存取。幸好在許多情況下，租戶特定資料不需要在 OPA 中做出決策。下列範例顯示假設的 OPA 文件模型，允許根據哪個租用戶擁有 API 來存取 API，以及使用者是否為租用戶的成員，如輸入文件中所示。

![基本 OPA 文件模型](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/opa-doc-model-1.png)


在此方法中，OPA 無法存取任何租用戶特定資料，除了有關哪些租用戶擁有 API 的資訊。在這種情況下，無需擔心 OPA 促進跨租用戶存取，因為 OPA 用於做出存取決策的唯一資訊是使用者與租用戶的關聯，以及租用戶與 APIs關聯。您可以將此類型的 OPA 文件模型套用至孤立的 SaaS 模型，因為每個租用戶都有獨立資源的所有權。

不過，在許多 RBAC 授權方法中，有可能跨租用戶公開資訊。在下列範例中，假設性 OPA 文件模型允許根據使用者是否為租用戶的成員，以及使用者是否具有存取 API 的正確角色來存取 API。

![跨租用戶使用案例的 OPA 文件模型](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/opa-doc-model-2.png)


此模型帶來跨租用戶存取的風險，因為多個租用戶在 中的角色`data.tenant1.user_roles`和許可`data.tenant2.user_roles`現在必須可供 OPA 存取，才能做出授權決策。為了維持租戶隔離和角色映射的隱私權，此資料不應位於 OPA 中。RBAC 資料應位於外部資料來源中，例如資料庫。此外，OPA 不應用於將預先定義的角色映射至特定許可，因為這會使租戶難以定義自己的角色和許可。它也會讓您的授權邏輯更嚴格，且需要持續更新。如需如何將 RBAC 資料安全地納入 OPA 決策程序的指引，請參閱本指南稍後的[租戶隔離和資料隱私權建議](devops-isolation-privacy.md)一節。

您可以透過不將任何租用戶特定資料儲存為非同步基礎文件，輕鬆地在 OPA 中維護租用戶隔離。非同步基礎文件是存放在記憶體中的資料，可在 OPA 中定期更新。其他基礎文件，例如 OPA 輸入，會同步傳遞，且只能在決策時間使用。例如，在查詢的 OPA 輸入中提供租戶特定資料不會構成違反租戶隔離，因為該資料僅在決策過程中同步可用。