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

3 分的閱讀內容
0

我無法連線至 Amazon Virtual Private Cloud (Amazon VPC) 中的 Amazon API Gateway 私有 API 端點。如何對此問題進行疑難排解?

簡短說明

Amazon VPC 中的 AWS 資源可能因為下列任何原因導致無法連線至私有 API 端點

當您的 API 啟用 Amazon CloudWatch 記錄功能後,執行日誌中會顯示錯誤訊息,說明錯誤的原因。

如果 API 請求在啟用記錄功能後並未產生任何 CloudWatch 日誌,表示該請求並未到達端點。如果您的 API 請求並未到達端點,請確保私有 API 的調用網址格式正確。

**注意:**API Gateway 的資源政策設定錯誤,或是私有 API 端點調用網址的 DNS 名稱不正確,都可能會造成連線問題。

解決方法

確認錯誤的原因

1.    如果您尚未這樣做,請開啟私有 REST API 的 CloudWatch 記錄功能。請務必設定執行記錄功能

提示:進行記錄功能設定時,請針對日誌級別選擇 INFO(資訊)。然後選擇 Log full requests/responses data(記錄完整請求/回應資料)。

2.    檢視您 REST API 在 CloudWatch 中的執行日誌,識別造成錯誤的原因。如果 API 請求到達端點,則會出現下列其中一種範例錯誤訊息:

  • "User: anonymous is not authorized to perform: execute-api:Invoke on resource:(使用者:匿名未授權執行:execute-api:在資源中調用:)"
  • "Connection timed out(連線逾時)"

如果 API 請求在啟用記錄功能後並未產生任何 CloudWatch 日誌,請確保您的私有 API 調用網址的格式正確。如需指示,請參閱本文如果 API 請求在啟用記錄功能後並未產生任何 CloudWatch 日誌區段。

如需詳細資訊,請參閱如何在我的 CloudWatch 日誌中尋找 API Gateway REST API 錯誤?

解決 "User: anonymous is not authorized to perform: execute-api:Invoke on resource:(使用者:匿名未授權執行:execute-api:在資源中調用:)" 錯誤

1.    驗證私有 API 端點的 API Gateway 資源政策可允許從介面 VPC 端點或來源 VPC 到 API 端點的流量。如需資源政策範例,請參閱範例: 允許來源 VPC 或 VPC 端點的私有 API 流量

2.    確認 VPC 端點政策可讓用戶端存取私有 API 端點。如需 VPC 端點政策的範例,請參閱 VPC 端點政策範例

如需測試 API Gateway 資源政策的指示,請參閱測試資源政策區段的如何允許特定 IP 地址存取我的 API Gateway REST API?

**重要事項:**如果您修改 API 的資源政策,您必須部署 API 以認可變更。

解決 "Connection timed out(連線逾時)" 錯誤

1.    確認 VPC 中存在 API Gateway execute-api VPC 端點。一併確認端點是否與私有 API 位於相同 AWS 區域中。如端點不存在,請針對 API Gateway execute-api 建立介面 VPC 端點

2.    驗證用戶端調用私有 API 端點存在相同 VPC,或可透過 VPC 端點存取 VPC。您可以使用路徑追蹤工具進行測試。

**注意:**您可以在 VPC 中從用戶端存取私有 API,或從擁有與 VPC 網路連線的用戶端存取。

如要安裝路徑追蹤,請執行下列命令:

Amazon Linux:

$ sudo yum install traceroute

Ubuntu:

$ sudo apt-get install traceroute

如何使用路徑追蹤測試連線:

$ sudo traceroute -n -T -p 443 <VPC-endpoint IP-address>

引數 -T -p 443 -n 會在連接埠 443 上執行 TCP 追蹤。

3.    確認您 Amazon VPC 安全群組的規則設定正確。

如何測試您的 Amazon VPC 安全群組:

從向私有 API 端點提出請求的用戶端執行下列命令。請務必將 {public-dns-hostname} 替換為包含您 API 的 VPC 端點 ID 的公有 DNS 主機名稱。將 {region} 替換為您的介面 VPC 端點所在的 AWS 區域。

$ telnet {public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com 443

如果連線逾時,表示 Amazon VPC 安全群組的規則設定不正確。

驗證以下內容:

  • 請求資源的安全群組規則允許 TCP 連接埠 443 將流量傳出到 VPC 端點的 IP 地址範圍或安全群組。
  • VPC 端點的安全群組規則允許 TCP 連接埠 443 將流量從請求資源的 IP 地址範圍或安全群組傳出。

如需詳細資訊,請參閱使用安全群組控制資源的流量

如果 API 請求在啟用記錄功能後並未產生任何 CloudWatch 日誌

1.    確認私有 API 端點的 API Gateway 資源政策設定正確。

如需詳細資訊,請參閱本文的下列章節: 解決 "User: anonymous is not authorized to perform: execute-api:Invoke on resource:(使用者:匿名未授權執行:execute-api:在資源中調用:」錯誤。)"

2.    確認私有 API 調用網址的格式正確。

正確的格式取決於是否為 VPC 端點啟用私有 DNS。如果未啟用私有 DNS,您必須使用端點專屬的公有 DNS 主機名稱來存取私有 API 端點。如果已啟用私有 DNS,您必須使用私有 DNS 名稱來存取私有 API 端點。

如需詳細資訊,請參閱如何調用私有 API

測試私有 API 端點的網域可正確解決 VPC 端點的 IP 地址

1.    從向私有 API 端點提出請求的用戶端執行下列 nslookup 命令。確認用戶端位於 VPC 端點存在的 VPC 內。將 {restapi-id} 替換為您的私有 API ID。將 {region} 替換為您的私有 API 端點所在的 AWS 區域。

$ nslookup {restapi-id}.execute-api.{region}.amazonaws.com

成功的輸出會顯示 VPC 端點的私有 IP 地址。

2.    執行下列 nslookup 命令。請務必將 {public-dns-hostname} 替換為包含您 API 的 VPC 端點 ID 的公有 DNS 主機名稱。將 {region} 替換為您的介面 VPC 端點所在的 AWS 區域。

$ nslookup {public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com

成功的輸出會顯示 VPC 端點的私有 IP 地址。

3.    比較每個命令輸出中的 IP 地址。如果每個命令輸出的 IP 地址相符,表示設定如預期運作。

**注意:**您可以隨時在 Amazon VPC 主控台執行下列操作,為 VPC 端點啟用私有 DNS:
端點窗格中,選取您的介面 VPC 端點。
選擇 Actions(動作)。
選擇 Modify Private DNS names(修改私有 DNS 名稱)。
選取 Enable Private DNS Name(啟用私有 DNS 名稱)核取方塊。然後,選擇 Save Changes(儲存變更)。
選擇 Modify Private DNS names(修改私有 DNS 名稱)。


相關資訊

如何使用介面 VPC 端點在另一個 AWS 帳戶中存取 API Gateway 私有 REST API?

從 VPC 連線至我的 API Gateway API 時,為什麼會出現 HTTP 403 禁止錯誤?

使用介面 VPC 端點存取 AWS 服務

Amazon VPC 中的網際網路流量隱私權

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