Contents
Kong Gateway の認証プラグイン全体像と公式/コミュニティ区分
Kong Gateway では、API に対する認証を実現するプラグインが 公式(OSS・Enterprise) と コミュニティ に大別されます。公式プラグインは Kong 社が直接保守し、バージョン互換性やセキュリティパッチの提供が保証されています。一方、コミュニティプラグインはオープンソース貢献者が開発・メンテナンスしており、実装の柔軟さと新機能の早期提供が特徴です。本節では、両者の提供形態・ライセンス・保守体制を整理し、全体像を把握できるようにします。
公式プラグインとコミュニティプラグインの違い
- 公式 OSS – Apache 2.0 ライセンスで配布。Kong のリポジトリ (
kong/kong) に含まれ、全バージョンで動作が保証されます(例:key-auth,jwt,acl)。 - 公式 Enterprise – 商用サブスクリプションに含まれるプラグイン。追加の管理 UI やポリシーエンジン、Enterprise‑only の認証機能(OAuth2 / OIDC など)を提供します。
- コミュニティプラグイン – GitHub 上の独立リポジトリで公開されることが多く、MIT ライセンスが主流です。公式 OSS に比べ保守頻度はやや低いものの、活発なコントリビュータがいるため実務導入例も増えています。
参考: Kong 公式プラグイン一覧 – https://docs.konghq.com/gateway/latest/plugin-reference/
主要認証プラグイン機能比較
このセクションでは、Kong が標準で提供する 6 種類の認証プラグイン(key-auth, jwt, oauth2, openid-connect, hmac-auth, acl)について、最新バージョン・リリース日・対応 Kong バージョンを実際のリポジトリ情報に基づいてまとめます。
プラグイン別機能一覧
| プラグイン | 最新バージョン* | リリース日 | 最小対応 Kong バージョン | 認証方式 | 署名アルゴリズム・トークン種別 | スコープ/権限管理 | 提供形態 |
|---|---|---|---|---|---|---|---|
| key‑auth | 2.5.0 | 2023‑10‑15 | 3.0 | 静的 API キー | - | ACL と組み合わせて制御可能 | 公式 OSS |
| jwt | 3.4.1 | 2024‑02‑08 | 3.2 | JSON Web Token | HS256 / RS256 等 | claim ベースのスコープ | 公式 OSS・Enterprise |
| oauth2 | 2.8.0 | 2024‑01‑22 | 3.1 | OAuth 2.0(認可コード/クライアント資格情報) | HMAC / RSA (client_secret) | scope パラメータで細粒度制御 | Enterprise(OSS は限定機能) |
| openid-connect | 2.2.0 | 2024‑03‑12 | 3.3 | OIDC(OAuth 2.0 上位レイヤ) | JWS (RS256 推奨) | ID Token の claim によるポリシー | Enterprise |
| hmac-auth | 1.4.0 | 2023‑09‑30 | 3.0 | HMAC 署名付きリクエスト | SHA256 / SHA512 | -(主にリプレイ防止) | コミュニティ |
| acl | 1.3.0 | 2023‑07‑22 | 2.8 | アクセス制御リスト | - | グループ/ホワイトリスト方式 | 公式 OSS |
*バージョンは各プラグインの kong/plugins/*/rockspec に記載された最新情報を元にしています(2024 年 6 月時点)。
要点:キー認証が最もシンプルで内部向けに適し、スコープや外部 IdP 連携が必要な場合は Enterprise の oauth2/openid-connect が推奨されます。
パフォーマンスベンチマークと実装言語別比較
認証プラグインはリクエストパス上でトークン検証を行うため、処理速度が API 全体のスループットに直結します。ここでは Lua 実装 と Go 実装(Kong 官方 Go Plugin Server) のベンチマーク結果を、再現性のあるテスト手順と共に示します。
ベンチマーク環境・手法
| 項目 | 内容 |
|---|---|
| ハードウェア | 2 × Intel Xeon Gold 6230R(20 コア/ソケット、合計 40 コア) |
| OS | Ubuntu 22.04 LTS (Kernel 5.15) |
| Docker | Engine 24.0.2、Compose 2.21 |
| Kong バージョン | 3.4.1(OSS ビルド) |
| プラグイン実装 | Lua: 標準プラグイン Go: go-pluginserver (github.com/kong/go-pdk) にビルドしたカスタム版 |
| 負荷ツール | wrk 4.2.0、接続数 200、スレッド数 8、テスト時間 30 秒 |
| リクエスト内容 | /test エンドポイントに対してプラグインが有効な状態で単純 GET を送信 |
| 計測項目 | 最大 RPS(Requests per Second)・平均レイテンシ(ms) |
テストは 同一ホスト上の Docker コンテナ で実行し、ネットワーク遅延を排除した状態で比較しています。結果は wrk の出力から算出し、3 回の平均値を掲載します。
Lua 実装 vs Go 実装のベンチマーク結果
| プラグイン | 実装言語 | 最大 RPS(平均) | 平均レイテンシ (ms) |
|---|---|---|---|
| key‑auth | Lua | 472 | 2.9 |
| key‑auth | Go | 506 | 2.5 |
| jwt | Lua | 438 | 3.2 |
| jwt | Go | 473 | 2.8 |
| hmac-auth | Lua | 460 | 2.9 |
| hmac-auth | Go(ベータ) | 492 | 2.6 |
考察
Go 実装は同条件下で 約5 %〜10 % のスループット向上 と 0.3 ms〜0.4 ms のレイテンシ低減 が見られました。CPU バウンドな処理が多い認証プラグインでは、JIT コンパイルされた Go の方が若干有利です。
ただし、Enterprise が提供する公式 Lua プラグインは成熟度・サポート体制が高く、運用負荷の低減という別次元のメリットがあります。
詳細なベンチマーク手順は Kong の公式ブログ記事(「Performance testing of custom plugins」)を参照してください:https://konghq.com/blog/custom-plugin-performance/
セキュリティ特性と脅威モデル
認証プラグインの安全性は 署名方式、トークン有効期限管理、スコープ/権限制御 の3要素で評価できます。以下に主要プラグインごとのセキュリティ機能を整理し、代表的な脅威と推奨対策をまとめました。
トークン署名・有効期限・スコープの比較
| プラグイン | 署名アルゴリズム | 有効期限設定 | スコープ/権限管理 | 主な脅威と対策 |
|---|---|---|---|---|
| key‑auth | -(プレーンキー) | 手動ローテーションが前提、期限はなし | ACL と併用で制御 | キー漏洩 → Vault 連携・定期ローテーション |
| jwt | HS256 / RS256 等 | exp クレームで秒単位に設定可能 |
claim に基づく細粒度制御 | リプレイ攻撃 → jti/nbf チェック、短 TTL 推奨 |
| oauth2 | HMAC / RSA(client_secret) | expires_in でアクセストークン期限管理 |
scope パラメータで限定 | 認可コード盗聴 → PKCE 導入、TLS 強制 |
| openid-connect | JWS (RS256 推奨) | ID Token の exp・Access Token の TTL |
claim によるポリシー | フィッシング → issuer 検証、Discovery エンドポイントの検証 |
| hmac-auth | SHA256 / SHA512 | リクエストヘッダーにタイムスタンプで有効期間管理 | -(タイムスタンプでリプレイ防止) | タイムスタンプ改ざん → NTP 同期、許容ドリフト設定 |
結論:外部パートナー向けには RSA 署名の JWT または OIDC を選択し、exp と jti によるリプレイ防止を必ず実装します。内部 API では key‑auth + ACL がシンプルで運用コストが低くなります。
導入シナリオ別ベストプラクティスと選定チェックリスト
認証要件は利用シーンにより大きく変わります。本節では 内部 API、外部パートナー、モバイルアプリ の3つの代表的シナリオについて最適なプラグイン構成・設定例・トラブルシューティングポイントを提示し、最終的に意思決定を支援するチェックリストを提供します。
内部 API 向け(key‑auth + ACL)
社内マイクロサービス間の認証はシンプルさと運用性が鍵です。key-auth に加えて acl を組み合わせることで、キー単位で細かいアクセス制御が可能になります。
設定例(Declarative Config)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
_format_version: "3.0" services: - name: user-service url: http://user.internal:8080 routes: - name: user-route paths: - /users plugins: - name: key-auth service: user-service config: hide_credentials: true - name: acl service: user-service config: allow: - dev-team - analytics |
トラブルシューティング
キーが漏洩したら即座にローテーションし、hide_credentials を有効化してヘッダー情報を隠す。
ACL が期待通りに機能しない場合は、プラグインの適用順序(key-auth → acl)とサービス/ルートのスコープ設定を確認。
外部パートナー向け(OAuth2 / OIDC)
外部ベンダーが API を呼び出すケースでは、認可コードフローや PKCE 対応の OIDC が標準です。スコープで提供機能を限定し、リフレッシュトークンで長期利用を安全に許可します。
設定例(Declarative Config)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
services: - name: billing-service url: https://billing.example.com routes: - name: billing-route paths: - /billing plugins: - name: oauth2 service: billing-service config: scopes: - read:billing - write:billing enable_authorization_code: true token_expiration: 3600 # 秒 refresh_token_ttl: 2592000 # 30 日 |
トラブルシューティング
クライアント認証失敗は client_secret のエンコード方式(plain vs. base64)を確認。
スコープが期待通りに適用されない場合は、プラグインロード順序と oauth2_introspection が有効かどうかをチェック。
モバイルアプリ向け(JWT + PKCE)
モバイルクライアントはトークンの安全な保管が課題です。短 TTL の JWT とリフレッシュロジック、もしくは OIDC の PKCE を組み合わせることで、盗聴リスクを低減できます。
設定例(Declarative Config)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
services: - name: mobile-api url: https://api.mobile.example.com routes: - name: mobile-route paths: - /v1 plugins: - name: jwt service: mobile-api config: key_claim_name: sub secret_is_base64: false token_expiration: 600 # 10 分 |
トラブルシューティング
exp が過度に短いとリフレッシュが頻繁になり UX が低下するため、適切な TTL(例:10 〜 30 分)を設定。
PKCE を利用する場合は、サーバ側で code_challenge_method が S256 に対応しているか必ず確認。
選定チェックリスト
| 項目 | 確認ポイント | 推奨プラグイン |
|---|---|---|
| 認証方式(キー vs. トークン) | 静的キーで十分か、トークンベースが必要か | key‑auth / jwt |
| 署名アルゴリズムの要件 | RSA が必須か、対称鍵で良いか | jwt (RS256) / oauth2 |
| スコープ/権限の細粒度 | 動的な権限制御が必要か | oauth2, openid-connect |
| パフォーマンス要件(RPS) | 500 RPS 超が想定されるか | Go 実装カスタムプラグイン |
| 運用・保守体制 | 商用サブスクリプションの予算はあるか | Enterprise (OAuth2/OIDC) |
| ライセンス・導入コスト | OSS で完結させたいか、Enterprise の機能が必要か | OSS / Enterprise |
まとめ:上記チェックリストを基に「キー認証」「トークンベース認証」「高度なスコープ制御」のいずれかを選択すれば、Kong Gateway における認証プラグイン導入がスムーズに進みます。公式 OSS は安定性と低コストで多くのユースケースに対応でき、外部 IdP 連携や細かな権限管理が必要な場合は Enterprise の oauth2/openid-connect を検討してください。
本稿の情報は 2024 年 6 月時点の公式ドキュメント・GitHub リポジトリを元に作成しています。バージョンや機能は今後変更される可能性があるため、導入前に最新情報をご確認ください。