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

最終更新日: 2020 年 8 月 10 日

Amazon API Gateway API を呼び出すと、403 Forbidden エラーが表示されます。このエラーをトラブルシューティングする方法を教えてください。

簡単な説明

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

API Gateway API は、さまざまな理由から 403 Forbidden の応答を返すことがあります。

問題 応答ヘッダー エラーメッセージ 詳細
アクセスが拒否されました。 「x-amzn-ErrorType」=「AccessDeniedException」 「ユーザーは明示的な拒否で、このリソースにアクセスする権限がありません」 発信者に、Lambda オーソライザーを使用している API にアクセスする権限がありません。
アクセスが拒否されました。 「x-amzn-ErrorType」=「AccessDeniedException」 「User:<user-arn>is to perform:execute-api:Invoke on resource:<api-resource-arn>with explicit deny」 発信者に、AWS Identity and Access Management (IAM) 認証を使用している API にアクセスする権限がありません。または、発信者へのアクセスを明示的に拒否するリソースポリシーが API にアタッチされています。

詳細については、「IAM 認証とリソースポリシー」をご参照ください。

アクセスが拒否されました。 「x-amzn-ErrorType」=「AccessDeniedException」 「User:anonymous is to perform:execute-api:Invoke on resource:<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 キーを使用しました。
無効な署名 「x-amzn-ErrorType」=「InvalidSignatureException」 「計算したリクエストの署名が、提供された署名と一致しません。AWS シークレットアクセスキーと署名方法を確認してください。」 リクエストの署名が、IAM 認証を使用している API にアクセスするときのサーバー上の署名と一致しません。
フィルタリングされた AWS WAF 「x-amzn-ErrorType」=「ForbiddenException」 「禁止されています」 AWS WAF が API で有効になっている場合、リクエストは Web Application Firewall (WAF) のフィルタリングによってブロックされます。
リソースパスが存在しません 「x-amzn-ErrorType」=「MissingAuthenticationTokenException」 「認証トークンが見つかりません」 「認証」ヘッダーのないリクエストは、存在しない API リソースパスに送信されます。
リソースパスが存在しません 「x-amzn-ErrorType」=「IncompleteSignatureException」 「認証ヘッダーには、「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 の呼び出し」をご参照ください。

解決方法

以下のトラブルシューティングのステップに従って、エラーの原因を特定します。

エラーの原因を検討する

403 エラーが他のリソースから報告された場合、エラーには別の原因がある可能性があります。例えば、以下のようなケースがあります。

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

調査するには、API アクセスのログ記録を有効にします

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

API Gateway コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) のいずれかを使用して、API でリクエストされたリソースを確認します。

注意: 最新の API 定義を使用して API をデプロイする必要があります。

curl を使用してリクエストと応答の詳細を取得する

エラーを再現できる場合は、curl-v を使用してクライアントと API 間の詳細を取得できます。例えば、以下のようになります。

curl -X GET -v https://apiId.execute-api.region.amazonaws.com/stageName/resourceName

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

ヘッダーを確認する

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

VPC エンドポイントの DNS 設定を確認する

API がインターフェイス VPC エンドポイントを持つ Amazon VPC から呼び出されている場合は、インターフェイスエンドポイントの DNS 設定が API タイプに基づいて正しく設定されていることを確認します。

  • Amazon VPC 内からリージョン API を呼び出すには、インターフェイスエンドポイントでプライベート DNS を無効にする必要があります。その後、エンドポイントのホスト名をパブリック DNS で解決できます。詳細については、「Why do I get an HTTP 403 Forbidden error when connecting to my API Gateway APIs from a VPC?」をご参照ください。
  • API のプライベート DNS 名を使用して Amazon VPC 内からプライベート API を呼び出すには、インターフェイスエンドポイントでプライベート DNS を有効にする必要があります。その後、インターフェイスエンドポイントのホスト名を Amazon VPC のローカルサブネットリソースに解決できます。詳細については、「プライベート API を呼び出す方法」をご参照ください。
    注: パブリック DNS 名または Amazon Route 53 エイリアスを使用してプライベート API を呼び出す場合、プライベート DNS を有効にする必要はありません。

リソースポリシーのテスト

以下を確認してください。

API アクセスログを分析する

API のアクセスログを有効にして分析し、リクエストが API に到達しているかどうかを判断します。

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

可能であれば、ウェブブラウザでエラーを再現し、ブラウザのネットワークツールを使用して HTTP リクエストと応答メッセージをキャプチャし、分析します。オフライン分析の場合、これらのメッセージを HTTP アーカイブ (HAR) ファイルに保存します。

ヒント: HAR ファイルの作成手順については、「How do I create a HAR file from my browser for an AWS Support case?」をご参照ください。

エラーが発生した場所を見つけるには、クライアントと API の間のリクエストと応答を分析してください。