Plugin の概要
Plugin は API Gateway を拡張し、request がバックエンドに届く前に、認証、セキュリティの追加、トラフィックの制御、request の変換を行います。各 plugin は 1 つの API Gateway に属し、選択した範囲(Scope)に適用されます。
サポートされている plugin
| Plugin | 種類 | 用途 | ガイド |
|---|---|---|---|
| JWT Auth | Authentication | Consumer の JSON Web Token で request を認証します。 | JWT Auth plugin |
| OpenID Connect | Authentication | OAuth 2.0 / OIDC を使い、外部の Identity Provider(Keycloak、Auth0、Google、Okta など)を通じて認証します。 | OpenID Connect plugin |
| Cors | Security | CORS ヘッダーを追加して、別ドメインの Web ページがブラウザーから API を呼び出せるようにします。 | CORS plugin |
| Rate Limiting | Traffic Control | 一定の時間枠内の request 数を制限します。 | Rate Limiting plugin |
| Proxy Rewrite | Transformation | request がバックエンドに届く前に、host、path、method、ヘッダーを書き換えます。 | Proxy Rewrite plugin |
手順については、Plugin の追加と各 plugin のページを参照してください。
Scope
plugin を作成するときに、Scope セクションで適用先を選択します。
| Scope | 適用先 | 一覧の Applied to 列 |
|---|---|---|
| Global | API Gateway のすべての Service、Route、Consumer。 | Global |
| Scoped | + Add Route / + Add Service で選択した Route / Service のみ。 | Route、Service、または Route + Service |
1 つの plugin を複数の Route / Service に紐付けられます。Route または Service の詳細画面から plugin を追加する場合は、既存の plugin を再利用する(Select existing plugin)か、新しい plugin を作成する(Create new plugin)かを選びます。
直接の plugin と継承された plugin
Route / Service の詳細画面の Plugins タブには、2 つのサブタブがあります。
| サブタブ | 意味 |
|---|---|
| Explicit Plugin | 表示中の Route / Service に直接紐付けられた plugin です。このサブタブで plugin を追加します。 |
| Implicit Plugin | Route / Service が他から受け取る plugin で、読み取り専用です: Global の plugin、または Route が Via Service で使う Service に紐付けられた plugin。 |
例: Rate Limiting plugin が order-service Service に紐付けられているとします。Via Service で order-service を使うすべての Route では、この plugin が Implicit Plugin サブタブに表示されるため、Route ごとに紐付け直す必要はありません。
Plugin と他のモジュール
| モジュール | plugin との関係 |
|---|---|
| Route | Scope の対象です。Plugins タブに Explicit Plugin / Implicit Plugin があり、そこで plugin を追加できます。 |
| Service | Scope の対象です。Service に紐付けた plugin は、Via Service を使う Route に継承されます。 |
| Consumer | 認証 plugin は Consumer の Credential で request を識別します。Global の Scope は Consumer も対象にします。 |
| Upstream | plugin を Upstream に直接紐付けることはできません。Upstream に送られる request に plugin を適用するには、その Upstream を使う Route または Service に紐付けます。 |
よく使う plugin の組み合わせ
一部の plugin は、他のコンポーネントと組み合わせて初めて機能します。
| 目的 | 必要なもの |
|---|---|
| JWT で request を認証する | Route / Service の JWT Auth plugin + JWT Credential を持つ Consumer。 |
| 顧客ごとに request を制限する | limit_by を consumer に設定した Rate Limiting plugin + 同じ Route / Service の認証 plugin(JWT Auth、OpenID Connect)。 |
| 別ドメインのフロントエンドがトークン付きで API を呼び出す | Cors plugin + JWT Auth(JWT Auth の run_on_preflight は false のまま)。 |
| Consumer 名をバックエンドに渡す | $consumer_name 変数を使う Proxy Rewrite plugin + 先に実行される認証 plugin。 |