如何透過 Direct Connect 連線與私有 API Gateway 建立連線?

3 分的閱讀內容
0

我想透過 AWS Direct Connect 連線與私有 Amazon API Gateway 建立連線。

解決方法

為 Amazon API Gateway 服務建立 Amazon Virtual Private Cloud (Amazon VPC) 端點

Amazon VPC 端點允許 VPC 中的私有資源與 API Gateway 服務安全地通訊。若要為 API Gateway 建立 Amazon VPC 端點,請執行下列步驟:

  1. 開啟 Amazon VPC 主控台
  2. 在導覽窗格的 Virtual Private Cloud 下,選擇端點
  3. 對於服務類別,選擇 AWS 服務
  4. 對於服務名稱,請按關鍵字搜尋 "execute-api"。此搜尋傳回單一結果:"com.amazonaws.REGION.execute-api"。
  5. 選擇 "com.amazonaws.REGION.execute-api"。
  6. 對於 VPC,請選取設定 Direct Connect 連線的 Amazon VPC。
  7. 對於子網路,選取您希望 API 可供存取的子網路。
  8. 對於啟用 DNS 名稱,清除啟用此端點方塊。關閉此設定要求 Amazon VPC 開啟「DNS 主機名稱」,這是可選功能。如果 VPC 使用 Amazon 提供的 DNS,保持此設定開啟將會中斷對 Amazon VPC 中部署的公用 API Gateway API 的所有存取。
  9. 安全群組中,選擇 Amazon VPC 端點的安全群組。安全群組必須允許存取從 Amazon VPC 傳入的 TCP/443。
  10. 對於政策,選擇完整存取權。此選項允許使用 AWS IAM 許可從 Amazon VPC 到 VPC 端點的所有連線。
  11. 選擇建立端點
  12. 記下 Amazon VPC 端點 ID (例如 "vpce-01234567890abcdef")。您稍後需要此 ID 來編輯 API 的資源政策。

如果您尚無私有 REST API,請建立一個

  1. 開啟 API Gateway 主控台
  2. 選取 Direct Connect 連線的區域。
  3. 選擇建立 API
  4. 對於 API 類型,選擇 REST API 私有
  5. 對於 API 通訊協定,選擇 REST
  6. 建立新 API 下,選擇範例 API
  7. 設定下,確認端點類型 已設定為私有
  8. 選擇匯入

授予 Amazon VPC 端點存取私有 REST API 的權限

  1. 在API 管理頁面上,選擇資源政策
  2. 將以下政策複製到您的資源政策中。
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Deny",
          "Principal": "*",
          "Action": "execute-api:Invoke",
          "Resource": "execute-api:/*/*/*",
          "Condition": {
            "StringNotEquals": {
              "aws:sourceVpce": "{{vpceID}}"
            }
          }
        },
        {
          "Effect": "Allow",
          "Principal": "*",
          "Action": "execute-api:Invoke",
          "Resource": "execute-api:/*/*/*"
        }
      ]
    }
    {{vpceID}} 字串取代為您在建立 VPC 端點後所記下的 Amazon VPC 端點 ID。或者,在端點下的 Amazon VPC 主控台中尋找該 ID。
    注意:此範例政策允許從 Amazon VPC 存取 API 上的所有資源。若要進一步限制存取,請修改資源金鑰。
  3. 選擇儲存

部署您的 API 以認可變更

現在您已建立 API 並新增了資源政策,請將 API 部署到階段以實作變更:

  1. API Gateway 主控台上,從導覽窗格中選擇資源
  2. 選擇動作
  3. API 動作下,選擇部署 API
  4. 對於部署階段,選擇 [新階段]
  5. 輸入階段的名稱。
  6. 選擇部署。變更將部署到 API。此過程可能需要幾分鐘才能傳播。

測試從 Direct Connect 連線對 API 的存取

請遵循下列步驟來測試存取:

  1. Amazon VPC 主控台上,選擇端點,然後選取您建立的 VPC 端點。

  2. 詳細資訊下,複製 VPC 端點的 DNS 名稱。例如,
    "vpce-0123456789abcdef-b238e1kf.execute-api.REGION.vpce.amazonaws.com"。

  3. 在使用 Direct Connect 連線至 Amazon VPC 的電腦中,執行下列其中一個指令來測試 VPC 端點的 DNS 主機名稱解析度。

    Windows PowerShell:

    nslookup <YOUR_VPCE_HOSTNAME>

    -或-

    macOS/Unix:

    nslookup <YOUR_VPCE_HOSTNAME>

    **注意:**用您之前建立的 VPC 端點的主機名稱取代 YOUR_VPCE_HOSTNAME

    回應會傳回與您的 Amazon VPC 端點對應的私有 IP 位址。如果您在回應中沒有收到私有 IP 位址,請在端點下的 Amazon VPC 主控台上檢查 Amazon VPC 端點主機名稱。

  4. 如果 DNS 正常運作,則提出測試 HTTP 請求。若要執行此操作,您需要來自 API Gateway 主控台的 API ID。從清單複製 API ID。API ID 是一個字串,例如 "chw1a2q2xk"。

  5. 從連線至 Direct Connect 連線的內部部署電腦執行下列指令:

    Windows PowerShell:

    curl -H @{'x-apigw-api-id' = '<YOUR_API_ID>'} https://<YOUR_VPCE_HOSTNAME>/<STAGE>

    -或-

    macOS/Unix:

    curl -IX GET -H 'x-apigw-api-id:<YOUR_API_ID>' https://<YOUR_VPCE_HOSTNAME>/<STAGE>

    注意:YOUR_API_ID 取代為您的私有 REST API 或之前建立的 API 的 ID。將 YOUR_VPCE_HOSTNAME 取代為 VPC 端點的主機名稱,並將STAGE 取代為您之前建立的部署階段。

請確定下列事項:

  • 回應的第一行包括 "HTTP/1.1 200 OK"。
  • 如果您沒有收到回應,請檢查與 Amazon VPC 端點關聯的安全群組是否允許來自來源 IP 位址的 TCP/443 上的傳入連線。另請檢查您的連線是否正確使用 Direct Connect 連線。
  • 如果您收到「403 禁止」回應,請檢查您是否已設定 <YOUR_API_ID> 標頭。確認您傳送的是 GET 請求。另請檢查是否 <STAGE> 已正確新增。

**注意:**從不同於此 API 的網域提供的用戶端 Web 應用程式可能與此 API 進行互動。在這種情況下,瀏覽器會產生 CORS 的預檢請求,導致難以設定 x-apigw-api-id 標頭。若要解決此問題,請改為使用 Route53 別名存取私有 API。

相關資訊

什麼是 CORS?

如何對 Direct Connect 閘道路由問題進行疑難排解?

如何設定 Direct Connect 閘道?

AWS 官方
AWS 官方已更新 4 個月前