

# Amazon API Gateway 中的数据保护
<a name="data-protection"></a>

AWS[责任共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)适用于 Amazon API Gateway 中的数据保护。如该模式中所述，AWS 负责保护运行所有 AWS 云 的全球基础架构。您负责维护对托管在此基础架构上的内容的控制。您还负责您所使用的 AWS 服务 的安全配置和管理任务。有关数据隐私的更多信息，请参阅[数据隐私常见问题](https://aws.amazon.com/compliance/data-privacy-faq/)。有关欧洲数据保护的信息，请参阅 *AWS Security Blog* 上的 [AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

出于数据保护目的，我们建议您保护 AWS 账户 凭证并使用 AWS IAM Identity Center 或 AWS Identity and Access Management（IAM）设置单个用户。这样，每个用户只获得履行其工作职责所需的权限。我们还建议您通过以下方式保护数据：
+ 对每个账户使用多重身份验证（MFA）。
+ 使用 SSL/TLS 与 AWS 资源进行通信。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 使用 AWS CloudTrail 设置 API 和用户活动日记账记录。有关使用 CloudTrail 跟踪来捕获 AWS 活动的信息，请参阅《AWS CloudTrail 用户指南》**中的 [Working with CloudTrail trails](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用 AWS 加密解决方案以及 AWS 服务 中的所有默认安全控制。
+ 使用高级托管安全服务（例如 Amazon Macie），它有助于发现和保护存储在 Amazon S3 中的敏感数据。
+ 如果在通过命令行界面或 API 访问 AWS 时需要经过 FIPS 140-3 验证的加密模块，请使用 FIPS 端点。有关可用的 FIPS 端点的更多信息，请参阅[美国联邦信息处理标准（FIPS）140-3](https://aws.amazon.com/compliance/fips/)。

我们强烈建议您切勿将机密信息或敏感信息（如您客户的电子邮件地址）放入标签或自由格式文本字段（如**名称**字段）。这包括使用控制台、API、AWS CLI 或 AWS SDK 处理 API Gateway 或其他 AWS 服务 时。在用于名称的标签或自由格式文本字段中输入的任何数据都可能会用于计费或诊断日志。如果您向外部服务器提供网址，强烈建议您不要在网址中包含凭证信息来验证对该服务器的请求。

# Amazon API Gateway 中的数据加密
<a name="data-protection-encryption"></a>

数据保护是指，在数据传输（传入和传出 API Gateway 时）和处于静态（存储在 中时）期间保护数据AWS

## Amazon API Gateway 中的静态数据加密
<a name="data-protection-at-rest"></a>

如果选择为 REST API 启用缓存，则可以启用缓存加密。要了解更多信息，请参阅“[API Gateway 中针对 REST API 的缓存设置](api-gateway-caching.md)”。

有关数据保护的更多信息，请参阅*AWS安全性博客*上的[AWS责任共担模式和 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

### 证书私有密钥的加密和解密
<a name="private-key"></a>

当您为私有 API 创建自定义域名后，系统会使用别名为 **aws/acm** 的 AWS 托管式 KMS 密钥，对您的 ACM 证书和私有密钥进行加密。您可以在 AWS KMS 控制台的 **AWS 托管式密钥**下，查看具有此别名的密钥 ID。

API Gateway 不会直接访问您的 ACM 资源，而是使用 AWS TLS Connection Manager 保护及访问证书的私有密钥。如果您使用 ACM 证书为私有 API 创建 API Gateway 自定义域名，API Gateway 会将您的证书与 AWS TLS Connection Manager 关联。方法为在 AWS KMS 中针对前缀为 **aws/acm** 的 AWS 托管密钥创建授权。授权是一种策略工具，允许 TLS Connection Manager 在加密操作中使用 KMS 密钥。授权允许被授权主体（TLS Connection Manager）对 KMS 密钥调用指定授权操作，以解密证书的私有密钥。然后，TLS Connection Manager 使用证书和解密（明文）的私有密钥，与 API Gateway 服务的客户端建立安全连接（SSL/TLS 会话）。当证书与私有 API 的 API Gateway 自定义域名取消关联时，该授权就会停用。

如果要删除对 KMS 密钥的访问，建议使用 AWS 管理控制台或 AWS CLI 中的 `update-service` 命令，从服务中替换或删除证书。

### API Gateway 的加密上下文
<a name="encryption-context"></a>

[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)是一组可选的键值对，其中包含有关私有密钥用途的上下文信息。AWS KMS 将加密上下文绑定到加密数据，并将其用作附加验证数据，以支持经过身份验证的加密。

当您的 TLS 密钥与 API Gateway 和 TLS Connection Manager 一起使用时，API Gateway 服务的名称将包含在用于静态加密密钥的加密上下文中。您可以通过查看 CloudTrail 日志中的加密上下文（如下一节所示），或者查看 ACM 控制台中的**关联资源**选项卡，验证您的证书和私有密钥用于哪个 API Gateway 自定义域名。

要解密数据，在请求中包含相同的加密上下文。API Gateway 在所有 AWS 加密操作中使用同一个加密上下文，其中密钥为 `aws:apigateway:arn`，值为 API Gateway `PrivateDomainName` 资源的 Amazon 资源名称（ARN）。

下面的示例显示操作输出中的加密上下文，例如 `CreateGrant`：

```
"constraints": {
"encryptionContextEquals": {
"aws:acm:arn": "arn:aws:acm:us-west-2:859412291086:certificate/9177097a-f0ae-4be1-93b1-19f911ea4f88",
"aws:apigateway:arn": "arn:aws:apigateway:us-west-2:859412291086:/domainnames/denytest-part1.pdx.sahig.people.aws.dev+cbaeumzjhg"
}
},
"operations": [
"Decrypt"
],
"granteePrincipal": "tlsconnectionmanager.amazonaws.com"
```

## Amazon API Gateway 中的传输中数据加密
<a name="data-protection-in-transit"></a>

通过 Amazon API Gateway 创建的 API 只公开 HTTPS 端点。API Gateway 不支持未加密的（HTTP）端点。

API Gateway 管理原定设置 `execute-api` 端点的证书。如果您配置自定义域名，[请为该域名指定证书](how-to-custom-domains.md#custom-domain-names-certificates)。作为最佳实践，请勿[固定证书](https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting-pinning.html)。

为了获得更高的安全性，您可以选择要为您的 API Gateway 自定义域实施的最低传输层安全性 (TLS) 协议版本。WebSocket API 和 HTTP API 仅支持 TLS 1.2。要了解更多信息，请参阅“[选择针对 API Gateway 中自定义域的安全策略](apigateway-custom-domain-tls-version.md)”。

您还可以在账户中使用自定义 SSL 证书设置 Amazon CloudFront 分配，并将其用于区域 API。然后，您可以根据您的安全性和合规性要求，为具有 TLS 1.1 或更高版本的 CloudFront 分配配置安全策略。

有关数据保护的更多信息，请参阅 [保护 API Gateway 中的 REST API](rest-api-protect.md) 以及*AWS安全性博客*上的[AWS责任共担模式和 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

# 互联网络流量隐私保护
<a name="security-traffic-privacy"></a>

使用 Amazon API Gateway，您可以创建只能从您的 Amazon Virtual Private Cloud (VPC) 访问的私有 REST API。VPC 使用[接口 VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)，该终端节点是您在 VPC 中创建的终端节点网络接口。通过使用[资源策略](apigateway-private-api-create.md#apigateway-private-api-set-up-resource-policy)，您可以允许或拒绝从选定的 VPC 和 VPC 终端节点（包括跨 AWS 账户）对您的 API 进行访问。每个端点都可用于访问多个私有 API。您还可以使用 Direct Connect 建立从本地网络到 Amazon VPC 的连接，并在该连接上访问您的私有 API。在所有情况下，您的私有 API 的流量使用安全的连接，不会离开 Amazon 网络；它与公有 Internet 隔离开来。要了解更多信息，请参阅“[API Gateway 中的私有 REST API](apigateway-private-apis.md)”。