如何透過 Direct Connect 連線與私有 API Gateway 建立連線?
我想透過 AWS Direct Connect 連線與私有 Amazon API Gateway 建立連線。
解決方法
為 Amazon API Gateway 服務建立 Amazon Virtual Private Cloud (Amazon VPC) 端點
Amazon VPC 端點允許 VPC 中的私有資源與 API Gateway 服務安全地通訊。若要為 API Gateway 建立 Amazon VPC 端點,請執行下列步驟:
- 開啟 Amazon VPC 主控台。
- 在導覽窗格的 Virtual Private Cloud 下,選擇端點。
- 對於服務類別,選擇 AWS 服務。
- 對於服務名稱,請按關鍵字搜尋 "execute-api"。此搜尋傳回單一結果:"com.amazonaws.REGION.execute-api"。
- 選擇 "com.amazonaws.REGION.execute-api"。
- 對於 VPC,請選取設定 Direct Connect 連線的 Amazon VPC。
- 對於子網路,選取您希望 API 可供存取的子網路。
- 對於啟用 DNS 名稱,清除啟用此端點方塊。關閉此設定要求 Amazon VPC 開啟「DNS 主機名稱」,這是可選功能。如果 VPC 使用 Amazon 提供的 DNS,保持此設定開啟將會中斷對 Amazon VPC 中部署的公用 API Gateway API 的所有存取。
- 在安全群組中,選擇 Amazon VPC 端點的安全群組。安全群組必須允許存取從 Amazon VPC 傳入的 TCP/443。
- 對於政策,選擇完整存取權。此選項允許使用 AWS IAM 許可從 Amazon VPC 到 VPC 端點的所有連線。
- 選擇建立端點。
- 記下 Amazon VPC 端點 ID (例如 "vpce-01234567890abcdef")。您稍後需要此 ID 來編輯 API 的資源政策。
如果您尚無私有 REST API,請建立一個
- 開啟 API Gateway 主控台。
- 選取 Direct Connect 連線的區域。
- 選擇建立 API。
- 對於 API 類型,選擇 REST API 私有。
- 對於 API 通訊協定,選擇 REST。
- 在建立新 API 下,選擇範例 API。
- 在設定下,確認端點類型 已設定為私有。
- 選擇匯入。
授予 Amazon VPC 端點存取私有 REST API 的權限
- 在API 管理頁面上,選擇資源政策。
- 將以下政策複製到您的資源政策中。
將 {{vpceID}} 字串取代為您在建立 VPC 端點後所記下的 Amazon VPC 端點 ID。或者,在端點下的 Amazon VPC 主控台中尋找該 ID。{ "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:/*/*/*" } ] }
注意:此範例政策允許從 Amazon VPC 存取 API 上的所有資源。若要進一步限制存取,請修改資源金鑰。 - 選擇儲存。
部署您的 API 以認可變更
現在您已建立 API 並新增了資源政策,請將 API 部署到階段以實作變更:
- 在 API Gateway 主控台上,從導覽窗格中選擇資源。
- 選擇動作。
- 在 API 動作下,選擇部署 API。
- 對於部署階段,選擇 [新階段]。
- 輸入階段的名稱。
- 選擇部署。變更將部署到 API。此過程可能需要幾分鐘才能傳播。
測試從 Direct Connect 連線對 API 的存取
請遵循下列步驟來測試存取:
-
在 Amazon VPC 主控台上,選擇端點,然後選取您建立的 VPC 端點。
-
在詳細資訊下,複製 VPC 端點的 DNS 名稱。例如,
"vpce-0123456789abcdef-b238e1kf.execute-api.REGION.vpce.amazonaws.com"。 -
在使用 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 端點主機名稱。
-
如果 DNS 正常運作,則提出測試 HTTP 請求。若要執行此操作,您需要來自 API Gateway 主控台的 API ID。從清單複製 API ID。API ID 是一個字串,例如 "chw1a2q2xk"。
-
從連線至 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。
相關資訊
相關內容
- 已提問 4 個月前lg...
- 已提問 23 天前lg...
- 已提問 5 個月前lg...
- AWS 官方已更新 3 個月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 個月前