如何使用应用程序或网络负载均衡器来调用 API Gateway 私有 API?

2 分钟阅读
0

我想将自己的 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 端点

1.    打开 Amazon VPC 控制台。

2.    选择端点,然后选择创建端点
**注意:**如果您已经在 VPC 中使用 API execute-api 设置了任何 Amazon VPC 端点,请关闭私有 DNS。

  1. 服务处,选择 com.amazonaws.com.your-region.execute-api

  2. VPC 处,选择您的 Amazon VPC。

5.   在 子网 处,选择不同可用区(AZ ID)中的两个子网,然后选择创建端点

  1. 选择您的端点,选择子网,然后复制 IP 地址

有关更多信息,请参阅为 API Gateway execute-api 创建接口 VPC 端点

创建私有 REST API 并授予 Amazon VPC 端点权限

  1. 打开 API Gateway 控制台,然后选择创建 API

  2. REST API 处,选择构建

  3. 设置中,输入以下信息: 
    API 名称处,输入 API 的名称。
    端点类型处,选择私有
    端点 ID处,输入您创建的端点 ID。

4.    选择创建 API

5.    在导航窗格中,选择资源策略

6.    在资源策略编辑器中,粘贴以下策略:

{
  "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 的 ARN

7.    选择保存

有关更多信息,请参阅使用 API Gateway 控制台创建私有 API

创建或导入 Amazon Certificate Manager 公共证书

您既可以申请公有证书,也可以导入证书

创建应用程序负载均衡器或网络负载均衡器

您既可以创建应用程序负载均衡器,也可以创建网络负载均衡器

创建目标组

1.    打开 Amazon Elastic Compute Cloud(Amazon EC2)控制台

2.    在导航窗格中的负载均衡中,选择负载均衡器,然后选择目标组

3.    选择创建目标组

  1. 目标类型处,选择 IP 地址

  2. 目标组名称处,输入一个名称。

应用程序负载均衡器

协议处,选择 HTTPS
端口处,选择 443
VPC处,选择您的 VPC。
运行状况检查路径处,输入 200,403,使 VPC 端点在目标组中显示为正常

网络负载均衡器

协议处,选择 TLS
端口处,选择 443
VPC处,选择您的 VPC。

6.    选择下一步

  1. 指定 IP 中,输入您在创建接口 Amazon VPC 端点部分中复制的 IP 地址,然后选择添加 IPv4 地址

8.    选择创建目标组

配置负载均衡器

  1. 打开 EC2 控制台

  2. 在导航窗格中,选择负载均衡器,然后选择创建负载均衡器

应用程序负载均衡器

方案处,根据您的配置选择面向互联网内部
协议处,选择 HTTPS
VPC子网处,选择您的 VPC 和子网。

网络负载均衡器

方案处,根据您的配置选择面向互联网内部
协议处,选择 TLS
VPC子网处,选择您的 VPC 和子网。
安全政策处,选择默认政策 ELBSecurityPolicy-TLS(推荐)
默认 SSL/TLS 证书处,选择 From ACM
选择选择证书下拉菜单,然后选择您的证书。

3.    选择创建负载均衡器

注意:负载均衡器目标位于 VPC 端点创建的弹性网络接口的 IP 地址中。若要找到这些弹性网络接口,请选择您的 VPC 端点,然后打开子网选项卡。

在 Amazon Route 53 公共或私有托管区中创建记录

您既可以创建公共托管区,也可以创建私有托管区

然后,创建 CNAME 记录并将其与您的应用程序或网络负载均衡器关联。

测试

对于公共负载均衡器,您可以从本地计算机发出 curl 请求。

对于私有负载均衡器,请在负载均衡器的一个子网中启动新的 EC2 实例。然后,发出类似于以下请求的 curl 请求:

curl -v https://{custom-domain-name}/<stage-name>/<resource-path> -H 'Host: <api-id>.execute-api.<region>.amazonaws.com'

-或-

curl -v https://{custom-domain-name}/<stage-name>/<resource-path> -H 'x-apigw-api-id:{api-id}'

成功的请求将返回一个 200 OK 响应代码。失败的请求将返回一个 403 Forbidden 响应代码或 DNS resolution 错误。如果您遇到任何问题,请参阅排除负载均衡器的故障

相关信息

如何通过 Direct Connect 连接来连接到私有 API Gateway?

如何排除连接到 API Gateway 私有 API 端点时出现的故障?

使用 Amazon CloudWatch 指标监控 REST API

为 API Gateway 中的 REST API 设置 CloudWatch 日志记录

AWS 官方
AWS 官方已更新 1 年前