手持ちのAPIを外部からのHTTPSを受け入れるAPIに変更する方法
概要
手持ちの内部システムのAPIが便利で外部(インターネット経由)からAPI参照したいというときにどうするかという問題を解決していきます。
解決策 API Gateway + ALB(Internet-Facing)
AWS公式を参考に作成していきます。
ALB
ポイントとしてはInternet-Facing
で作成することです。
外部インターネットになっているため、後続のAPI GatewayではHTTP統合
が使用できるようになります。
API Gateway
ResTAPI作成時にプロキシを使用しましょう。リソースにて{proxy+}
と記載するとすべてのPathを受け入れるようになります。
統合リクエストを編集します。
ここでHTTP統合を使っています。
外部に向けるなら追加でやっておいたほうが良い設定
最低限としてWAFと認証(APIキー or Cognito or Lambdaオーソライザー)をつけましょう。
APIGatewayまわりにアタッチするので現行システムは影響なしでセキュリティを高められます。
ALBの直接アクセスを防ぐ必要があります。
やり方の1つとしては、セキュリティグループのインバウンドでHTTPのアクセスを制限することです。
API GatewayからくるであろうIPレンジを記載することで、他からのアクセスをシャットアウトします。IPは稀に変更があるようなので注意しましょう。
IPレンジは公式サイトで確認できます
ファイルをダウンロードしたらjq
でほしいIPレンジを抽出します。こちらは2023/08/09時点のIPです。
$ jq -r '.prefixes[] | select(.region=="ap-northeast-1" and .service=="API_GATEWAY") | .ip_prefix' < ip-ranges.json | sort -n
3.112.162.0/23
3.112.96.160/27
18.180.88.0/23
35.73.115.128/25
35.75.130.0/24
35.75.131.0/26
35.77.112.0/22
35.77.124.0/23
他にもやり方はありますが、なにかしらALBにリスナーのルールを追加することが重要となってきます。
最後に
ALBをInternalにしてAPI GatewayのVPCリンク統合をつかって行なう方法もありますのでこれは一例となります。VPCリンクの場合ALBがInternalにできるので直接アクセス対策が不要となります。こちらも簡単かつ安全であるため合わせて検討されると良いかと思います。
Discussion