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

api-gateway コマンド

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

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

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

1. レルムの読み込み

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

name
required
string^[a-z0-9][a-z0-9-]*$

レルムの名前。URN の一部として使用される。 文字列は小文字英字、数字、ハイフンのみを含むことができる。 ただし、ハイフンで始まることはできない。 名称 "master" は予約されており、使用できない。

title
required
string

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

description
string

レルムの説明文です。

urn
string <urn>

レルムのURN。形式は urn:chip-in:realm:{realm-name} である。

cacert
required
string

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

signingKey
required
string >= 24 characters

realm 配下のAPI Gateway でセッショントークンの署名に使用されるパスワード。 使用できる文字は英字、数字、ハイフン、アンダースコアのみである。

sessionTimeout
integer

セッショントークンの有効期限。単位は秒で、デフォルトは 2592000 秒 (30日)。

administrators
Array of strings

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

expiredAt
string <date-time>

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

disabled
required
boolean

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

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

2. ゾーンの読み込み

レルムごとにゾーンを読み込みます。ゾーンは DNS 権威サーバの管理単位です。

zone
required
string <hostname>

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

title
required
string

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

description
string

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

realm
string <urn>

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

urn
string <urn>

ゾーンのURN。形式は urn:chip-in:zone:{realm-name}:{zone-name} である。

dnsProvider
string

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

acmeCertificateProvider
string

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

DNS 連携

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

3. サブドメインの読み込み

ゾーンごとにサブドメインを読み込みます。 サブドメインは、ゾーン内でドメインを作成するために使用されます。

name
required
string^([a-z0-9][a-z0-9-]*|@)$

サブドメインの名前。ゾーン名と結合して FQDN を得ることができる。 文字列は小文字英字、数字、ハイフンのみを含むことができる。 ただし、先頭がハイフンであってはならない。 たとえば、 stg というサブドメイン名でゾーンの名前が example.com の場合、 stg.example.com というサブドメインを構成し、www.stg.example.com, login.stg.example.com というような FQDN の仮想ホストを収容することができる。 特別なサブドメイン名 "@" は、ゾーンのFQDNそのものを表し、ゾーン直下の仮想ホストを収容する。

fqdn
string <hostname>

サブドメインの完全修飾ドメイン名(FQDN)。 たとえば、 stg.example.com のように、ゾーン名と結合して得られる。 このFQDNは、サブドメイン内の仮想ホストのFQDNのベースとなる。

zone
string <urn>

このサブドメインが属するゾーンのURN。 ゾーンは、サブドメインのFQDNのサフィックスとして使用される。 たとえば、 stg.example.com の場合、ゾーンは example.com となる。

urn
string <urn>

サブドメインのURN。形式は urn:chip-in:subdomain:{realm-name}:{zone-name}:{subdomain-name} である。

title
required
string

サブドメインの名称です。

description
string

サブドメインの説明文です。

destinationRealm
string

このサブドメインの貸出先レルムののURN。

shareCookie
boolean
Default: false

このフラグが指定されると、配下の仮想ホストの間でセッション Cookie が共有される。 すなわち、仮想ホストから発行せれるセッション Cookie の domain 属性にはサブドメインのFQDNが指定される。 デフォルトでは Cookie に Domain 属性は設定されない。 サブドメイン配下の仮想ホストのアクセスログ間でセッションによる串刺しが可能になり、シングルサインオンも実装される。 OIDCやSAMLによるシングルサインオンとは異なり、認証サーバへのリダイレクトは不要となる。

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

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

仮想ホストを読み込みます。 仮想ホストは、サブドメインの下にFQDNを持ち、特定のサービスやアプリケーションを識別するために使用されます。

name
required
string^([a-z0-9][a-z0-9-]*|@)$

仮想ホストの名前。指定したサブドメインの名前と結合して FQDN を得ることができる。 文字列は小文字英字、数字、ハイフンのみを含むことができる。 たとえば、 www という仮想ホスト名でサブドメインの FQDN が example.com の場合、FQDN は www.example.com となる。 特別なホスト名 "@" はサブドメインのFQDN そのものを仮想ホストの FQDN とすることを表す。

title
required
string

仮想ホストの名称。

description
string

仮想ホストの説明文。

realm
string <urn>

この仮想ホストが属するレルムのURN。

urn
string <urn>

仮想ホストのURN。形式は urn:chip-in:virtual-host:{realm-name}:{virtual-host-name} である。

subdomain
required
string

この仮想ホストが属するサブドメインのURN。 仮想ホストのFQDNは、仮想ホストの名前とサブドメインの名前を結合して得られる。 たとえば、 www という仮想ホスト名でサブドメインの FQDN が stg.example.com の場合、FQDN は www.stg.example.com となる。 サブドメインは自身のレルムに属するものかサブドメインの貸出先に自身のレルムが指定されているものでなくてはならない。

routingChain
required
string

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

accessLogRecorder
string

アクセスログを記録するサービスのURN。デフォルトでは標準出力に出力される。

accessLogMaxValueLength
integer
Default: 512

アクセスログの項目の値の最大長。デフォルトは 512 で、512文字を超える場合は切り捨てられる。

object

アクセスログ出力のフォーマット。1行1オブジェクトのJSON形式で出力される。 以下の属性は常に出力される。

属性名
timestamp ログの時刻
category "access-log" で固定
host 仮想ホストのFQDN
certificate
Array of strings
key
string

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

disabled
boolean

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

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

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

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

name
required
string

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

realm
string <urn>

ルーティングチェインが属するレルムの名前。

urn
string <urn>

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

title
required
string

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

description
string

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

Array of objects

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