テナントリソースクォータ管理 (Quota Limits)
マルチテナント環境において、特定テナントによる端末の大量登録や無秩序なルーティング設定は、プラットフォーム全体の帯域やデータベース負荷を圧迫するリスクがあります。
AegisMesh は、各テナントに対して 4大リソースクォータ(上限値) を設定し、超過時の登録をアトミックに遮断する Fail-Closed ガードレール機構 を実装しています。
4大クォータパラメータ
各テナントには、契約プランやリセラーのポリシーに応じて以下のクォータ上限が割り当てられます。
| パラメータ名 | 説明 | デフォルト上限 | 超過時の影響 |
|---|---|---|---|
quota_max_peers | テナント全体で登録可能な最大端末(ピア)数 | 50 | 新規端末の登録(Setup Key / SSO)を拒絶 |
quota_max_routes | 登録可能な最大サブルート(LAN共有・Exit Node)数 | 100 | 新規ルーティングピアの追加を拒絶 |
quota_max_setup_keys | 発行可能な有効セットアップキーの最大数 | 20 | 新規セットアップキーの生成をブロック |
quota_max_users | 招待可能なIdP / ローカルユーザーの最大数 | 20 | ユーザー招待・アカウント追加を拒絶 |
Fail-Closed 制御仕様
AegisMesh のクォータ制御は、リソース作成トランザクション内で厳格に検証されます。
flowchart TD
Req["リソース作成リクエスト<br>(端末登録 / キー発行 / ルート追加)"] --> Lock["テナント行アトミックロック"]
Lock --> Check{"現在使用数 < クォータ上限?"}
Check -- Yes --> Save["リソース作成完了 (200 OK)"]
Check -- No (上限到達) --> Reject["即座にリクエスト拒絶<br>(429 Too Many Requests)"]
Reject --> Audit["監査ログ記録<br>quota.exceeded (コード: 211)"]
- アトミック検証: 並列リクエストによる上限すり抜けを防止するため、データベーストランザクション内で現在数を厳密にカウントします。
- 即時遮断 (Fail-Closed): 上限に達している場合、API は即座に
429 Too Many RequestsまたはPermissionDeniedを返却し、リソースの作成をブロックします。 - 監査イベント連動: クォータ超過試行が発生した際、管理コンソールの監査ログに
quota.exceeded(イベントコード: 211) が自動記録され、管理者に通知されます。
ダッシュボード UI での確認
管理コンソールの 「Settings」>「Quota」 タブを開くと、テナントの現在のリソース消費率がリアルタイムのゲージバーで表示されます。
- 安全 (緑色): 消費率 0% 〜 79%
- 注意 (黄色): 消費率 80% 〜 99%(警告バナー表示)
- 上限到達 (赤色): 消費率 100%(新規追加ボタンが自動的に無効化)
クォータ管理 API
自テナントのクォータ状況確認
GET /api/account/quotaAuthorization: Bearer <Token>レスポンス例
{ "peers": { "current": 42, "limit": 50, "utilization": 84.0 }, "routes": { "current": 12, "limit": 100, "utilization": 12.0 }, "setup_keys": { "current": 8, "limit": 20, "utilization": 40.0 }, "users": { "current": 18, "limit": 20, "utilization": 90.0 }}管理者によるクォータ上限変更 (SuperAdmin / ResaleAdmin)
PUT /api/admin/tenants/{id}/quotaContent-Type: application/json
{ "quota_max_peers": 100, "quota_max_routes": 200, "quota_max_setup_keys": 50, "quota_max_users": 50}