

# API Gateway 中针对 REST API 的使用计划和 API 密钥
<a name="api-gateway-api-usage-plans"></a>

创建、测试和部署 API 后，您可以实施 API Gateway 使用计划，将它们作为面向客户的产品/服务提供。您可以配置使用计划和 API 密钥，以允许客户访问选定的 API，并根据定义的限制和配额开始对这些API的请求进行节流。这些可以在 API 或 API 方法级别设置。

## 什么是使用计划和 API 密钥？
<a name="api-gateway-api-usage-plans-overview"></a>

一个*使用计划*指定谁可以访问一个或多个部署的 API 阶段和方法 — 可以选择设置目标请求速率来启动限制请求。该计划使用 API 密钥来标识 API 客户端，以及针对每个密钥对关联的 API 阶段的访问人员。

*API 密钥* 是字母数字字符串值，可将它分发给应用程序开发人员（要向其授予对您的 API 的访问权的客户）。您可以将 API 密钥与 [Lambda 授权方](apigateway-use-lambda-authorizer.md)、[IAM 角色](permissions.md)或 [Amazon Cognito](apigateway-integrate-with-cognito.md) 一起使用，以控制对 API 的访问。API Gateway 可以代表您生成 API 密钥，也可以从 [CSV 文件](api-key-file-format.md)中导入 API 密钥。您可以在 API Gateway 中生成 API 密钥，或从外部源将其导入 API Gateway。有关更多信息，请参阅 [在 API Gateway 中为 REST API 设置 API 密钥](api-gateway-setup-api-keys.md)。

API 密钥具有一个名称和值。（术语“API 密钥”和“API 密钥值”经常互换使用。） 名称不能超过 1024 个字符。值为一个长度在 20 到 128 个字符之间的字母数字字符串，例如，`apikey1234abcdefghij0123456789`。

**重要**  
API 密钥值必须是唯一的。如果您尝试使用不同的名称和相同的值来创建两个 API 密钥，API Gateway 会将它们视为同一 API 密钥。  
一个 API 密钥可与多个使用计划关联。一个使用计划可与多个阶段关联。但是，对于 API 的每个阶段，给定 API 密钥只能与一个使用计划关联。

一个*限制*设置请求限制应该开始的目标点。这可以在 API 或 API 方法级别设置。

*配额限制*可设置在指定的时间间隔内提交的包含给定 API 密钥的最大目标请求数。您可以配置单独的 API 方法，要求根据使用计划配置进行 API 密钥授权。

限制和配额限制适用于跨一个使用计划内的所有 API 阶段聚合的各个 API 密钥的请求。

**注意**  
使用计划节流和配额不是硬性限制，而是在尽力而为的基础上应用的。在某些情况下，客户端可能会超过您设置的配额。不要依靠使用计划配额或节流来控制成本或阻止对 API 的访问。考虑使用 [Amazon Budgets](https://docs.amazonaws.cn/cost-management/latest/userguide/budgets-managing-costs.html) 监控成本和 [Amazon WAF](https://docs.amazonaws.cn/waf/latest/developerguide/waf-chapter.html) 来管理 API 请求。

## API 密钥和使用计划的最佳实践
<a name="apigateway-usage-plans-best-practices"></a>

以下是使用 API 密钥和使用计划时要遵循的建议的最佳实践。

**重要**  
请勿使用 API 密钥进行身份验证或授权以控制对 API 的访问权限。如果您在一个使用计划中有多个 API，则具有该使用计划中的一个 API 的有效 API 密钥的用户可以访问该使用计划中的*所有* API。相反，要控制对 API 的访问权限，请使用 IAM 角色、[Lambda 授权方](apigateway-use-lambda-authorizer.md)或 [Amazon Cognito 用户群体](apigateway-integrate-with-cognito.md)。
使用 API Gateway 生成的 API 密钥。API 密钥不应包含机密信息；客户端通常使用可记录的标头传输这些信息。
+ 如果您使用开发人员门户发布 API，请注意，给定使用计划中的所有 API 均可由客户订阅，即使您尚未向您的客户显示它们。
+ 在某些情况下，客户端可能会超过您设置的配额。不要依靠使用计划来控制成本。考虑使用 [Amazon Budgets](https://docs.amazonaws.cn/cost-management/latest/userguide/budgets-managing-costs.html) 监控成本和 [Amazon WAF](https://docs.amazonaws.cn/waf/latest/developerguide/waf-chapter.html) 来管理 API 请求。
+ 将 API 密钥添加到使用计划后，更新操作可能需要几分钟才能完成。