

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 关于租户隔离和数据隐私的建议
<a name="devops-isolation-privacy"></a>

上一节提供了几种使用具有 OPA 和 Amazon 验证权限的外部数据来帮助做出授权决策的方法。在可能的情况下，我们建议您使用重载输入方法将 SaaS 上下文数据传递给 OPA 以做出授权决策，而不是将数据存储在 OPA 的内存中。此用例不适用于 AWS Cloud Map，因为它不支持在服务中存储外部数据。

在基于角色的访问控制 (RBAC) 或 RBAC 和基于属性的访问控制 (ABAC) 混合模型中，仅通过授权请求或查询提供的数据可能不足，因为必须引用角色和权限才能做出授权决策。**为了保持租户隔离和角色映射的隐私，这些数据不应存在于 OPA 中。**RBAC 数据应位于外部数据源（例如数据库）中，或者应作为 IdP 在 JWT 中的声明的一部分传递。在 Verified Permissions 中，RBAC 数据可以作为每租户策略存储模型中的策略和架构的一部分进行维护，因为每个租户都有自己的逻辑上分离的策略存储。但是，**在一个共享的多租户策略存储模型中，为了保持租户隔离，角色映射数据不应位于已验证权限**中。

此外，不应使用 OPA 和已验证权限将预定义的角色映射到特定权限，因为这会使租户难以定义自己的角色和权限。它还会使您的授权逻辑变得僵化，需要不断更新。本指南的例外情况是 Verified Permissions 中的每租户策略存储模型，因为该模型允许每个租户拥有自己的策略，这些策略可以根据每个租户进行独立评估。

## Amazon Verified Permissions
<a name="avp-data-storage"></a>

只有在架构中，经过验证的权限才能存储潜在的私有 RBAC 数据。这在每租户策略存储模式中是可以接受的，因为每个租户都有自己的逻辑上独立的策略存储。但是，在一个共享的多租户策略存储模式中，它可能会损害租户隔离。如果需要这些数据才能做出授权决定，则应从 DynamoDB 或 Amazon RDS 等外部来源检索这些数据，并将其合并到已验证的权限授权请求中。

## OPA
<a name="opa-data-storage"></a>

OPA 用于维护 RBAC 数据的隐私和租户隔离的安全方法包括使用动态数据检索或复制来获取外部数据。这是因为您可以使用上图所示的授权服务，仅提供租户特定或用户特定的外部数据，以便做出授权决策。例如，当用户登录时，您可以使用复制器向 OPA 缓存提供 RBAC 数据或权限矩阵，并根据输入数据中提供的用户引用数据。您可以对动态提取的数据使用类似的方法，仅检索相关数据以做出授权决策。此外，在动态数据检索方法中，这些数据不必缓存在OPA中。在维护租户隔离方面，捆绑方法不如动态检索方法有效，因为它会更新 OPA 缓存中的所有内容，并且无法处理精确的更新。捆绑模型仍然是更新 OPA 政策和非 RBAC 数据的好方法。