EXERCISE 90分

ストーリー

田中VPoE
認証、認可、フェデレーションの理論を学んだ。ここからはPayConnectのID管理基盤を一から設計してもらう
あなた
認証基盤の全体設計ですね。IdP選定から始めますか?
田中VPoE
そうだ。PayConnectはBtoB SaaSとして3,000社の顧客企業にサービスを提供している。エンタープライズ顧客が求めるSAML SSO対応、マルチテナントの認可設計、APIの認証設計まで、包括的なID管理基盤を設計してくれ
あなた
顧客企業のIdP連携が入ると、かなり複雑になりそうですね
田中VPoE
だからこそ設計が重要だ。場当たり的にSSO対応を追加していくと、テナント間のデータ漏洩や権限昇格のリスクが生まれる

ミッション概要

項目内容
演習タイトルID管理基盤の設計
想定時間90分
成果物ID管理基盤設計書(認証 + 認可 + フェデレーション)
対象システムPayConnect(BtoB SaaS、3,000社の顧客企業)

前提条件

PayConnect ID管理の現状:

認証:
  - エンドユーザー: メールアドレス + パスワード(自前実装)
  - 管理者: 同上(MFAなし)
  - API: 静的APIキー(ヘッダー認証)
  - SSO: 未対応(大企業顧客から要望多数)

認可:
  - ロール: owner, admin, member, viewer の4ロール
  - テナント分離: アプリケーションコードでWHERE tenant_id = ?
    (全APIに個別実装、一貫性なし)

課題:
  - 大企業顧客(500社以上)からSAML SSO対応の要望
  - テナント間のデータ漏洩バグが過去に2件発生
  - パスワードポリシーが弱い(6文字以上のみ)
  - MFAが未実装
  - 退職者のアカウント削除が手動(遅延あり)
  - APIキーのローテーション機能なし

Mission 1: 認証アーキテクチャの設計

要件

PayConnectの認証アーキテクチャを設計してください。

  1. IdPの選定(2つ以上の候補を比較し、選定理由を説明)
  2. エンドユーザー認証のフロー設計(OAuth 2.0 + OIDC)
  3. MFA戦略の設計(必須条件、方式選定)
  4. API認証の設計(JWT + APIキー管理)
解答例

IdP 選定

観点Auth0KeycloakAWS Cognito
SAML SP対応ありありあり
エンタープライズSSO標準機能要設定限定的
SCIM対応ありプラグインなし
マルチテナントOrganizations機能Realm分離ユーザープール
コスト(3,000社想定)約500万円/年OSS(運用コスト)約200万円/年
開発者体験優れている中程度良好

選定: Auth0

選定理由:

  1. エンタープライズSSO(SAML/OIDC)が標準機能として提供
  2. Organizations機能でマルチテナントのSSO管理が容易
  3. SCIM対応で自動プロビジョニングが実現可能
  4. 豊富なSDKとドキュメントで開発速度が高い

MFA 戦略

対象MFA要件許可する方式
全エンドユーザー推奨(初回ログイン時に促進)パスキー、認証アプリ(TOTP)
管理者(owner, admin)必須パスキー、認証アプリ
決済操作必須(ステップアップ認証)パスキー、認証アプリ
API(M2M)該当なし(Client Credentials)

API 認証設計

API種類認証方式トークン/キー管理
エンドユーザーAPIAuthorization Code + PKCE → JWTaccessToken: 15分、refreshToken: 7日
管理者API同上 + MFA必須accessToken: 15分(MFAクレーム付き)
パートナーAPI(M2M)Client Credentials → JWTaccessToken: 1時間
Webhook受信HMAC署名検証Webhook Secretをローテーション(90日)

Mission 2: 認可モデルの設計

要件

PayConnectの認可モデルを設計してください。

  1. 認可モデルの選定(RBAC/ABAC/ReBAC から選択し根拠を説明)
  2. ロール/権限体系の設計
  3. テナント分離の実装方針(アプリケーション層 or データベース層)
  4. 認可エンジンの選定
