API-关联的策略存储 - Amazon Verified Permissions

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

API-关联的策略存储

在 Amazon Verified Permissions 控制台中创建新的策略存储时,可以选择 “使用API网关和身份源进行设置” 选项。使用此选项,您可以构建API链接策略存储,这是一种授权模型,用于向 Amazon Cognito 用户池或身份提供商 (IdP) 进行OIDC身份验证并从 Amazon Gateway 获取数据的应用程序。API APIs要开始使用,请参阅 创建策略存储,以便通过身份提供商使用 API Gateway

重要

您使用 “使用API网关设置” 和 “已验证权限” 控制台中的身份源选项创建的策略存储不能立即部署到生产环境中。使用初始策略存储,完成授权模型并将策略存储资源导出到 CloudFormation。使用 Cl AWSoud Development Kit (CDK) 以编程方式将经过验证的权限部署到生产环境中。有关更多信息,请参阅 通过以下方式进入生产阶段 AWS CloudFormation

在链接到和身份源的策略存储中,您的应用程序在向API和身份源发出请求时,会在授权标头中显示用户池令牌API。您的策略存储库的身份源为已验证的权限提供令牌验证。令牌principal与构成授权请求IsAuthorizedWithTokenAPI。Verified Permissions 围绕用户的群组成员资格制定策略,如身份 (ID) 和访问令牌(例如cognito:groups用户池)中的群组声明中所示。您在 Lambda 授权机构中API处理应用程序中的令牌,并将其提交给已验证权限以做出授权决定。当您API收到 Lambda 授权机构的授权决定时,它会将请求传递给您的数据源或拒绝该请求。

身份源和带有已验证权限的API网关授权的组成部分
  • 用于对用户进行身份验证和分组的 Amazon Cognito 用户池OIDC或 IdP。用户的令牌会填充群组成员资格以及已验证权限在您的策略存储中评估的委托人或上下文。

  • API关RESTAPI。例如,“已验证权限” 定义API路径和API方法中的操作MyAPI::Action::get /photo

  • 一个 Lambda 函数和一个适用于你的 Lamb da 授权器。APILambda 函数从您的用户池中获取不记名令牌,请求已验证权限的授权,然后将决策返回给 Gateway。API使用 Cognito 和API网关进行设置工作流程会自动为您创建此 Lambda 授权者。

  • 已验证权限策略存储。策略存储标识源是您的用户池。策略存储架构反映了您的配置API,并且策略将用户组与允许的API操作相关联。

  • 一种使用您的 IdP 对用户进行身份验证并在请求中附加令牌的应用程序。API

已验证权限如何授权请求 API

当您创建新的策略存储并选择 “使用 Cognito 和 API Gateway 进行设置” 选项时,“已验证的权限” 会创建策略存储架构和策略。架构和策略反映了您想要授权执行这些API操作的操作和用户池组。经过验证的权限还会创建 Lambda 函数和授权者。您必须在中的方法上配置新的授权者。API

该图表显示了使用亚马逊API网关、Amazon Cognito 和亚马逊验证权限的授权请求流程。
  1. 您的用户通过 Amazon Cognito 或其他身份提供商使用您的应用程序登OIDC录。IdP 颁发包含用户信息的 ID 和访问令牌。

  2. 您的应用程序存储JWTs. 有关更多信息,请参阅 Amazon Cognito 开发者指南中的在用户池中使用令牌

  3. 您的用户请求您的应用程序必须从外部检索的数据API。

  4. 您的应用程序从 Gate API way REST API 中的请求数据。它会附加 ID 或访问令牌作为请求标头。

  5. 如果您API有用于授权决策的缓存,它将返回之前的响应。如果缓存API已禁用或没有当前缓存,APIGateway 会将请求参数传递给基于令牌的 Lambda 授权者。

  6. Lambda 函数使用向已验证权限策略存储发送授权请求。IsAuthorizedWithTokenAPILambda 函数传递授权决策的要素:

    1. 用户的代币作为委托人。

    2. 例如GetPhoto,该API方法与API路径组合为动作。

    3. Application作为资源的术语。

  7. 已验证的权限会验证令牌。有关如何验证亚马逊 Cognito 令牌的更多信息,请参阅 Amazon Cog nito 开发者指南中的使用亚马逊验证权限进行授权

  8. Verified Permissions 会根据您的策略存储中的策略评估授权请求并返回授权决定。

  9. Lambda 授权方向 Gateway 返回AllowDeny响应。API

  10. API返回数据或对您的应用程序的ACCESS_DENIED响应。您的应用程序处理并显示API请求的结果。

