
# LLM とリアルタイムリスクコンテキストによる動的ポリシー合成

**Abstract** – ベンダー向けセキュリティアンケートは、SaaS 企業にとって有名なボトルネックです。従来の静的リポジトリはポリシーを時間的に固定し、新たなリスクシグナルが現れるたびにチームが手動で回答を修正しなければなりません。本稿では、*動的ポリシー合成*（DPS）という概念を紹介します。これは大規模言語モデル（LLM）、継続的リスクテレメトリー、イベント駆動型オーケストレーション層を融合し、要求に応じて最新かつコンテキスト対応の回答を生成する青写真です。本文を読み進めることで、主要コンポーネント、データフロー、そして Procurize プラットフォーム上で DPS を実装するための実践的な手順が理解できるようになります。

---

## 1. なぜ静的ポリシーライブラリは最新監査に失敗するのか

1. **変更の遅延** – サードパーティコンポーネントで新たに脆弱性が見つかると、6 か月前に承認された条項が無効になる可能性があります。静的ライブラリでは手動の編集サイクルが必要で、数日かかることがあります。  
2. **コンテキストの不一致** – 同じコントロールでも、現在の脅威情勢、契約範囲、地域の規制によって解釈が変わります。  
3. **スケーラビリティの圧力** – 急成長中の SaaS 企業は週に数十件のアンケートを受け取りますが、各回答は最新のリスク姿勢と一致している必要があり、手作業では保証できません。

これらの課題は、**リアルタイムでリスクインサイトをプル／プッシュし、コンプライアンス対応のポリシー言語に自動変換できる** *適応型* システムの必要性を生み出します。

---

## 2. 動的ポリシー合成のコアピラー

| ピラー | 機能 | 典型的な技術スタック |
|--------|------|----------------------|
| **リスクテレメトリー取得** | 脆弱性フィード、脅威インテリジェンス、内部セキュリティ指標を統合データレイクにストリーミング | Kafka, AWS Kinesis, ElasticSearch |
| **コンテキストエンジン** | テレメトリーを正規化し、資産インベントリと結び付け、各コントロール領域の *リスクスコア* を算出 | Python, Pandas, Neo4j Knowledge Graph |
| **LLM プロンプトジェネレータ** | 最新リスクスコア、規制参照、ポリシーテンプレートを組み込んだドメイン固有プロンプトを作成 | OpenAI GPT‑4, Anthropic Claude, LangChain |
| **オーケストレーション層** | イベントトリガーを調整し、LLM を実行し、生成テキストを保存、レビュアーへ通知 | Temporal.io, Airflow, Serverless Functions |
| **監査トレイル & バージョニング** | 生成されたすべての回答を暗号ハッシュ付きで永続化し、監査可能に | Git, Immutable Object Store (例: S3 with Object Lock) |

これらが組み合わさって、ローパイルのリスクシグナルを磨き上げた回答へと変換する閉ループパイプラインが完成します。

---

## 3. データフロー図解

```mermaid
flowchart TD
    A["Risk Feed Sources"] -->|Kafka Stream| B["Raw Telemetry Lake"]
    B --> C["Normalization & Enrichment"]
    C --> D["Risk Scoring Engine"]
    D --> E["Context Package"]
    E --> F["Prompt Builder"]
    F --> G["LLM (GPT‑4)"]
    G --> H["Draft Policy Clause"]
    H --> I["Human Review Hub"]
    I --> J["Approved Answer Repository"]
    J --> K["Procurize Questionnaire UI"]
    K --> L["Vendor Submission"]
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style L fill:#9f9,stroke:#333,stroke-width:2px
```

*すべてのノードテキストは、要件に従い二重引用符で囲んであります。*

---

## 4. プロンプトジェネレータの構築

高品質なプロンプトこそが秘訣です。以下は、リスクコンテキストと再利用可能テンプレートを組み合わせたプロンプトを組み立てる Python スニペットです。

```python
import json
from datetime import datetime

def build_prompt(risk_context, template_id):
    # 保存された条項テンプレートを読み込む
    with open(f"templates/{template_id}.md") as f:
        template = f.read()

    # リスク変数を埋め込む
    prompt = f"""
You are a compliance specialist drafting a response for a security questionnaire.
Current risk score for the domain "{risk_context['domain']}" is {risk_context['score']:.2f}.
Relevant recent alerts: {", ".join(risk_context['alerts'][:3])}
Regulatory references: {", ".join(risk_context['regulations'])}

Using the following template, produce a concise, accurate answer that reflects the latest risk posture.

{template}
"""
    return prompt.strip()

# 使用例
risk_context = {
    "domain": "Data Encryption at Rest",
    "score": 0.78,
    "alerts": ["CVE‑2024‑1234 affecting AES‑256 modules", "New NIST guidance on key rotation"],
    "regulations": ["ISO 27001 A.10.1", "PCI DSS 3.2"]
}
print(build_prompt(risk_context, "encryption_response"))
```

生成されたプロンプトは LLM の API に渡され、返ってきたテキストは *ドラフト* として人間の最終チェックを待ちます。

---

## 5. Temporal.io を用いたリアルタイムオーケストレーション

