2023.02.11  

【AWS】ECS(VPC内)からPublicなAPI Gatewayにアクセスできない(403エラー)

AWS    

ECS(VPC内)からPublicなREST API gatewayにアクセスしようとしたとき、403エラーが発生してしまいました。その際の解決方法についてメモ書きします。

通信経路は次のルールを想定していました。
ECS(VPC内) --> NATGateWay--> PublicなREST APIGateWay

原因

APIGateWay用のVPCエンドポイントがアタッチされていたことが原因でした。
アタッチされていたVPCエンドポイントは次の経路で通信を行う際は必要です。

ECS(VPC内) --> プライベートなREST APIGateWay
参考: マニュアル

ただ、このVPCエンドポイントを作成してVPCに紐づけると、名前に~.execute-api.<リージョン名>.amazonaws.comとつくURLは全てプライベートアクセスの通信として処理されます。

VPC エンドポイントでプライベート DNS が有効になっている場合、API の呼び出し URL はプライベート DNS 名 *.execute-api.us-east-1.amazonaws.com でカバーされます。ここで、* は API ID のプレースホルダーです。DNS クエリが VPC 内からパブリック API に対して解決されると、解決された DNS は、パブリック API のパブリック IP ではなく、関連付けられた VPC エンドポイントのプライベート IP をポイントします。API コールは、インターネット経由でルーティングされるのではなく、VPC エンドポイントを介してパブリック API にルーティングされます。VPC エンドポイントはトラフィックをプライベート API にしかルーティングできないため、結果として HTTP 403 エラーが表示されます。

引用: マニュアル

下記はAPIGateWay用のVPCエンドポイントの作成例です。

PublicなREST API gatewayのデフォルトのURLは~.execute-api.<リージョン名>.amazonaws.comです。(プライベートなREST APIGateWayと同じ)

つまり、この状態でECS(VPC内) からPublicなREST APIGateWayに通信を行うと次のようになります。

ECS(VPC内) --> VPCエンドポイント--> プライベートなREST APIGateWayがない --> 403エラー

解決策

APIGateWay用のVPCエンドポイントを削除するのが一番簡単な方法です。

システム構成上、削除できない場合はAPIGateWayにカスタムドメインを設定することで、NATGateWay経由での通信となり、この問題を回避できます。

カスタムドメインの設定方法については、下記に記載しています。参考までに。
RAST APIGatewayにカスタムドメインを設定する方法

お世話になったサイト

VPC内からPublicなAPI gatewayにアクセスできなくて困った話
API GatewayのVPCエンドポイント導入で障害が発生してしまったw

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信