# 使用 Amazon Verified Permissions 和 Amazon Cognito 为 API Gateway API授权

相比于传统自建鉴权和授权系统，通过第三方服务实现的好处在于：

* 像写策略一样写权限
* 支持基于角色的规则
* 支持基于属性的规则
* 便于审计
* 系统低延迟
* 高可用
* 像插件一样随意组合

开发团队不需要因为业务想要实现某种授权逻辑疲于奔命的修修改改，使其专注于应用程序逻辑；

安全审计团队也不需要依赖开发团队讲解代码逻辑，策略简单容易理解，简化了应用程序和资源访问审核；并且继承AWS的安全设计理念提高应用程序安全性。

Amazon Verified Permissions 是一种可扩展的权限管理和细粒度授权服务，是授权即服务，让你的程序使用策略库实现细粒度权限管理。

## 示例程序简介

示例中使用了一个简单的宠物商店应用程序，实现对不同用户类型进行身份验证和基于策略的授权。此应用程序**使用 Amazon Cognito 进行身份验证**，并**使用 Amazon Verified Permissions 进行基于策略的授权**，该应用程序使用 Amplify 平台加速后端资源的部署和配置。有关该应用程序的完整演示，请参阅youtube：<https://www.youtube.com/watch?v=D8IQJaCIuwg\\&ab\\_channel=AmazonWebServices。>

### 1-先决条件

可以从Workshop部署petstore：[Amazon Verified Permissions Quick Start workshop](https://catalog.us-east-1.prod.workshops.aws/workshops/e25284b6-851c-4a89-bee1-ed7571787895/en-US)

部署好后可以看到以下资源：

1. **PetStorePool** – 一个 Amazon Cognito [user pool](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) 有3个组： customers, employees 和 owners.
2. **PetStore** – 一个 Amazon API Gateway [REST API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-rest-api.html) derived from [importing the PetStore example API](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-from-example.html) ，此外为了扩展管理功能，我们搭建了一个模拟集成，这个模拟集成会返回一个包含 URI 路径的消息，该路径使用 `{"statusCode": 200}` 作为集成请求，以及 `{"Message": "User authorized for $context.path"}` 作为集成响应。

参考资料

AWS Blog - <https://aws.amazon.com/blogs/security/authorize-api-gateway-apis-using-amazon-verified-permissions-and-amazon-cognito/>

<https://aws.amazon.com/cn/blogs/security/use-amazon-verified-permissions-for-fine-grained-authorization-at-scale/>
