情シス審査 × 実装設計

AI SaaSが情シスのセキュリティ審査を通るために実装したこと|監査ログ・削除権・アカウント管理

監査ログの閲覧機能はある。削除ボタンもある。それでも情シスの審査は止まる——問われているのは機能の有無ではなく、顧客が自分の画面から確認・実行できるかどうかだ。Cloudflare Workers上で運用する自社AI SaaSの本番実装を題材に、招待制サインアップ・fail closedの認証・監査ログ閲覧・データ削除・パスワード変更・新しいAIベンダーを追加する手順まで、審査を通すために実際に組んだ設計を明かす。

SaaS導入審査でよく挙がる声※ 実際の相談で挙がる論点をもとにした例です
古野光太朗古野光太朗·2026.08.09·最終更新 2026.08.09·読了 10分
SAAS セキュリティ審査 実装状況ダッシュボード※サンプル値・画面はイメージです
審査で問われた項目
10
実装した項目
10
顧客が自分で確認・実行できる
5
カテゴリ別の実装進捗(イメージ)「ある」と「顧客が自分でできる」は別集計にする
この記事の要点
  • 情シス審査で問われるのは「機能があるか」ではなく「顧客が自分の画面から確認・実行できるか」。監査ログ・データ削除・パスワード変更は、この基準で作り直すべき典型項目だった。
  • 実装の芯は既定値の設計。公開サインアップは既定OFFで招待制のみ、認証はfail closed、新しいAIベンダーへの連携も既定OFF。安全側に倒したうえで、契約・同意の更新後に個別にONへ切り替える。
  • 「これをやれば審査に通る」という保証はない。審査基準は企業ごとに違うため、本記事は実際に問われた項目と実装の一次情報として、自社の設計判断に落とし込むための材料として使ってほしい。

AI SaaSの情シス審査で、実際に何を聞かれるのか?

データの保存先・処理者・保持期間・削除・アクセス制御・監査証跡の6つが定番の質問群で、多くは「機能があるか」ではなく「顧客側で確認・実行できるか」まで踏み込んで聞かれる。

AI SaaSを情シスに持ち込むと、審査シートには「データの保存先はどこか」「データを処理する第三者(ベンダー)は誰か」「保持期間はどれくらいか」「削除はどう行うか」「誰がアクセスできるか」「操作の記録は残るか」といった質問が並ぶ。言い回しは企業ごとに違うが、突き詰めると保存先・処理者・保持期間・削除・アクセス制御・監査証跡という6つの軸に収束することが多い。

この6軸自体は目新しいものではなく、ISMS(ISO/IEC 27001)やSOC2といった外部認証の考え方にも共通して現れる論点だ。ただし本記事で扱う実装は、特定の認証取得を前提にしたものではない。筆者(TechWorker)もこれから題材にするAI SaaS「CoeSignal」も、ISMSやSOC2などの外部認証を取得しているわけではなく、以下は実際の法人審査で個別に問われた項目に、実装で答えてきた一次情報として読んでほしい。

題材にするのは、筆者が運用するCloudflare Workers上のAI SaaS「CoeSignal」の本番実装だ。抽象的な「べき論」ではなく、実際に組んだ環境変数・データ設計・画面機能を見ていく。

「機能がある」と「顧客が自分で確認・実行できる」は、なぜ違うのか?

監査ログ・データ削除・パスワード変更は多くのSaaSに機能として存在するが、法人審査で問われるのは顧客自身が画面から確認・実行できるかどうか。開発側の内部運用でカバーしているだけでは審査を通らない。

CoeSignalが実際の法人審査で指摘されたのは、この「機能はあるが顧客は使えない」という状態だった。具体的には次の3点が穴として挙がった。

