我想将我的 Amazon API Gateway 私有 API 设置为负载均衡器后面的目标。然后,我想使用 AWS 账户从应用程序负载均衡器或网络负载均衡器访问我的私有 API。
解决方法
要通过 Amazon Direct Connect 或 Amazon Route 53 访问您的私有 API,请参阅调用私有 API。您还可以使用接口虚拟私有云 (VPC) 端点来访问另一个 AWS 账户中的 API Gateway 私有 REST API。
以下解决方法使用 Amazon Virtual Private Cloud (Amazon VPC) 端点弹性网络接口 IP 地址。使用此 IP 地址,您可以将私有 API 作为目标添加到负载均衡器中。
**重要事项:**API Gateway 不支持私有 API 的自定义域名。解决方法是,您可以调用该域并将其连接到负载均衡器。然后,使用以下设置来调用私有 API。
创建 Amazon VPC 端点
完成以下步骤:
- 打开 Amazon VPC 控制台。
- 选择端点,然后选择创建端点。
- 输入以下信息:
为服务选择 com.amazonaws.com.your-region.execute-api。
对于 VPC,选择您的 Amazon VPC。
对于子网,选择位于不同可用区 (AZ ID) 的两个子网。
**注意:**如果您已经在 VPC 中使用 execute-api 设置了 Amazon VPC 端点,关闭私有 DNS。
- 选择创建端点。
- 选择您的端点,选择子网,然后复制 IP 地址。
有关更多信息,请参阅 API Gateway 中的私有 REST API。
创建私有 REST API 并授予 Amazon VPC 端点权限
完成以下步骤:
- 打开 API Gateway 控制台,然后选择创建 API。
- 为 REST API 选择构建。
- 在设置中,输入以下信息:
在 API 名称中,为 API 输入名称。
在端点类型处,选择私有。
在端点 ID 中,输入您创建的端点 ID。
- 选择创建 API。
- 在导航窗格中,选择资源策略。
- 输入以下策略:
{
"Version": "2012-10-17", "Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:us-east-1:ACCOUNT_ID:API_ID/*/*/*",
"Condition": {
"StringNotEquals": {
"aws:SourceVpce": "vpce-081234d1ad408e"
}
}
},
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:us-east-1:ACCOUNT_ID:API_ID/*/*/*"
}
]
}
**注意:**将 vpce-081234d1ad408e 替换为您的 VPC 端点 ID。另外,将 arn:aws:execute-api:us-east-1:ACCOUNT_ID:API_ID 替换为您的 API 的 Amazon 资源名称 (ARN)。
- 选择保存。
创建或导入 Amazon Certificate Manager 公共证书
您可以申请公共证书,也可以导入证书。
创建应用程序负载均衡器或网络负载均衡器
您可以创建应用程序负载均衡器,也可以创建网络负载均衡器。
创建目标组
完成以下步骤:
- 打开 Amazon Elastic Compute Cloud (Amazon EC2) 控制台。
- 在导航窗格中的负载均衡下,选择负载均衡器,然后选择目标组。
- 选择创建目标组。
- 输入以下信息:
为目标类型选择 IP 地址。
对于目标组名称,输入一个名称。
应用程序负载均衡器
在协议处,选择 HTTPS。
在端口处,选择 443。
在 VPC处,选择您的 VPC。
对于运行状况检查路径,输入“/”,对于成功代码,输入 200,403,VPC 端点将显示正常。
网络负载均衡器
在协议处,选择 TLS。
在端口处,选择 443。
在 VPC 处,选择您的 VPC。
- 选择下一步。
- 对于指定 IP,输入您在创建接口 Amazon VPC 端点部分复制的 IP 地址。然后,选择添加 IPv4 地址。
- 选择创建目标组。
配置负载均衡器
完成以下步骤:
- 打开 EC2 控制台。
- 在导航窗格中,选择负载均衡器,然后选择创建负载均衡器。
应用程序负载均衡器
对于方案,根据您的配置选择面向互联网或内部。
在协议处,选择 HTTPS。
在 VPC 和子网处,选择您的 VPC 和子网。
网络负载均衡器
对于方案,根据您的配置选择面向互联网或内部。
在协议处,选择 TLS。
在 VPC 和子网处,选择您的 VPC 和子网。
在安全政策处,选择默认政策 ELBSecurityPolicy-TLS(推荐)。
在默认 SSL/TLS 证书处,选择 From ACM。
选择选择证书,然后选择您的证书。
- 选择创建负载均衡器。
注意:负载均衡器目标位于 VPC 端点创建的弹性网络接口的 IP 地址中。若要找到这些弹性网络接口,请选择您的 VPC 端点,然后打开子网选项卡。
在 Amazon Route 53 公共或私有托管区中创建记录
创建公共托管区或私有托管区。然后,创建 CNAME 或别名记录,并将它与您的应用程序或网络负载均衡器关联。
创建自定义域
在 API Gateway 控制台中创建自定义域。然后,将私有 Rest API 映射到自定义域下。
测试
对于公共负载均衡器,从您的本地计算机发出 curl 请求。对于私有负载均衡器,在您的负载均衡器的一个子网中启动一个新 EC2 实例。然后,发出类似于以下示例的 curl 请求:
curl -v https://{custom-domain-name}/<resource-path>
成功的请求将返回 200 OK 响应代码。失败的请求将返回 403 Forbidden 响应代码或 DNS resolution 错误。如果您遇到任何问题,请参阅对应用程序负载均衡器进行故障排除。
相关信息
如何通过 Direct Connect 连接来连接到私有 API Gateway?
如何排查连接至 API Gateway 私有 API 端点时出现的问题?
使用 Amazon CloudWatch 指标监控 REST API 执行
在 API Gateway 中为 REST API 设置 CloudWatch 日志记录