跳至內容

如何使用 Application Load Balancer 或 Network Load Balancer 調用 API Gateway 私有 API?

3 分的閱讀內容
0

我想使用 AWS 帳戶從 Application Load Balancer 或 Network Load Balancer 存取我的私有 API。

解決方法

若要透過 AWS Direct Connect 或 Amazon Route 53 存取私有 REST API,請參閱調用私有 API。您也可以使用 Amazon 虛擬私有雲端 (VPC) 介面端點,存取其他帳戶中的 API Gateway 私有 REST API。

以下解決方法會使用指派給 execute-api Amazon VPC 端點的 IP 位址。您可以使用 VPC 端點的 IP 位址,將私有 REST API 新增為負載平衡器的目標。

建立 Amazon VPC 端點

完成以下步驟:

  1. 開啟 Amazon VPC console (Amazon VPC 主控台)。
  2. 選擇 Endpoints (端點),然後選擇 Create endpoint (建立端點)。
  3. 在 Services (服務) 中,選擇 com.amazonaws.your-region.execute-api。
  4. 在 VPC 中,選取您的 Amazon VPC。
  5. 在 Subnets (子網路) 中,選取不同可用區域內的子網路。
  6. 選擇 Create endpoint (建立端點)。
  7. 選取您的端點、選擇 subnets (子網路),然後記下 IP 位址。

如需更多資訊,請參閱 API Gateway 中的私有 REST API。

建立私有 REST API,並授予 VPC 端點調用私有 API 的權限

完成以下步驟:

  1. 開啟 API Gateway console (API Gateway 主控台)。

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

  3. 在 REST API 中,選擇 Build (建置)。

  4. 在 Settings (設定) 的 API name (API 名稱) 中,輸入 API 名稱。

  5. 在 Endpoint Type (端點類型) 中,選擇 Private (私有)。

  6. (選用) 在 Endpoint IDs (端點 ID) 中輸入您的端點 ID。

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

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

  9. 輸入以下政策:

    {  "Version": "2012-10-17",  "Statement": [
        {
          "Effect": "Deny",
          "Principal": "*",
          "Action": "execute-api:Invoke",
          "Resource": "arn:aws:execute-api:your-region:ACCOUNT_ID:API_ID/*/*/*",
          "Condition": {
            "StringNotEquals": {
              "aws:SourceVpce": "vpce-081234d1ad408e"
            }
          }
        },
        {
          "Effect": "Allow",
          "Principal": "*",
          "Action": "execute-api:Invoke",
          "Resource": "arn:aws:execute-api:your-region:ACCOUNT_ID:API_ID/*/*/*"
        }
      ]
    }

    注意: 將 vpce-081234d1ad408e 替換為您的 VPC 端點 ID。將 arn:aws:execute-api:your-region:ACCOUNT_ID:API_ID 替換為 API 方法的 Amazon Resource Name (ARN)。

  10. 選擇 Save (儲存)。

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

您可以申請公共憑證,或匯入憑證。

建立目標群組

完成以下步驟:

  1. 開啟 Amazon Elastic Compute Cloud (Amazon EC2) console (Amazon EC2 主控台)。
  2. 在導覽窗格的 Load Balancing (負載平衡) 下方,依序選擇 Load Balancers (負載平衡器) 和 Target Groups (目標群組)。
  3. 選擇 Create target group (建立目標群組)。
  4. 在 Target type (目標類型) 中,選擇 IP addresses (IP 位址)。
  5. 在 Target group name (目標群組名稱) 中輸入名稱。
  6. 在 Protocol (通訊協定) 中,為 Application Load Balancer 選擇 HTTPS,或為 Network Load Balancer 選擇 TLS。
  7. 在 Port (連接埠) 中,選擇 443。
  8. 在 VPC 中,選取您的 VPC。
  9. 在 Health check protocol (運作狀態檢查通訊協定) 中,選擇 HTTPS。
  10. 在 Health check path (運作狀態檢查路徑) 中輸入 "/",並在 Success codes (成功代碼) 中輸入 200,403,讓 VPC 端點顯示為 Healthy (運作狀態良好)。
  11. 選擇 Next (下一步)。
  12. 在 Specify IPs (指定 IP) 中,輸入您先前記下的 IP 位址。
  13. 選擇 Add IPv4 address (新增 IPv4 位址)。
  14. 新增所有 IP 位址,然後選擇 Include as pending below (在下方列為擱置中)。
  15. 選擇 Create target group (建立目標群組)。

建立 Application Load Balancer 或 Network Load Balancer

如需相關指示,請參閱建立 Application Load Balancer 或建立 Network Load Balancer。

設定負載平衡器

完成以下步驟:

  1. 開啟 Amazon EC2 console (Amazon EC2 主控台)。
  2. 在導覽窗格中,選擇 Load Balancers (負載平衡器),然後選擇 Create Load Balancer (建立負載平衡器)。
  3. 在 Scheme (結構描述) 中,選擇 Internet-facing (面向網際網路) 或 Internal (內部)。
  4. 在 Protocol (通訊協定) 中,為 Application Load Balancer 選擇 HTTPS,或為 Network Load Balancer 選擇 TLS。
  5. 在 Default actions (預設動作) 中,選擇要將流量轉送至的目標群組。
  6. 在 VPC 和 subnets (子網路) 中,選取您的 VPC 和子網路。
  7. 若使用 Application Load Balancer,請在 Security policy (安全政策) 中選擇最新的預先定義安全政策。若使用 Network Load Balancer,請保留預設安全政策。
  8. 在 Default SSL/TLS certificate (預設 SSL/TLS 憑證) 中,選擇 From ACM (從 ACM)。
  9. 選擇 Select a certificate (選取憑證),然後選取您的憑證。
  10. 選擇 Create load balancer (建立負載平衡器)。

建立自訂網域名稱

在 API Gateway 主控台中建立自訂網域名稱。接著,將私有 REST API 對應至自訂網域名稱。

在 Route 53 公共或私有託管區域中建立記錄

建立公共託管區域或私有託管區域。接著,建立 CNAME 或別名記錄,將自訂網域名稱指向 Application Load Balancer 或 Network Load Balancer。

測試公共或私有負載平衡器

若使用公共負載平衡器,請從本機執行 curl 命令。

若使用私有負載平衡器,請在負載平衡器所在的 VPC 中啟動新的 EC2 執行個體。接著,執行以下 curl 命令:

curl -v https://{custom-domain-name}/<resource-path>

請求成功時會傳回「200 OK」回應代碼。請求失敗時會傳回「403 Forbidden」回應代碼或 DNS 解析錯誤。

如需進一步疑難排解,請參閱如何疑難排解 API Gateway 傳回的 HTTP 403 錯誤?、疑難排解 Application Load Balancer及疑難排解 Network Load Balancer。

相關資訊

如何透過 Direct Connect 連線來連線至私有 API Gateway?

連線至 API Gateway 私有 API 端點時,如何疑難排解問題?

使用 Amazon CloudWatch 指標監控 REST API 執行作業

在 API Gateway 中為 REST API 設定 CloudWatch 記錄