監査ログは記録されていたが、顧客が見る画面がなかった。何かあれば開発チームがデータベースを直接確認して回答する運用で、記録自体は存在していても、顧客からは「無い」のと見分けがつかない。データ削除は開発チームへの依頼ベースで、実行まで数日かかっていた。削除の処理そのものはコードとして存在したが、顧客が自分のタイミングで押せるボタンがなかった。パスワードは初期値のまま運用され、変更は運用者への申請フローだった。顧客が自分の意思で今すぐ変える手段がなかった。

3点に共通するのは、「バックエンドではできる」と「顧客が自分でできる」を混同していたこと。審査する側が確認したいのは前者ではなく後者であり、この区別に気づいてから実装の優先順位が変わった。

指摘前 — 機能はある
監査ログはDBに記録。閲覧はエンジニアが手動でクエリを実行

データ削除は開発チームへの依頼ベース。実行まで数日

パスワードは初期値のまま。変更は運用者への申請フロー
指摘後 — 顧客が自分でできる
管理画面に監査ログの閲覧タブを追加。期間・操作種別で顧客自身が絞り込める

「データを削除する」ボタンを設置。確認ダイアログを経て顧客が即時実行できる

パスワード変更画面を追加。顧客が自分のタイミングで変更できる

図:法人審査で指摘された3点の、指摘前と実装後の対比。コードとしての機能追加ではなく、顧客が触れる画面の追加が要点だった。

実際に何を実装したか、その理由は?

招待制サインアップ・fail closedの認証・アクセスコードのハッシュ化・監査ログ閲覧/削除/パスワード変更・ベンダー連携の既定OFF・同意のバージョン管理・緊急停止スイッチ・秘密情報の外出しを実装した。審査の観点に対応づけると下表になる。

ここまでの2点——審査で何を聞かれるか、機能と実行可能性の違い——を踏まえ、CoeSignalの本番環境で実際に組んだ実装を、審査の観点に対応づけて整理する。番号は実装した順番ではなく、審査でよく質問される順に近い。

実装したこと具体(設計・環境変数)審査で問われる観点なぜこの設計にしたか
公開サインアップの無効化+招待制PUBLIC_SIGNUP_ENABLED="0" / INVITE_SIGNUP_ENABLED="1"。管理者またはワークスペース所有者が1回限り・期限付きの招待リンクを発行アクセス制御・入口管理「誰でも登録できる」入口をなくし、アカウントの発生源を常に特定の人物まで遡れるようにする
fail closedの認証設計認証設定が読み込めない・不整合が起きた場合は、通すのではなく拒否する認証の堅牢性・障害時の挙動設定ミスや障害の瞬間に「開いてしまう」設計は事故に気づきにくい。閉じる方向に倒して被害を抑える
アクセスコードの非平文保存access_code_sha256としてSHA-256ハッシュのみ保持し、原文は保存しない認証情報の保管データベースが漏れても、アクセスコードの原文を復元できない状態にする
監査ログの閲覧機能顧客の管理画面に、操作ログを確認できる画面を実装監査証跡・アカウンタビリティ記録されているだけでは審査上「無い」のと同じ。顧客自身が確認できることが要件
データ削除機能顧客がセルフサービスで自分のデータを削除できるボタンを実装削除権・データ主体の権利依頼してから数日ではなく、顧客の意思で即時に完結させる
パスワード変更機能顧客が自分の画面からパスワードを変更できる機能を実装アカウント管理・認証情報のライフサイクル初期パスワードを固定運用にせず、顧客側で更新の主導権を持てるようにする
新規処理者への連携を既定OFFALLOW_OPENAI_TRANSCRIPTION_FALLBACK ALLOW_OPENAI_RUNTIME_TTS ALLOW_OPENAI_SCREEN_OBSERVATION 等を既定"0"に設定データの処理者・第三者提供契約・同意文の更新より先に、データが新しいベンダーへ渡る事態を防ぐ
同意のバージョン管理同意文にversionを持たせ、処理者(Anthropic・OpenAIなど)を明示。バージョン5以降で特定の処理者への提供に明示同意、という形で追跡同意の追跡可能性「いつ、どの処理者への提供に同意を得たか」を後から契約と突き合わせて説明できる
緊急停止スイッチ例:TRANSCRIPT_POLISH="0"のように、特定のAI処理を止める環境変数を用意インシデント対応・障害対応の速度問題が見つかったAI処理を、コード変更なしでdeployだけで即座に止められる
秘密情報をリポジトリに置かないAPIキー等はwrangler secret putで登録し、暗号化された状態でCloudflare側に保存。設定ファイルにはsecret名の宣言だけを残すシークレット管理設定ファイルをリポジトリにコミットしても、値そのものは漏れない

