如何使用應用程式或 Network Load Balancer 叫用 API 閘道私有 API?

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

我想將 API 閘道私有 API 設定為負載平衡器後面的目標。然後,我想要使用我的帳戶或其他 AWS 帳戶從應用程式或 Network Load Balancer 存取我的私有 API。該如何設定?

簡短描述

若要使用 AWS Direct Connect 或 Amazon Route 53 存取私有 API,請參閱如何叫用私有 API。您也可以使用介面 VPC 端點存取另一個 AWS 帳戶中的 API 閘道私有 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 閘道 execute-api 建立介面 VPC 端點

建立私有 REST API 並授予 Amazon VPC 端點權限

1.    開啟 API Gateway 主控台,然後選擇 Create API (建立 API)。

2.    針對 REST API (REST API),選擇 Build (建置)。

3.    在 Settings (設定) 中,輸入下列項目:
針對 API Name (名稱),輸入 API 的名稱。
針對 Endpoint Type (端點類型),請選擇 Private (私有)。
針對 Endpoint IDs (端點 ID),請輸入先前建立的端點 ID。

4.    選擇 Create API (建立 API)。

5.    在導覽窗格中,選擇 Resource Policy (資源政策)。

6.    在資源政策編輯器中,貼上下列政策:
注意:
用您的 VPC 端點 ID 取代 vpce-<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 閘道主控台建立私有 API

建立或匯入 AWS Certificate Manager 公有憑證

如果您尚未這樣做,請執行下列其中一項操作:

要求公有憑證

–或者–

匯入憑證

建立 Application Load Balancer 或 Network Load Balancer

如果您尚未這樣做,請執行下列其中一項操作:

建立 Application Load Balancer

–或者–

建立 Network Load Balancer

建立目標群組

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 (目標群組名稱),請輸入名稱。

Application Load Balancer

針對 Protocal (通訊協定),選擇 HTTPS
針對 Port (連接埠),選擇 443
針對 VPC,請選擇您的 VPC。
針對運作狀態檢查路徑,請輸入 200,403。(這可確保 VPC 端點在目標群組中顯示為 Healthy (運作狀態良好))

Network Load Balancer

針對 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 console (EC2 主控台)。

2.    在導覽窗格中,選擇 Load Balancers (負載平衡器),然後選擇 Create Load Balancer (建立負載平衡器)。

Application Load Balancer

針對 Scheme (結構描述),請根據您的組態選擇 Internet-facing (面向網際網路) 或 Internal (內部)。
針對 Protocal (通訊協定),選擇 HTTPS
針對 VPCsubnets (子網路),請選擇您的 VPC 和子網路。

Network Load Balancer 針對 Scheme (結構描述),請根據您的組態選擇 Internet-facing (面向網際網路) 或 Internal (內部)。
針對 Protocol (通訊協定),選擇 TLS
針對 VPCsubnets (子網路),請選擇您的 VPC 和子網路。
針對 Security policy (安全性政策),請選擇預設政策 ELBSecurityPolicy-TLS (recommended) (ELB安全性政策 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 公共或私有託管區域中創建記錄

如果您尚未這樣做,請執行下列其中一項操作:

建立公用託管區域

–或者–

建立私有託管區域

然後,create a CNAME record (建立 CNAME 記錄),並將其與您的應用程式或 Network Load Balancer 建立關聯。

測試

針對公用負載平衡器,您可以從本機電腦發出 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 解析錯誤。如果遇到任何問題,請參閱疑難排解負載平衡器