API Gateway からの HTTP 403 エラーをトラブルシューティングする方法を教えてください。

所要時間4分
0

Amazon API Gateway API を呼び出すと、403 エラーが発生します。API Gateway からの 403 エラーのトラブルシューティング方法を教えてください。

簡単な説明

HTTP 403 応答コードは、クライアントが有効な URL へのアクセスを禁止されていることを意味します。サーバーはリクエストを理解していますが、クライアント側の問題のためにリクエストに対応できません。

API Gateway APIは、次のいずれかの理由で 403 応答を返す可能性があります。

問題応答ヘッダーエラーメッセージ根本原因
アクセスが拒否されました「x-amzn-errortype」=「AccessDeniedException」「明示的な拒否により、ユーザーはこのリソースにアクセスする権限がありません」発信者に、API Gateway Lambda オーソライザーを使用している API にアクセスする権限がありません。
アクセスが拒否されました「x-amzn-errortype」=「AccessDeniedException」「ユーザー:<user-arn>は実行を許可されていません:execute-api:Invoke on resource:<api-resource-arn> with明示的な拒否」発信者は、AWS Identity and Access Management (IAM) 認証を使用しているAPIにアクセスすることを許可されていませんまたは、発信者へのアクセスを明示的に拒否するリソースポリシーが API にアタッチされています。 詳細については、「IAM 認証とリソースポリシー」をご参照ください。
アクセスが拒否されました"x-amzn-errortype" = "AccessDeniedException""User: anonymous is not authorized to perform: execute-api:Invoke on resource:<api-resource-arn>"呼び出し元に IAM 認証を使用している API にアクセスする権限がありません。または、発信者が API を呼び出すことを明示的に許可しないリソースポリシーが API にアタッチされています。 詳細については、「IAM 認証とリソースポリシー」をご参照ください。
アクセスが拒否されました「x-amzn-errortype」=「AccessDeniedException」「リクエストに含まれているセキュリティトークンが無効です。」発信者は、IAM認証.を使用しているAPIにアクセスするために無効なIAMキーを使用しました。
認証トークンが見つかりません「x-amzn-errortype」=「MissingAuthenticationTokenException」「認証トークンが見つかりません」リクエスト内に認証トークンがありませんでした。
認証トークンの有効期限が切れています「x-amzn-errortype」=「InvalidSignatureException」「署名の有効期限が切れています」リクエストの認証トークンの有効期限が切れています。
API キーが有効ではありません"x-amzn-errortype" = "ForbiddenException"「無効な API キー識別子が指定されました」発信者が、APIキーを必要とするメソッドには無効なAPIキーを使用しました。 
署名が無効です「x-amzn-errortype」=「InvalidSignatureException」「The request signature we calculated does not match the signature you provided.AWS シークレットアクセスキーと署名方法を確認してください。リクエストの署名が、IAM 認証を使用している API にアクセスするときのサーバー上の署名と一致しません。
フィルタリングされた AWS WAF"x-amzn-errortype" = "ForbiddenException"「禁止されています」AWS WAF が API で有効になっている場合、リクエストはウェブアプリケーションファイアウォールのフィルタリングによってブロックされます。
リソースパスが存在しません「x-amzn-errortype」=「MissingAuthenticationTokenException」「認証トークンが見つかりません」「認証」ヘッダーのないリクエストが、存在しない API リソースパスに送信されています。 詳細については、「API Gateway REST API エンドポイントからの 403「Missing Authentication Token」エラーをトラブルシューティングするにはどうすればよいですか?」を参照してください。
リソースパスが存在しません「x-amzn-errortype」=「IncompleteSignatureException」「Authorization header requires 'Credential' parameter.Authorization header requires 'Signature' parameter.Authorization header requires 'SignedHeaders' parameter.Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header.Authorization=allow」(認可ヘッダーには「Credential」パラメータが必要です。認可ヘッダーには「Signature」パラメータが必要です。認可ヘッダーには「SignedHeaders」パラメータが必要です。認可ヘッダーには「X-Amz-Date」または「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を呼び出します。 詳細については、「Disabling the default endpoint for a REST API (REST API のデフォルトエンドポイントの無効化) 」を参照してください。
無効なクライアント証明書を使用して、相互Transport Layer Security (TLS) を必要とする API Gateway カスタムドメイン名を呼び出します。"x-amzn-errortype" = "ForbiddenException"「禁止されています」API リクエストで提示されたクライアント証明書が、カスタムドメイン名のトラストストアによって発行されていないか、有効ではありません。 詳細については、「相互 TLS を必要とする API Gateway カスタムドメイン名からの HTTP 403 Forbidden エラーをトラブルシューティングする方法を教えてください」を参照してください。
ベースパスマッピングなしでカスタムドメイン名を呼び出す"x-amzn-errortype" = "ForbiddenException"「禁止されています」呼び出し元は、API にマップされるベースパスなしでカスタムドメインを呼び出します。   詳細については、「REST API のカスタムドメイン名の設定」を参照してください。
ドメイン URL にステージが含まれている場合に、カスタムドメインを有効にして API を呼び出す「x-amzn-errortype」=「MissingAuthenticationTokenException」「認証トークンが見つかりません」API マッピングは、API、ステージ、および必要に応じてマッピングに使用するパスを指定します。したがって、API のステージがカスタムドメインにマッピングされるときに、URL にステージを含める必要がなくなりました。 詳細については、「REST API の API マッピングの使用」を参照してください。
リクエスト URL のステージが無効"x-amzn-errortype" = "ForbiddenException""Forbidden"呼び出し元のリクエスト URL に存在しないステージが含まれています。ステージが存在し、リクエスト URL のつづりが正しいことを確認してください。 詳細については、「Amazon API Gateway での REST API の呼び出し」を参照してください。

解決方法

エラーの原因を検討する

403 エラーが他のリソースから報告された場合、エラーには別の原因がある可能性があります。例:

  • エラーがウェブブラウザで報告された場合、間違ったプロキシ設定が原因である可能性があります。HTTP アクセスが許可されていない場合、プロキシサーバーは 403 エラーを返します。
  • API の前に別の AWS のサービスがある場合、そのサービスは応答に 403 エラーを含めてリクエストを拒否できます。例:Amazon CloudFront。

エラーの原因を特定する

API の Amazon CloudWatch アクセスログをまだ設定していない場合は、設定します。次に、CloudWatch で API の実行ログを表示して、リクエストが API に到達しているかどうかを確認します。

注:: HTTP API は実行ログをサポートしていません。 相互TLSを必要とし、HTTP APIを呼び出すカスタムドメイン名によって返される403エラーのトラブルシューティングを行うには、次の手順を実行する必要があります。

1.    テスト用に REST API を呼び出すカスタムドメイン名の新しい API マッピングを作成します。

2.    CloudWatch で REST API の実行ログを表示し、エラーの原因を特定します。

3.    エラーを特定して解決したら、カスタムドメイン名の API マッピングを HTTP API に再ルーティングします。

リクエストされたリソースが API 定義に存在することを確認する

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください

API Gateway コンソールまたは 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}

