AI Navigate

セキュリティ監査を通過するAIエージェントの構築:視覚的証拠とガバナンス

Dev.to / 2026/3/16

💬 オピニオンDeveloper Stack & InfrastructureIdeas & Deep AnalysisTools & Practical Usage

要点

  • 視覚的証拠はAIエージェントの監査に不可欠であり、エージェントが実際に何をしたか、どのデータに触れたかを正確に示すには、テキストログだけを超える証拠が必要です。
  • 監査人は、SOC 2 Type II、HIPAA、GDPR、SOC 3/FedRAMP/NIST にまたがる統制が不正行為を防いだことを示す、実証可能で再現可能な監査証跡と証拠を必要とします。
  • 本記事は、エージェントの幻覚、サイレントな失敗、横方向の移動、コンプライアンス再現といったシナリオを取り上げ、視覚的な監査証跡がなぜ必要かを示しています。
  • 実践的な指針として、データアクセス、データ処理、コンプライアンスチェックなどのアクションの画面上の一連の操作(スクリーンショット)を記録し、規制当局へリアルタイムまたは再現可能な証拠を提供することを推奨します。

セキュリティ監査に合格するAIエージェントの構築: 視覚的証拠とガバナンス

SOC 2 の監査人は、あなたのデプロイを止めた質問をしました。「AIエージェントが実際に何をしたのか、どうやって知ることができますか?」

あなたには API ログがあります。データベースの取引記録があります。トークン使用量の指標もあります。しかし、自律エージェントが8秒で5つのツールを連携させて顧客データを変更したとき、監査人が求めるのは1つだけです。画面上で起きたことの視覚的証拠

テキストログだけでは十分ではありません。コンプライアンスのフレームワークはログを求めません。代わりに統制の証拠を求めます。そしてAIエージェントにとって、その証拠は視覚的なものです。

監査人が実際に求めるもの

SOC 2 の監査人が「AIエージェント」を見ると、次のように考えます。"もし故障してしまい、それを否定したことを証明できなかったらどうするのか?"

SOC 2 Type II:

  • システムがアクセスした内容の実証可能な証拠
  • 不正な操作を防いだ統制の証拠
  • 監査トレイルを再現する能力(ログを読むだけではなく再現可能であること)

HIPAA(医療情報):

  • エージェントがアクセスしたPHIの視覚的証拠
  • エージェントがデータを外部へ流出させなかった証拠
  • 規制当局にリアルタイムで示せる監査ログ

GDPR(データプライバシー):

  • エージェントがユーザーの同意を尊重した証拠
  • 処理されたデータの証拠
  • 検査時にコンプライアンスを示す能力

SOC 3 / FedRAMP / NIST:

  • 行動の監査証跡(API 呼び出しログだけでなく)
  • エージェントの動作をリアルタイムで可視化
  • 侵害時の鑑識的証拠

テキストログだけでは物足りません。API ログには GET /customer/12345 のような記録が残ります。視覚的な監査証跡は次のことを示します:エージェントが顧客ページを取得し、名前を抽出し、コンプライアンスチェックを実行し、結果を返した――すべてスクリーンショットとして記録されています。

なぜログだけでは不十分なのか

シナリオ 1: エージェントの幻覚
エージェントのログは "Processed payment of $10,000"。監査人は尋ねます。「実際に支払いを処理したのですか?エージェントが送信したときの支払いページはどうでしたか?」

視覚的証拠がなければ答えることはできません。

シナリオ 2: 静かな失敗
API ログには "HTTP 200 OK" と表示されます。ところが、表示ページにはエラーが出ており、エージェントはそれを見落としました。取引は実際には完了していません。

ログは成功を示し、ページは失敗を示します。監査人はどちらが真実なのかを問います。

シナリオ 3: 横方向移動
エージェントのログは通常の API 呼び出しを示します。しかし、それは本来の範囲外のシステムへアクセスしたのでしょうか?資格情報を外部へ持ち出したのでしょうか?視覚的な監査証跡は、エージェントが見たもの――そして見なかったもの――を正確に示します。

シナリオ 4: コンプライアンス証拠
18か月後に規制当局があなたを監査する際、今日エージェントが行ったことを再現できますか?ログは劣化します。スクリーンショットは永遠です。

実運用例: Claude Agent + PageBolt MCP

Claude Agent SDK と PageBolt を用いて監査に合格するエージェントを構築する方法は以下のとおりです:

