[登壇資料] Kong Gateway から読みとく、 API統合・API連携サービスの最新情報 #devio2023

2023.07.24

はじめに

CX事業本部Delivery部サーバーサイドチームの田中孝明です。

7/24 に福岡で開催された DevelopersIO 2023 福岡 で「Kong Gateway から読みとく、 API統合・API連携サービスの最新情報」という内容で登壇してきましたので内容を抜粋してブログにしました。

資料

背景

アプリケーションの開発の現場

アプリケーションの開発の現場はより複雑に、しかし提供速度は迅速になってきている。

  • 関連サービスが増加し、相互に連携し合う
  • 個別のエンドポイント、プロトコル、認証方法への対応
  • 可用性・パフォーマンスの意識
  • チーム内のコミュニケーションコストを極力下げる

API アグリゲータ(API ゲートウェイ)

複数の異なるソースから提供される API を集約・統合し、一つの統合的な API として提供する仕組みを提供している

  • 複数の API を統合することで公開先(開発者)が利用する際に導入コストを下げる
  • セキュリティレイヤの追加による共通の認証・セキュリティの追加、共通機能の追加を容易に
  • パフォーマンス・運用改善(ログの統合など)

API アグリゲータ(API ゲートウェイ)に求められるもの

  • 高いパフォーマンスと信頼性
  • 低コストでスケーラブルに運用
  • 開発体験
  • 容易なライフサイクル管理
  • 特定のプラットフォームに依存しない (AWS / Azure / Google Cloud)
  • 複数のプロトコル (HTTP / gRPC) をサポート

Amazon API Gateway という選択肢

AWS のフルマネージドサービス

  • インフラの管理、APIの管理、認証と認可、スロットリングをフルマネージドで行える
  • Lambda / 各種 AWS サービス / バックエンド(HTTPアクセス)との親和性が高い
  • 制限内で利用する場合はベストな選択

Kong について

軽量・高速・柔軟なクラウドネイティブな API ゲートウェイ

  • Nginx をベースにしたスケールアウトが容易なアーキテクチャ
  • 豊富なプラグインによる機能拡張
  • 認証・認可、API 管理プラットフォームに必要なセキュリティを提供
  • オンプレミス、クラウド両方で利用可能
  • 管理者API でAPIによる設定・管理ができるため自動化も可能
  • Kong Manager という GUI で視覚的に設定できる

Kong の機能について

SERVICE と ROUTE

  • SERVICE は上流のアプリケーションを抽象化したもので1対多の関係があるのでレート制限など、高度な管理動作を作成できる
  • ROUTE は Kong Gateway を通じて公開されるエンドポイントにマップされ、1つの ROUTE で複数のエンドポイントを参照できる

レート制限

  • DoS 攻撃の防止、Web スクレイピングなどの過剰なAPIアクセスに対抗する
  • Rate Limiting プラグイン を使用してクライアントにレート制限を課すことができ、期間内に実行できるリクエストの数が制限される

ロードバランシング

  • 負荷分散により、ここのリソースへの過負荷を防止
  • サーバーの一つが利用できない場合、全てのトラフィックを動作中にサーバーにルーティングさせる

プランごとの利用できる機能

Kong を試す

EC2上に Kong Gateway を展開

  • PostgreSQL をインストール(DBレスモードでは使用しない)
  • Kong のインストール、サービス起動
  • それぞれの API を SERVICE に登録
  • SERVICE から ROUTE を登録

Kong を経由して App Runner にアクセス

Kong を経由して Cloud Run にアクセス

Kong on AWS ワークショップ

Amazon EKS + モニタリングの基礎を2時間程度で学べる(Enterprise 契約が必要)

  • Kong Enterprise を Amazon EKS 上に展開
  • 認証についても触れている
  • Prometheus / Grafana を利用したモニタリングの設定方法
  • Amazon CloudWatch にメトリクスログを出力する方法

Kong Gateway のプラグインについて

Kong とサードパーティが公開している便利プラグイン

  • Kong Gateway は Lua または Go のモジュールをロードして実行するように設計された Lua アプリケーション
  • プランによって利用できるプラグインに違いがある
  • 利用可能なものは プラグインHub をみてみる

OpenID Connect

サードパーティ IdP との統合が可能に

  • Kong を OAuth 2.0 リソースサーバーとして実装可能に
  • 認証情報と付与のサポート
    • JWT
    • リフレッシュトークン
    • …etc
  • 複数の Open ID Connect プロバイダーでテスト済み
    • Auth0
    • Amazon AWS Cognito
    • Google
    • Microsoft Azure Active Directory
    • Microsoft Active Directory Federation Services
    • Microsoft Live Connect
    • Okta
    • Yahoo!
    • …etc

JWT プラグイン

Bot Detection

最も一般的なボットからサービスまたはルートを保護

  • カスタムクライアントの許可リスト・拒否リストを設定
  • リクエストごとにチェックされるルールの基本リストが既に含まれている

Request Transformer

サーバーに送る前のリクエストを変換

  • リクエストに必要なパラメータを追加・削除(加工)しておくることができる、独自のパラメータを処理するのに有効
  • クエリ文字列・ヘッダーを追加
  • Advanced プラグインでリクエストの本文で許可されるパラメータのリストを制限することもできる

Response Transformer

クライアントに送る前のレスポンスを変換

  • 削除、名前変更、置換、追加が可能
  • 特定のステータスコードを持つ応答に変換を制限することもできる
  • Advanced プラグインで配列・ネストされたオブジェクトの処理も可能に

AWS Lambda

Kong Gateway から AWS Lambda を呼び出す

  • デフォルトでは MIME タイプ: application/x-www-form-urlencoded を使用してペイロードを送信する
  • AWS Request Signing などのプラグインを組み合わせてセキュアに

まとめ

  • 設計思想・認証・プラットフォームが違う API 群を束ねて共通の機能やセキュリティを追加したい時の候補に
  • さまざまなユースケースに対応したプラグイン、必要であれば自前でプラグインを作成することも可能
  • オンプレミス・クラウドなどプラットフォームに依存しないスケーラブルな API 統合環境の候補に

追加情報

8/25(金) 福岡で会社説明会をやりますので、興味のある方は是非お話ししましょう。