注: 詳細については、curl プロジェクトのウェブサイトを参照してください。

リクエストヘッダーが正しいことを確認します。

エラーが無効な API キーの結果である場合は、リクエストで**「x-api-key」**ヘッダーが送信されたことを確認します。

インターフェイス Amazon VPC エンドポイントの DNS 設定が正しく行われていることを確認します。

注: インターフェイス VPC エンドポイント のみを持つ Amazon VPC から呼び出された API については、次の点を確認してください。

インターフェイスエンドポイントの DNS 設定が、使用している API のタイプに基づいて正しく設定されていることを確認します。

以下の点にご注意ください。

  • Amazon VPC内からリージョナルAPIを呼び出すには、インターフェイスエンドポイントでプライベートDNS名を非アクティブ化する必要があります。その後、エンドポイントのホスト名をパブリック DNS で解決できます。詳細については、「Amazon API Gateway でプライベート API を作成する」を参照してください。
  • API のプライベート DNS 名を使用して Amazon VPC 内からプライベート API を呼び出すには、インターフェイスエンドポイントでプライベート DNS 名を有効にする必要があります。その後、インターフェイスエンドポイントのホスト名を Amazon VPC のローカルサブネットリソースに解決できます。詳細については、「プライベート API を呼び出す方法」を参照してください。
    **注:**次のいずれかを使用してプライベート API を呼び出す場合は、プライベート DNS を設定する必要はありません。
    プライベート API のパブリック DNS 名

API のリソースポリシーを確認します。

API のリソースポリシーを確認して、以下を確認します。

HTTP リクエストと応答メッセージを分析する

可能であれば、Web ブラウザでエラーを再現します。次に、ブラウザのネットワークツールを使用して HTTP 要求メッセージと応答メッセージをキャプチャし、それらを分析してエラーが発生した場所を特定します。

注: オフライン分析の場合、これらのメッセージを HTTP アーカイブ (HAR) ファイルに保存します。


関連情報

よくあるエラー - Amazon API Gateway

特定の IP アドレスのみが API Gateway REST API にアクセスすることを許可するにはどうすればよいですか?

API Gateway のプライベート API エンドポイントへの接続に関する問題のトラブルシューティングを行うにはどうすればよいですか?

API Gateway REST API または WebSocket API のトラブルシューティングのために Amazon CloudWatch Logs をオンにするにはどうすればよいですか?

コメントはありません

関連するコンテンツ