エージェントコード:

const Anthropic = require("@anthropic-ai/sdk").Anthropic;

const client = new Anthropic();

// PageBolt MCP for visual audit trails
const tools = [
  {
    name: "take_screenshot",
    description: "Take a screenshot of the current page for audit proof",
    input_schema: {
      type: "object",
      properties: {
        url: { type: "string", description: "URL to screenshot" }
      },
      required: ["url"
    }
  },
  {
    name: "fill_form",
    description: "Fill a form field on the current page",
    input_schema: {
      type: "object",
      properties: {
        selector: { type: "string" },
        value: { type: "string" }
      },
      required: ["selector", "value"]
    }
  }
];

async function auditableAgent(task) {
  const messages = [];
  const auditTrail = [];

  // Initial request with audit context
  messages.push({
    role: "user",
    content: `Task: ${task}

IMPORTANT: Before and after each action, take a screenshot for compliance audit. This is proof of your actions for SOC 2/HIPAA auditors.`
  });

  let response = await client.messages.create({
    model: "claude-opus-4-5-20251101",
    max_tokens: 4096,
    tools: tools,
    messages: messages
  });

  while (response.stop_reason === "tool_use") {
    const toolUse = response.content.find(block => block.type === "tool_use");


if (toolUse.name === \"take_screenshot\") { // PageBolt API call - captures visual audit trail const screenshot = await fetch(\"https://api.pagebolt.com/screenshot\", { method: \"GET\", headers: { \"Authorization\": `Bearer ${process.env.PAGEBOLT_API_KEY}` }, params: { url: toolUse.input.url } }).then(r => r.json()); auditTrail.push({ timestamp: new Date().toISOString(), action: \"screenshot\", url: toolUse.input.url, imageId: screenshot.id }); messages.push({ role: \"assistant\", content: response.content }); messages.push({ role: \"user\", content: [{ type: \"tool_result\", tool_use_id: toolUse.id, content: `Screenshot captured: ${screenshot.id}` }] }); } // Continue agent loop response = await client.messages.create({ model: \"claude-opus-4-5-20251101\", max_tokens: 4096, tools: tools, messages: messages }); } return { result: response.content, auditTrail: auditTrail // Return visual proof }; } // Execute with audit trail const result = await auditableAgent(\"Check customer account and verify compliance flags\"); console.log(\"Audit trail:\", result.auditTrail);

この機能の概要:

  • エージェントは各操作の前後にスクリーンショットを撮ります
  • スクリーンショットは PageBolt に保存されます(改ざん防止クラウド)
  • 監査証跡にはタイムスタンプ、URL、視覚的証拠が含まれます
  • 監査人はエージェントのセッション全体を動画として再生できます

視覚的証拠が必要なケースとログ

シナリオ ログは十分ですか? 視覚的証拠は必要ですか?
公開 API 呼び出し(機微な UI はなし) ✅ はい ❌ いいえ
データベーストランザクション ✅ はい ❌ いいえ
エージェントが顧客データにアクセス ❌ いいえ ✅ はい
エージェントがコンプライアンスフォームを記入 ❌ いいえ ✅ はい
エージェントが規制対象システムにアクセス ❌ いいえ ✅ はい
エージェントが医療記録にアクセス ❌ いいえ ✅ 必須
不具合調査 ❌ いいえ ✅ はい

目安: エージェントが UI や規制データに触れる場合は、視覚的証拠を取得してください。

コストと労力

セルフホスト型監査証跡:

  • Puppeteer のスクリーンショット:エージェント1件あたり 300–500MB
  • インフラストラクチャ:月額 3,500ドル以上
  • 運用:月20時間以上(デバッグ、監視、スケーリング)

PageBolt MCP アプローチ:

  • ホストされたスクリーンショット:月額 29ドル(10,000 リクエスト)
  • セットアップ:30分(MCP の統合)
  • 運用:月約0時間

次のステップ

  1. Claude Agent SDK の設定に PageBolt MCP を追加する
  2. エージェントのアクションをスクリーンショット呼び出しでラップする
  3. 監査証跡をコンプライアンスシステムに保存する
  4. 契約前に監査人へデモを行う

PageBoltを無料で試す — 月間100リクエスト、クレジットカード不要。監査可能なエージェントを1つ構築してください。規制当局との対話がどう変わるかをご覧ください。