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

上次更新日期:2022 年 11 月 3 日

我想将我的 API Gateway 私有 API 设置为负载均衡器后面的目标。然后,我想使用我的账户或其他 AWS 账户从应用程序或网络负载均衡器访问我的私有 API。该如何进行设置?

简短描述

要使用 AWS Direct Connect 或 Amazon Route 53 访问您的私有 API,请参阅如何调用私有 API。您还可以使用接口 VPC 端点在另一个 AWS 账户中访问 API Gateway 私有 REST API

在以下设置中,私有 API 作为目标添加到负载均衡器。这是通过使用 Amazon Virtual Private Cloud (Amazon VPC) 端点弹性网络接口 IP 地址完成的。

重要提示:私有 API 不支持自定义域名。解决方法是,您可以调用该域并将其连接到负载均衡器。然后,使用本文中描述的设置调用私有 API。

解决方法

创建一个 Amazon VPC 端点

1.    打开 Amazon VPC 控制台,选择 Endpoints(端点),然后选择 Create endpoint(创建端点)。
注意:如果您已经使用 API execute-api 在 VPC 中设置了任何 Amazon VPC 端点,请确保禁用私有 DNS。

2.    对于 Services(服务),选择 com.amazonaws.com.your-region.execute-api

3.    对于 VPC,选择您的 Amazon VPC。

4.    对于 Subnets(子网),选择不同可用区 (AZ ID) 中的两个子网,然后选择 Create endpoint(创建端点)。

5.    选择您的端点,选择 subnets(子网),然后复制 IP 地址。您将在另一个步骤中使用此 IP 地址。

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

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

1.    打开 API Gateway console(API Gateway 控制台),然后选择 Create API(创建 API)。

2.    在 REST API 中,选择 Build(构建)。

3.    在 Settings(设置)中,输入以下内容:
对于 API name(API 名称),输入 API 的名称。
对于 Endpoint Type(端点类型),选择 Private(私有)。
对于 Endpoint IDs(端点 ID),输入您之前创建的端点 ID。

4.    选择 Create API(创建 API)。

5.    在导航窗格中,选择 Resource Policy(资源策略)。

6.    在资源策略编辑器中,粘贴以下策略:
注意:
vpce-<id> 替换为您的 VPC 端点 ID。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:<region>:<account :<api-id>/*/*/*",
      "Condition": {
        "StringNotEquals": {
          "aws:sourceVpce": "vpce-081234d1ad408e"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:<region>:<account-id>:<api-id>/*/*/*"
    }
  ]
}

7.    选择 Save(保存)。

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

创建或导入 AWS Certificate Manager 公有证书

如果您尚未这样做,请执行以下操作之一:

申请公有证书

-或者-

导入证书

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

如果您尚未这样做,请执行以下操作之一:

创建应用程序负载均衡器

-或者-

创建网络负载均衡器

创建目标组

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

2.    在导航窗格中的 Load Balancing(负载均衡)中,选择 Load Balancers(负载均衡器),选择 Target Groups(目标组),然后选择 Create target group(创建目标组)。

3.    对于 Target type(目标类型),选择 IP addresses(IP 地址)。

4. 对于Target group name(目标组名称),输入一个名称。

应用程序负载均衡器

对于 Protocol(协议),选择 HTTPS
对于 Port(端口),选择 443
对于 VPC,选择您的 VPC。
对于运行状况检查路径,输入 200,403。(这可确保 VPC 端点在目标组中显示为 Healthy(健康))

网络负载均衡器

对于 Protocol(协议),选择 TLS
对于 Port(端口),选择 443
对于 VPC,选择您的 VPC。

5.    选择 Next(下一步)。

6.    在 Specify IPs(指定 IP)中,输入您在Create an interface Amazon VPC endpoint(创建接口 Amazon VPC 端点)部分复制的 IP 地址,然后选择 Add IPv4 address(添加 IPv4 地址)。

7.    选择 Create target group(创建目标组)。

配置负载均衡器

1.    打开 EC2 控制台

2.    在导航窗格中,选择 Load Balancers(负载均衡器),然后选择 Create Load Balancer(创建负载均衡器)。

应用程序负载均衡器

对于 Scheme(方案),请根据您的配置选择 Internet-facing(面向互联网)或 Internal(内部)。
对于 Protocol(协议),选择 HTTPS
对于 VPCsubnets(子网),选择您的 VPC 和子网。

网络负载均衡器对于 Scheme(方案),请根据您的配置选择 Internet-facing(面向互联网)或 Internal(内部)。
对于 Protocol(协议),选择 TLS
对于 VPCsubnets(子网),选择您的 VPC 和子网。
对于 Security policy(安全策略),选择默认策略 ELBSecurityPolicy-TLS (recommended)(ELBSecurityPolicy-TLS(推荐))。
对于 Default SSL/TLS certificate(默认 SSL/TLS 证书),选择 From ACM(来自 ACM)。
选择 Select a certificate(选择证书)下拉菜单,然后选择您的证书。

3.    选择 Create Load Balancer(创建负载均衡器)。

注意:负载均衡器目标应是 VPC 端点创建的弹性网络接口的 IP 地址。这些是在步骤 1 中完成的。您可以通过选择您的 VPC 端点并打开 Subnets(子网)选项卡,找到这些弹性网络接口。

在 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(403 禁止)响应代码或 DNS 解析错误。如果您遇到任何问题,请参阅对负载均衡器进行故障排除