スキップしてコンテンツを表示

API Gatewayが CORS エラーを返す場合のトラブルシューティング方法を教えてください。

所要時間2分
0

Amazon API Gateway API を呼び出そうとすると、「No 'Access-Control-Allow-Origin' header is present on the requested resource」というエラーが発生します。このエラーおよび、API Gateway が返すその他のクロスオリジンリソース共有 (CORS) に関するエラーをトラブルシューティングしたいです。

簡単な説明

CORS 規格で必要な HTTP ヘッダーがサーバーから返されない場合、CORS エラーが発生します。API Gateway REST API または HTTP API での CORS エラーを解決するには、API を再設定し、CORS 規格を満たす必要があります。

**注:**CORS はリソースレベルで設定する必要があり、API Gateway 設定または AWS Lambda などのバックエンド統合を使用してください。

解決策

「Access-Control-Allow-Origin」ヘッダーが存在しませんという CORS エラーだけでなく、次の手順を使用してすべての CORS エラーをトラブルシューティングできます。その他の CORS エラーには、メソッドは Access-Control-Allow-Methods ヘッダーでサポートされていませんというエラー、および 「Access-Control-Allow-Headers」ヘッダーが存在しませんというエラーがあります。

「Access-Control-Allow-Origin」ヘッダーが存在しません というエラーは、発生理由は次のいずれかが考えられます。

  • API が、必要な CORS ヘッダーを返す OPTIONS メソッドで設定されていない。
  • 別のメソッド型 (GETPUTPOST など) が必要な CORS ヘッダーを返すように設定されていない。
  • API の構成が、プロキシ統合または非プロキシ統合を使用して必要な CORS ヘッダーを返すように設定されていない。
  • プライベート REST API で誤った呼び出し URL が呼び出される。または、トラフィックがインターフェイス仮想プライベートクラウド (VPC) エンドポイントにルーティングされていない。

エラーの原因を確認する

次のいずれかの操作を行います。

  • API を呼び出す際、HTTP アーカイブ (HAR) ファイルを作成します。次に、API 応答で返されるパラメータのヘッダーを参照し、ファイルエラーの原因を確認します。
  • ブラウザのデベロッパーツールを使用して、失敗した API リクエストに関するリクエストと応答パラメータを確認します。

エラーが発生した API リソースで CORS を設定する

REST API

API Gateway コンソールを使用してリソースで CORS を有効にする」の手順を実行します。

HTTP API

API Gateway で HTTP API 用の CORS を設定する」の手順を実行します。

API リソースで CORS を設定する場合は、次のオプションを選択します。

[ゲートウェイの応答]DEFAULT 4XXDEFAULT 5XX を選択します。DEFAULT 4XXDEFAULT 5XX を選択すると、リクエストがエンドポイントに到達しなかった場合も、API Gateway は必要な CORS ヘッダーで応答します。たとえば、リクエストに誤ったリソースパスが含まれている場合も、API Gateway は 403 「Missing Authentication Token」エラーで応答します。

Access-Control-Allow-MethodsOPTIONS が選択されていない場合は、選択します。さらに、GETPUTPOST など、CORS リクエストで使用できる他のすべてのメソッドを選択します。API Gateway コンソールは、必要な Access-Control-Allow ヘッダーを使用して OPTIONS メソッドの 200 件の応答を設定し、再構成されたリソース内の既存の値を上書きします。

REST API 統合で必要な CORS ヘッダーを返すように設定する

応答で必要な CORS ヘッダーを返すには、バックエンドの AWS Lambda 関数または HTTP プロキシサーバーを設定します。Access-Control-Allow-Origin ヘッダー値には、許可するドメインをリストとして含める必要があります。

プロキシ統合では、API Gateway で統合の応答を設定し、API のバックエンドが返す応答パラメータを変更することはできません。プロキシ統合では、API Gateway からバックエンド応答はクライアントに直接転送されます。

非プロキシ統合を使用する場合は、API Gateway で統合応答を手動で設定し、必要な CORS ヘッダーを返す必要があります。API Gateway コンソールを使用して CORS を設定します。コンソールは、必要な CORS ヘッダーを設定したリソースに自動的に追加します。

(プライベート REST API のみ) インターフェイスエンドポイントのプライベート DNS 設定を確認する

プライベート REST API では、関連付けられたインターフェイス VPC エンドポイントプライベート DNS がアクティブになっているかどうかを確認します。

プライベート DNS がアクティブな場合

プライベート DNS 名を使用して、Amazon Virtual Private Cloud (Amazon VPC) 内からプライベート API を呼び出します

プライベート DNS がアクティブになっていない場合

呼び出し URL から VPC エンドポイントの IP アドレスまでのトラフィックを手動でルーティングする必要があります。次の呼び出し URL (Amazon Route 53 のエイリアス) を使用します。

https://{rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com/{stage}

注: rest-api-idregion、vpce-idstage は、実際の API の値に置き換えます。

プライベート DNS がアクティブになっていない場合、エンドポイント固有のパブリック DNS 名を使用して VPC 内からプライベート API にアクセスすることはできません。また、ブラウザからのリクエストでは Host ヘッダーを変更できないため、Host ヘッダーオプションは使用できません。

プライベート API では、ヘッダーを含まないプリフライト OPTIONS リクエストを開始するため、x-apigw-api-id カスタムヘッダーを使用できません。x-apigw-api-id ヘッダーを使用する API コールは API に到達しません。

注: API の OPTIONS メソッドで認証がオフになっていることを確認してください。

関連情報

API Gateway API の CORS をテストする

API Gateway インポート API を使用してリソースで CORS を有効にする

コメントはありません

関連するコンテンツ