このうちアクセス制御の考え方は、社内ツール側の話になるがCloudflare Accessによるゼロトラスト構成とも共通する。招待制にしても、その招待リンクの発行画面自体を誰でも開けてしまえば意味がない。入口を絞る設計は、社内向け・顧客向けを問わず同じ発想で組む。

本番環境変数の設計方針 — 一部抜粋(イメージ)
既定値の設計(安全側に倒す)
PUBLIC_SIGNUP_ENABLED = "0" # 公開サインアップは既定で無効 INVITE_SIGNUP_ENABLED = "1" # 招待制のみ有効 ALLOW_OPENAI_TRANSCRIPTION_FALLBACK = "0" # 新しい処理者への連携は既定OFF ALLOW_OPENAI_RUNTIME_TTS = "0" ALLOW_OPENAI_SCREEN_OBSERVATION = "0" TRANSCRIPT_POLISH = "1" # 問題が起きたら "0" にして即deployで停止
秘密情報は設定ファイルに置かない
APIキー・トークンなどの実値は wrangler secret put で登録する。 この設定ファイルに残るのは「どのsecret名を使うか」という宣言だけで、値そのものはリポジトリに含まれない。

図:本番環境変数の設計方針のイメージ。新しい連携機能は既定OFFで実装し、契約・同意の更新後に値を変更してONにする。秘密情報の扱い方の基本はシークレット管理の基本で扱っている。

共通しているのは、初期状態を安全側に倒し、範囲を広げる操作は後から明示的に行うという設計思想。壊れたときに開くのではなく閉じる。契約も同意もない状態では、新しいベンダーにデータを渡さない。個々の機能の巧拙より、この既定値の設計思想そのものが審査で繰り返し評価されている。

新しいAIベンダーを追加するときは、どういう手順を踏むか?

既定OFFの環境変数として実装し、契約・同意文を更新し、顧客に通知したうえで、環境変数をONにしてdeployする。この順番を逆にしない。

新しいAIベンダー(処理者)を機能として追加したくなる場面は珍しくない。文字起こしのフォールバック先を増やす、音声合成のランタイムを切り替える、画面の内容を解析する——といった機能追加のたびに、CoeSignalでは次の順番を固定している。

フェーズやること出口条件
1. 実装新しい処理者への連携をコードとして実装するが、環境変数は既定「0」のまま。コードはマージしてよいが、フラグがオフである限り実際には呼ばれないコードはデプロイ済みだが、機能はまだ誰にも作用していない
2. 契約・同意文の更新利用規約・プライバシーポリシー等の同意文をバージョンアップし、追加される処理者の名称と、渡るデータの範囲を明示する新しい処理者への提供が、文面として説明できる状態になっている
3. 顧客への通知何が変わるか、どの処理者にどのデータが渡るかを顧客に通知し、必要な同意を取得する通知・同意の記録が残っている
4. 有効化環境変数をONにしてdeployする。この時点で初めて実際にデータが渡り始める機能が有効化され、かつそこに至るまでの契約・同意・通知の記録がすべて揃っている

ポイントは、コードのマージと機能の有効化を別の出来事として扱うこと。実装が終わっていても、フラグがオフである限り実害は発生しない。逆に言えば、環境変数をONにする最後の一手だけは、契約・同意文の更新が完了するまで誰も押せないようにしておく必要がある。

実装は先に進めていい。データが実際に動き出すのは、契約と同意が追いついてからだ。

