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

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

API-关联的策略存储

一个常见的用例是使用亚马逊验证权限来授权用户访问APIs托管在 Amazon API Gateway 上。使用 AWS 控制台中的向导,您可以为在 Amazon Cognito 中管理的用户或OIDC任何身份提供商 (IdP) 创建基于角色的访问策略,并部署 AWS Lambda 调用已验证权限的授权者来评估这些策略。

要完成向导,请在创建新的策略存储时选择使用 API Gatewa y 和身份提供商进行设置,然后按照步骤进行操作。

已创建与之API关联的策略存储区,它会为授权请求预置您的授权模型和资源。策略存储具有身份源和用于将 Gate API way 连接到已验证权限的 Lambda 授权者。创建策略存储后,您可以根据用户的群组成员资格对API请求进行授权。例如,“已验证权限” 只能向Directors群组成员授予访问权限。

随着应用程序的增长,您可以使用 C edar 策略语言实现具有用户属性和范围 OAuth 2.0 的精细授权。例如,“已验证权限” 只能向在域中拥有email属性的用户授予访问权限mycompany.co.uk

为你的授权模型设置完毕后API,你剩下的责任就是对用户进行身份验证并在应用程序中生成API请求,以及维护你的策略存储。

要观看演示,请查看Amazon Web Services YouTube 频道上的 Amazon 已验证权限-快速入门概述和演示

重要

您使用 “使用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使用API网关和身份源设置工作流程会自动为您创建此 Lambda 授权方。

  • 已验证权限策略存储。策略存储的身份来源是您的 Amazon Cognito 用户池或OIDC提供者群组。策略存储架构反映了您的配置API,并且策略将用户组与允许的API操作相关联。

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

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

当您创建新的策略存储并选择 “使用API网关和身份源进行设置” 选项时,“已验证的权限” 会创建策略存储架构和策略。架构和策略反映了您想要授权API执行这些操作的操作和用户组。经过验证的权限还会创建 Lambda 函数和授权者。

该图表显示了使用亚马逊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 和访问令牌声明的政策示例。