Temporal はワークフロー・アズ・コードを提供し、信頼性の高いリトライ対応パイプラインを定義できます。

```goat
workflow DynamicPolicyWorkflow(riskEvent RiskEvent, questionnaireID string) {
    // Step 1: Build context package
    contextPkg := Activity(BuildContextPackage, riskEvent)

    // Step 2: Generate LLM prompt
    prompt := Activity(BuildPrompt, contextPkg, questionnaireID)

    // Step 3: Call LLM
    draft := Activity(CallLLM, prompt)

    // Step 4: Store draft and notify reviewer
    Activity(StoreDraftAndNotify, draft, questionnaireID)

    // Optional: Auto‑approval if risk score < 0.2
    if contextPkg.Score < 0.2 {
        Activity(AutoApprove, draft, questionnaireID)
    }
}
```

このワークフローは「Exactly‑once」実行、トランジェント障害時の自動リトライ、そして Temporal UI での可視化を保証し、コンプライアンス監査に必須の透明性を提供します。

---

## 6. 人間‑イン‑ザ‑ループ (HITL) ガバナンス

最高の LLM でも幻覚（ハラリズム）を起こす可能性があります。DPS は軽量な HITL ステップを組み込みます。

1. **レビュアーは Slack / Teams の通知を受け取り、ドラフトと基礎リスクコンテキストを横並びで確認**。  
2. **ワンクリック承認** により、最終回答が不変リポジトリへ書き込まれ、アンケート UI が更新されます。  
3. **却下** された場合はフィードバックループが起動し、プロンプトに注釈を付加して次回生成の精度を向上させます。

監査ログはレビュアー ID、タイムスタンプ、承認テキストの暗号ハッシュを記録し、[SOC 2](https://secureframe.com/hub/soc-2/what-is-soc-2) や [ISO 27001](https://www.iso.org/standard/27001) の証拠要件を満たします。

---

## 7. バージョニングと監査可能な証拠

生成されたすべての条項は以下のメタデータを添えて Git 互換ストアへコミットされます。

```json
{
  "questionnaire_id": "Q-2025-09-14",
  "control_id": "C-ENCR-01",
  "risk_score": 0.78,
  "generated_at": "2025-10-22T14:03:12Z",
  "hash": "sha256:9f8d2c1e...",
  "reviewer": "alice.smith@example.com",
  "status": "approved"
}
```

不可変ストレージ（S3 Object Lock）により、証拠が事後に改ざんされることはなく、監査時のチェーン・オブ・カスタディを確実に提供します。

---

## 8. 効果の定量化

| 指標 | DPS導入前 | DPS導入後（12 ヶ月） |
|------|-----------|----------------------|
| 平均回答ターンアラウンド | 3.2 日 | 3.5 時間 |
| 人的編集工数 | 週 25 h | 週 6 h |
| 監査証拠ギャップ | 12 % | <1 % |
| コンプライアンスカバレッジ（コントロール） | 78 % | 96 % |

上記は、Procurize 環境に DPS を統合した 3 社の中規模 SaaS 企業でのパイロット結果です。

---

## 9. 実装チェックリスト

- **[ ]** リスクフィード用のストリーミング基盤（Kafka）を構築  
- **[ ]** 資産・コントロール・脅威インテリジェンスを結び付けた Neo4j 知識グラフを構築  
- **[ ]** 再利用可能な条項テンプレート（Markdown）を作成  
- **[ ]** プロンプトビルダー micro‑service（Python/Node）をデプロイ  
- **[ ]** LLM アクセス（OpenAI、Azure OpenAI 等）を取得  
- **[ ]** Temporal ワークフローまたは Airflow DAG を設定  
- **[ ]** Procurize の回答レビューユーザインタフェースと統合  
- **[ ]** 不可変ロギング（Git + S3 Object Lock）を有効化  
- **[ ]** オーケストレーションコード自体のセキュリティレビューを実施  

これらの手順に従えば、6〜8 週間で本番レベルの DPS パイプラインを構築できます。

---

## 10. 今後の展望

1. **フェデレーテッドラーニング** – 社内ファイアウォール外に生データを出さずに、ドメイン固有 LLM アダプタを学習させる。  
2. **差分プライバシー** – リスクスコアにノイズを付与し、プライバシーを保護しつつ有用性を維持。  
3. **ゼロ知識証明** – ベンダーがリスクモデルに合致した回答であることを、基盤データを公開せずに検証できる仕組み。  

これらの研究領域は、動的ポリシー合成をさらに安全・透明・規制フレンドリーに進化させることが期待されています。

---

## 11. 結論

動的ポリシー合成は、セキュリティアンケート回答という手間のかかりエラーが発生しやすい作業を **リアルタイムかつ証拠に裏付けられたサービス** に変換します。ライブリスクテレメトリー、コンテキストエンジン、強力な LLM をオーケストレーションワークフローで組み合わせることで、回答のターンアラウンドを大幅に短縮し、継続的コンプライアンスを維持し、監査人に対して不変の正確性証拠を提供できます。Procurize と統合すれば、DPS は競争上の優位性となり、リスクデータを取引を加速させ、信頼を構築する戦略的資産へと変換します。