Skip to main content
Iru Identity は、アクセスの信頼できる中心となるように構築されたクラウドサービスです。以下では、サービスの構築方法と、それが信頼性と分離にとって何を意味するかを説明します。

役割によって分離された 2 つのプレーン

プラットフォームは、共通の階層化されたコアを共有する、独立してデプロイされる 2 つのサービスに分割されています。特権的なプロビジョニングをテナントごとのリクエストトラフィックから分離することで、それぞれの影響範囲を縮小します。

規律ある階層化されたコア

両方のサービスは、一方向の依存関係ルールを持つ階層化アーキテクチャで Go で構築されています。個別に強制されるプラットフォーム層が製品レイヤーの下にあり、テナント分離と ID プリミティブを所有します。ファウンデーションは、テナントコンテキストを持たない共有インフラストラクチャユーティリティのために依存関係のない状態を維持します。
1

プラットフォーム

テナント分離と ID の中核: データベースアクセス、セッション、テナントとリージョンの解決、アクター、ロギング、パブリック URL の処理。この層は個別にレビューおよび強制されるため、分離は通常の製品コードから切り離されます。
2

ファウンデーション

上位のものに依存しない共有インフラストラクチャユーティリティ (暗号化やトレースなど)。テナントスコープの関心事はここではなくプラットフォームにあります。
3

ドメイン

エンティティ (ユーザー、アプリケーション、ポリシーなど) ごとのビジネスロジック。プラットフォームとファウンデーションに依存し、ユースケースや REST には依存しません。
4

ユースケース

複雑なフローのために複数のドメインサービスを調整します。
5

REST

HTTP ハンドラーとミドルウェア。通信プロトコルを扱う唯一のレイヤーです。
この階層化は、コンパイラーによって保証される不変条件ではなく、文書化されたレビューで強制される規約です (リンティングとディレクトリ構造によって裏付けられています)。誇張せずに正直にそのことを明記しています。
テストも同じ規律に従います。純粋なビジネスロジックはモックなしで単体テストされ、動作は実際の PostgreSQL データベースに対して実行される統合テストによって検証されるため、テストではスタブによる近似ではなく、本番環境で実行されるのと同じ行レベルセキュリティと監査の動作が実行されます。

ホスティングと強化

Iru Identity は、セキュリティが強化されたデプロイメントで AWS 上で実行されます。

強化されたコンテナ

サービスは AWS Fargate 上で非 root として、読み取り専用のルートファイルシステム、no-new-privileges、およびすべての Linux ケーパビリティを削除した状態で実行されます。

常設のデータベースパスワードなし

アプリケーションは、短命の IAM 認証トークンを使用してマネージド PostgreSQL (Amazon RDS) に接続します。漏洩する静的な DB パスワードはありません。

シークレットはコードに含まれない

資格情報と署名キーは実行時にマネージドシークレットストアから挿入され、リポジトリにコミットされたり、データベースにプレーンテキストで保存されたりすることはありません。

スキャンされたサプライチェーン

コンテナイメージは、出荷前に CI パイプラインで脆弱性がスキャンされます。
静的アセットは CDN (Fastly) を通じて提供され、テスト用の短命なプレビュー環境は Google Cloud Run で実行されます。

2 つのリージョン、実際のデータレジデンシー

Iru Identity は 2 つの分離されたリージョン (米国 us-east-2 と欧州連合 eu-central-1) で運用されており、レジデンシーは慣例ではなくコードで強制されます。
  • すべてのテナントはリージョンに固定され、テナントレコードに保存されます。
  • データベースレイヤーはリージョンごとに個別の接続プールを保持し、すべてのトランザクションをテナントのリージョンによってルーティングします。リージョンを解決できないリクエストは拒否されます。黙って別のリージョンにフォールバックすることはありません。
  • リージョン固有のデータ操作 (シードデータなど) は、間違ったリージョンに対して実行できないよう制御されています。
結果として、EU テナントのデータは EU のインフラストラクチャに対してのみ読み書きされます。各リージョンのデータベース内で分離がどのように継続されるかについては、マルチテナント分離を参照してください。

稼働し続け、可観測性を備えるよう構築

依存関係のないライブネスエンドポイントにより、オーケストレーターはデータベースや認証に触れることなくプローブできます。シャットダウン時、サービスはトラフィックの受け入れを停止し、トレース、エラーレポート、データベース接続を順番にフラッシュします。
接続プールは調整および制限されており、起動時にデータベースに ping を送信し、到達できない場合は壊れたリクエストを処理するのではなくフェイルファストします。
アプリへのアカウントのプロビジョニングは、キャンセルを認識するバックグラウンドワーカーのアウトボックスと調整ループを通じて実行されるため、ダウンストリームの変更は失われることなく成功するまで再試行されます。
リクエストは OpenTelemetry で HTTP からアプリケーションコードを経て SQL クエリまでトレースされ、構造化ログはテナントとトレース ID によって相関付けられます。エラーは、忠実度とコストのバランスを取るためにサンプリングを使用して一元的に取得されます。
スキーマの変更は埋め込まれ、バージョン順に並べられ、チェックサムで検証されます (すでに適用されたマイグレーションが変更された場合はハードエラーになります)。常設のチェッカーが、すべてのテーブルの監査ジャーナルがライブスキーマと同期していることを証明します。

次のステップ

マルチテナント分離

行レベルセキュリティと追記専用の監査によって、すべてのテナントのデータを分離し、改ざん検知可能に保つ方法。

認証アーキテクチャ

フィッシング耐性のあるサインイン、署名付きリクエスト、および SSO の信頼の確立方法。

セキュリティとプライバシー

これらのメカニズムがもたらす保証。

システムアーキテクチャ

ID とサインインがどのように流れるかについての顧客向けの説明。