概念モデル
Chip-in を構成する要素は外から見ると、1個のコアサービスと複数のマイクロサービスからなります。ブラウザからのアクセスをコアサービスで受け付けマイクロサービスに分散して処理を行います。接続の方向をマイクロサービスからコアサービスへの方向に限定することで前述の課題を解決します。コアサービスはグローバルIPとサーバ証明書を持ちます。マイクロサービスはクライアント証明書をもっており、コアサービスとの間で mTLS認証を行います。 ユーザからの HTTP アクセスをコアサービスの API Gateway で受け、SPN(Secure Private Network) 経由でマイクロサービスを集約します。
レルム
Chip-in ではマルチテナント SaaS の提供を目的として、接続されるサービスをレルムと呼ばれるグループごとに論理的に分離する機能を提供します。 API Gateway, SPN Hub などの基盤となるサービスのインスタンスはレルム間で共有しますが、配置されるサービスは異なるレルムに属するサービスとは一切通信することはできません。 master レルムはシステムで予約されており、レルムの作成、変更、削除などの管理するためのサービスが提供されます。master レルムの定義はインベントリから読み取られるのではなくビルトインとして SPN Hub, API Gateway に組み込まれています。
レルムによる分離について、以下の例外があります。
- master レルム上のゾーンはテナントのレルムに貸し出され、テナントは Chip-in ベンダからゾーンを借りてサブドメインを作ることができます
- テナントレルムのルーティングチェーン、仮想ホストは master レルム上に定義される主要なルーティングチェーンをライブラリとして参照できます
- テナントレルムは master レルム上の汎用的なマイクロサービスを利用することができます。
インベントリサービス
コアサービス内にはインベントリサービスが含まれています。インベントリサービスは S3 や etcd などの KVS をバックエンドに持ち、インベントリ Swagger ファイルで定義された Restful API を提供します。インベントリサービスには以下のものが登録されています。
- 登録済みマイクロサービス証明書のリスト
- マイクロサービス証明書を発行するCA局の証明書
- マイクロサービス定義のリスト
- ゾーン定義(ホスト定義、サーバ証明書を含む)
インベントリサービスはアクセス元のマイクロサービス証明書に含まれる拡張属性を使用してじ次世代アクセス制御(NBAC)を行います。NBAC は rego で記述され、opa-go などのクレートを使用して実装されます。