[登壇資料] Kong Gateway から読みとく、 API統合・API連携サービスの最新情報 #devio2023
はじめに
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
- 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(金) 福岡で会社説明会をやりますので、興味のある方は是非お話ししましょう。