API关联策略存储的注意事项

在已验证权限控制台中构建API链接策略存储库时,您正在为最终的生产部署创建测试。在进入生产环境之前,请为API和用户池建立固定配置。请考虑以下因素:

API网关缓存响应

在API关联策略存储中,已验证权限会创建授权TTL缓存为 120 秒的 Lambda 授权方。您可以调整此值或在授权者中关闭缓存。在启用了缓存的授权方中,您的授权方每次都会返回相同的响应,直到到期。TTL这可以将用户池令牌的有效寿命延长一段时间,其持续时间等于请求阶段TTL的缓存。

亚马逊 Cognito 群组可以重复使用

Amazon Verified Permissions 根据用户 ID 或访问令牌中的cognito:groups声明来确定用户池用户的群组成员资格。此声明的值是该用户所属的用户池组的友好名称数组。您无法将用户池组与唯一标识符相关联。

您删除并重新创建的用户池组与策略存储中的同名用户池组与同一个组相同。从用户池中删除组时,请从策略存储中删除对该组的所有引用。

API-派生的命名空间和架构是 point-in-time

Verified P API ermission s 会在某个时间点捕获您的信息:它仅在您创建策略存储API时才会查询您的。当您的架构或名称API发生更改时,您必须更新您的策略存储和 Lambda 授权者,或者创建一个新的链接策略API存储。Verified Permissions 从您的API名称派生策略存储名空间。

Lambda 函数没有配置 VPC

已验证权限为您的API授权方创建的 Lambda 函数未连接到。VPC默认情况下。APIs将网络访问权限限制为私有的 Lambda 函数VPCs无法与授权具有已验证权限的访问请求的 Lambda 函数进行通信。

“已验证权限” 在中部署授权方资源 CloudFormation

要创建API链接策略存储,您必须使用高权限 AWS 委托人登录已验证权限控制台。该用户部署了一个 AWS CloudFormation 堆栈,该堆栈可以跨多个 AWS 服务资源创建资源。该委托人必须有权在已验证的权限、 IAM、Lambda 和 Gateway 中添加和API修改资源。最佳做法是,不要与组织中的其他管理员共享这些凭证。

通过以下方式进入生产阶段 AWS CloudFormation有关已验证权限创建的资源的概述,请参阅。

添加基于属性的访问控制 () ABAC

与 IdP 的典型身份验证会话会返回 ID 和访问令牌。您可以在应用程序请求中将这两种令牌类型中的任何一种作为不记名令牌传递给您API。根据您在创建策略存储时所做的选择,“验证权限” 需要两种类型的令牌之一。这两种类型都包含有关用户群组成员资格的信息。有关 Amazon Cognito 中令牌类型的更多信息,请参阅 Amazon Cognit o 开发者指南中的在用户池中使用令牌

创建策略存储后,您可以添加和扩展策略。例如,您可以在将新群组添加到用户池时向策略中添加新群组。由于您的策略存储已经知道您的用户池以令牌形式呈现群组的方式,因此您可以使用新策略允许任何新群组执行一系列操作。

您可能还想将基于群组的策略评估模型扩展为基于用户属性的更精确的模型。用户池令牌包含其他用户信息,这些信息可能有助于做出授权决策。

身份令牌

ID 令牌代表用户的属性,具有最高级别的精细访问控制。要评估电子邮件地址、电话号码或部门和经理等自定义属性,请评估 ID 令牌。

访问令牌

访问令牌代表用户在 OAuth 2.0 范围内的权限。要添加授权层或设置对额外资源的请求,请评估访问令牌。例如,您可以验证用户是否属于相应的群组,并且其作用域通常授予对的API访问权限。PetStore.read用户池可以通过资源服务器向令牌添加自定义范围,并在运行时自定义令牌

将身份提供者令牌映射到架构有关处理 ID 和访问令牌声明的政策示例。