top of page
検索

API Gateway Private API × オンプレ接続でハマった話

  • 執筆者の写真: make
    make
  • 1 日前
  • 読了時間: 5分

はじめに

久々の投稿です。

今回は、社内NWからのみ利用するちょっとしたWebツールを作ろうと

API Gateway の Private API を使って実現する際にハマったことをネタにしようと思います。


要件と対応方法

Webツールの要件は、

  • 社内向けの簡易ツール

  • そんなに頻繁に使うものではない

  • IAM認証やOIDCを設けるほどではないので社内NWなら誰でも利用可

  • 社外からはアクセスできないようにしたい

という、ありがちな要件でした。

あれこれ用意するのも面倒だし、アクセス頻度も大したことがないので、

APIGatewayのPrivateAPIを1つ用意し、複数メソッドで画面表示(返却をHTMLにする)から実行(ツール本来の処理)まで一貫して行うようにする方法を取ることにしました。


構成イメージ

公式ドキュメントを参考に、以下のような構成を取りました。

  • API Gateway:Private API

  • API Gateway 用 Interface VPC Endpoint を作成

  • API と VPC Endpoint を関連付け

  • Route53 の エイリアスレコード

    {rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com

    を使って API を呼び出す

  • API Gateway のリソースポリシーは

    • VPCエンドポイント経由のみ許可

    • それ以外は拒否

      という公式でよく紹介されている設定

これで「VPCエンドポイント経由でのみアクセスできるはず」と考えていました。


起こった問題


VPC 内からは問題なく疎通する

同一 VPC 内に立てた EC2 から API を呼ぶと、問題なくレスポンスが返っており、

想定どおりの挙動でした。


社内NW(オンプレ)からは Forbidden

ところが、Transit Gateway 経由で VPC に接続している社内NWから API を呼ぶと、

403 Forbidden が返却されました。

VPC エンドポイントのセキュリティグループも社内CIDRを許可しており、

ネットワーク的には到達できるはずですが、

API Gateway のリソースポリシーで拒否されているように見えました。


調査して分かったこと


curl --resolve を使うと疎通する

試しに {rest-api-id}-{vpce-id}.execute-api... を

VPCエンドポイントの ENI の IP に強制的に名前解決してアクセスすると、

正常に疎通することが分かりました。

この挙動から、

社内NWからのアクセスは VPCエンドポイントを経由していない

と判断されてしまっているようです。


混乱のもと

私はてっきり、VPCエンドポイントと関連付けをして

  • {rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com

という呼び出し方をすると、

「rest-api-id」に対応するPrivateAPIを「vpce-id」に対応するVPCエンドポイント経由で

呼ぶということをやってくれるからおのずとVPCエンドポイント経由になるんだという

理解でいました。

そしてPrivateAPIのリソースポリシーにはVPCエンドポイント経由のみ許可とするのが

一般的なやり方であるということも下記参考の公式ブログから判断していました。

しかし、よくよくプライベートAPIの公式の説明をみると、、

プライベート API は、Amazon VPC 内からのみ呼び出せる REST API です。API にアクセスするには、インターフェイス VPC エンドポイントを使用します。これは、VPC で作成するエンドポイントネットワークインターフェイスです。インターフェイスエンドポイントは、プライベート IP アドレスを経由して AWS PrivateLink サービスにプライベートにアクセスできるテクノロジーである AWS により強化されています。 Direct Connect を使用してオンプレミスネットワークから Amazon VPC への接続を確立し、この接続を介してプライベート API にアクセスすることも可能です。いずれの場合も、プライベート API へのトラフィックは安全な接続を使用し、パブリックインターネットからは隔離されます。トラフィックは、Amazon ネットワークを離れません。

後半部分には特にVPCエンドポイントに関する言及はありません。

あくまでVPC内からアクセスできるというだけで、VPCエンドポイント経由でないとアクセスできないものというわけではなかったようです。

言い換えると今回のように、FQDN に vpce-id が含まれていても、

それだけで VPCエンドポイント経由が保証されるわけではない

ということのようです。


対処方法

今回は社内NWからであればアクセスできてOKだったの以下で対応しました。


リソースポリシーはVpcSourceIpでの制御とする

  • API Gateway のリソースポリシーで aws:VpcSourceIp により社内CIDRのみ許可 →VPCエンドポイント経由のみ許可をやめる


特徴

  • オンプレ DNS 構成を変更せずに対応可能

  • 社内NWを信頼境界とする環境ではシンプルで分かりやすい

  • ネットワーク設計と API 制御の考え方が一致する


留意点

  • 社内NWのCIDR変更時には設定の見直しが必要

  • IP アドレスを前提とした運用となる


VPCエンドポイント経由を前提とした構成にするには?

今回は深堀りできていないのですが、おそらく

  • オンプレ DNS から VPC の Route 53 Resolver へ名前解決をフォワード

  • Interface VPC Endpoint の Private DNS を利用

  • API Gateway のリソースポリシーで aws:SourceVpce を条件に制御

といった対応などを行う必要がありそうです。

そしてここまでのことをやるならカスタムドメインでWAFも掛けたPublicAPIを構成したほうがよいかもしれません。


特徴

  • API へのアクセス経路を VPC エンドポイントに固定できる

  • IP アドレスに依存しないため、CIDR 管理が不要

  • AWS のクラウドネイティブな構成と親和性が高い


留意点

  • オンプレ DNS の設計変更が必要

  • フォワーダ設定など、ネットワーク側の調整が前提となる


セキュリティ観点での考え方

今回のように、

  • 社内NWが明確な信頼境界である

  • Transit Gateway 等で接続された閉域ネットワークである

  • API は内部向けであり、認証を前提としない用途である

という条件下では、

aws:SourceVpce と aws:VpcSourceIp の間で、実質的なセキュリティ強度に大きな差はない

と考えてよいと思いますが、昨今のゼロトラストな考え方にはならない点は注意が必要です。

本格的な運用を想定するものであれば、認証付きAPIを用意するのが賢明です。


まとめ

今回は、PrivateAPIとVPCエンドポイントを関連付けしたときの思い込みから発生したハマりポイントをご紹介しました。同じ悩みに当たってしまった方の参考になれば幸いです。





コメント


  • Facebook

©Optarc,llc.

bottom of page