

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

# 常见问题解答
<a name="faq"></a>

本节提供了有关在多租户 SaaS 应用程序中实施 API 访问控制和授权的常见问题的答案。

**问：授权和身份验证有什么区别？**

**答：**身份验证是验证用户身份的过程。授权向用户授予访问特定资源的权限。

**问：SaaS 应用程序中的授权和租户隔离有什么区别？**

**答：**租户隔离是指在SaaS系统中使用的明确机制，用于确保每个租户的资源，即使在共享基础架构上运行也是如此，也是如此。多租户授权是指对入站操作进行授权，并防止这些操作在错误的租户上实施。假设的用户可以经过身份验证和授权，但可能仍能访问其他租户的资源。身份验证和授权并不一定会阻止这种访问，但是要实现这一目标，需要租户隔离。有关这两个概念的更多信息，请参阅《*AWS SaaS 架构基础知识*》白皮书中的[租户隔离](https://docs.aws.amazon.com/whitepapers/latest/saas-architecture-fundamentals/tenant-isolation.html)讨论。

**问：为什么我需要考虑对我的 SaaS 应用程序进行租户隔离？**

**答：**SaaS 应用程序有多个租户。租户可以是客户组织或使用该 SaaS 应用程序的任何外部实体。根据应用程序的设计方式，这意味着租户可能正在访问共享资源 APIs、数据库或其他资源。重要的是要保持租户隔离（即严格控制资源访问权限的结构，并阻止任何访问其他租户资源的尝试），以防止一个租户的用户访问另一个租户的私人信息。SaaS 应用程序通常旨在确保在整个应用程序中保持租户隔离，并且租户只能访问自己的资源。

**问：为什么我需要访问控制模型？**

**答：**访问控制模型用于创建一种一致的方法来确定如何授予对应用程序中资源的访问权限。这可以通过向与业务逻辑紧密一致的用户分配角色来完成，也可以基于其他上下文属性，例如一天中的时间或用户是否满足预定义的条件。访问控制模型构成了应用程序在做出授权决策以确定用户权限时使用的基本逻辑。

**问：我的应用程序是否需要 API 访问控制？**

**答：**是的。 APIs 应始终验证来电者是否具有适当的访问权限。无处不在的 API 访问控制还可确保仅根据租户授予访问权限，从而保持适当的隔离。

**问：为什么要使用策略引擎或策略引擎 PDPs 进行授权？**

**答：**策略决策点 (PDP) 允许将应用程序代码中的授权逻辑转移到单独的系统中。这可以简化应用程序代码。它还提供了一个 easy-to-use等性接口，用于为微服务 APIs、前端后端 (BFF) 层或任何其他应用程序组件做出授权决策。

**问：什么是 PEP？**

**答：**政策执行点 (PEP) 负责接收发送给 PDP 进行评估的授权请求。PEP 可以是应用程序中必须保护数据和资源的任何地方，也可以是应用授权逻辑的地方。 PEPs 与之相比，相对简单 PDPs。PEP 仅负责请求和评估授权决定，不需要将任何授权逻辑纳入其中。

**问：我应该如何在 Amazon 验证权限**和 OP** A 之间做出选择**？

**答：**要在已验证权限和开放政策代理 (OPA) 之间进行选择，请始终牢记您的用例和您的独特要求。Verified Permissions 提供了一种完全托管的方式，用于定义细粒度权限、审核跨应用程序的权限以及集中管理应用程序的策略管理系统，同时通过毫秒级处理满足应用程序延迟要求。OPA 是一个开源的通用策略引擎，还可以帮助您在应用程序堆栈中统一策略。为了运行 OPA，您需要将其托管在您的 AWS 环境中，通常使用容器或 AWS Lambda 函数。

已验证权限使用开源 Cedar 策略语言，而 OPA 使用 Rego。因此，熟悉其中一种语言可能会影响您选择该解决方案。但是，我们建议您阅读这两种语言的相关知识，然后从您想要解决的问题中进行回顾，以找到最适合您的用例的解决方案。

**问：除了已验证权限**和 OP** A 之外，还有其他开源替代方案**吗？

**答：**有一些开源系统类似于已验证权限和开放策略代理 (OPA)，例如[通用表达语言 (CEL)](https://opensource.google/projects/cel)。本指南重点介绍作为可扩展权限管理和细粒度授权服务的已验证权限，以及 OPA，后者已被广泛采用、记录在案，可适应许多不同类型的应用程序和授权要求。

**问：我需要编写授权服务才能使用 OPA，还是可以直接与 OPA 交互？**

**答：**您可以直接与 OPA 互动。本指南中的授权服务是指将授权决策请求转换为 OPA 查询（反之亦然）的服务。如果您的应用程序可以直接查询和接受 OPA 响应，则无需引入这种额外的复杂性。

**问：如何监控我的 OPA 代理的正常运行时间和审计目的？**

**答：OPA** 提供日志记录和基本的正常运行时间监控，尽管其默认配置可能不足以用于企业部署。有关更多信息，请参阅本DevOps指南前面的 “[监控和记录](devops.md)” 部分。

**问：如何监控已验证的权限以实现正常运行时间和审计目的？**

**答：**已验证权限是一项 AWS 托管服务，可以通过监控其可用性 AWS Health Dashboard。此外，经过验证的权限还可以登录亚马逊 CloudWatch 日志 AWS CloudTrail、亚马逊 S3 和亚马逊 Data Firehose。

**问：我可以使用哪些操作系统和 AWS 服务来运行 OPA？**

**答：**你可以在 [macOS、Windows 和 Linux 上运行 O](https://www.openpolicyagent.org/docs/latest/#running-opa) PA。OPA 代理可以在亚马逊弹性计算云 (Amazon EC2) 代理以及亚马逊弹性容器服务 (Amazon ECS) 和亚马逊弹性 Kubernetes Service (Amazon EKS) 等容器化服务上配置。

**问：我可以使用哪些操作系统和 AWS****服务来运行已验证的权限？**

**答：**已验证权限是一项 AWS 托管服务，由运营 AWS。除了能够向服务发出授权请求外，无需进行其他配置、安装或托管即可使用经过验证的权限。

**问：我可以运行 OPA 吗？ AWS Lambda**

**答：**你可以在 Lambda 上以 Go 库的形式运行 OPA。有关如何为 [API Gateway Lambda 授权](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html)方执行此操作的信息，请参阅 AWS 博客文章使用开放策略代理[创建自定义 Lambda 授权方](https://aws.amazon.com/blogs/opensource/creating-a-custom-lambda-authorizer-using-open-policy-agent/)。

**问：我应该如何在分布式 PDP 和集中式 PDP 方法之间做出选择？**

**答：**这取决于您的应用程序。它很可能是根据分布式和集中式 PDP 模型之间的延迟差异来确定的。我们建议您构建概念验证并测试应用程序的性能，以验证您的解决方案。

**问：除此之外，我还能将 OPA 用于用例吗？ APIs**

**答：**是的。[OPA 文档提供了 [Kubernetes、En](https://www.openpolicyagent.org/docs/kubernetes) vo [y](https://www.openpolicyagent.org/docs/envoy)、[Docker](https://www.openpolicyagent.org/docs/latest/docker-authorization/)、K [afka、[SSH 和 s](https://www.openpolicyagent.org/docs/latest/ssh-and-sudo-authorization/) udo 以及 Terraform](https://www.openpolicyagent.org/docs/latest/kafka-authorization/) 的示例。](https://www.openpolicyagent.org/docs/latest/terraform/)此外，OPA 可以使用 Rego 部分规则对查询返回任意 JSON 响应。根据查询的不同，OPA 可用于通过 JSON 响应回答许多问题。

**问：除此之外，我还能将经过验证的权限****用于用例吗？ APIs**

**答：**是的。已验证的权限可以为其收到的任何授权请求提供`ALLOW`或`DENY`响应。已验证的权限可以为任何需要授权决策的应用程序或服务提供授权响应。

**问：我能否使用 IAM 策略语言在已验证权限中创建策略？**

**答：**不是。 您必须使用 Cedar 政策语言来撰写政策。Cedar 旨在支持客户应用程序资源的权限管理，而 AWS Identity and Access Management (IAM) 策略语言则演变为支持 AWS 资源的访问控制。