分離を強制するのはアプリケーションコードではなく、データベースです。
何かを変更するリクエストは、独立して機能する三か所で三度認可されます。その背後に 868 の行レベルセキュリティポリシーがあるため、ハンドラーの誤りはデータ漏えいではなくバグにとどまります。このページは、当社を承認する立場の方に向けて書かれています。
Lurno がある組織のデータを、別の組織からどう守るか
Lurno は、データを変更するすべてのリクエストを独立した三か所で認可します。インターフェースはコントロールを描画する前に権限を確認します。サーバーはデータに触れる前に同じ権限を検証し、否であれば拒否します。データベースは、そのクエリがそもそもどの行を返してよいかを決める行レベルセキュリティポリシーを適用します。三つすべてが通る必要があります。676 のマイグレーションにわたり、そうしたポリシーが 868 あります。アプリケーションのテーブルは既定の public ではなく 14 のドメインスキーマに置かれているため、その上のコードが誤っていても、ある組織の行は別の組織のセッションから届きません。管理操作は追記専用の監査ログに書き込まれ、その行は SHA-256 で連鎖し、クエリで検証できます。Augmental Learning Inc. は ISO 27001 の実務に準拠していますが、ISO 27001 認証も SOC 2 報告書も保有していません。買い手にそう思い込ませるのではなく、質問票にそのまま記載します。
- 三段階の認可
- 一つのリクエストを、独立して機能する三つの仕組みで三度認可するモデルです。第一の段階はインターフェースで、サインイン中の人に権限のないコントロールを隠します。第二の段階はサーバーで、ハンドラーはデータに触れる前に権限を検証し、否であれば例外を投げます。第三の段階はデータベースで、テーブル上の行レベルセキュリティポリシーがクエリの返せる行を制限します。第一は利便性、第二が主たる境界、第三は第二が飛ばされたときにも残るものです。
三つの段階と、それぞれの背後にあるもの
一つのリクエスト、三度の認可
インターフェースのコントロールは、描画の前にサインイン中の人がその権限を持つかを尋ねます。サーバーのハンドラーは、作業を始める前に同じ権限を検証します。そしてデータベースが、クエリの見てよい行を決めるポリシーを適用します。三つの仕組み、正しくあるべき三つの別々の場所。どれか一つが否と言えば、リクエストは終わります。
- インターフェースの確認は境界ではなく利便性です。ボタンを隠しますが、テーブルは守りません。
- すべての確認は一つの権限カタログと一つの関数を通ります。ハンドラーがロール名を読んで、その意味を自分で判断することはありません。
- 組織ツリーのブランチで付与されたロールは、そのブランチの下に継承されます。データベースのポリシーはインターフェースと同じツリーを読むので、両者が食い違うことはありません。
676 のマイグレーションにわたる 868 のポリシー
分離は慣行ではなくスキーマです。テーブルは行レベルセキュリティを有効にした状態で作成され、そのポリシーはサーバーが呼ぶのと同じ権限関数に委譲します。さらにマイグレーション検査が、背後にポリシーのないままアクセスを許可されたテーブルを探します。この数字は宣伝用の数値ではなく、いくつのポリシーを強制しているかとデータベースに尋ねたときの答えです。
- ポリシーは自前のロジックを埋め込みません。権限関数を呼ぶので、その答えが直前にサーバーが下した判断とずれることはありません。
- 書き込みポリシーには読み取り条項に加えてチェック条項があるため、書き手に権限のない組織へ行を挿入することはできません。
- ビューが個人データを公開する場合、アクセスは列ごとに付与します。テーブル全体への付与は列単位の保護を静かに無効化するため、使いません。
14 のドメインスキーマ、public は決して使わない
アプリケーションのテーブルは名前付きの 14 のスキーマにあります。ID とアクセスに一つ、組織に一つ、メディアに一つ、といった具合です。重要なものは既定の public スキーマに置きません。そこは、うっかりした付与や緩い既定値が最も露出につながりやすい場所だからです。非公開メディアには、サインイン中のブラウザ向けのストレージポリシーが一切ありません。読み取りはすべて、所有する行を先に確認したサーバーが署名し、アップロードも同じ方法で発行されます。
- 使い捨てのトークン — 招待、パスワードリセット、アカウント復旧 — はソルト付きハッシュで保存します。生のトークンはメールで一度だけ表示され、二度と表示されません。
- 公開されるのはブランディングだけです。組織のロゴとファビコンは誰かがサインインする前に描画される必要がありますが、アバターやレッスンのメディアはそうではないため、署名付きのままです。
何が起きたかを、後から証明する
誰も検証できない監査ログは、宣伝が上手なログファイルにすぎません。こちらは追記専用で改ざんが検知でき、検証はクエリ一つです。
追記専用のログ
管理操作は、実行者、アクション、リソース、組織、そして変更前後のペイロードを持つイベントとして書き込まれます。監査行を更新するものはありません。書き込み経路は追記だけです。
SHA-256 のハッシュチェーン
各イベントは直前のイベントのハッシュと自身のハッシュを保持します。どちらもイベントを記録したコードではなく、データベースのトリガーが付与します。一行でも変えれば、それ以降のハッシュはすべて一致しなくなります。
その場で実行して見せられる検証
検証関数がチェーンをたどり、最初に破綻した行を指し示します。レビューの場で、目の前で実行します。
アクセスレビュー
誰がどの組織でどのロールを持つかを、監査の時期ではなく定期的に見直します。剥奪も他と同じく監査イベントです。
破壊的な操作には二名
個人の匿名化や削除は、まず申請、次に別の承認です。申請者は自分の申請を承認できず、誰も自分自身を対象にできません。
自分で終了できるセッション
サインイン中の人は自分の他のセッションを失効させられます。失効したセッションは、トークンの期限切れを待たずに次の権限チェックで締め出されます。
同意から消去まで、各段階に期限を付けて
各テナントが学習者データの管理者であり、Lurno は処理者です。以下の仕組みが、その区分を契約上のものではなく実際のものにします。
- 01
バージョン付きの同意
同意の対象となるポリシーにはすべてバージョンが付きます。ポリシーを変更すれば古い同意は無効になり、本人に改めて確認し、何にいつ同意したかを記録します。AI 処理は別の同意です。撤回すれば、どのプロバイダーにも何も送信されません。
- 02
ウィザード形式の開示請求
管理者はその場で工夫するのではなく、手順に沿って請求を処理します。本人を特定し、プラットフォーム全体から保有情報を集め、エクスポートを作成します。ポータビリティとは機械可読という意味です。スクリーンショットの PDF ではなく、JSON と CSV です。
- 03
終了日のある保持
個人データは既定で永久に残るのではなく、カテゴリごとの保持スケジュールを持ちます。休眠アカウント、期限切れの招待、古いセッションにはすべて、それ以降は存在しなくなる日付があります。
- 04
二名承認による消去
一人の管理者が申請し、二人目が承認して、初めて実行されます。申請者が承認することは決してできず、どちらも自分自身を対象にできません。消去はプロフィール行だけでなく、その人を参照するテーブルにも及びます。
- 05
72 時間の期限を持つ侵害登録簿
インシデントは、発見から 72 時間として計算された期限を持つ一行であり、完了するまでリマインダーが鳴り続けます。時計が動き出すのは発見の時点であり、誰かが第 33 条を思い出した瞬間ではありません。
データが実際に置かれる場所
別の場所を指定できるメディアストレージ
ファイルは四つの実装を持つストレージインターフェースを通じて書き込まれます。Supabase Storage、Amazon S3、Azure Blob Storage、Google Cloud Storage です。所在地要件に対しては、たいていこれが正直な答えになります。ベンダーがリージョンを開設するのを待つのではなく、要求されたリージョンのバケットにファイルを書き込む構成にできるからです。要件は早めにお知らせください。今日それを満たせるかどうかを率直にお伝えします。
- データベース、認証、API が動く関数は Supabase がホストしています。これは構成で回避できない唯一の依存であり、DPA に明記しています。
- 組織ごとのカスタムドメインは Cloudflare 経由で提供され、証明書は自動発行されます。ベイルートでもミラノでも、学習者に見えるのは当社ではなく御社のドメインです。
EU 内のプロダクトアナリティクス、学習者は対象外
プラットフォームのアナリティクスは PostHog の EU リージョンで動きます。抽象化層を挟んでいるため、製品に触れずにベンダーを交換できます。セッションリプレイはマスキングされ、学習者を記録することはありません。学習者向け画面はリプレイの計測対象になっていません。
- テキスト入力と個人データとして指定されたものは、リプレイがどこかへ送られる前にブラウザ内でマスキングされます。
- アナリティクスは同意を前提とし、組織が有効にしない限りオフです。未成年者に関するプロファイリングは、どの画面でも行いません。
テキストが AI プロバイダーに届く前に起きること
学習者のメッセージ、アップロードされた PDF、コパイロットに入力された質問。すべては内容であって、指示ではありません。その区別はプロンプトでお願いするのではなく、強制します。
インジェクションの分類
信頼できない入力は、本来の呼び出しの前に分類されます。モデルの向きを変えようとするテキストは、実行されるのではなくフラグが立ちます。
ランダム化されたフェンス
信頼できないテキストは、推測できないリクエストごとのタグで囲み、そのタグは内容そのものから取り除きます。切り詰めが起きた場合もフェンスを開いたままにせず、閉じ直します。
呼び出し前の秘匿化
氏名、メールアドレス、識別子は、プロバイダーへ何かが出る前に置き換えられます。採点は匿名化された提出物に対して行われ、学習者への対応表は当社サーバーに残ります。
出力スキーマの検証
すべての応答はスキーマに照らして検証されます。不正な応答は 1 回だけ修復を試み、その後は失敗します。コースに紛れ込むことはありません。
提案から変更までの証跡
リクエスト、採用した下書き、却下した下書きは、同じハッシュチェーンログの別々のエントリです。モデルが提案したものの隣に、人が適用したものが並びます。
利用者はどうサインインするか
セキュリティレビュー担当者が必要とする書き方で。今日提供しているものと、していないもの。
招待によるアカウント
アカウントは管理者または招待によって作成されます。セルフサービスのサインアップはありません。リセットと復旧のリンクは使い捨てで、ハッシュ化して保存されます。
パートナーサインオン(サイレント SSO)
すでに認証を済ませたパートナーシステムが、署名付きアサーションで利用者を引き渡せます。学習者が二度目のログインを見ることはありません。組織ごとに設定し、鍵を持ち、失効できます。
SAML と OIDC のシングルサインオン
ロードマップ未構築です。導入が Entra ID や Okta に依存するなら、最初の通話でお知らせください。あるかのようにほのめかすのではなく、現状をお伝えします。
MFA とパスキー
ロードマップこちらもロードマップ上です。現在はアイデンティティプロバイダーがパスワードを扱い、セッションは所有者が失効でき、失効は次の権限チェックで効きます。
御社のデータに触れるすべて
五社。いずれも後から判明するのではなく、データ処理契約に明記されています。
| Capability | 扱うもの | 適用範囲 |
|---|---|---|
| Supabase | データベース、認証、ファイルストレージ、API が動く関数 | 主たる処理者です。メディアストレージは代わりに S3、Azure、GCS を指定できます。 |
| Cloudflare | DNS、TLS、各組織が提供されるカスタムドメイン | 組織ごとのドメインで TLS を終端します。証明書は自動発行されます。 |
| OpenAI | AI の生成、チューター、採点の下書き | 必要なリクエストのときだけ、秘匿化のあとに呼び出します。代わりに Anthropic や Google を設定でき、組織が自らのキーを接続することもできます。 |
| Resend | トランザクションメール — 招待、通知、リセット | 組織は自らのサブドメインから、自らのキーで送信できます。 |
| PostHog | プロダクトアナリティクスとマスキングされたセッションリプレイ | EU リージョン。学習者向け画面は記録しません。 |
効力を持つ一覧はデータ処理契約に記載のものであり、学校向けには FERPA の学生データプライバシー追補が併記されます。どちらも通話の後ではなく前にお送りします。
WCAG 2.1 AA と、当社にないもの
Lurno は WCAG 2.1 AA に沿って作られています。axe の自動チェックが継続的インテグレーションで走るため、コントラスト不足やラベル欠落はリリースに届く前にビルドを失敗させます。キーボード操作の経路、可視のフォーカス、モーション低減の設定は、画面ごとに後付けするのではなくコンポーネントライブラリに存在します。製品は英語、フランス語、アラビア語、イタリア語で提供され、アラビア語は全体が右から左です。左から右のレイアウトを翻訳しただけのものではありません。
当社にないのは VPAT と第三者によるアクセシビリティ監査です。質問 47 番の回答に埋めるより、ここに書くほうがよいと考えています。正式な適合報告書が購入の条件であれば、早めに提起してください。チェックボックスではなく、スコープの相談になります。
質問票を送る前に答えておきます
このページが繰り返し指しているページ
質問票をお送りください。
その大半は上で答えています。残り — 所在地、保持、副処理者、DPA — は通話にお持ちください。ここで使ったのと同じ平易な言葉でお答えします。