導入する側は、審査で何を確認すればよいか?

「機能の有無」ではなく「顧客側で確認・実行できるか」「既定値が安全側か」「変更時に通知される仕組みがあるか」の3点で聞くと、実質的な審査になる。

ここまでは作る側の視点だった。導入審査をする情シス側に立つと、聞くべき質問は少し変わる。「機能があるか」で終わらせず、次の一段まで確認する。

確認項目聞き方(質問例)一段掘り下げる一言
データの保存先・処理者データはどこに保存され、処理する第三者(ベンダー)は誰か今後ベンダーが増える予定はあるか。増えるときはどう通知されるか
保持期間・削除データはどれくらいの期間保持されるか削除は自分たちの画面から今すぐ実行できるか、それとも依頼が必要か
アクセス制御・入口アカウントの発行は公開登録か、招待制か退職者・異動者のアクセスは、誰が、どういう手順で失効させるか
認証の安全側設計認証設定に不備があったとき、通すのか止めるのか(fail open/fail closed)パスワードやアクセスコードは平文で保存されていないか
監査証跡操作ログは記録されているかそのログは自分たちの画面で見られるか、ベンダーへの問い合わせが必要か
インシデント対応特定の機能に問題が起きたとき、どのくらいの速さで止められるか止める操作は誰が行うか。コード修正が要るか、設定変更だけで済むか

この記事の実装をすべて満たしても、審査に通る保証はない。審査基準は企業によって、また業界によって異なり、業種特有の要件(特定の認証取得や、より厳格なデータ所在地の指定など)が加わることもある。ここで示したのは「実際に何を問われ、何を実装したか」という一次情報であり、自社の設計判断に落とし込むための材料として使ってほしい。

よくある質問

監査ログ・削除・パスワード変更が「ある」だけでは、なぜ審査に通らないのですか?

機能の存在は前提に過ぎず、法人審査で問われるのは顧客自身が画面から確認・実行できるかどうかだからです。エンジニアへの依頼やデータベースの手動確認で対応できる状態は、顧客からは「無い」のと見分けがつきません。

招待制サインアップにすると、利用開始のハードルが上がりませんか?

上がりますが、それが狙いの一部です。管理者またはワークスペース所有者が発行する1回限り・期限付きの招待リンクに限定することで、「誰が入れるか」を常に説明できる状態を保てます。利便性より、入口を絞ることを優先する場面での設計です。

新しいAIベンダーを追加するとき、開発と契約はどちらを先に進めればよいですか?

開発を先に進めて構いません。ただし有効化は契約・同意文の更新のあとにします。実装は既定OFFの環境変数として作り、コードのマージと機能の有効化を別の出来事として分離しておくと、この順番を事故なく守れます。

この記事の内容を実装すれば、情シス審査に必ず通りますか?

通るとは限りません。審査基準は企業や業界によって異なり、業種によっては本記事にない要件が追加で求められることもあります。本記事は「実際に何を問われ、何を実装したか」という一次情報の共有であり、審査通過を保証するものではありません。

古野光太朗
古野光太朗 / 株式会社TechWorker 代表取締役

上場企業を含む37社・2,500名の生成AI導入・活用を支援。「AIはエンジンだ。コンテキストは燃料だ。」を掲げ、企業の業務文脈をAIが扱える形に整える「コンテキスト整理」を専門とする。

AI SaaSのセキュリティ実装も、導入支援の一部として伴走します。

監査ログ・削除権・アカウント管理といった審査対応の実装から、社内ツールの公開範囲や権限設計まで。自社のAI SaaS運用と37社・2,500名の導入支援で得た知見をもとに相談できます。「情シス審査で何を聞かれるか分からない」段階からのご相談も歓迎です。

無料相談する

関連サービス:無料相談 / 経営者のための生成AIセキュリティ実践ガイド(無料DL) / 事例集(無料DL)

← AIセキュリティ・ラボに戻る