🛡️ 月20ドルで、セキュリティはどこまでできるか — 第三の会社とAIと自分の3者で自動運用する
Vercel Pro は月20ドル。この1枚で守りは全部そろうのか、それとも足りないのか。公式の料金表とドキュメントで1項目ずつ判定した。そのうえで、顧客1万人に配れるセキュリティ報告書を、外部の診断業者に頼り切らずに作る方法を組んだ。中心にあるのは1つの線引きである — AIは第三者にはなれない。作れるのは客観性、つまり誰が何度やっても同じ結果に到達できることだけだ。
🎯 答え — 20ドルで買えるもの、買えないもの、そして誰に頼むか
このセクションの3点
① $20で買えるのは、入口で攻撃を止める部分まで
② アプリの中の守りと、記録・運用は別に要る
③ AIは第三者になれない。作れるのは客観性だけ
前作(/wiki/vercel-ai-ops-2026)で、開発から本番監視までを8段階に分けた。その続きとして、今回は2つの問いに答える。
① 月20ドルのVercel Proだけで、セキュリティは全部できるのか。② 客観的な第三者による、AIでのセキュリティチェックと報告書は、どう作るのか。
依頼者はこう言っている。「私の目的は第三の会社と私自身によるセキュリティの自動運用です。1万人のお客さんがAIで完成されるサービスをワクワクしながら待っているのです」
だからこの記事は「AIが全部やります」とは書かない。第三の会社 / あなた / AI の3者に、守りを割る設計を書く。
この記事の背骨 — この2つを混ぜると、顧客への説明が崩れる
客観性
あなたが作れるもの
- ・誰が何度やっても同じ結果に到達できること
- ・URLを渡せば、顧客が自分で追試できる検査がある(第8章に8種)
- ・手順・ツール版・ハッシュ・時刻を残せば、後から再現できる
第三者性
外から買うしかないもの
- ・実施者が、対象から独立していること
- ・経産省の監査基準は「外観上の独立性」=身分上・経済上の利害関係が無いこと、と定義している
- ・AIは、あなたが動かしている限り、この定義を満たさない
答え① — 20ドルで買えるもの / 買えないもの
$20
Vercel Pro(1席・月)
40本
Firewall カスタムルールの上限
100件
IPブロックの上限
4系統
$20 では買えないもの
$20 に含まれる(追加料金なし)
WAF マネージドルールセット
OWASP Core Ruleset / Bot Protection / AI Bots
カスタムルール40本・IPブロック100件
レート制限ルールも40本まで
自動DDoS緩和(L3/L4/L7)
全プラン共通
Attack Challenge Mode
攻撃中に1クリックで上げる札
BotID Basic
Deep Analysis だけ従量
$20に含まれる残り2つと、別料金の一覧(詳細は第5章) 合計は最大で月$900超 開く ▾
Vercel Authentication
本番ドメインも保護できる(All Deployments)
DPA(データ処理契約)の締結
公式に Enterprise and Pro plans と明記
| 別料金 | 金額 | 注意 |
|---|---|---|
| Advanced Deployment Protection | $150/月 | Password Protection と Private Production。30日間は解約できない |
| SAML Single Sign-On | $300/月 | Enterprise 契約なしで Pro に足せる |
| HIPAA BAA | $350/月 | 適格な Pro が対象 |
| Static IPs | $100/月・プロジェクト | 固定送信元IP。Secure Compute の代わりにはならない |
| BotID Deep Analysis | $1/1,000回 | checkBotId() の呼び出し回数で課金 |
| WAF レート制限の従量 | 取得できず | 画面のダイアログ表示のみで、公開単価が確認できなかった |
① ID・アクセス制御の高度化
Passport / SCIM / Trusted IPs
② 監査ログ
Audit Logs(Enterprise限定)
③ ネットワーク分離
Secure Compute(Enterprise限定)
④ レート制限の精緻化
Token bucket・任意ヘッダーキー・長時間窓
📎 問い①への答え
$20が守るのは、Vercelのエッジで止められる公開面の攻撃である。WAFのマネージドルールセット、DDoS緩和、Attack Mode、BotID、本番の保護、そしてDPAの締結まで、Proの範囲に入っている。
この$20には、テナント分離・認可・Neon側の守り・監査・人の対応・従量課金は含まれない。誰がいつ設定を変えたかの監査ログ、ネットワークの分離、ID管理の自動化も同様に含まれない。これらは顧客が大企業になったときに聞かれる項目で、Enterpriseの見積が必要になる。
答え② — 第三の会社 / あなた / AI の分担
守りを3者に割る
第三の会社
独立した証跡を出す
自動DAST・PTaaS・SOC2/ISO・署名と時刻
あなた
統制と最終判断を持つ
CI・WAF・監視・承認・例外の判断
AI
読む・要約する・PRを出す
毎週の差分を要約し、修正案を作るまで
よくある誤用 — これを言うと信用を失う
・Vercel の SOC 2 と ISO 27001 は、Vercel の統制の証跡である
・それは、あなたのアプリの脆弱性診断ではない
・自動スキャンの結果は「第三者が実行した記録」ではあるが、人手の第三者診断ではない
・署名とタイムスタンプが証明するのは、存在と時刻だけ。内容の正しさは証明しない
1万人に配る方法 — 報告書を1本にする
顧客が1万人になると、報告書の作り方そのものが変わる。顧客ごとにチェックシートへ手で回答していたら破綻する。回答の版がずれ、証跡が期限切れになり、他社向けの情報を誤って送る。
答えは、トラストセンターを1本作って、全顧客をそこへ向けることである。週次で検査を回し、そのページが自動で更新される形にする。実在例は Vercel 自身の security.vercel.com である。
公開層
誰でも見られる
承認層
NDA・承諾の記録後
顧客別層
顧客ごとに違う事実だけ
内部正本
外に出さない
📎 今週やる3つ
1. 追試できる無料の検査を8種、1回ずつ実行して結果のURLを控える。securityheaders.com・SSL Labs・HTTP Observatory ほか。これが「顧客が自分で確かめられる事実」になる(第8章)。
2. security.txt を置き、トラストセンターの公開層を1ページ作る。SvelteKit で自作でよい。専用サービスの比較は、質問票の量が承認能力を超えてからでいい(第11章)。
3. 報告書に「未実施」を書く欄を作る。人手の第三者診断は未実施である、と最初から書いておく。これが信用の源になる(第12章・第16章)。
この記事の読み方(章ガイド) 全11行 開く ▾
| 知りたいこと | 読む章 | そこに何があるか |
|---|---|---|
| 理想的なセキュリティとは何か | 第2章 | 物差しを3つ置き、理想を10項目で定義する |
| 無料と有料は何が違うのか | 第3章 | Hobby / Pro / Enterprise を1枚の表で |
| $20で何が買えるのか | 第5章 | 公式の料金表で1項目ずつ確定した一覧 |
| 買えないものはどうするか | 第4章 | 4系統と、代替できるもの・できないもの |
| 第三者とは誰のことか | 第7章 | 経産省の独立性の定義と、PCI DSS の ASV の論理 |
| 顧客が自分で確かめられる検査 | 第8章 | 無料8種。日本の公的機関には同等のものが無い |
| 外の会社に何を頼むか | 第10章 | 自動DAST と 人が入るペンテストの線引き |
| 1万人に配る報告書 | 第11章・第12章 | トラストセンター4層と、報告書のひな形 |
| どこで詰まるか | 第15章 | Firewall 40ルールは41社目で破綻する、ほか |
| 技術者に納得してもらう | 第18章 | 自分で確認できて、相手も追試できる30項目 |
| 名前で安心してもらう | 第19章 | 10万円までで増やせる記号と、既に持っている資産の見せ方 |
→ 次の第2章では、そもそも理想的なセキュリティとは何かを10項目で定義する。物差しが無いと、足りない分が多いのか少ないのか判断できない
🎯 理想的なセキュリティとは何か — 先に物差しを置く
このセクションの3点
① 物差しは3つある。技術はOWASP ASVS、実務はIPAの13項目、組織はISO27001附属書A
② 理想を10項目で定義した。土台2・アプリ4・運用4に分かれ、$20が埋めるのは土台の2つだけ
③ 完璧は目指さない。ASVSはLevel1〜3の段階制で、この記事はLevel1相当+認可の重点強化を扱う
「$20で足りるか」を判定するには、先に理想の姿を決めておく必要がある。理想が無いまま機能一覧を見ても、多いのか少ないのか判断できない。
ここでは、既に公開されている3つの物差しから理想を借りてくる。そのうえで、この記事だけの「理想10項目」を定義し、どこまでを誰が埋めるかを先に固定する。第3章以降は、すべてこの10項目に対する進捗として読める。
技術の物差し
OWASP ASVS 5.0 / Top 10:2025
日本の実務の物差し
IPA ウェブ健康診断仕様
組織の物差し
ISO/IEC 27001 附属書A
理想を10項目で定義する
この記事における「理想的なセキュリティ」
通信が暗号化されている
TLS1.3・古い方式(SSLv3等)が無効化されている
攻撃が入口で止まる
WAF・レート制限・ボット対策が公開面で機能する
認証が破られない
パスワード保管・多要素認証・セッション管理が適切
認可が正しい
他人・他社のデータに到達できない権限分離
入力が検証されている
SQLi・XSS等の注入攻撃が成立しない
秘密情報が露出しない
コードにも画面にも鍵・トークンが出ない
依存パッケージが安全
既知の脆弱性を持つライブラリを使っていない
何が起きたか後から追える
ログと監査証跡が残り、変更者が特定できる
壊れたとき元に戻せる
バックアップと復元の手順が実証されている
継続して確認する仕組みがある
1回やって終わりにせず、週次等で回り続ける
10項目を「誰の担当か」で分ける
土台 → アプリ → 運用
土台
Vercelが担当する
TLS終端・WAF・DDoS緩和・ボット対策の公開面防御
アプリ
あなたが実装する
認証・認可・入力検証・秘密情報の管理をコードで作る
運用
人と仕組みで続ける
依存関係の監視・ログ点検・復元訓練を継続して回す
📎 ここでの結論
10項目のうち、$20で自動的に埋まるのは「土台」の2項目だけである。残る8項目は、あなたがコードで実装するか(アプリ)、あなたが仕組みとして続けるか(運用)のどちらかであり、料金プランでは買えない。
第3章以降で「$20に含まれるもの」を見るとき、この10項目のどこに当たるかを必ず照らし合わせる。
2/10
土台(Vercelの$20)で埋まる項目
4/10
アプリ側の実装で埋まる項目
4/10
運用として続けて初めて埋まる項目
完璧は目指さない。OWASP ASVS 5.0 は Level 1(約20%・外部から検証可能な最低限)、Level 2(約70%・ログインや個人情報を扱う大半の業務アプリの目標水準)、Level 3(残り30%・多層防御が必要な高保証水準)の3段階に分かれている。
中小のBtoB SaaSが最初からLevel 3を目指すのは現実的でない。この記事が扱うのは、Level 1相当の基礎を土台に置いたうえで、10項目のうち最も破られたときの被害が大きい「④認可」を重点的に強化する範囲である。
→ 次の第3章では、無料と有料で何が違うのかを1枚の表にする。
💰 無料と有料は何が違うのか — Hobby / Pro / Enterprise を1枚で
このセクションの3点
① 無料(Hobby)と有料(Pro)の最大の違いは機能でなく規約。商用利用はHobbyでは不可
② FWルール3→40本、IPブロック3→100件、ログ保持は1時間→1日に伸びる
③ Enterpriseは機能で選ぶのでなく、顧客の要求(Audit Logs/SAML/SCIM)で選ぶ
| 項目 | Hobby(無料) | Pro($20) | Enterprise |
|---|---|---|---|
| WAFマネージドルールセット | ○(全プラン) | ○ | ○ |
| カスタムFWルール数 | 最大3 | 最大40 | 最大1,000 |
| IPブロック数 | 最大3 | 最大100 | 最大1,000 |
| レート制限ルール数 | 1/プロジェクト | 40/プロジェクト | 1,000/プロジェクト |
| System Bypass Rules | — | 25件 | 100件 |
| Attack Challenge Mode | ○(無料) | ○(無料) | ○(無料) |
| BotID Basic | ○(無料) | ○ | ○ |
| BotID Deep Analysis | 不可 | $1/1,000回 | カスタム |
| DDoS自動緩和 | ○ | ○ | ○+専任支援 |
| Vercel Authentication | Standardのみ・本番不可 | 本番も保護可 | 可 |
| Password Protection | 不可 | $150/月アドオン | 標準 |
| 項目 | Hobby(無料) | Pro($20) | Enterprise |
|---|---|---|---|
| Trusted IPs | 不可 | 不可 | Enterprise限定 |
| Passport | 不可 | 不可 | Enterprise限定 |
| SCIM(Directory Sync) | 不可 | 不可 | Enterprise限定 |
| Secure Compute | 不可 | 不可 | Enterprise限定 |
| Audit Logs | 不可 | 不可 | Enterprise限定・owner限定 |
| ログ保持(Runtime Logs) | 1時間 | 1日(Plus加入で30日) | 3日(同30日) |
| Observability保持 | 12時間 | 1日 | 3日 |
| Spend Management | 不可 | 可 | 記載なし |
| DPA締結対象 | 対象外 | 対象 | 対象 |
無料と有料の一番大きな違いは、機能ではない
・Vercel利用規約 Section 4は「Hobbyプランは個人・非商用利用限定」と明記している
・公式Fair Use Guidelinesも「商用利用は全てProかEnterpriseが必要」と明記している
・寄付を募ることも商用利用に含まれると明記されている
・規約違反が検知されるとデプロイ・アカウントごと一時停止される
・有償のBtoB SaaSを載せるなら、機能の比較以前にProへの契約が必要である
📜 原文(Vercel利用規約 / Fair Use Guidelines) 2026-08-15確認 開く ▾
利用規約 Section 4
"You shall only use the Services under a Hobby plan for your personal or non-commercial use."
Fair Use Guidelines
"Hobby teams are restricted to non-commercial personal use only. All commercial usage of the platform requires either a Pro or Enterprise plan."
"Commercial usage is defined as any Deployment that is used for the purpose of financial gain of anyone involved in any part of the production of the project, including a paid employee or consultant writing the code."
段階的な警告・猶予期間についての記載は一次情報になし。「事前に警告が来る」とは書けない。
Hobbyのままで守れるもの ⇄ 守れないもの
Hobbyのままで守れる
無料で使える攻撃対策
- ・WAFマネージドルールセット(OWASP Core / Bot Protection / AI Bots)
- ・自動DDoS緩和(L3/L4/L7)
- ・Attack Challenge Mode
- ・BotID Basic
Hobbyのままでは守れない
規約とログの制約
- ・本番のログが1時間で消える。昨日の障害を調べられない
- ・本番ドメインをVercel Authenticationで保護できない
- ・FWカスタムルールは3本、IPブロックは3件までしか作れない
- ・商用利用そのものが規約違反になる
$20を払うと何が変わるか
規約に適合する
商用利用はHobbyでは規約違反
ログを延ばせる
1時間→1日、Plus加入で30日まで
ルール数が3→40になる
FW3→40本・IPブロック3→100件
本番ドメインを保護できる
Standard→All Deploymentsで本番保護可
使用量の上限を設定できる
Spend ManagementはHobbyでは不可
Enterpriseが要るタイミング
通常
Proのまま運用する
機能を先回りして上げない
顧客要求
Audit Logs/SAML/SCIM/Trusted IPsを求められる
大企業の調達・監査担当からの指定
契約
Enterprise見積りを取る
金額は非公開。要問い合わせ
📎 この章の結論
無料と有料の違いは、まず規約である。Hobbyは個人・非商用利用限定で、有償のBtoB SaaSを載せた時点で規約違反になる。
機能面では、WAF・DDoS緩和・Attack Mode・BotID Basicは3プランとも同じだ。差が出るのはルール数・ログ保持・アイデンティティ管理・監査ログである。
Enterpriseは自分の判断で先に上げるものではない。顧客が要求したときに検討する。
→ 次の第4章では、第三の会社・あなた・AI の3者に守りを割る
🤝 3者の分担 — 第三の会社 / 自分 / AI をどう割るか
このセクションの3点
① AIは第三者にはなれない。作れるのは客観性=誰がやっても同じ結果に届くことだけ
② 第三者性は外部の会社から買い、客観性は自分で作り、AIは両者の間の作業をする
③ Vercel/Neonの監査報告書は両社の統制の証跡であり、このアプリの脆弱性診断ではない
この記事の背骨は1文で言える。AIは「第三者」にはなれない。作れるのは「客観性」——誰が何度やっても同じ結果に到達できることだけである。第三者性とは、実施者が依頼者から独立し、利害関係と責任を持つという立場の性質だ。AIには利害も契約責任も無い。依頼者が選び、入力・範囲・採否を依頼者側が支配する補助者にすぎない。
だから設計はこうなる。第三者性は外の会社から買う。客観性は自分で作る。AIはその間の作業――読む・要約する・PRを出す――をする。下の表は、それを守る項目ごとに割った分担である。
| 守る項目 | 第三の会社 | 自分側の自動化 | AIの担当 |
|---|---|---|---|
| 公開攻撃面・TLS/ヘッダー監視 | Intruder・Detectify等(候補・料金未確認) | 週次で対象URL登録・誤検知を人が判定 | 差分要約とPR下書きを作成 |
| 認証後DAST(画面・API) | Probely・Invicti等(候補・料金未確認) | テストtenant発行・破壊的操作を除外 | 再現条件を整理しPR案を作成 |
| 深い認可・業務ロジック試験 | Cobalt・HackerOneのPTaaS/バグ報奨金 | スコープと修正SLAを用意し再試験 | 統制IDへ報告書をマッピング |
| Vercel/Neonという委託先統制 | Trust CenterのSOC2/ISO資料 | 台帳に取得日と適用範囲を記録 | 適用範囲を要約し対象外を明記 |
| 設定変更・アプリ監査ログ | (Proに監査ログ機能なし) | Neon監査ログ+Git保護ブランチ | 週次集計と異常候補の要約 |
| 成果物の改ざん検知 | Sigstore/cosign・認定TSA(候補) | manifest.json作成・署名鍵管理 | 差分検出と未署名成果物の指摘 |
第三者性は買うもの ⇄ 客観性は作るもの
第三者性 — 外から買う
実施者が自社から独立していること
- ・独立した会社・認定機関による検査実行記録
- ・PTaaS/バグバウンティの攻撃者視点と報告責任
- ・Vercel/NeonのSOC2・ISO資料(独立監査人の評価)
- ・Sigstore・認定TSAの書き換え不能な来歴と時刻
客観性 — 自分で作る
誰が何度やっても同じ結果に届くこと
- ・手順を固定し、誰が実行しても同じ結果になる検査
- ・evidence-manifest.jsonで対象と結果を固定する
- ・CIでの自動実行と生ログの保存
- ・判定基準(Critical/High等)を先に決めておく
自動DAST・ASM
PTaaS・バグバウンティ
Vercel・NeonのSOC2・ISO
Sigstore・認定TSA
重要な限定。Vercel / Neon の監査報告書は、Vercel / Neon 自身の統制の証跡である。このアプリ(WebTHQ)の脆弱性診断ではない。上の4つの理由はいずれも「このアプリが安全だ」という包括保証にはならない。
→ 次の第5章では、Vercel Pro $20 で実際に買える機能を、公式の料金表で1項目ずつ確定する。
💳 20ドルで買える守り — 公式の料金表で1項目ずつ確定した
このセクションの3点
① WAFのManaged RulesetsはHobbyを含む全プランで使える。Enterprise限定ではない
② $20(Pro)が守るのはVercelエッジの公開面攻撃まで。テナント分離・認可・Neon・監査・人の対応は別
③ 別料金はSAML $300/月、HIPAA BAA $350/月など公式価格表の数字で確定済み
★この記事の結論を左右する発見
WAF の Managed Rulesets(OWASP Core Ruleset / Bot Protection / AI Bots)は、Enterprise限定ではなく、Hobbyを含む全プランで使える。
根拠は2つ。①vercel.com/pricing の比較表で「Web Application Firewall (WAF)」の行が Hobby / Pro / Enterprise すべて available と明記されている。②/docs/vercel-firewall/vercel-waf/managed-rulesets の設定手順に、プラン制限の記載が一切ない(2026-08-15 確認)。
ただし Bot Protection は既定 Off、AI Bots は既定 Allow。有効化は自分でやる必要がある。
これはVercelのエッジで止められる公開面の攻撃への対策であり、これだけで守りが完成するわけではない。認可・テナント分離・Neon側の設定・監査は別に必要になる。
$20(Pro)に含まれるもの — 追加料金なし
カスタムFWルール
最大40本/プロジェクト
IPブロック
最大100件/プロジェクト
レート制限ルール
最大40本。従量単価は別途
System Bypass
25件/プロジェクト
DDoS自動緩和
L3/L4/L7・全プラン無料
Attack Challenge Mode
無料・1h/6h/24hから選択
BotID Basic
無料のinvisible CAPTCHA
Vercel Authentication
本番含む全デプロイを保護可
TLS1.3・AES-256
転送時・保存時の暗号化
DPA締結対象
Enterprise and Proと明記
| 機能 | 料金 |
|---|---|
| BotID Deep Analysis | $1/1,000回(checkBotId呼び出し) |
| Advanced Deployment Protection | $150/月(30日間解約不可) |
| SAML Single Sign-On | $300/月 |
| HIPAA BAA | $350/月 |
| Static IPs | $100/月・プロジェクト+転送従量 |
| WAFレート制限の従量単価 | 取得できず(ダイアログ表示のみ) |
SOC 2 Type 2
ISO 27001:2022
PCI DSS v4.0
EU-US DPF・TISAX AL2
ISO 27017・27018
年次ペンテスト報告書
40本
カスタムFWルール上限
100件
IPブロック上限
$20
Pro月額(席)
$150
Advanced Deployment Protection月額
取得できずと明記したもの。WAFレート制限の従量単価(ダイアログ表示のみで公式ドキュメントに記載なし)。ISO 27017・27018(コンプライアンス資料に記載が見当たらない)。年次ペネトレーションテスト報告書の入手条件(プラン・NDAの要否)。数値を推測で埋めていない。
→ 次の第6章では、Proでは買えない4系統と、その代替の可否を確定する。
🚧 20ドルでは買えない6つと、その代わりになるもの
このセクションの3点
① 買えないのは4系統・8項目。ID/アクセス制御・監査ログ・ネットワーク分離・レート制限の一部
② SAML SSOとPassword Protectionは、Enterprise契約なしでもアドオン課金で買える
③ 専任DDoS支援(人の対応)だけは買えない。自動緩和の性能は全プランで同じ
Vercel Pro($20)が守るのは、Vercelのエッジで止められる公開面の攻撃までである。テナント分離・認可・Neon側の守り・監査・人の対応・従量課金はこの$20には含まれない。買えないのは、止めたあとの統制と可視性にあたる4系統である。1つずつ、代わりになるものがあるかを確定する。
章題は「買えない6つ」としたが、正確に数えると4系統・8項目である(Passport・SCIM・Trusted IPs・Audit Logs・Secure Compute・レート制限の高度化・専任DDoS支援・Private Production)。
① ID/アクセス制御の高度化
② 監査ログ
③ ネットワーク分離
④ レート制限の精緻化
Enterprise限定機能 — Proのまま埋まるか
SAML SSO
Proのアドオン$300/月で買える
Password Protection等
$150/月のアドオンで買える
Trusted IPs(本番IP制限)
WAFで「特定IP以外deny」は作れる。公式機能ではない
レート制限の高度化
Fixed Window+IP/JA4キーを自前コードで代替
Secure Compute(VPC分離)
Static IPs $100/月で固定送信元IPのみ確保
Audit Logs(監査ログ)
API自作は限定的。完全代替は不可
SCIM(Directory Sync)
手動管理か自前実装。実質困難
Passport(自社IdP認証)
代替不可
Trusted IPsの代わりは、Deployment Protection層ではなくWAFのカスタムルールで作る。「指定IP以外をdeny」というルールを1本追加すれば近い効果は出せるが、これは公式のTrusted IPs機能そのものではない。本番デプロイの入口を守る仕組みが2層(WAFとDeployment Protection)のうち片方にしか無い、という限界を残したままの代替である。
専任DDoS支援だけは金では買えない。Enterpriseに付くのはアカウント担当者による人の直接対応であり、自動緩和そのものの性能はHobby・Pro・Enterpriseで同一である。攻撃の規模でなく「対応してくれる人がいるか」の違いにすぎない。
$20で止まるもの ⇄ $20では買えないもの
止まる($20の範囲)
Vercelエッジで止まる公開面の攻撃
- ・WAF Managed Rulesets・DDoS自動緩和・Attack Mode
- ・BotID Basic・Vercel Authentication(本番含む)
- ・カスタムFWルール40本・IPブロック100件
買えない(統制と可視性)
Enterprise限定・購入経路なし
- ・Audit Logs・SCIM・Passport
- ・Secure Compute(VPCピアリング・固定ネットワーク分離)
- ・専任DDoS支援(人による直接対応)
この表のどちらにも入らないものがある。アプリ側の守り(認可・テナント分離・RLS等)である。Vercelが止めるのは公開面への攻撃であり、ログインした利用者が他人のデータへ届くかどうかは、アプリ側の実装だけが決める。
→ 次の第7章では、「第三者」という言葉の公的な定義を確定する。AIは第三者になれない理由がここで決まる。
⚖️ 「第三者」とは誰のことか — 客観性と第三者性は別物である
このセクションの3点
① 経産省の監査基準は独立性を「外観上」と「精神上」の2要素で定義する
② 脆弱性診断の登録基準は独立性を要求しない。求めるのは組織内の別担当者レビュー
③ PCI DSSのASVは認定制度そのもの。技術的に同等でも自己スキャンは要件を満たさない
客観性 と 第三者性 は別の軸
客観性
誰が何度やっても同じ結果に到達できること
- ・同じ手順・同じ設定なら、AIやスクリプトでも再現できる
- ・「正しさ」の担保にはなるが、独立性の担保にはならない
- ・PCI DSSのASVのような公的な資格制度は不要
第三者性
実施者が監査対象から独立していること
- ・経産省の監査基準が定める外観上・精神上の独立
- ・身分上・経済上、密接な利害関係が無いことが条件
- ・AIは実施主体になれない。契約責任も利害も持たない
「第三者」という言葉には、公的な定義がある。経済産業省「情報セキュリティ監査基準(令和7年改正版)」は、独立性を外観上の独立性と精神上の独立性の2要素で定義している。要約すると、監査対象と身分上・経済上の利害関係を持たず、偏向を排して公正に判断すること、である。
原文 — 経産省「情報セキュリティ監査基準」独立性の定義 令和7年改正版・一般基準2.1/2.2 開く ▾
「2.1 外観上の独立性 監査人は、情報セキュリティ監査を客観的に実施するために、監査対象から独立していなければならない。監査の目的によっては、被監査主体と身分上・経済上、密接な利害関係を有することがあってはならない。」
「2.2 精神上の独立性 監査人は、情報セキュリティ監査の実施に当たり、偏向を排し、常に公正かつ客観的に監査判断を行わなければならない。」
★この章の核心の発見
脆弱性診断サービスをIPAの適合サービスリストに登録するための審査基準「情報セキュリティサービス基準 第4.1版」は、実は診断事業者に独立性を要求していない。求めているのは、組織内の別担当者によるレビューである。
つまり、情報セキュリティサービス基準(登録基準)には独立性要件が明記されていない。この基準を根拠に「第三者診断=独立している」と言い切ることはできない。
原文 — 経産省「情報セキュリティサービス基準 第4.1版」品質管理要件 令和7年3月31日版 開く ▾
「脆弱性診断サービスを行った案件について、当該案件に従事した者以外の者が検査実施報告書についてレビューを行っていること」
「顧客の情報を保護するための手続を設け、運用するとともに、当該手続について脆弱性診断サービスを行った案件の担当者以外による監査(内部監査又は外部監査)を実施することにより実効性を確保していること」
報告書で「第三者性」とひとくくりにしている手段も、実は独立性の水準が揃っていない。3つに分けて扱う。
| 分類 | 手段 | なぜその分類か |
|---|---|---|
| 独立した第三者診断 | PTaaS / バグバウンティ | 実施者の独立性と報告責任が確認できる |
| 独立した第三者診断 | Vercel / NeonのSOC2・ISO | 独立監査人がクラウド事業者を評価した資料 |
| 外部事業者の自動実行証跡 | 自動DAST / ASM | 自社が対象範囲と検出の採否を支配するため、外観上の独立性は満たさない |
| 完全性・時刻の証跡 | Sigstore / 認定TSA | 書き換えられない公開来歴・認定時刻。内容の正しさそのものは評価しない |
対照として、PCI DSSのASV(Approved Scanning Vendor)を見ると、独立性を要求する制度がどう作られているかが分かる。
なぜPCI DSSは自己スキャンを認めないか
要件11.3.2
外部スキャンの実施義務
ASVが実施した外部スキャンを明示的に要求
ASVの資格
PCI SSCが試験・承認
スキャンソリューションを事前に承認された組織のみ
自己スキャン
要件を満たさない
技術的に同等でも定義上ASVでなければ無効
PCI DSS要件11.3.2は「ASVが実施した外部スキャン」を明示的に要求し、ASVの資格自体がPCI SSCがスキャンソリューションを事前に試験・承認した組織に限定される。だから、加盟店・サービスプロバイダ自身が実施したスキャンは、たとえ技術的に同等でも要件を満たさない。PCI DSS 11.3.2という制度要件では、ASVが唯一の代替不能な例である。
📎 報告書に書ける正確な表現
「第三者診断です」ではなく、「自社の開発チームと資本・雇用関係のない別法人が実施し、外観上の独立性を満たす」と書く。これが公的な独立性の定義に最も忠実な、自主基準としての正確な表現である。
PCI DSSの加盟店であれば、要件11.3.2のASVスキャンは別途必要になる。自己スキャンでは代替できない。
→ 次の第8章では、誰でも追試できる無料の検査8種を並べ、公的なURL入力型スキャナが日本に無いという否定的な発見を書く。
🔬 誰でも追試できる無料検査8種 — URLを渡すだけで再現できる
このセクションの3点
① URL型7種+CSP文字列を貼る1種、計8種の無料検査がある。全て公式に無料で提供されている
② 運営者の主張ではなく、対象・時刻・版を固定した「同じ基準で再評価できる」記録にする
③ IPA・JPCERTにはURLを入れるだけの公開スキャナが存在しない。日本の公的機関には同等のものが無い
下の8種のうち7種はドメインやURLを入力するだけで実行できる。残る1種(CSP Evaluator)はCSPヘッダーの文字列そのものを貼り付けて調べる、URL入力型ではないツールである。対象URL・実行時刻・ツールの版を固定して記録すれば、あなたが実行しても顧客が自分で実行しても同じ基準で再評価できる。
securityheaders.com
再現性○・レスポンスヘッダー評価
HTTP Observatory
再現性○・Mozilla→MDN配下
Qualys SSL Labs
再現性○・TLS/証明書評価
Google Safe Browsing
再現性○・サイトステータス照会
internet.nl
再現性○・標準準拠テスト
Hardenize
再現性○・ドメイン統合診断
ImmuniWeb Community
再現性○・無料スキャン
CSP Evaluator(Google)
CSP文字列を貼る・URL型ではない
これらが「客観的」である理由は1つしかない。対象URL・実行時刻・ツールの版を固定して記録すれば、顧客自身が同じ基準で再評価できるからだ。あなたが「安全です」と主張しているのではなく、相手が自分の手で確かめられる手順になっている。ただし、外部ツールのデータ・判定規則・対象サイト自体は時点によって変わるため、常に「同じ結果」になるとは限らない。同じ基準で追試できることが客観性であって、結果の恒久的な一致を意味しない。これが第5章で分けた「客観性」の実体である。
日本の公的機関には同等のものが無い(否定的な発見)
・IPA・JPCERTには、URLを入れるだけの公開スキャナが存在しない
・IPA「iLogScanner」はアクセスログの解析ツールで、URL入力型のWebスキャナではない
・MyJVN(セキュリティ設定チェッカ等)はローカル設定・インストール済みソフトの確認用で、Webサイト診断ではない
・日本語の報告書を作る場合も、海外の無料ツール4〜5本を組み合わせるのが現実的な構成になる
顧客への渡し方
Step 1
検査する
8種のうち必要な数を実行する
Step 2
検査条件を記録する
対象URL・実行日時・ツール版を記録する。結果URLの転載可否はツールごとに確認する
Step 3
トラストセンターに貼る
転載が許されるツールは検査日とURLを並べる。SSL Labsは再実行の導線だけを案内する
Step 4
顧客が自分で追試する
同じ条件で顧客自身が再確認できる
★SSL Labsの結果を報告書に貼らない
・Qualys SSL Labsは無料だが「自社インフラのテスト目的」に限定されている
・商用利用・第三者への再配布(顧客報告書への転載を含む)にはQualysの許可が必要
・結果ページのURLをそのまま貼って報告書化するのは利用規約違反のリスクがある
・対応: 結果の転載は避け、顧客が自分でSSL Labsを再実行できる導線(対象ドメイン・実行手順)だけを案内する
これらは「外形」の検査であり、限界がある
・認可の穴(他社のデータが見えるか等)は検出できない
・業務ロジックの欠陥(決済回避・権限昇格の手順)は対象外
・「外形が良い」ことは「中身が安全」の証明にはならない
→ 次の第9章では、自分側の自動検査——ZAP・Nuclei・Semgrepを週次で回す構成を扱う。
⚙️ 自分側の自動検査 — ZAP・Nuclei・Semgrep を週次で回す
このセクションの3点
① ZAP・Nuclei・Semgrepの3本を週次で回す。SARIF化はSemgrepのみで、他は個別形式のまま保存する
② 本番は無差別にスキャンしない。能動スキャンはステージングとテスト専用テナントに限る
③ GitHub Actionsの週次scheduleは遅延・未起動があり得る。このworkflow自身は未起動を検知できない
前章の8種は「外部から見える形」を確かめる検査だった。ここからは自分で回す自動診断。週次で3本を回すが、束ね方は1本ずつ違う。SemgrepのSARIFだけをGitHub Code Scanningへ送る。ZAPとNucleiは個別形式(JSON/HTML、TXT)のまま、実行ログをArtifactとして保存して証跡にする。
OWASP ZAP Baseline
非破壊のパッシブスキャン
Nuclei
テンプレートベースの検出
Semgrep
コードの静的解析(SAST)
SARIFで束ねる — OASISの正式標準
SARIF(Static Analysis Results Interchange Format)は、静的解析ツールの出力を統一するための、OASISが策定した正式標準(現行バージョン2.1.0)。Semgrep・Trivy・OSV-Scanner・CodeQLなど多数のツールが対応しており、異なるツールの結果を1つの形式で束ねられる。GitHub Code Scanningへアップロードすれば、Securityタブに集約表示できる。ただしツールごとにルールIDや重大度の付け方が異なるため、複数ツールの結果を単純合算すると重複・粒度不一致が起きる点には注意する。
| ツール | 何を見るか | 無料枠 | 出力形式 |
|---|---|---|---|
| Semgrep | コードの危険パターン(SAST) | OSSコアは無料 | SARIF |
| Snyk | 依存関係・コンテナ・IaC(SCA) | 無料枠あり | CSV/PDF(Enterpriseのみ) |
| Trivy | コンテナ・IaC・SBOM | 無料(OSS) | SARIF/SPDX/CycloneDX |
| OSV-Scanner | 依存関係の脆弱性 | 無料(OSS) | SARIF |
| GitHub Code Scanning | SARIFの集約先 | パブリックは無料 | Web UI(Securityタブ) |
能動スキャンはステージングとテスト専用テナントに限る
・Full Scan系(ZAP Full・Nuclei)を無許可で本番に実行すると業務妨害・不正アクセス禁止法上のリスクがある
・削除・送信・課金など破壊的操作は検査対象から必ず除外する
・対象への実施許可を委託契約書に明記してから回す
週次実行の監視 — 「起動したrunの中でだけ」8日超を検知する
Step 1
週次scheduleで実行
毎週月曜にActionsを起動する
Step 2
成功時刻を記録
実行のtimestampを保存する
Step 3
8日超をチェック
起動できたrunの中で、前回成功から8日超なら失敗扱い
Step 4
通知する
Slack等へアラートを送る
★このworkflow自身は「起動しなかったこと」を検知できない
・staleness-checkが判定できるのは、起動できたrunの中で前回成功日を確認するところまで
・schedule自体が起動しなければ、staleness-checkも通知も一切動かない
・GitHub Actionsのschedule起動失敗は、そのworkflow自身では原理的に検知不能
・外部の監視サービスか、人による定期確認を別途置く必要がある
実装用:weekly-security-scan.yml 全文(技術者向け・開いた人だけ) コード 開く ▾
.github/workflows/weekly-security-scan.yml — ZAP Baseline・Nuclei・Semgrepを週次で回す。SemgrepのSARIFのみGitHub Code Scanningへ、ZAP/Nucleiは個別形式のままArtifactに保存する。末尾のjobは「起動できたrunの中で」前回成功から8日超を検知して失敗させる(起動しなかった場合はこのworkflow自身では検知できない。Codexの指摘への対応)。target のURLはステージング環境に限る
name: Weekly security scan
on:
schedule:
- cron: '0 3 * * 1' # 毎週月曜 03:00 UTC(遅延・未実行があり得る前提で下のjobを置く)
workflow_dispatch: {}
permissions:
contents: read
security-events: write
jobs:
zap-baseline:
runs-on: ubuntu-latest
steps:
- uses: zaproxy/action-baseline@v0.14.0
with:
target: 'https://staging.example.com' # 本番URLは指定しない。非破壊のパッシブスキャンのみ
cmd_options: '-J zap-report.json -r zap-report.html'
# ZAPはSARIFへ束ねない。JSON/HTMLのまま生ログをArtifactとして保存する
- if: always()
uses: actions/upload-artifact@v4
with:
name: zap-baseline-report
path: |
zap-report.json
zap-report.html
nuclei-scan:
runs-on: ubuntu-latest
steps:
- uses: projectdiscovery/nuclei-action@main
with:
target: 'https://staging.example.com'
flags: '-severity medium,high,critical -exclude-tags dos,fuzz -o nuclei-report.txt'
# Nucleiも-severity/-oのTXT出力のまま保存する(SARIF化はしない)
- if: always()
uses: actions/upload-artifact@v4
with:
name: nuclei-report
path: nuclei-report.txt
semgrep-scan:
runs-on: ubuntu-latest
container:
image: semgrep/semgrep
steps:
- uses: actions/checkout@v4
- run: semgrep scan --config auto --sarif --output semgrep.sarif
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: semgrep.sarif
# 注意: このjobが検知できるのは「起動できたrunの中で」前回成功から8日超が経ったことだけ。
# schedule自体が起動しなければこのjobも動かない=未起動そのものはこのworkflowでは検知できない。
# 外部の監視サービスか、人による定期確認を別途置くこと。
staleness-check:
runs-on: ubuntu-latest
needs: [zap-baseline, nuclei-scan, semgrep-scan]
if: always() # 3つのscanが失敗しても、起動できた限りは判定を走らせる
steps:
- name: 前回成功から8日超なら失敗させて通知する
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
LAST=$(gh run list --workflow=weekly-security-scan.yml \
--status=success --limit=1 --json updatedAt --jq '.[0].updatedAt')
DAYS=$(( ( $(date +%s) - $(date -d "$LAST" +%s) ) / 86400 ))
if [ "$DAYS" -gt 8 ]; then
echo "::error::前回成功から $DAYS 日経過。schedule未実行の疑いがある"
exit 1
fi→ 次の第10章では、外に出すもの——自動DAST SaaSとPTaaSの料金と、何を委託するかの判断表を扱う。
🏢 外に出すもの — 自動DAST SaaS と継続型ペンテストの実費
このセクションの3点
① 自動DASTは毎週回る安い検査、PTaaS/バグバウンティは年数回の高い人手検査。この2つは別物
② 料金は公式ページで確認できたものだけ書く。Probely・Acunetixは403で見られず未確認
③ 本番への能動的スキャンは事前承認が必須。無許可でZAP FullやNucleiを打つのは業務妨害リスク
第7章で自分で回す無料ツール(ZAP・Nuclei・Semgrep)を組んだ。ここでは外部の会社に金を払って回してもらうものを整理する。外に出す検査は2種類に分かれる。判定列の予算はVercel Pro $20+その他10万円くらいまで(第15章と同じ前提)とする。
自動で回る第三者 ⇄ 人が入る第三者
自動DAST / 攻撃面監視
安い・毎週回る・網羅は浅い
- ・機械が公開面とヘッダ・TLS・既知の脆弱性パターンを継続スキャン
- ・認可の不備や業務ロジックの穴は見つけにくい
- ・Intruder・Detectify・Probely・Astra・Invicti/Acunetix が候補
PTaaS / バグバウンティ
高い・年数回か常時受付・深い
- ・人間の攻撃者視点でIDOR・認可・業務ロジックを試す
- ・契約と報奨金が絡み、完全自動ではない
- ・Cobalt・HackerOne Pentest・HackerOne・Bugcrowd が候補
★自動で回る第三者 — 料金と、この予算で買えるか
| サービス | 料金 | 予算内か | 備考 |
|---|---|---|---|
| Intruder Free | $0(週次・最大5件) | 予算内(確定) | ウォーターマーク付きレポート |
| Intruder Cloud/Pro | $299/月〜(年$3,588〜) | 予算外(確定) | 年額が10万円を大きく超える |
| Detectify Standard〜 | €2,500/年〜 | 予算外(確定) | 為替次第でも10万円を大きく超える |
| Astra Security DASTスキャナLite | $69/月〜(年払い$699) | 為替次第 | 10万円前後。断定はしない |
| Probely | 未確認(403) | 見積が必要 | 公式pricingページ非公開 |
| Acunetix(Invicti傘下) | 未確認(403) | 見積が必要 | 見積制で公式価格が非公開 |
取得できず、と明記する理由。Probely・Acunetixは公式pricingページへのアクセスが403で拒否された。二次情報(比較まとめサイト)の数値をこの記事の金額として採用しない。契約を検討する段階で、営業窓口に見積を取り直す。
★人が入る第三者 — PTaaS・バグバウンティ。予算内か
| サービス | 料金 | 予算内か | 備考 |
|---|---|---|---|
| Cobalt(PTaaS) | 取得できず | 見積が必要 | スコープと期間で変動 |
| HackerOne Pentest(PTaaS) | 取得できず | 見積が必要 | スコープと期間で変動 |
| HackerOne / Bugcrowd(バグバウンティ) | 取得できず | 見積が必要 | 報奨金額に依存し不明 |
PTaaS・バグバウンティは3種とも「料金は見積・報奨金次第で不明」という点で共通する。これは公式が価格を隠しているのではなく、スコープ(対象範囲)と期間で見積が変わる契約形態だからである。金額を知りたい段階になったら、テスト専用tenantとルール・オブ・エンゲージメントを用意したうえで営業窓口に相談する。
この予算(10万円)で確定的に買える自動DASTはほぼ無い
・判定できたなかで確実に予算内なのはIntruderの無料枠(機能制限あり)のみ
・Astra Securityの年$699は為替次第で10万円前後。断定できないため「見積が必要」に近い扱いにする
・Intruder有償枠・Detectifyは年額が10万円を大きく超えるため予算外(確定)
何を外に出すか — WebTHQの構成に当てはめた判断表
| 対象 | 担当 | 頻度 | 外に出す理由 |
|---|---|---|---|
| 外形・TLS・ヘッダの継続監視 | 自動DAST(Intruder等) | 週次・自動 | 第7章の自前ZAP/Nucleiと重複させ検知漏れを減らす |
| 認証後DAST(ログイン後の画面・API) | 自動DAST(対応製品のみ) | 週次〜月次 | テストtenantを使えば非破壊で継続できる |
| 深い認可・業務ロジック | PTaaS/バグバウンティ | 年数回・常時受付 | 人の発想でしかIDOR・越境を見つけられない |
| このアプリ以外(Vercel・Neonの統制) | 外に出さない | — | Vercel/NeonのSOC2・ISO参照のみ。自社検査対象外 |
本番への能動スキャンは事前承認が要る
・自動DASTの認証後スキャン・PTaaSの実施は、対象URL・期間・除外操作を契約書か合意書で先に固定する
・テスト専用tenantと無害データを使い、削除・送信・課金など破壊的操作を除外する
・無許可のFull Scan相当の攻撃的検査は業務妨害・不正アクセス禁止法上のリスクになる(第7章と同じ注意)
→ 次の第11章では、これらの結果を含めた検査束を、顧客1万人にどう配るかを組む
🏛️ 顧客1万人に配る方法 — トラストセンターを1本作る
このセクションの3点
① 顧客ごとに手でチェックシートへ回答する運用は、1万人では破綻する。版ずれ・期限切れ・誤送信が起きる
② トラストセンターは公開層・承認層・顧客別層・内部正本の4層。内部正本だけが唯一の正本
③ 週次で自動更新し、AIは下書きと差分要約まで。公開は必ず本人が承認してから
ここまでの検査結果・報告書・改ざん検知の証跡は、1件ずつ顧客へ渡していては1万人には配れない。顧客ごとにExcelやチェックシートへ手で回答する運用は、1万人という規模の前で必ず壊れる。回答の版ずれ(去年の回答のまま放置される)、期限切れ証跡の気づかない送付、個人情報の誤送信が起きる。だから正本を1本にし、そこから配る形に変える。
なぜ1本にするのか
顧客ごとに手で回答(1万人だとこうなる)
- ・回答の版ずれ — 去年の回答のまま放置される
- ・期限切れ証跡を気づかず送ってしまう
- ・個人情報を誤って添付・誤送信するリスク
トラストセンターを1本の正本にする
- ・公開できる範囲は誰でも同じ最新版を見られる
- ・承認後だけ渡す資料は版管理された1か所から出す
- ・顧客固有の事実だけを、人が個別に確認すればよい
トラストセンターの4層
→ この図は横にスクロールできます
内部正本(control-register)が唯一の正本。公開層はそこから自動生成するだけにし、逆方向には作らない。
実在例 — 自作から始める理由
security.vercel.com
実在例
Vanta Trust Center
専用サービス
Drata Trust Center
専用サービス
SafeBase
専用サービス
専用サービスは3つとも回答の正しさや外部監査までは保証しない。最初はSvelteKitで自作し、質問票の量が本人の承認能力を超えた段階でこれらを比較するのが、費用と運用負荷のバランスが取れた順序である。
週次自動更新の7手順
- 1
手順1
週次で起動
scheduleとrelease時に起動。8日超で通知 - 2
手順2
機械検査を実行
npm ci・テスト・build・audit・SAST・SBOM生成 - 3
手順3
外部検査を実行
ステージングでZAP非破壊・TLS・ヘッダを検査 - 4
手順4
設定を要約取得
Firewall・デプロイID・RLS・復元演習を要約 - 5
手順5
証跡を固定
manifestにSHA-256固定しPDF等をbundle化 - 6
手順6
署名・attestation
Attestation付与。必要時のみcosign/TSA - 7
手順7
AIが下書き→人が承認
差分要約をAIが下書き。承認後に公開
evidence-manifest.json の中身と、個別チェックシートの自動化範囲 詳細を知りたい人だけ 開く ▾
evidence-manifest.json にはcommit SHA・対象URL・実行時刻(JST/UTC)・使用ツールの版・全生ログのSHA-256を固定する。PDF・SBOM・検査ログをこの束に紐づけ、GitHub Artifact Attestations と、可能ならcosignのkeyless署名を付ける。存在時刻の証明が要る顧客にだけ、RFC 3161準拠TSAのtimestamp tokenを別途付与する。
SIG/CAIQや顧客独自Excelのような個別チェックシートは、下書きまでを自動化し、提出は本人承認に止める。唯一の正本はcontrol-registerであり、AIは「設問→統制ID→根拠URL/hash→回答候補」の対応付けまでを担当する。
AIに任せてよい範囲 / 人が必ず確認する範囲
版差分の抽出
AIに任せてよい
設問→統制IDの候補マッピング
AIに任せてよい
矛盾・期限切れ・未回答の検出
AIに任せてよい
顧客固有の契約・SLA・DPA確認
必ず人が確認
自由記述・例外承認の記入
必ず人が確認
この方式の弱点
・自動DASTは認可・業務ロジックを網羅しない。テナント越境は専用E2Eと定期的な人手ペンテストが必要
・トラストセンターは透明性を高めるが、顧客が第三者診断や特定証明書を要求した場合の代替にはならない
・外部SaaSを増やすほど、サブプロセッサ・費用・データ送信・契約とログイン管理が増える
・AIの要約は誤分類・もっともらしい誤記を起こし得る。検査の未実施・例外を自動でPassに変えない
もう1つ、時間が壊す弱点がある。Artifactの保存期間、署名IDの失効、TSAの検証可能期間、テスト用アカウントの期限を保守し続けなければ、数年後にはこの束を追試できなくなる。署名・attestation・タイムスタンプは「今それが正しく存在した」ことしか証明しない。保守を止めた瞬間から、過去の証跡は少しずつ検証不能に近づいていく。
→ 次の第12章では、この証跡束を使って顧客に出す報告書のひな形を組む
📄 報告書のひな形 — 何を書き、何を書いてはいけないか
このセクションの3点
① 報告書はCodexの12章ひな形をそのまま使い、書く場所を章ごとに固定する
② 一番読まれるのは表現の線引き。第三者診断と書かず、実施した検証の結果と書く
③ 主張には根拠と確認者を添える。未実施の欄を空けないことが信用を作る
報告書の表題は「自社実施・再現可能なセキュリティ検証報告書」にする。第三者診断ではないと最初に書く。この章の章立ては、Codex(GPT-5.6)の叩き台をそのまま骨として使い、各章に何を書くかだけをここで固定する。
①表紙・結論
③独立性・AI利用の開示
⑧結果・検出事項・是正
⑩残余リスクと適用限界
⑫承認
残り7章の中身 ②④⑤⑥⑦⑨⑪ 開く ▾
| 章 | 内容 |
|---|---|
| ②対象と除外範囲 | 対象URL・除外機能・実データを使わないことを書く |
| ④システムとデータフロー | ブラウザ→Vercel→SvelteKit→Neonの経路とテナント境界 |
| ⑤脅威モデルと判定基準 | 資産・攻撃者・重大な失敗とCritical〜Lowの定義 |
| ⑥統制一覧 | 設定済み・未設定・未確認に分け、証跡IDまで示す |
| ⑦検査方法と再現手順 | コマンド・ツール版・期待結果を書き、追試できる形にする |
| ⑨可用性・復旧・ログ | 復元演習の結果とRTO/RPO。未実施なら未実施と書く |
| ⑪完全性・検証情報 | 束のSHA-256・署名やattestationのURIと検証手順 |
この記事で一番読まれる場所 — 書いてよい表現、書いてはいけない表現
言ってよいことと言ってはいけないことの境目は、実施した事実の範囲を超えるかどうかである。範囲を超えた瞬間に、報告書は誇大表示になる。
同じ事実を、どちらの言葉で書くか
書いてはいけない表現
実施した事実の範囲を超える
- ・✕「第三者による脆弱性診断を実施しています」
- ・✕「AIがセキュリティを監視しています」
- ・✕「安全です」「問題ありません」
- ・✕「個人情報は一切残りません」
- ・✕「客観的な第三者診断を受けた」「AI第三者機関が監査した」
- ・✕「ペネトレーションテスト済みです」
書いてよい表現
実施した事実の範囲だけを書く
- ・○「外部事業者Xの自動スキャンを週次実施。人手の第三者診断は未実施」
- ・○「自動検査の結果をAIが要約し、人が確認して対応している」
- ・○「検査した範囲と、検査していない範囲を明示する」
- ・○「ログにIPアドレスと操作履歴が保存期間◯日間残る」(実際に残るものを書く)
- ・○「本報告書は当社が実施した検証結果。第三者認証・侵入試験ではない」
- ・○「自動スキャンのみ実施。権限を持つ人手の侵入試験は未実施」
証跡は3点セットで並べる
主張 → 根拠 → 確認者
1
主張
対象範囲と実行時点でCritical/High 0件、のように限定する範囲
2
根拠
対象URL・コミットSHA・実行時刻・生ログのハッシュ
3
確認者
実施者と承認者を併記。同一なら明記し独立審査は未実施と書く
主張だけを書いて根拠を省くと、報告書は宣言文になる。根拠だけを並べて確認者を書かないと、誰も責任を負っていない書類になる。3点をいつも同じ順番で並べる。「検出事項なし」は範囲と時点を書かないと、顧客には「脆弱性が無い」という主張として読まれる。対象範囲と実行時点で、Critical/Highの未解決検出事項は0件のように、範囲・時点・重大度を必ず添える。
運用者が1人の場合、実施者と承認者は同一人物になる。その場合は「実施者・承認者とも同一(本人)」と明記し、独立した第三者によるレビューは実施していないと書く。これを省略すると、独立したレビューがあるように読まれる。
第6章で挙げた、URLを渡せば誰でも追試できる無料検査8種は、この報告書の第7章「検査方法と再現手順」に付録として貼る。列はURL・コマンド、期待される結果、限界の3つに絞る。認証が必要な検査まで無制限に公開してはならない。
未実施の欄を空けない — これが信用の源になる
ペネトレーションテスト、監査ログの長期保管、SSO、SOC。やっていないことは「未実施」「未確認」と欄を作って書く。空欄や省略は、後から「隠した」と読まれる。ISMS・Pマークを持つ事業者にとっては、できることの列挙より、できないことを自分から書く欄があることのほうが顧客の信頼を作る。
→ 次の第13章では、この報告書が改ざんされていないことを検知する方法を示す
🔏 改ざんを検知可能にする — 署名とタイムスタンプ
このセクションの3点
① manifestは照合の対象に過ぎない。cosignやAttestation、TSAで外部アンカーして初めて改変を検知しやすくなる
② 証明する対象は手段ごとに違う。来歴はAttestation、署名者はSigstore、存在時刻はTSA
③ 日本には総務大臣認定のタイムスタンプ制度があり、認定事業者は2026年3月時点で6社ある
報告書は作った後に差し替えられたら意味がない。evidence-manifest.jsonを作るのはそのためである。コミットSHA・対象URL・検査時刻(JST/UTC)・ツールの版・全生ログのSHA-256を1枚に固定する。ただしmanifest単体は差し替えを防がない。成果物とmanifestは同時に差し替えられるからである。cosignの透明性ログやRFC 3161のタイムスタンプなど、外部にアンカーして初めて、後日の改変を検知しやすくなる。
evidence-manifest.json の中身(例) コミットSHA・時刻・全ログのSHA-256 開く ▾
コミットSHA・対象URL・時刻・ツール版・全生ログのSHA-256を1枚にまとめる
{
"reportId": "webthq-2026-08-15",
"commitSha": "a1b2c3d4e5f6...",
"deployment": {
"url": "https://service.example.jp",
"id": "dpl_xxxxxxxxxxxx"
},
"generatedAt": {
"utc": "2026-08-15T06:00:00Z",
"jst": "2026-08-15T15:00:00+09:00"
},
"tools": {
"zapBaseline": "2.16.1",
"semgrep": "1.99.0"
},
"logs": [
{ "file": "zap-baseline.json", "sha256": "..." },
{ "file": "semgrep-results.sarif", "sha256": "..." }
]
}今月やる — manifestと1方式でよい
まずはこれだけ。TSAは後から足す
まずevidence-manifest.jsonを作る。次に、GitHub Artifact AttestationsかSigstore/cosignのどちらか1つを付ける。両方は要らない。GitHubを許容しないならcosignだけでよい。RFC 3161のTSAは、顧客が「文書がその時刻に存在した」ことの証明を必要とする場合に、後から追加すればよい。
3つの手段は代替関係ではなく、証明する対象が違う
GitHub Artifact Attestations
ビルド来歴の暗号署名
Sigstore / cosign(keyless署名)
署名と公開透明性ログ
RFC 3161 タイムスタンプ
認定TSAが時刻を証明
SHA-256 manifest + Gitタグ
照合の基準点(証明手段ではない)
| 手段 | 証明する対象 | 費用 |
|---|---|---|
| GitHub Artifact Attestations | ビルドの来歴(どのソース・どのworkflowから) | パブリックリポジトリは無料(Sigstore Public Good Instance) |
| Sigstore / cosign | 署名者と成果物ハッシュの対応 | 無料。ただし署名鍵と署名者の本人性の管理が要る |
| RFC 3161 タイムスタンプ(日本の認定TSA) | その時刻に存在したことと、付与時点以降の改ざん検知 | 事業者ごとに異なる。取得できず(要見積り) |
| SHA-256 manifest + Gitタグ | 版管理・誤配布の照合(改ざん検知や提出証跡にはならない) | 無料 |
GitHub Artifact Attestationsは、GitHub公式ドキュメントで「repository, organization, environment, commit SHA, and triggering event」を暗号学的に署名された形で証明する仕組みと説明されている。基盤はSigstoreで、パブリックリポジトリでの生成・検証はSigstore Public Good Instanceにより無料である。第三者はgh attestation verifyで検証できる。
ただし正本で確認できる検証対象はバイナリ・コンテナイメージ・SBOMまでである。PDFや報告書のZIP束を同じ仕組みでattest/verifyできるかどうかは未確認である。報告書PDFとmanifestの完全性は、cosignの署名かRFC 3161のタイムスタンプで扱う。
必要になったら — TSA(日本のタイムスタンプ認定制度)
総務省は「時刻認証業務の認定に関する規程」に基づき、総務大臣による認定制度を整備している。総務省の説明では、タイムスタンプは「ある時刻にその電子データが存在していたことと、それ以降改ざんされていないことを証明する技術」とされている。総務大臣の認定を受けた時刻認証事業者は複数ある(一覧は折りたたみ)。
認定されている時刻認証事業者 2026年3月時点・6件 開く ▾
セイコータイムスタンプサービス
セイコーソリューションズ
タイムスタンプサービス DiaStamp
三菱電機デジタルイノベーション
アマノタイムスタンプサービス3161
アマノ株式会社
認定タイムスタンプ byGMO
GMOグローバルサイン
タイムスタンプサービス iScign
サイエンスパーク株式会社
ウイングアークタイムスタンプサービス
ウイングアーク1st株式会社
認定事業者を実地に調査・確認する「指定調査機関」は、一般財団法人日本データ通信協会(東京都豊島区)である。総務省の説明にある通り、認定ロゴマークは「品質を保証・担保するかのように用いるもの」としては使用できないと定められている。報告書に付ける場合は、認定制度に基づくものである旨を正確に書く。
用語の説明
来歴・署名・透明性ログ・TSA・manifestの意味 前提知識がなくても読める最小限の定義 開く ▾
来歴(provenance): 成果物が「どのソース・どのworkflow・誰の操作」から作られたかの記録。署名: あるハッシュ値を、鍵を持つ者が承認したという暗号学的な証拠。透明性ログ: 署名の発行記録を公開の台帳に残し、後から否認・差し替えしにくくする仕組み。TSA(時刻認証局): あるハッシュがその時刻に存在したことを第三者として証明する事業者。manifest: 対象ファイルとそのハッシュ値を列挙した台帳。台帳自体は署名や外部記録と組み合わせて初めて改ざん検知に使える。
SLSAの「Verified reproducible」— 再現可能性という別の客観性 今すぐ使う手段ではないため退避 開く ▾
SLSA(OpenSSF傘下)は"Verified reproducible"を「2つ以上の独立したビルドプラットフォームを用いて、ビルドのprovenanceを相互に裏付けること」と定義する。独立した当事者が同じソースコードから自身の隔離環境でビルドし、結果を比較する。ただしSLSA自身が「再構築者は真に独立していなければならない、さもなければ全員が同じ攻撃に脆弱になりうる」と限界を明記している。
署名・attestation・タイムスタンプが証明しないもの
・内容が正しいことは証明しない。誤った記述にも署名はできる
・脆弱性が無いことは証明しない
・第三者による診断であることも証明しない。自社が署名すれば自己署名のままである
・証明する範囲は手段ごとに違う(来歴・署名者・存在時刻)が、内容の正しさは証明しない
・SHA-256 manifest + Gitタグだけでは、単独では改ざん検知にも提出証跡にもならない
保守しないと数年後に追試できなくなる
署名・タイムスタンプは作って終わりではない
保存期間
証跡の保存
manifestと生ログを何年保存するか先に決める
失効
署名鍵・証明書ID
cosignの鍵や証明書IDは失効・更新される
検証可能期間
長期検証の前提
証明書チェーン・失効情報・保存方針をTSA/形式ごとに要確認
アカウント期限
検査用テストアカウント
第三者が追試するための権限が期限切れになる
署名を1回付けて終わりにすると、数年後に顧客が検証しようとしたときに、鍵は失効し、テストアカウントは消え、保存していたはずの生ログが残っていない、という状態になりやすい。証跡は作る作業と同じだけ、保守する担当と期限の一覧が要る。
→ 次の第14章では、委託先の監督義務と、顧客が本当に見たいものを扱う
📋 委託先の監督と、顧客が本当に見たいもの
このセクションの3点
① 25条は委託に該当する場合の委託元の監督義務。報告書提出を直接要求する条文ではない
② ISMAP-LIUの対象は低リスクの機密性2情報を扱うSaaS。中小・スタートアップは登録促進の対象
③ CAIQは無料261問。SIGは公式サイトがログイン必須で確認できず、$7,000/年は出典不明
この章の主タスクは、顧客へ渡す3点を決めることだ。①報告書(安全管理措置の実施状況を示す)②契約に盛り込む条項(委託元が把握できる内容)③継続的な把握の材料(定期的な検査結果)——この3点は、個人情報保護法25条のガイドラインが示す3つの観点に対応させると整理しやすい。ただし自社の提供が委託に該当するかの判断が先に必要で、②③はガイドライン上「望ましい」とされる措置にとどまる。根拠となる条文・制度の原文は下の各アコーディオンで確認できる。
顧客へ渡す3点 — ガイドラインの3観点に対応させた整理例
①報告書
安全管理措置の実施状況を示す章
②契約条項
望ましいとされる把握条項を明記
③把握の材料
望ましいとされる定期検査を継続提示
なぜこの3点に整理するのか
顧客(委託元)が報告書に求めているのは、自分が25条の監督義務を果たすための材料である。ガイドラインの3観点「①選定基準を満たすか」「②契約でどこまで合意しているか」「③状況をどう継続的に把握させるか」に対応させると整理しやすい。②③はガイドライン上「望ましい」とされる措置であり、義務そのものではない。委託に該当しない提供形態では、この対応関係もそのままは使えない。この整理は第10章の報告書ひな形でそのまま使う。
根拠 — 個人情報保護法25条とガイドライン原文 2026年8月15日確認・平成28年11月発行(令和6年12月一部改正版) 開く ▾
25条は個人データの取扱いの委託に該当する場合の、委託元の監督義務を定めた条文である。委託先の安全管理措置が自社と同等かを確認する義務を委託元に課すものであり、法が個別の質問票や報告書の提出を直接要求するわけではない。まず自社の提供形態が委託に該当するかどうかの判断が先に必要になる。
条文(法第25条)
「個人情報取扱事業者は、個人データの取扱いの全部又は一部を委託する場合は、その取扱いを委託された個人データの安全管理が図られるよう、委託を受けた者に対する必要かつ適切な監督を行わなければならない。」
(1) 適切な委託先の選定
「委託先の選定に当たっては、委託先の安全管理措置が、少なくとも法第23条及び本ガイドラインで委託元に求められるものと同等であることを確認するため、『10((別添)講ずべき安全管理措置の内容)』に定める各項目が、委託する業務内容に沿って、確実に実施されることについて、あらかじめ確認しなければならない。」
(2) 委託契約の締結
「委託契約には、当該個人データの取扱いに関する、必要かつ適切な安全管理措置として、委託元、委託先双方が同意した内容とともに、委託先における委託された個人データの取扱状況を委託元が合理的に把握することを盛り込むことが望ましい。」
(3) 委託先における個人データ取扱状況の把握
「委託先における委託された個人データの取扱状況を把握するためには、定期的に監査を行う等により、委託契約で盛り込んだ内容の実施の程度を調査した上で、委託の内容等の見直しを検討することを含め、適切に評価することが望ましい。」
必要かつ適切な監督を行っていない事例(原文要旨)
1. 委託先の安全管理措置の状況を契約締結時及びそれ以後も適宜把握せず委託した結果、委託先が漏えいした場合
2. 必要な安全管理措置の内容を委託先に指示しなかった結果、委託先が漏えいした場合
3. 再委託の条件を指示せず、委託先の取扱状況の確認も怠り、再委託先が漏えいした場合
4. 契約に再委託の把握が盛り込まれているのに、委託先へ報告を求める等の措置を行わなかった場合
制度の詳細 — ISMAPとISMAP-LIU 開く ▾
ISMAP
ISMAP-LIU
CAIQ v4(CSA)
SIG(Shared Assessments)
ISMAP-LIU(ISMAP for Low-Impact Use)は令和4年11月に創設された仕組みで、原文にはこうある。
「機密性2情報を扱う情報システムはIaaS、PaaS、SaaSと多岐にわたる。中でもSaaSはサービスの幅が広く、用途や機能が極めて限定的なサービスや、機密性2情報の中でも比較的重要度が低い情報のみを取り扱うサービス等リスクが低いサービスもあり、それらのサービスについて現行のISMAPと一律の取扱いとした場合、過剰なセキュリティ要求となり、それにより当該サービスの活用が進まない場合も考えられる。」
ガバナンス基準・マネジメント基準は毎年外部監査するが、管理策基準は重要な管理策だけを外部監査し、残りは内部監査を3年に一度とする設計で、中小・スタートアップの登録インセンティブも用意されている(デジタル庁 digital.go.jp/en/policies/security/ismap-liu)。事前申請は令和7年4月1日付で廃止された。
委託先審査の質問票 — 確認できたこと ⇄ できなかったこと
CAIQ(Cloud Security Alliance)
v4=261問/CAIQ-Lite=124問
- ・CSA公式サイトで「無料でアクセス可能」と明記
- ・ダウンロードページはログイン/アカウント作成の表示あり
- ・認証制度ではなくSTARプログラムの自己評価(レベル1)
SIG(Shared Assessments)
19のリスクドメイン・毎年更新
- ・公式サイトはMicrosoft Entraのサインイン画面が表示
- ・匿名では本文を一次情報として確認できなかった
- ・よく引用される「$7,000/年」は一次情報で確認できず
脆弱性診断の相場とIPA調達実例(参考) 開く ▾
脆弱性診断の公開された円建て価格は、一次情報からは取得できない。IPA自身が発注者となる政府調達(入札公告)でも、契約金額は「○○円」として意図的に伏字にされている。IPAは実際の契約公表資料で理由を明記している。
「同種の他の契約の予定価格を類推させるおそれがあるため公表しない」
ただし課金の単位構造は確認できた。令和7年度の脆弱性診断業務は、周辺作業27件と、診断648リクエストへの単価契約(従量制)として設計されている。「〜万円程度」という出典不明の数値はこの記事では書かない。
納入物件の定義
実地調査権の留保
再委託の上限
648
IPA脆弱性診断契約(令和7年度)の想定リクエスト数
27件
同契約の周辺作業の予定数量
261問
CAIQ v4の設問数(無料公開)
4割
政府調達ペネトレーションテストの再委託上限
取得できずと明記したもの。脆弱性診断・ペネトレーションテストの円建て相場(IPA自身が伏字にしている)。SIGの年間ライセンス価格(公式サイトを匿名で確認できず、第三者の集客ページのみ)。Pマーク・ISMS取得済み事業者が追加でチェックシートを求められる頻度についての公的な記述(JIPDEC・ISMS-ACのFAQに確認できず)。
→ 次の第15章では、この報告書と運用の仕組みが、顧客1万人に近づくとどこから詰まるかを数字で示す。
📈 1万人になると最初にどこが詰まるか
このセクションの3点
① 1万人はVercelの席数ではない。招待しなければ$20は運用者1人分のまま
② 最初に詰まりやすいのはFirewall40ルール。顧客別IPを1社1ルールで許可すると41社目で破綻
③ 月間HTTP=利用者数×月操作数×1操作のHTTP回数。容量上限ではなく負荷試験の出発点
1万人は、Vercelの席数ではない。顧客をVercel Teamへ招待しない限り、Proの$20/席・月は運用者1人分のままである。詰まるのは利用者数そのものではなく、①顧客別の境界制御 ②ピーク時のAPI/DB処理 ③証跡運用 ④従量費用の4系統だ。顧客組織数(社)と利用者数(人)は別の軸であることに注意して、以下の目安を読んでほしい。数値の一部はVercel/Neonの容量上限そのものではなく、負荷試験を始めるための試算例である。
| 順 | 詰まるもの | 目安(条件・試算) | 先に打つ手 |
|---|---|---|---|
| 1 | Firewallルール数40 | 顧客別IPを1社1ルールで許可する設計を採った場合、41社目で破綻(条件付き上限) | WAFは共通攻撃のみ。顧客別はtenant_id+Neon RLS |
| 2 | レート制限の粒度 | IP単位だとNATで数百人が同一IP→誤遮断。閾値は見積不能 | login・送信・出力をユーザー/tenant/IPの複数キーで |
| 3 | Audit Logsが無い | 人数でなく最初の大企業審査で詰まる | Git/PR/Actions・デプロイID・アプリ監査ログで補助 |
| 4 | Neonの接続・集計 | 7,000人×締切前2時間×10操作=約10req/sは負荷試験の試算例(容量上限ではない) | 集計の事前計算・キュー化、負荷試験で確認 |
| 5 | Vercelの従量課金 | 10,000人×20操作×5HTTP=月100万HTTPは試算例(能力限界ではない) | Usage画面とPricing Calculatorで毎月予測 |
| 6 | 運用者1人の承認能力 | 例外承認・質問票・重大アラートが先に詰まる | 共通回答はトラストセンターへ、承認待ちを可視化 |
条件付き上限。41社目で設計が破綻
7,000人で約10req/sという試算(容量上限ではない)
10,000人で月100万HTTPという試算(能力限界ではない)
②レート制限③Audit Logs⑥承認能力は閾値を算出できないため「見積不能」。④⑤は負荷試験を始めるための試算例であり容量上限ではない。上の表を参照
月間転送量=月間HTTP×平均応答bytes、実行量=動的HTTP×平均実行秒×メモリ/CPU
月間HTTP = アクティブ利用者数 × 1人の月操作数 × 1操作あたりHTTP回数
Firewall先に打つ手
レート制限先に打つ手
監査先に打つ手
「$20で1万人まで大丈夫」とは言えない — 上限は未確認
・各数値は目安の試算であり、Vercel/Neonの容量上限そのものは未確認
・4ピーク(受付開始・締切前・集計公開・CSV/PDF出力)で負荷試験して確認する
・合格基準と観測する指標を先に決めてから試験し、毎月見積もりを更新する
負荷試験の設計 — 4シナリオ
①同時利用者
同時ログイン数を段階的に増やし応答時間を確認
②回答送信
書き込み集中時のNeon接続数とレイテンシを確認
③PDF/CSV出力
一括出力の実行時間とメモリ使用量を確認
④集計
集計クエリのDB CPUと応答時間を確認
合格基準の例: 各シナリオでp95応答時間が3秒以内、エラー率1%未満、Neon接続がプール上限に達しない。観測する指標: Vercelのファンクション実行時間・同時実行数・帯域使用量(Usage画面)、Neonのアクティブ接続数・CPU使用率・ストレージ(Neon Monitoring)。これらを毎月のPricing Calculator試算と突き合わせて更新する。
40本
Firewallカスタムルール上限(1プロジェクト)
41社目
顧客別IPを1社1ルールで設計した場合に破綻する境目
約10req/s
7,000人ピーク集中の試算例(容量上限ではない)
月100万HTTP
10,000人×20操作×5HTTPの試算例(能力限界ではない)
→ 次の第16章では、言ってはいけない主張と、外注するしかない線を確定する。
🚫 言ってはいけない主張と、外注するしかない線
このセクションの3点
① SOC2やISO27001の取得はVercelの統制の証跡であり、あなたのアプリの診断ではない
② 深い認可・テナント越境も自社のE2E/コードレビューで検出できる。外注が要るのは独立保証や契約要件がある場合
③ AIの要約は「未実施」を見落とす。検査の失敗や例外を自動でPassに変えてはいけない
ここまでの13章で、$20で買えるものと、外の会社に頼るしかないものを分けてきた。この章はその境界線を、言ってよい言葉といけない言葉として固定する。AIは「第三者」にはなれない。作れるのは「客観性」——誰が何度やっても同じ結果に到達できることだけである。この一線を越えた瞬間、報告書全体の信頼性が崩れる。
言ってはいけない主張
「第三者による診断を実施しています」
自動スキャンは外部事業者の実施記録だが、人手の第三者診断ではない
「AIがセキュリティを監視しています」
AIは異常の要約・提案までで、遮断や承認の判断は人が行う
「VercelはSOC2とISO27001取得済みなので安全です」
★この記事で最も誤用されやすい主張
「署名とタイムスタンプがあるので内容は正しい」
3方式は証明する対象が違う。下の表で分けて確認する
「安全です」「問題ありません」
検査した範囲としていない範囲を書かないと空証文になる
★3方式が証明するもの — 署名・attestation・TSAを分ける
| 方式 | 証明すること | 証明しないこと |
|---|---|---|
| Artifact Attestations | ビルドの来歴(誰が・何から作ったか) | 内容の正しさ・網羅性・脆弱性の不存在 |
| 署名(cosign等) | 署名者とハッシュの対応(改変の有無) | 内容の正しさ・網羅性・脆弱性の不存在 |
| TSA(RFC 3161) | 付与時点の存在と、以降の改ざん検知 | 内容の正しさ・網羅性・脆弱性の不存在 |
3方式は証明する対象がそれぞれ違う。来歴・署名者の対応・時刻という別々の事実を証明しているだけで、いずれも報告書の内容が正しいこと、検査が網羅的だったこと、脆弱性が無いこと、第三者診断を実施したことは証明しない。結論は変わらない。
★外注が必要になる線 — 自社試験は必須が前提
自社のE2Eテストとコードレビューでも、IDORやRLS(行単位アクセス制御)の不備は検出できる。自社の試験は必須の前提であり、免除にはならない。外部への発注が必要になるのは、独立した保証が求められる場合・深い攻撃観点が要る場合・契約やRFPが第三者診断を要求する場合の3つに限る。
自社試験は必須。それでも外部発注が要る場面
深い認可・テナント越境(IDOR)
自社E2Eは必須。独立性が要る場合のみPTaaSへ発注
顧客RFPが第三者診断を要求
契約上の第三者診断要件は自己検証で代替不可
PCI DSSのASVスキャン
認定ベンダー(ASV)以外は実施できない
監査法人・認定機関の報告書要求
独立した組織が発行する文書に限られる
AIに任せてよい範囲と、任せてはいけない範囲
AIの権限線引き
任せてよい範囲
- ・検査結果の要約・分類候補の提示
- ・前回との差分抽出・レポート下書き
- ・修正PR案の作成(マージはしない)
- ・設問への回答候補のマッピング
任せてはいけない範囲
- ・検出事項の採否・重大度の最終判定
- ・例外・抑止の承認
- ・本番DBへの自動SQL実行
- ・報告書の最終承認・署名
この方式の弱点5つ
自動DASTは認可・業務ロジックを網羅しない
トラストセンターは第三者診断の代替にならない
外部SaaSを増やすほど費用と管理対象が増える
AIの要約は誤分類し「未実施」を見落とす
保存期間と署名の失効で数年後に追試できなくなる
検査の失敗・未実施・例外を、自動でPassに変えない
・AIの要約は「未実施」を「問題なし」と混同しやすい
・検査が失敗・タイムアウトした回は「未実施」と明記して残す
・例外・抑止は人が理由と期限つきで承認したものだけ有効にする
・Passの意味は、AIではなく人が定義した基準で固定する
この章に書いたことはすべて「今はできない、または誰かに頼むしかない」という宣言である。できないことをできると言わないほうが、できることの価値が正確に伝わる。次の第15章では、ここまでの14章を実際に何週目・何ヶ月目にやるかへ落とし込む。
→ 次の第17章では、ここまでの内容を今週・今月・四半期・年1回の4段の計画にする。「終わったと言える条件」を機械で確認できる形で書く
🗓️ 導入計画 — 今週・今月・四半期でやること
このセクションの3点
① 予算($20+10万円)で確定できるのはOSSと自前検査中心の構成。年間確定費用はVercel Proの$240のみ
② 自動DAST SaaS・PTaaS・人手診断の大半は予算外か見積次第。10万円に収まる保証はない
③ GitHubを許容するかどうかで証跡の経路が変わる。許容しないなら独立した来歴・時刻の証明はできない
第1章から第14章までで、$20で買えるもの・買えないもの・外注するしかない線を確定させた。この最終章はそれをいつ・何からやるかに落とす。順番は検査の網羅性ではなく、依頼者が「今週から動ける」ことを優先している。
4段の計画
- 1
今週
追試できる検査を回し、公開層を作る
無料検査8種を実行し結果URLを控える - 2
今月
自動検査をCIに乗せ、証跡を束ねる
ZAP・Semgrepを週次実行、署名を付与 - 3
四半期ごと
外部の見積を取り、復元演習をする
自動DAST SaaSの見積、Neon復元演習 - 4
年1回
人手の第三者診断を受ける
鍵とアカウントを棚卸し、審査へ証跡を出す
今週
今週やること — 終わったと言える条件
無料検査8種を1回ずつ実行
結果ページのURLを8件とも記録できていること
security.txtを設置
/.well-known/security.txt が200で返ること
トラストセンター公開層を1ページ作る
概要・対象範囲・security.txt導線が揃うこと
今月
今月やること — 終わったと言える条件
ZAP・Semgrepを週次CIに乗せる
Actionsのschedule実行が2回連続で成功すること
evidence-manifest.jsonと署名
SHA-256一覧と署名URLが揃うこと
control-registerを1枚作る
統制ID・根拠・責任者・最終確認日が全行埋まること
★GitHubを許容するか否かで変わる経路
ここまでの「今月」はGitHub Actionsを前提にしている。しかし依頼者は「Vercel以外は考えない」と言っている。その前提を文字どおり適用すると、Actions・Artifact Attestations・cosignはすべて使えない。2つの経路に分けて書く。
GitHubを例外として許容するか
GitHubを例外として許容する場合
Actions・Attestations・cosignが使える
- ・GitHub Actionsで週次CI・schedule実行ができる
- ・Artifact Attestationsでビルド来歴を証明できる
- ・cosignで署名し透明性ログへ記録できる
- ・独立した来歴・時刻の証明が成立する
許容しない場合(Vercelのみ)
デプロイ履歴+自前manifestまで
- ・Vercelのデプロイ履歴+自前manifestまでに限られる
- ・GitHub Actions・Artifact Attestations・cosignは使えない
- ・独立した来歴と時刻の証明はできない
- ・検証は自社が保存した記録のみに依存する
GitHubを許容しない場合の限界
・依頼者は「Vercel以外は考えない」と明言している。この前提では非GitHub経路が正
・Vercelのデプロイ履歴と自前manifestは、外部からの独立した来歴・時刻証明にはならない
・GitHubを例外として許容するなら、Actions・Artifact Attestations・cosignが使える
📅 四半期・年1回の計画 見積・復元演習・第三者診断 開く ▾
四半期ごと — 終わったと言える条件
自動DAST SaaSの見積を取る
2社以上から金額と契約条件の回答を得ること
復元演習を実施
Neonから実際に復元し所要時間を記録すること
トラストセンターの棚卸し
公開層の更新日が90日以内であること
年1回 — 終わったと言える条件
人手の第三者診断を受ける
契約書・報告書・是正記録が揃うこと。費用は見積次第
鍵とアカウントの棚卸し
休眠アカウント・未使用鍵がゼロであること
ISMS/Pマーク審査へ証跡を出す
審査員の指摘がゼロまたは是正済みであること
費用の合計
| 区分 | 項目 | 金額 | 発生条件 |
|---|---|---|---|
| 確定 | Vercel Pro(基本料金) | $20/月・席 | 全機能の土台。この記事の前提 |
| 別料金(使う場合のみ) | Advanced Deployment Protection | $150/月 | Password Protection等。30日間解約不可 |
| 別料金(使う場合のみ) | SAML SSO | $300/月 | Enterprise相当の認証連携が要る場合 |
| 別料金(使う場合のみ) | HIPAA BAA | $350/月 | 医療情報を扱う場合のみ |
| 別料金(使う場合のみ) | Static IPs | $100/月・プロジェクト | 固定送信元IPが要る場合 |
| 無料で回る | ZAP Baseline・Semgrep・Trivy等 | $0 | 自前のCIで実行 |
| 無料で回る | securityheaders.com等の追試検査8種 | $0 | 公開面のみ・第6章参照 |
| 無料で回る | GitHub Artifact Attestations・cosign | $0(利用条件は未確認) | GitHubを許容する場合のみ使える |
| 見積が要る | 自動DAST SaaS(Intruder等) | 取得できず | 契約時に見積確認。大半は年額10万円超 |
| 見積が要る | PTaaS・バグバウンティ(Cobalt等) | 取得できず | 案件ごとに見積・報奨金 |
| 見積が要る | 人手の第三者診断(年1回) | 取得できず | 案件ごとの見積。10万円に収まる保証は無い |
★予算内の推奨構成 — $20+10万円で何が組めるか
問い④の予算は「Vercel Pro $20+その他10万円くらいまで」である。ここまでの14章で並べた項目を、この予算の内か外かで仕分ける。年額に換算し、Vercel Proの年$240も合計に含める。
予算内で確定できるもの
| 項目 | 費用 | 予算内か |
|---|---|---|
| Vercel Pro(基本料金) | $20/月=年$240 | 予算内(確定) |
| ZAP・Nuclei・Semgrepの自前週次検査 | $0/年 | 予算内(確定) |
| 追試できる無料検査8種 | $0/年 | 予算内(確定) |
| SECURITY ACTION・security.txt・SBOM | $0/年 | 予算内(確定) |
| 確定年間費用の合計 | 約$240/年 | 予算内(確定) |
予算外(年額が10万円を超える)
| 項目 | 費用 | 予算内か |
|---|---|---|
| Intruder Cloud/Pro | 年$3,588〜 | 予算外(確定) |
| Detectify Standard〜 | 年€2,500〜 | 予算外(確定) |
| Astra Security DASTスキャナLite | 年$699 | 為替次第(10万円前後) |
見積が必要で判定できないもの
| 項目 | 費用 | 予算内か |
|---|---|---|
| PTaaS・バグバウンティ | 取得できず | 判定不能(見積次第) |
| 人手の第三者診断(年1回) | 取得できず | 判定不能。収まる保証なし |
| お助け隊サービス(監視系) | 初期0〜50万円・月額500円台〜 | 判定不能(幅が大きい) |
| Probely・Acunetix | 未確認(403) | 判定不能 |
予算10万円で確定できるのは何か
予算10万円で確定できるのは、OSSと自前検査を中心にした構成である。年間で確定しているのはVercel Proの$240のみで、自動DAST SaaSの大半・PTaaS・人手診断は予算外か見積次第になる。Astra Securityの年$699は為替次第で10万円前後に収まる可能性があるが断定はしない。10万円の枠は、SECURITY ACTION経由の助成金入口か、お助け隊サービスの一部に使うのが現実的な選択になる。
確定・全機能の土台
使う場合のみ・プロジェクト単位
使う場合のみ・30日間解約不可
使う場合のみ
使う場合のみ
棒にできるのは公開価格があるものだけ。自動DAST SaaS・PTaaS・人手の第三者診断は見積のため含まれない(取得できず)
この記事で埋まらないもの3つ
自社の運用だけでは埋まらない限界
人手による第三者診断
自動検査・自己検証では代替できない
Enterprise限定機能
SCIM・Passport・Secure Compute等は契約が要る
1人組織での職務の分離
検査実施者と承認者を分けられない構造的限界
まとめ
$20は攻撃を止め、報告書を作るための土台であって、それ自体が答えではない。第三者性は外の会社から買い、客観性は自分で作り、AIはその間の作業をする。1万人に配る答えは、質問票を1万回書くことではなく、トラストセンター1枚を正本にすることである。
→ この記事の結論は一つ。AIは「第三者」にはなれない。作れるのは「客観性」——誰が何度やっても同じ結果に到達できることだけである。だから設計は、第三者性は外の会社から買い、客観性は自分で作り、AIは両者の間の作業をする、という形に収まる。
🔧 技術者が「ここを見れば分かる」と納得する30項目
このセクションの3点
① まずやるのは公開前の必須10だけ。残り20項目は折りたたみへ
② 確認は公開URLだけで足りる項目が多く、費用は0円
③ HSTS preloadは申請が要り、解除には数ヶ月かかる
ここに並べる項目は条件を3つ満たす。①あなた自身で確認できる ②顧客側の技術者も同じ方法で追試できる ③費用が0円かごく安い。第6章の8種は外部サービスへURLを渡す検査、第7章は自前で回す自動診断だった。この章はその中間にある——技術者が画面を数秒見た瞬間に「ここは押さえてある」と当たりを付ける、具体的な確認先そのものを並べる。優先度の付け方は章末にまとめる。
技術者が最初に見る場所 ⇄ 実は見られていない場所
技術者が最初に見る場所
外形が一目で分かる
- ・securityheaders.comのA+〜F判定
- ・TLS証明書の有効期限
- ・HSTSヘッダーの有無
- ・目立つ脆弱性スキャナの一発判定
実は見られていない場所
黒箱のままか、中を見るしかない
- ・権限の境界(テナント分離・IDOR)
- ・エラーメッセージが内部情報を返さないか
- ・ソースマップ・管理用URLの公開状況
- ・DMARCがp=noneのまま放置されていないか
30
この章のチェック項目数
21
公開URLだけで確認できる項目
4
認可済みの黒箱試験が要る項目
5
コードや設定を見る必要がある項目
0円
確認にかかる費用(全項目共通)
まず10個だけやればいい。残り20個は折りたたみに入れた。公開前の必須10は章末にある。
通信とヘッダの残り 12項目 開く ▾
通信(6項目・すべて公開URLだけで確認できる)
TLS 1.3が有効か
SSL Labsのプロトコル欄で確認
TLS 1.0・1.1が無効か
SSL Labsの一覧に出ないか確認
HSTSヘッダーが付いているか
curl -sI で有無を確認
HSTS preloadに登録されているか
hstspreload.orgで検索
証明書のチェーンと有効期限
SSL Labsで残り日数を確認
OCSPステープリングが有効か
SSL Labsのハンドシェイク欄で確認
HSTS preloadは要件審査と申請が要る。解除には時間がかかる
・hstspreload.org運営元は、全サイトへの登録を積極的には推奨していない
・要件を満たして申請し、登録と各ブラウザへの反映を確認する必要がある
・条件はincludeSubDomains・preload指定と全サブドメインの常時HTTPS化
・主要ブラウザのプリロードリストからの削除には数ヶ月かかる場合がある
・この条件を満たす前に登録すると、後から特定のサブドメインだけHTTPに戻せなくなる
HTTPヘッダ(6項目・すべて公開URLだけで確認できる)
CSPがunsafe-inline頼りでないか
CSP Evaluatorで判定
X-Content-Type-Optionsの有無
curl -sI で nosniff を確認
クリックジャッキング対策の有無
X-Frame-Optionsを確認
Referrer-Policyの設定有無
curl -sI で確認
Permissions-Policyの設定有無
curl -sI で確認
実装を晒すヘッダーが出ていないか
Server・X-Powered-Byを確認
確認コマンドまとめ(コピーして使う) curl 1行 開く ▾
https://例.jp を確認したいドメインに置き換える。主要ヘッダーの有無だけを機械的に見る一次チェック。詳しい採点はsecurityheaders.comかHTTP Observatoryに渡す
curl -sI https://例.jp | grep -i "strict-transport\|content-security\|x-content-type"
残りはDNSとメール、認証、境界と供給。詳細は下の折りたたみに入れた。
DNSとメール 5項目 開く ▾
DNSとメール(5項目・すべて公開URLだけで確認できる)
CAAレコードで発行者を制限しているか
dig CAA で確認
DNSSECが有効か
internet.nlで確認
SPFレコードがあるか
dig TXT でv=spf1を確認
DKIMが設定されているか
送信メールヘッダーで確認
DMARCがp=noneで止まっていないか
dig TXT _dmarc で確認
認証・境界・供給の残り 13項目 開く ▾
認証とセッション(6項目・黒箱試験2、コード確認2、公開URL2)
Cookieの属性(HttpOnly等)
ログイン後、開発者ツールで確認
JWTの署名アルゴリズムを固定しているか
サーバーコードでalg検証を確認
セッションの有効期限と再発行
Cookie有効期限と再発行を確認
パスワードのハッシュ方式とコスト
bcrypt/argon2のコストを確認
ログイン失敗のレート制限
認可を得た上で連続ログインし確認
管理画面が既定拒否か
未認証で管理URLへアクセスし確認
アプリの境界(4項目・黒箱試験1、コード確認1、公開URL2)
テナント分離がサーバー側で決まっているか
tenant_idをクライアント入力で決めていないか確認
IDOR(直接オブジェクト参照)のテスト
認可を得た上で他ユーザーIDの閲覧可否を試す
エラーがスタックトレースを返さないか
存在しないパスにアクセスし確認
ソースマップと管理用URLが非公開か
.map有無と/adminの応答を確認
供給と証跡(3項目・コード確認2、公開URL1)
SBOMを出せるか
trivy fsやosv-scannerで確認
インストールスクリプトを止めているか
ignore-scripts=trueと許可レビューを使い分け
security.txtを置いているか
/.well-known/security.txtで確認
ignore-scriptsは単独の安全策ではない。信頼できる境界の中ではnpm ci --ignore-scriptsで全面停止する場合と、必要なスクリプトを許可してレビューする場合を分ける。全面停止はビルドやネイティブ依存を壊すことがある。これ単独では供給網の安全性は担保できない。lockfileの固定、SBOM、署名・来歴(第9・11章)、脆弱性監視と組み合わせて初めて機能する。
優先度 — 全部同時にやらなくていい
公開前の必須10 — 最優先で潰す項目
TLS 1.3の有効化
通信
TLS 1.0/1.1の無効化
通信
HSTSヘッダー
通信
証明書の有効期限
通信
CSPのunsafe-inline排除
ヘッダ
クリックジャッキング対策
ヘッダ
実装を晒すヘッダー排除
ヘッダ
SPFレコード
DNS
DMARCのpタグ確認
DNS
管理画面の既定拒否
境界
四半期に見る
専門家へ渡す
この30項目は「守れている証明」ではない。ここまでの確認は、外形と設定が期待どおりかを機械的・視覚的に見るものにすぎない。認可の穴(他社のデータが見えるか)や業務ロジックの欠陥(決済回避・権限昇格の手順)は、この30項目のどれを満たしても見つからない。そこに届くのは第6・7章の再現可能な検査と、第8章の外部PTaaSを組み合わせたときだけである。
→ 次の第19章では、10万円で買える「名前」——ISMS・Pマーク・AWSと同じ効き方をするものを扱う。
🏷️ 10万円で買える「名前」— ISMS・Pマーク・AWSと同じ効き方をするもの
このセクションの3点
① 一番効くのは新規購入ではなく、既にあるISMS・Pマークの見せ方を直すこと(費用0円)
② 0円で増やせる名前が最も多く、10万円で買えるのはSECURITY ACTION経由の助成金入口だけ
③ IPAとVercelは公式に禁止表現を明示している。宣言を認定と言わない、借りたインフラの認証を自社の認証と言わない
あなたの言葉に戻る。「ISMS・Pマーク、また AWS はみんな聞くだけで安心している。そういうセキュリティが欲しい。20ドル、その他10万円くらいまでで」。ここまでの16章は自分で確認する項目と、外部に発注する検査を扱った。この最終章はそれとは別の軸——技術の中身より先に、名前だけで顧客が安心する記号を予算別に並べる。結論を先に言うと、一番効くのは新しく買うことではない。あなたが既に持っているISMSとPマークの見せ方を直すことである。
結論——新規取得より先に、既存の表示を直す
理由は単純である。表示の是正は費用が0円で、しかも登録範囲を超えた書き方は、指摘されたときが一番痛い。ISMS認証は「登録簿記載の適用範囲」を超えて全社が認証されているかのように書けば規定違反になる。Pマークはロゴの改変や付与番号の誤記が「無断使用」として法的措置の対象になり得るとJIPDECが明記している。新しい記号を10万円で買う前に、今ある2つの記号が正しく使われているかを先に点検する。
新規に買う ⇄ 今あるものを直す
新規に買う
10万円の予算を使う発想
- ・ISMAPは費用目安が公的ポータルに非公開・予算に収まる保証がない
- ・SOC 2の自社取得は個人運用の予算規模では非現実的
- ・新しい認証マークを増やしても登録済みの2つの表示ミスは消えない
今あるものを直す
費用0円で即着手できる
- ・ISMSの適用範囲表示が登録簿の範囲を超えていないか点検
- ・Pマーク付与番号の書式とロゴのデザイン改変の有無を点検
- ・「Vercel/Neon上で動いている」と「自社が認証取得済み」を混同していないか点検
→ まず結論を確認したら、次は予算別の一覧で「0円で増やせるもの」から手を付ける。
ここから予算を3段に分ける。0円で増やせる名前が最も数が多く、10万円以内で買える名前はSECURITY ACTIONの二つ星を要件にした助成金の入口くらいしかない。10万円では届かない名前もある。届かないものに手を伸ばさないことも、この章の答えのうちである。
0円
SECURITY ACTION二つ星(所要15分)
0円
SSL Labs A+・securityheaders A+
10万円〜
東京都助成金の申請下限額(都内中小企業限定)
取得できず
ISMAP-LIUの費用目安(公的ポータル非公開)
0円で増やせる名前
SECURITY ACTION二つ星(IPA)
自己宣言・所要15分・自社診断と方針公開が条件
SSL Labs A+評価
80点以上・警告なし・TLS1.3・HSTS6ヶ月以上で到達
securityheaders.com A+評価
ヘッダー全設定で到達。API終了・手動スキャンは継続
MDN HTTP Observatoryの高評価
100点開始の減点方式・最高135点
DNSSEC・CAA・SPF・DKIM・DMARC
DNSレコード追加のみ・多くの事業者が無料対応
security.txt(RFC 9116)の設置
Contact・Expiresの2項目のみ必須
SBOM(CycloneDX/SPDX)の生成
Syft等の無料ツールでCIに組み込み
ISMS・Pマークの正しい表示への修正
新規取得ではなく既存表示の是正
Neonを利用している事実の記載
provider/regionは実プロジェクトで確認してから書く
10万円以内で買える名前
東京都サイバーセキュリティ対策促進助成金の活用
都内中小企業限定・申請下限10万円・二つ星が要件
★導入していると説明できる外部サービス
サイバーセキュリティお助け隊サービス
認証・バッジでない。費用は個別確認(初期0〜50万円)
10万円では届かない名前
・ISMAP/ISMAP-LIUは公的ポータルに費用目安の記載が確認できない。「取得できず」が正確な答え
・コンサル会社のブログが挙げる金額(数千万円規模の推定値)は一次情報でないため採用しない
・個人運用のBtoB SaaSが自社でSOC 2を新規取得することも、この予算規模では非現実的
・ISMAP・自社SOC 2はいずれも政府調達や大企業監査が前提であり、今回の顧客層には過剰投資になりやすい
→ 名前を並べただけでは使えない。次は「どう言えるか/どう言えないか」の一字一句を確認する。
ここがこの章で一番重要な節になる。制度の運営元が公式に「言ってはいけない言い方」を定めている。名前を持っているだけでは足りない。表現を一字一句間違えると、記号そのものが逆にリスクになる。
SECURITY ACTION — 言える/言えない
言える
IPAが認めている表現
- ・「情報セキュリティ対策を組織として取り組むことをIPAの制度で宣言しています」
- ・二つ星なら「基本方針を公開し自社診断を実施した上で宣言しています」
言えない
IPAが明確に禁止
- ・「認定を受けました」
- ・「取得しました」
- ・第三者審査のない自己宣言に、認定・取得という語は使えない
Vercel公式KBの原文——「Hosting in an attested environment doesn't transfer that attestation to your product.」(認証を受けた環境でホストしていても、その認証があなたの製品に移るわけではない)。言えるのは「SOC 2 Type II・ISO 27001:2022認証を取得しているVercel社のインフラ上でホスティングしています」まで。「当社はSOC 2準拠です」とは言えない。Neonについても同じ論理が働く。ただしNeonは複数のクラウド・複数リージョンを提供しており、このプロジェクトが実際にどのprovider・regionを使っているかは、この記事の時点では未確認である。確認せずに「AWS上で稼働」と書いてはいけない。確認後に書く場合の正しい形は、例えば「DBはNeonのaws-ap-southeast-1(シンガポール)上」のように限定した事実だけを書く(これは例であり、実際の設定は管理画面で確認すること)。
ISMS
登録簿の範囲を超えない
Pマーク
書式とロゴを変えない
Vercel
主語をすり替えない
Neon(DB)
provider/regionは未確認
→ 正しい言い方が決まったら、次はそれを1ページにまとめて置く場所を作る。
正しい表現が決まったら、次は置き場所である。第9章で作ったトラストセンターの公開層に、この章で確認した名前を1ページにまとめて置く。バラバラに問い合わせのたびに答えるのではなく、あなたが1人で運用していても顧客がいつでも同じ答えに辿り着けるようにする。
トラストセンター公開層に置く項目
ISMSの登録範囲・認証番号・認証機関名
登録簿記載のとおりの文言で掲載
Pマークの付与番号
AAnnnnnn(mm)形式・ロゴは未改変のものを使用
Vercelの認証状況とホスティングの限定説明
「基盤がSOC2/ISO27001」と明記し主語を混同しない
Neon利用の事実(要確認)
管理画面でprovider/regionを確認してから記載
SECURITY ACTIONの宣言状況
「宣言」の語を使う。「認定」「取得」は使わない
技術バッジを自動更新に組み込む前に確認する4点
・SSL Labs A+は80点以上・警告なし・TLS1.3・有効なHSTS(6ヶ月以上)が条件。TLS1.3非対応はA-が上限
・HSTS preloadはhstspreload.org自身が「非推奨」としている。登録の解除には6〜12週間かかる
・securityheaders.comのAPIは2026年4月にSnykが停止した。手動スキャン自体は継続提供されている
・これらを確認しないまま自動更新に組み込むと、解除できない設定や動かないAPI呼び出しが残る
この章の締め
名前は、中身の代わりにはならない。ただし中身を説明する時間を短くする。1万人の顧客の一人ひとりに、あなたが1人で技術的な裏付けを説明する時間はない。ISMS・Pマーク・SECURITY ACTION・SSL Labs A+といった名前は、その説明の時間を短くするための道具である。ただし短くできるのは説明の時間であって、説明の中身そのものではない。名前が正しく使われているかを、この章のチェックリストで定期的に見直すことが、10万円の予算より先にやるべき作業になる。
→ ここまで17章。$20で買える防御、自分で追試できる検査、外注する第三者性、そして名前で通る記号までを並べた。第三者性は外の会社から買い、客観性は自分で作り、AIは両者の間の作業をする——この記事の背骨は、ここで一区切りになる。
📝 改訂ノート — Codexのクロスレビューで見つかった私の誤り
このセクションの3点
① 公開後に別系統のAI(Codex)へ全文を読ませ、28件の指摘を受けて全部直した
② 一番痛いのは回答漏れ。予算10万円に対して、金額を並べただけで判定していなかった
③ 次に痛いのは、載せたYAMLが本文の約束を果たしていなかったこと
この記事は公開したあと、別系統のAIである Codex(GPT-5.6)に全文を読ませている。指摘だけ書け、同意できる点は書かなくてよいと指示した結果、28件が返ってきた。全部反映した。
直した内容より、どういう種類の間違いが混ざるかのほうが読者には役に立つと思うので、そのまま載せる。
28件
Codexの指摘(全部反映)
6件
そのうち重大
1件
依頼への回答漏れ
0件
私が自分で気づけたもの
重大6件
① 予算の判定をしていなかった
回答漏れ・第15章
② YAMLが本文の約束を守っていない
第7章
③ 起動しない仕組みで不起動を検知しようとした
第7章
④ ハッシュの一覧が改ざんを防ぐと書いた
第11章
⑤ 確認せずにAWS上だと書いた
第17章
⑥「$20で全部済む」と読める書き方
第1章・第3章・第4章
中・軽微のうち、読者に影響が大きかったもの
中・軽微の指摘11件(開いた人だけ) 指摘と、直した内容 開く ▾
SSL Labs の結果を報告書に貼る運用
利用規約上、自社インフラのテスト目的に限られる。顧客が自分で再実行する導線に変えた
CSP Evaluator を「URLを入れるだけ」に分類
実際はCSP文字列を貼る検査。URL型7種+文字列型1種に分けた
「同じ結果になる」という書き方
外部ツールの規則は時点で変わる。「同じ基準で再評価できる」に直した
自動DASTを独立した第三者診断と同列に扱った
外部事業者の自動実行証跡/独立診断/完全性と時刻の証跡、の3分類に分けた
「検出事項なし」という報告書の表現
対象範囲と実行時点、重大度を必ず添える形に直した
「承認した責任者の名前を記す」
運用者は1人。実施者と承認者を併記し、同一なら同一と書き、独立レビュー未実施と明記する
個情法25条を「報告書要求の法的根拠」とした
25条は委託がある場合の監督義務で、報告書の様式を直接要求しない
「1万人」を「1万社」に読み替えていた
顧客組織数と利用者数を分けた。Firewall 40ルールの話は顧客別IP設計を採った場合の条件付き
30項目の内訳の数が章内で矛盾
公開URLだけで確認21/黒箱試験4/コードや設定5、と数え直した
お助け隊サービスを「買える名前」に分類
取得する認証やバッジではない。「導入していると説明できる外部サービス」に移した
GitHubを無条件の前提にしていた
「Vercel以外は使わない」を文字どおり適用する場合の経路を分けた
前作と同じ型が、また出た
間違え方は2種類しかない(前作の第16章と同じ結論)
型A:自分の記述どうしの食い違い
30項目の数、章題の「6つ」と本文の「4系統」ほか
- ・章ごとに書くと、前の章で自分が何と書いたかを忘れる
- ・機械検証は構造しか見ない。数が矛盾していてもPASSが出る
- ・前作で同じ指摘を受けて対策したのに、また出た
型B:確認していないことの断定
AWS上、manifestで改ざん防止、SSL Labsの転載
- ・載せたYAMLを実際に動かしていない。だから本文との不一致に気づかない
- ・利用規約を読まずに「結果を貼ればいい」と書いた
- ・正本に「未確認」と書いてあっても、本文を書く段で断定に戻る
📎 次に持ち越すこと
1. 予算を言われたら、必ず判定まで書く。金額を並べるのは調査であって、回答ではない。「予算内・予算外・見積が必要」の3群に分けるところまでが答えである。
2. 載せるYAMLとコードは、本文の約束と1行ずつ突き合わせる。「SARIFで束ねる」と書いたなら、そのYAMLが本当に束ねているかを読み返す。
3. 外部サービスの結果を人に見せる前に、利用規約を読む。技術的に取得できることと、配ってよいことは別である。
4. 28件のうち、私が自分で気づけたものは1件も無かった。別系統のAIに読ませる工程は、この記事の品質の一部である。
最初の章の表に戻れば、$20で買えるものと、誰に頼むかが1枚で分かる
🎒 高校生レビュー — 18章すべてに文字の壁があった
このセクションの3点
① 別系統のAI(Codex)に「文字が多いと読むのをやめる高校生」として読ませ、離脱ポイントを申告させた
② 判定基準は理解できるかではなく最後まで読まれるかで、18章のうち離脱ゼロの章は1つも無かった
③ 専門用語29語の言い換えと最悪5箇所の直し方を残す。この記事はまだ長いという限界も、隠さず書く
この記事に高校生レビューが入っていないと、依頼者から指摘を受けた。入っていなかった。用語集もなかった。そこで別系統のAIである Codex に、次の人物設定で18章を読ませた。「高校生。プログラミングは授業で少し触った程度。そして文字が多すぎると内容を理解できず、読むのをやめてしまう」。
判定してもらったのは「理解できるか」ではない。最後まで読まれるかである。正しく書けていても、文字の壁があればその時点で離脱とみなした。
22箇所
離脱ポイントの数
0章
離脱しなかった章
6秒
最短で離脱した場所(第1章の冒頭)
50秒
最長で離脱した場所(30項目の章)
離脱ゼロの章は、1つも無かった
・離脱なしの章:なし。18章のすべてに、1画面を文字で埋める箇所、または同じ形式の連続がある
・一番痛いのは場所。第1章の冒頭、summary3の3行で早くも離脱が起きている。6秒だった
・第1章で離脱した読者は、以後どの章にも到達しない。直す優先順位は本文の量ではなく、記事の入り口が最上位になる
離脱の理由は2種類ある — 難しさと、量は別の問題
「難しくて分からない」と「量で離脱する」は、直し方が違う
難しくて分からない
短いカード1枚なら読み続けられる
- ・例:DAST、RLS、attestation、ASV
- ・言い換えがあれば通過できる離脱
- ・直し方は用語の言い換え1つで足りる
量で離脱する
言葉をやさしくしても直らない
- ・例:第18章の30項目、第1章の複数の一覧、第13章のJSON+カード+表+6社名簿
- ・言葉を全部やさしくしても、表示量が同じなら離脱する
- ・直し方は表示量そのものを削るしかない
離脱ポイントの上位5箇所(22箇所のうち最悪だった順)
「1画面あたりの文字量」で最悪だった5箇所
第18章 30項目チェックリストの連続
50秒で離脱。40個の宿題に見える縦長の壁
第19章 0円名前チェックリスト
35秒で離脱。分類が何度も変わり優先順位が消える
第1章 結論の一覧が3回連続
6〜45秒で離脱。1章で全部覚える記事に見える
第13章 開いたままのJSON
8秒で離脱。本文に入る前にコードの壁がある
第17章 費用の合計11行表
35秒で離脱。数字の羅列で画面が埋まる
専門用語の言い換え
分からない言葉が出てきたら開く — 29語の言い換え たとえ入り 開く ▾
| 言葉 | 高校生向けの言い換え(たとえ入り) |
|---|---|
| 第三者性 | 自分の味方ではない人・会社が確かめたこと。担任ではなく別の学校の先生に採点してもらう感じ |
| 客観性 | 誰がやっても同じ手順なら同じように確かめられること。答え付きの実験手順のようなもの |
| 外観上の独立性 | 見た目にも利害関係がないこと。自分の店を自分の家族が「公平に採点した」とは言えない、という線引き |
| DAST | 動いているWebサイトを外から試す検査。完成した家の窓やドアが開きっぱなしでないか調べる |
| SAST | プログラムの設計図であるコードを読む検査。家を建てる前の図面に危ない書き方がないか探す |
| PTaaS | 必要な時に専門家が実際に攻撃を試すサービス。定期的に呼べる防犯のプロ |
| バグバウンティ | バグを見つけた外部の人に報酬を出す仕組み。懸賞付きの「壊れている所を教えて」募集 |
| トラストセンター | 安全対策の説明を集めた公開ページ。学校の案内・規則・緊急連絡先を一か所に置く掲示板 |
| DPA | データを預ける時の約束書。友達に写真を預ける時に「勝手に見せないで」と決める契約 |
| サブプロセッサ | サービスを動かすためにさらに仕事を頼む会社。配達店が別の配送会社に荷物を渡すような再委託先 |
| SBOM | 使っている部品の一覧。料理に入れた材料を全部書くアレルギー表示のようなもの |
| attestation | 作られ方を証明する記録。作品が「この材料、この手順で作られた」と残す製造証明 |
| タイムスタンプ局 | その時刻に文書が存在したと証明する第三者。作品をその日に預かったと日付入りで証明する窓口 |
| SARIF | 検査結果の共通ファイル形式。違うメーカーの採点結果を同じ記入用紙にそろえるルール |
| ASV | カード業界が認めた外部スキャン会社。公式大会の審判として登録された検査員 |
| テナント分離 | 利用者・会社ごとのデータを絶対に混ぜない仕組み。アパートの各部屋に他人が入れないようにする鍵 |
| IDOR | 番号を変えただけで他人のデータが見えてしまう欠陥。出席番号を1つ変えたら別の人の成績表が開く状態 |
| RLS | 表の1行ごとに見られる人を決めるデータベースの鍵。名簿の各行に「この人だけ読める」と付ける仕組み |
| security.txt | 安全上の問題の連絡先を書いた小さな案内ファイル。落とし物の連絡先札 |
| HSTS preload | 最初から「このサイトは必ず暗号化通信」とブラウザに覚えさせる名簿。入れると後から外すのに時間がかかる |
| CAA | 証明書を出せる会社を指定するDNSの設定。学校の卒業証書を発行できる印刷所を限定するようなもの |
| DMARC | なりすましメールへの対応ルール。学校名を使った偽メールを見つけたらどう扱うかの指示書 |
| WAF | 怪しいアクセスを入口で止める見張り番。校門で不審な人を止める警備員 |
| デプロイ | 作ったサイトをみんなが使える場所に出すこと。完成した文化祭のページを公開すること |
| 監査証跡 | 「いつ、誰が、何をしたか」を後から確かめる記録。提出物を誰がいつ直したかの履歴 |
| 認可 | ログインした後に「何をしてよいか」を決めること。校舎には入れても職員室には入れない、という許可 |
| レート制限 | 短時間に何回まで操作できるかの上限。自動ドアのボタンを連打しても一定回数しか受け付けない仕組み |
| TLS | 通信を読まれない形にする技術。手紙を途中で読めない鍵付き封筒に入れること |
| ハッシュ | ファイルの内容から作る短い照合番号。提出したレポートが一文字でも変わると番号が変わる指紋 |
📎 この記事の限界
量を減らす修正はしたが、この記事は依然として長い。セキュリティの判断材料を1本にまとめる目的と、読み切れる長さは、部分的に両立しない。全部読ませることは、もう目指していない。
読者への提案。第1章(答え)と第2章(理想の10項目)と第3章(無料と有料の違い)の3章だけ読めば、判断はできる。残りは根拠と手順であり、必要になったときに開けばよい。
ここまでが全21章。読むのは最初の章・第2章・第3章の3つだけでよい。残りは、判断のあとに必要な分だけ開く