メインコンテンツまでスキップ

API Gateway

API Gateway は 443/TCP でクライアントからの接続を受け付け、アプリケーションの Web UI や外部連携のための API を提供する。

api-gateway コマンド

api-gateway コマンドは API Gateway を実装します。spnhub コマンドのパラメータはコマンドラインオプションと環境変数のいずれかで指定できます。 パラメータには以下のものがあります。

オプション環境変数名説明デフォルト
-cAPIGW_INVENTORY_URLAPI Gateway の構成情報を提供するインベントリのURL。http://localhost:8080

api-gateway コマンドは起動時とリロードシグナル受信時に構成情報をインベントリ から読み込みます。具体的には以下の順に読み込みます。リロードシグナルは SIGUSR1 です。

1. レルムの読み込み

全てのレルムを読み込みます。 API Gateway はレルムごとに内部が分離されており、マルチテナントのシステムを容易に実装できます。

name
required
string

レルムの名前。URN の一部として使用される。 文字列は小文字英字、数字、ハイフン、アンダースコアのみを含むことができる。

title
required
string

レルムの日本語名称です。

description
string

レルムの説明文です。

cacert
required
string

realm 配下の SPN hub で mTLSにおけるクライアント証明書を発行したCA局の証明書(PEM形式)の文字列

administrators
Array of strings

レルムの管理者のユーザID。ユーザの管理はインベントリでは行わない。認証サービス内でのみ管理され、ここではそのIDのみを参照する。

expiredAt
string <date-time>

レルムの有効期限。ISO8601形式で指定する。 この日時を過ぎると、レルムの disabled フラグは true となり、関連するリソースへのアクセスが制限される。

disabled
required
boolean

レルムが無効化されているかどうかを示すフラグ。 true の場合、レルムは無効化されており、関連するリソースへのアクセスが制限される。 false の場合、レルムは有効であり、通常の操作が可能である。

  • disabled が True のものは無視します。
  • リロードにおいては、一覧の前後を比較し、追加削除を行います。

2. ゾーンの読み込み

レルムごとにゾーンを読み込みます。

zone
required
string

ゾーンの名前。FQDN のサフィックスとして使用される。 文字列は小文字英字、数字、ハイフン、ピリオドのみを含むことができる。

title
required
string

ゾーンの日本語名称です。

description
string

ゾーンの説明文ですです。

realm
required
string

ゾーンが属するレルムの名前。

dnsProvider
string

ゾーンのDNSレコードを管理するためのDNSプロバイダのURN。

acmeCertificateProvider
string

ゾーンのSSL/TLS証明書を自動的に取得するためのACME証明書プロバイダのURL

DNS 連携

ゾーンに dnsProvider が設定されている場合、ゾーンに所属する仮想ホストに対してDNSレコードが自動的に作成される。 また、lets encrypt などの自動証明書発行サービスを使用して、仮想ホストに必要なSSL/TLS証明書を自動的に取得する。

3. 仮想ホストの読み込み

ゾーンごとに仮想ホストを読み込みます。 仮想ホストは、ゾーン内で特定のサービスやアプリケーションを識別するために使用されます。

name
required
string

仮想ホストの名前。所属するゾーンの名前と結合して FQDN を得ることができる。また、ピリオドを含めてサブドメイン化することもできる。 たとえば、 www.stg という仮想ホスト名でゾーンの名前が example.com の場合、FQDN は www.stg.example.com となる。

title
required
string
description
string
routingChain
required
string

この仮想ホストに紐づくルーティングチェーンのURN。 ルーティングチェーンは、リクエストの処理を行うためのルールの集合であり、リクエストを適切なマイクロサービスに転送するためのロジックを定義する。

certificate
Array of strings
key
string

この仮想ホストのサーバ証明書の秘密鍵。PEM形式の秘密鍵を指定する。 秘密鍵は、HTTPS通信を行うために必要であり、仮想ホストが提供するサービスのセキュリティを確保する。

disabled
boolean

仮想ホストが無効化されているかどうかを示すフラグ。 true の場合、仮想ホストは無効化されており、仮想ホストは削除され、アクセスは拒否される(TLSの場合、SSL_ERROR_HANDSHAKE_FAILURE を返し、平文の場合、400 Bad Request が返す)。 false の場合、仮想ホストは有効であり、アクセスが可能である。

disabled が True のものは無視されます。

4. ルーティングチェーンの読み込み

レルムごとにルーティングチェーンを読み込みます。 ルーティングチェーンは、API Gateway 内で HTTP リクエストの処理を行うためのルールの集合であり、リクエストを適切なマイクロサービスに転送するためのロジックを定義できます。

name
required
string

ルーティングチェーンの名前。URN の一部として使用される。 文字列は小文字英字、数字、ハイフン、アンダースコアのみを含むことができる。

urn
required
string

ルーティングチェーンのurn。

title
required
string

ルーティングチェーンの日本語名称です。

description
string

ルーティングチェーンの説明文です。

Array of objects

ルーティングチェーンのルールのリスト。各ルールは、リクエストを処理するための条件とアクションを定義する。 ルールは、リクエストのパスやヘッダなどを照合し、適切なアクションを実行するために使用される。

TLS通信

API Gateway では、以下の処置により、全ての通信を TLS で暗号化して行います。

  • サーバ証明書がない状態で受信したリクエストはすべて 400 のエラーで返す
  • http 80 番ポートに受信した場合、 301 で https にリダイレクトする
  • 全ての通信のレスポンスヘッダーに HSTS ヘッダーを付与する
Strict-Transport-Security: max-age=<seconds>; includeSubDomains; preload

mTLS認証

(未検討) https://github.com/cloudflare/pingora/issues/594