

 本白皮书仅供历史参考。有些内容可能已过时，有些链接可能不可用。

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

# 优先考虑 API 安全
<a name="prioritize-api-security"></a>

 所有应用程序都必须确保只有经过授权的客户才能访问其 API 资源。在设计多层应用程序时，您可以利用 Amazon API Gateway 通过几种不同的方式来保护您的逻辑层：

## 过境安全
<a name="transit-security"></a>

 向您的所有请求均 APIs 可通过 HTTPS 提出，以便在传输过程中启用加密。

 API Gateway 提供内置 SSL/TLS 证书 — 如果使用面向公众的自定义域名选项 APIs，则可以使用 [AWS Certificate Manager 提供自己的 SSL/TLS 证书](https://aws.amazon.com/certificate-manager/)。API Gateway 还支持双向 TLS (mTLS) 身份验证。双向 TLS 可增强您的 API 的安全性，并有助于保护您的数据免受诸如客户端欺骗或 man-in-the中间攻击之类的攻击。

## API 授权
<a name="api-authorization"></a>

 您在 API 中创建的每个 resource/method 组合都会被授予一个唯一的 Amazon 资源名称 (ARN)，该名称可以在 AWS Identity and Access Management (IAM) 策略中引用。

 在 API Gateway 中为 API 添加授权的通用方法有三种：
+  **IAM 角色和策略：**客户使用 [AWS 签名版本 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) (Sigv4) 授权和 IAM 策略进行 API 访问。相同的证书可以根据需要限制或允许访问其他 AWS 服务和资源（例如 Amazon S3 存储桶或 Amazon DynamoDB 表）。
+  **Amazon Cognito 用户池：**客户通过 [Amazon Co](https://aws.amazon.com/cognito/) gnito 用户池登录并获取令牌，这些令牌包含在请求的授权标头中。
+  **Lambda 授权方：**定义一个 Lambda 函数，该函数实现使用不记名令牌策略（例如 OAuth 和 SAML）或使用请求参数来识别用户的自定义授权方案。

## 访问限制
<a name="access-restrictions"></a>

 API Gateway 支持生成 API 密钥以及将这些密钥与可配置的使用计划关联。您可以使用监控 API 密钥的使用情况 CloudWatch。

 API Gateway 支持您的 API 中每种方法的限流、速率限制和突发速率限制。

## 私人 APIs
<a name="private-apis"></a>

使用 API Gateway，您可以创建私有 REST APIs ，该私有 REST 只能通过接口 VPC 终端节点从 Amazon VPC 中的虚拟私有云进行访问。这是您在 VPC 中创建的端点网络接口。

使用资源策略，您可以启用或拒绝从选定的终端节点 VPCs 和 VPC 终端节点访问您的 API，包括通过 AWS 账户进行访问。每个端点可用于访问多个私有端点 APIs。您还可以使用 AWS Direct Connect 建立从本地网络到 Amazon VPC 的连接，并通过该连接访问您的私有 API。

在所有情况下，您的私有 API 的流量使用安全的连接，不会离开 Amazon 网络；它与公有 Internet 隔离开来。

## 使用 AWS WAF 进行防火墙保护
<a name="firewall-protection-using-aws-waf"></a>

面向互联网的用户容易 APIs 受到恶意攻击。 AWS WAF 是一种 Web 应用程序防火墙，可帮助防范 APIs 此类攻击。它可以 APIs 防止常见的 Web 漏洞，例如 SQL 注入和跨站脚本攻击。您可以[AWS WAF](https://aws.amazon.com/waf/)与 API Gateway 配合使用来帮助保护 APIs。