解答例

認可モデル: RBAC + テナント分離(ABAC的要素を含む)

選定根拠:

  • PayConnectの権限体系は4ロールで比較的シンプル → RBACが適切
  • テナント分離が最優先課題 → ABAC的なテナントID属性チェックを追加
  • ReBAC(Google Zanzibar型)は現時点でオーバースペック

ロール/権限体系

ロール請求書ユーザー管理設定決済操作API管理
ownerCRUDCRUD + 招待CRUD実行 + 承認CRUD
adminCRUDCRU + 招待CRU実行CRU
memberCRURR実行R
viewerRRRR

テナント分離の実装方針

多層防御によるテナント分離:

Layer 1: API Gateway
├── JWTのtenant_idクレームを検証
└── リクエストヘッダーにtenant_idを付与

Layer 2: アプリケーションミドルウェア
├── OPAにtenant_id + role + actionを送信
└── DENY の場合は 403 を返す

Layer 3: データベース(最後の砦)
├── PostgreSQL Row Level Security(RLS)
├── SET app.current_tenant = :tenant_id
└── RLSポリシーで自動フィルタリング

Layer 3 の設定:
  ALTER TABLE invoices ENABLE ROW LEVEL SECURITY;
  CREATE POLICY tenant_isolation ON invoices
    USING (tenant_id = current_setting('app.current_tenant')::uuid);

認可エンジン: OPA(Open Policy Agent)

選定理由:

  1. Kubernetes統合が容易(サイドカーデプロイ可能)
  2. Rego言語でテナント分離 + RBAC のポリシーを表現可能
  3. OSSでコスト0円
  4. 将来的にABAC/ReBACに拡張可能

Mission 3: エンタープライズSSO設計

要件

PayConnectのエンタープライズSSO機能を設計してください。

  1. SSO対応フロー(SAML + OIDC両対応)
  2. テナントごとのSSO設定管理の仕組み
  3. SCIMによる自動プロビジョニング
  4. フォールバック戦略(IdP障害時の対応)
解答例

SSO対応フロー

エンタープライズSSO対応フロー:

[ユーザー] ──→ PayConnect ログイン画面

                    │ メールアドレス入力: user@enterprise.com

               ┌────┴────┐
               │ ドメイン  │ enterprise.com を検索
               │ ルック   │
               │ アップ   │
               └────┬────┘

         ┌──────────┼──────────┐
         │          │          │
    SSO設定あり  SSO設定なし  ドメイン未登録
    (SAML/OIDC) │          │
         │       パスワード   エラー
         │       ログイン     「組織に問い合わせ」

    IdPにリダイレクト
    (SAML or OIDC)


    認証成功 → テナント特定 → ロールマッピング → セッション作成

テナントSSO設定管理

設定項目SAMLOIDC
IdP Entity ID必須
SSO URL必須
SLO URL任意
X.509 Certificate必須
Discovery URL必須
Client ID必須
Client Secret必須
ドメイン認証DNS TXT レコードで所有権確認DNS TXT レコードで所有権確認
ロールマッピングIdP属性 → PayConnectロールclaims → PayConnectロール

フォールバック戦略

シナリオ対応
IdPがダウンテナント管理者(owner)のみローカルパスワード + MFA でログイン可能
SAML証明書期限切れ30日前にテナント管理者にメール通知、7日前にCriticalアラート
ユーザーがIdPのアカウントを失ったテナント管理者がPayConnect上でパスワードリセット可能

達成度チェック

観点達成基準
IdP選定2つ以上の候補を比較し、選定理由が明確
認証設計OAuth 2.0フロー、MFA戦略、API認証が適切に設計されている
認可設計認可モデルが選定され、テナント分離が多層防御で設計されている
SSO設計SAML/OIDC両対応、ドメインベースのテナント識別が設計されている
フォールバックIdP障害時の対応が設計されている

推定所要時間: 90分