跳至內容

如何疑難排解 API Gateway 的 HTTP 403 錯誤?

4 分的閱讀內容
0

當我呼叫我的 Amazon API Gateway API 時,我收到 403 錯誤。

簡短說明

當用戶端無法存取有效的網址時,您會收到 HTTP 403 回應代碼。伺服器理解請求,但由於用戶端問題,無法履行請求。
因為下列任一原因,API Gateway API 可以傳回 403 回應:

問題回應標頭錯誤訊息根本原因
存取遭拒"x-amzn-errortype" = "AccessDeniedException"「使用者未獲得存取此資源的權限,收到明確拒絕」呼叫者未獲得存取使用 API Gateway Lambda 授權者 API 的權限。
存取遭拒"x-amzn-errortype" = "AccessDeniedException"「使用者: <user-arn> 未經授權執行:execute-api: 在資源中調用: <api-resource-arn> 明確拒絕」呼叫者未獲得存取使用 AWS Identity and Access Management (IAM) 授權 之 API 的權限。或者,該 API 具有附加的資源政策,明確拒絕呼叫者的存取。如需詳細資訊,請參閱 IAM 驗證和資源政策
存取遭拒"x-amzn-errortype" = "AccessDeniedException"「使用者:匿名未經授權執行:execute-api: 在資源中調用:<api-resource-arn>呼叫者未獲得存取使用 IAM 授權 之 API 的權限。或者,API 具有附加的資源政策,該政策不會明確允許呼叫者調用 API。如需詳細資訊,請參閱 IAM 驗證和資源政策
存取遭拒"x-amzn-errortype" = "AccessDeniedException"「請求中包含的安全權杖無效。」呼叫者使用無效的 IAM 金鑰來存取使用 IAM 授權的 API。
缺少驗證權杖"x-amzn-errortype" = "MissingAuthenticationTokenException"「缺少驗證權杖」請求中找不到驗證權杖。
驗證權杖過期"x-amzn-errortype" = "InvalidSignatureException"「簽名已過期」請求中的驗證權杖已過期。
API 金鑰無效"x-amzn-errortype" = "ForbiddenException"「禁止」呼叫者針對需要 API 金鑰的方法使用 API 金鑰,但 API 金鑰不正確。或者,API 金鑰與此階段相關聯的使用方案沒有相關聯。或者,API 金鑰已關閉或不存在。
簽名無效"x-amzn-errortype" = "InvalidSignatureException"「我們計算的請求簽名與您提供的簽名不符。檢查您的 AWS 私密存取金鑰和簽署方法。」當呼叫者存取使用 IAM 授權的 API 時,請求中的簽名與伺服器上的簽名不相符。
AWS WAF 篩選"x-amzn-errortype" = "ForbiddenException"「禁止」當 API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) 中的 [AWS WAF 啟用後,Web 應用程式防火牆篩選會封鎖請求。
資源路徑不存在"x-amzn-errortype" = "MissingAuthenticationTokenException"「缺少驗證權杖」標頭不具「授權」的請求會傳送到不存在的 API 資源路徑。如需詳細資訊,請參閱如何對 API Gateway REST API 端點的 403「缺少身分驗證權杖」錯誤進行疑難排解?
資源路徑不存在"x-amzn-errortype" = "IncompleteSignatureException"「授權標頭需要『Credential』參數。授權標頭需要『Signature』參數。授權標頭需要『SignedHeaders』參數。授權標頭需要擁有『X-Amz-Date』或『日期』標頭。Authorization=allow」標頭為「授權」的請求會傳送到不存在的 API 資源路徑。
錯誤地使用公共 DNS 名稱調用私有 API"x-amzn-errortype" = "ForbiddenException"「禁止」您不正確使用公開 DNS 名稱從 Amazon Virtual Private Cloud (Amazon VPC) 中調用私有 API。例如:請求中缺少 "Host""x-apigw-api-id" 標頭。如需詳細資訊,請參閱使用端點專屬的公有 DNS 主機名稱調用私有 API
使用預設的 execute-api 端點調用具有自訂網域名稱的 REST API"x-amzn-errortype" = "ForbiddenException"「禁止」在停用預設端點後,呼叫者使用預設的 execute-api 端點來調用 REST API。如需詳細資訊,請參閱停用 REST API 的預設端點
使用無效的用戶端憑證來調用需要相互 TLS 的 API 閘道自訂網域名稱"x-amzn-errortype" = "ForbiddenException"「禁止」自訂網域名稱的信任存放區不會發出 API 請求中的用戶端憑證,或憑證無效。如需詳細資訊,請參閱如何對需要相互 TLS 的 API Gateway 自訂網域名稱中的 HTTP 403 禁止錯誤進行疑難排解?
在沒有基本路徑映射的情況下調用自訂網域名稱"x-amzn-errortype" = "ForbiddenException"「禁止」呼叫者會調用自訂網域,而且不會將基礎路徑映射到 API。如需詳細資訊,請參閱 API 閘道中 REST API 的自訂網域名稱
當網域 URL 包含階段時,調用開啟自訂網域的 API"x-amzn-errortype" = "MissingAuthenticationTokenException"「缺少驗證權杖」API 映射會指定 API、階段,還可以選擇用於映射的路徑。因此,當 API 的階段映射到自訂網域時,您不需要再於 URL 中包含該階段。如需詳細資訊,請參閱將 API 階段映射至 REST API 的自訂網域名稱
請求 URL 中的階段無效"x-amzn-errortype" = "ForbiddenException"「禁止」呼叫者的請求 URL 包含不存在的階段。如需詳細資訊,請參閱在 API 閘道中呼叫 REST API

解決方法

識別錯誤的原因

如果 403 錯誤是從其他資源(例如下列範例中)通報,則可能是其他原因導致錯誤:

  • 如果在網頁瀏覽器中通報錯誤,則錯誤的 Proxy 設定可能無法允許 HTTP 存取。
  • 如果 API 前面有另一個 AWS 服務,例如 Amazon CloudFront,則該服務可以拒絕請求。

若要識別錯誤的原因,請為 API 設定 Amazon CloudWatch 存取記錄。然後,在 CloudWatch 中查看 API 的日誌事件以判斷請求是否到達 API。

注意: HTTP API 不支援執行日誌記錄

若要疑難排解由需要相互 TLS 並調用 HTTP API 的自訂網域名稱傳回的 403 錯誤,請完成下列步驟:

  1. 建立新的 API 映射以測試您自訂網域名稱的 REST API 調用。
  2. 若要識別錯誤的原因,請在 CloudWatch 中檢視 REST API 的日誌事件。
  3. 識別並解決錯誤後,將 API 映射重新路由到您的 HTTP API。

確認 API 定義中具備要求的資源

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

使用 API 閘道主控台或 AWS CLI 來驗證下列組態:

  • 您部署的 API 採用最新的 API 定義。
  • API 定義中具備要求的資源。

使用 curl 取得請求和回應詳細資訊

如果您可以重現錯誤,請使用 curl-v 命令來獲取用戶端和 API 之間的更多詳細資訊:

curl -X HTTP_VERB -v https://{api_id}.execute-api.{region}.amazonaws.com/{stage_name}/{resource_name}

驗證請求標頭是否正確

如果錯誤是因為無效的 API 金鑰導致,請驗證請求中是否已傳送**「x-api-key」**標頭。如果標頭未包含或不正確,請更新請求標頭。

驗證介面 Amazon VPC 端點上的 DNS 設定是否正確設定

**注意:**下列任務適用於您從僅具有介面 VPC 端點的 Amazon VPC 呼叫的 API。

確認介面端點的 DNS 設定是否已根據您使用的 API 類型正確設定。

若要從 Amazon VPC 內部調用區域 API,請在介面端點上停用私人 DNS 名稱。公開 DNS 可以解析端點的主機名稱。如需詳細資訊,請參閱建立私人 VPC

若要使用 API 的私有 DNS 名稱從 Amazon VPC 裡面呼叫私人 API,請啟用端點上的私有 DNS 名稱。Amazon VPC 本機子網路資源可以解析介面端點的主機名稱。

**注意:**如果您使用下列任一選項來調用私有 API,則不需要設定私人 API 的公用 DNS 名稱Amazon Route 53 別名

檢閱 API 的資源政策

檢閱 API 的資源政策以驗證下列組態:

檢閱 HTTP 請求和回應訊息

請在 Web 瀏覽器中重現錯誤。使用瀏覽器的網路工具擷取 HTTP 要求和回應訊息,並進行分析以確定錯誤發生的位置。

**注意:**如要進行離線分析,請將訊息儲存在 HTTP 封存 (HAR) 檔案中。

相關資訊

常見錯誤

如何僅允許特定 IP 地址存取我的 API Gateway REST API?

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

如何開啟 CloudWatch Logs 以針對我的 API Gateway REST API 或WebSocket API 進行疑難排解?

Curl 專案上的 Curl 網站