> For the complete documentation index, see [llms.txt](https://docs.maiagent.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.maiagent.ai/tech/ja/advanced-genai-tech/icap-content-validation.md).

# ICAP コンテンツ検証連携

ICAP コンテンツ検証の統合：ICAP プロトコルで Web Chat にアップロードされたファイルを外部サービスに転送し、ウイルススキャン、コンテンツフィルタリング、DLP を実行します。統合アーキテクチャ、プロトコルの実装、スキャン記録、デプロイ設定について説明します。

> 本ドキュメントでは、MaiAgent プラットフォームが ICAP (Internet Content Adaptation Protocol) を統合し、ユーザーがアップロードしたファイルと会話内容のセキュリティスキャンおよび検証を行い、マルウェアや不適切なコンテンツを防ぐ仕組みを説明します。

## 1. ICAP とは？

ICAP (Internet Content Adaptation Protocol) は、コンテンツを外部サービスに転送して、ウイルススキャン、コンテンツフィルタリング、情報漏えい防止などの処理を行う軽量なプロトコルです。

### 1.1 ICAP の主な価値

| 観点           | コンテンツ検証なし                             | ICAP コンテンツ検証あり                         |
| ------------ | ------------------------------------- | -------------------------------------- |
| **セキュリティ**   | ユーザーがマルウェアや不適切なコンテンツをアップロードする可能性があります | 悪意のあるファイルやコンテンツを自動でスキャンし、ブロックします       |
| **コンプライアンス** | 企業の情報セキュリティポリシーの要件を満たすことが困難です         | エンタープライズ向けのウイルス対策および DLP ソリューションを統合します |
| **柔軟性**      | コンテンツ検出ロジックを独自に開発する必要があります            | 標準プロトコルで専門的なサードパーティサービスを統合します          |
| **保守性**      | ウイルス定義と検出ルールを継続的に更新する必要があります          | 専門ベンダーが検出エンジンを保守します                    |

### 1.2 主な利用シーン

* **ファイルアップロードの安全性**: ナレッジベースにアップロードするドキュメントは、事前にウイルススキャンを行います
* **会話内容のフィルタリング**: 会話に不適切な発言や機密情報が含まれていないか検出します
* **情報漏えい防止 (DLP)**: 機密情報を含むファイルのアップロードを防ぎます
* **コンプライアンスチェック**: コンテンツが GDPR、HIPAA などの法規制の要件を満たしているか確認します

***

## 2. MaiAgent の ICAP 統合アーキテクチャ

```mermaid
flowchart TB
    subgraph Client["クライアント"]
        User["ユーザー"]
        WebChat["Web Chat インターフェース"]
    end
    
    subgraph MaiAgent["MaiAgent プラットフォーム"]
        API["Upload API"]
        Queue["処理キュー"]
        ICAP_Client["ICAP クライアント"]
        DB[("データベース")]
        Storage[("ファイルストレージ")]
    end
    
    subgraph ICAP_Service["ICAP サービス"]
        Scanner["ウイルス対策エンジン"]
        DLP["DLP エンジン"]
        Filter["コンテンツフィルター"]
    end
    
    User -- "ファイルをアップロード" --> WebChat
    WebChat -- "HTTP POST" --> API
    API --> Queue
    Queue --> ICAP_Client
    
    ICAP_Client <-. "ICAP REQMOD" .-> Scanner
    ICAP_Client <-. "ICAP RESPMOD" .-> DLP
    ICAP_Client <-. "ICAP OPTIONS" .-> Filter
    
    ICAP_Client -- "検証成功" --> Storage
    ICAP_Client -- "結果を記録" --> DB
    
    ICAP_Client -. "検証失敗<br/>イベントを送信" .-> WebChat
    WebChat -. "エラーを表示" .-> User
```

### 2.1 主要コンポーネントの説明

* **ICAP クライアント**: MaiAgent に組み込まれた ICAP プロトコルの実装で、ICAP サーバーとの通信を担当します
* **ICAP サーバー**: Symantec、McAfee、Trend Micro のウイルス対策ゲートウェイなど、サードパーティのコンテンツスキャンサービスです
* **処理キュー**: ファイルのアップロードとスキャンタスクを非同期で処理し、ユーザー操作のブロックを防ぎます
* **スキャン記録**: ファイルのハッシュ、スキャン時刻、結果など、すべてのスキャン結果を保存します

### 2.2 ICAP リクエストの流れ

```mermaid
sequenceDiagram
    participant User as ユーザー
    participant WebChat as Web Chat
    participant MaiAgent as MaiAgent API
    participant ICAP as ICAP サーバー
    participant Storage as ファイルストレージ
    
    User->>WebChat: ファイルをアップロード
    WebChat->>MaiAgent: POST /upload
    MaiAgent->>MaiAgent: ファイル ID を生成
    
    Note over MaiAgent,ICAP: ICAP REQMOD リクエスト
    MaiAgent->>ICAP: REQMOD /scan HTTP/1.1<br/>Encapsulated: req-hdr=0, req-body=...
    ICAP->>ICAP: ファイルの内容をスキャン
    
    alt ファイルが安全
        ICAP-->>MaiAgent: 200 OK (ファイルの検証成功)
        MaiAgent->>Storage: ファイルを保存
        Storage-->>MaiAgent: 保存成功
        MaiAgent-->>WebChat: 200 OK {fileId: ...}
        WebChat-->>User: アップロード成功
    else ファイルに問題あり
        ICAP-->>MaiAgent: 403 Forbidden (ウイルス/ポリシー違反のコンテンツ)
        MaiAgent->>WebChat: Socket.IO: ICAP_BLOCKED イベント
        WebChat-->>User: エラーメッセージを表示
        MaiAgent->>MaiAgent: スキャン失敗を記録
    else ICAP サーバーエラー
        ICAP-->>MaiAgent: 500 Internal Server Error
        MaiAgent->>WebChat: Socket.IO: ICAP_ERROR イベント
        WebChat-->>User: システムエラー、しばらくしてから再試行してください
        MaiAgent->>MaiAgent: エラーログを記録
    end
```

***

## 3. ICAP プロトコル実装の詳細

### 3.1 ICAP リクエストの形式

MaiAgent は REQMOD (Request Modification) モードでファイルを ICAP サーバーに送信します:

```http
REQMOD icap://icap-server.example.com/scan ICAP/1.0
Host: icap-server.example.com
Encapsulated: req-hdr=0, req-body=147
Allow: 204

POST /upload HTTP/1.1
Host: maiagent.ai
Content-Type: application/octet-stream
Content-Length: 1024

400
[Binary file content in chunked encoding]
0
```

**主要フィールドの説明**:

* **REQMOD**: リクエスト変更モードです。コンテンツを保存する前に検査します
* **Encapsulated**: HTTP リクエストのカプセル化形式を記述します
* **Allow: 204**: コンテンツの変更が不要な場合、ICAP サーバーがそのまま 204 を返せることを伝えます
* **Chunked Encoding**: チャンク転送エンコーディングでファイルの内容を送信します

### 3.2 チャンク転送エンコーディング (Chunked Transfer Encoding)

MaiAgent は HTTP チャンク転送エンコーディングを正しく実装しています:

```
チャンク転送形式:
<データサイズ（16進数）>\r\n
<データ内容>\r\n
...
0\r\n\r\n  (終了マーカー)
```

**正しいチャンクエンコーディングが必要な理由**

* ICAP プロトコルでは、リクエストとレスポンスのボディの送信に HTTP チャンク転送エンコーディングが必要です
* エンコーディング形式が正しくないと、ICAP サーバーはファイルの内容を正しく解析できません
* MaiAgent はチャンクサイズの16進数表記を修正し、ICAP 標準との互換性を確保しました

### 3.3 ICAP レスポンスの処理

ICAP サーバーは次のレスポンスを返す場合があります:

| ステータスコード               | 意味                          | MaiAgent の処理                            |
| ---------------------- | --------------------------- | --------------------------------------- |
| **200 OK**             | コンテンツを検査または変更しました           | 変更後のコンテンツ（変更がある場合）を受け入れ、ファイルを保存します      |
| **204 No Content**     | コンテンツの変更は不要です               | 元のファイルをそのまま保存します                        |
| **403 Forbidden**      | コンテンツは禁止されています（ウイルスを含む場合など） | 保存を拒否し、クライアントに ICAP\_BLOCKED イベントを送信します |
| **500 Internal Error** | ICAP サーバーエラーです              | エラーを記録し、クライアントに ICAP\_ERROR イベントを送信します  |

***

## 4. WebChat との統合

ICAP スキャンが完了すると、システムはスキャン結果をリアルタイムでユーザーに通知します：

* **ファイルのブロック**: わかりやすいエラーメッセージを表示し、ファイルが拒否された理由（ウイルスの検出など）を説明します
* **システムエラー**: ユーザーにしばらくしてから再試行するよう案内し、エラーログを記録します

### ユーザー体験の改善

* **即時フィードバック**: ファイルのアップロード直後に「スキャン中」の状態を表示します
* **進行状況の表示**: 大きなファイルのアップロード時にプログレスバーを表示します
* **わかりやすいエラーメッセージ**: ファイルが拒否された理由を平易な言葉で説明します
* **再試行の仕組み**: 一時的なエラーの場合、再アップロードの選択肢を提供します

***

## 5. スキャン記録の管理

### 5.1 記録の保存

MaiAgent はすべての ICAP スキャンの詳細な記録を保存します:

各スキャン記録には次の情報が含まれます:

| フィールド     | 説明                                  |
| --------- | ----------------------------------- |
| ファイル識別子   | スキャンしたファイルの一意の識別子です                 |
| ファイル名     | 元のファイル名です                           |
| ファイルハッシュ値 | ファイルの整合性を確認するための SHA-256 ハッシュです     |
| スキャン結果    | PASS（合格）、BLOCKED（ブロック）、ERROR（エラー）です |
| スキャン理由    | ファイルがブロックされた場合の具体的な理由を記録します         |
| ICAP サーバー | スキャンを実行した ICAP サーバーのアドレスです          |
| スキャン時刻    | スキャン実行時のタイムスタンプです                   |
| ユーザー/組織   | スキャンを開始したユーザーと所属組織です                |

### 5.2 期限切れ記録の削除

MaiAgent は期限切れのスキャン記録を定期的に削除する自動クリーンアップ機能を実装しています:

システムはバックグラウンドのスケジュールタスクを通じて、保存期間を超えたスキャン記録を自動で削除します。

**クリーンアップ方針**:

* **保存期間**: 組織の ICAP 設定の「記録保存日数」に従います。デフォルトは30日で、0を指定すると永久保存になります
* **適用範囲**: 保存日数は組織単位で設定し、同じ組織のすべてのスキャン記録に同一の期間を適用します

***

## 6. 設定とデプロイ

### 6.1 ICAP サーバーの設定

ICAP は MaiAgent がシステム管理側で組織ごとに設定します。管理画面には設定ページがありません。有効化や設定変更が必要な場合は、MaiAgent の担当窓口に連絡し、ICAP サーバーの情報を提供してください。各組織で設定できる項目は次のとおりです：

| 設定項目          | 説明                                                                                        |
| ------------- | ----------------------------------------------------------------------------------------- |
| ICAP サーバー URL | ICAP サービスの接続 URL です。設定時に接続テストができます                                                        |
| 有効化           | 有効にした場合のみ検査します。また、Agent が使用するモデルについても MaiAgent が ICAP 検査を有効にする必要があります。両方を有効にして初めて検査が行われます |
| ブロックメッセージ     | コンテンツがブロックされたときにユーザーに表示するメッセージです                                                          |
| 記録保存日数        | スキャン記録の保存期間です。デフォルトは30日で、0は永久保存を意味します                                                     |

### 6.2 対応する ICAP サービス

MaiAgent は次の主要な ICAP サービスと互換性があります:

* **Symantec Protection Engine**: エンタープライズ向けのウイルス対策とコンテンツフィルタリングです
* **McAfee Web Gateway**: ゲートウェイレベルのコンテンツスキャンです
* **Trend Micro IWSVA**: Web セキュリティとコンテンツスキャンを統合したサービスです
* **Kaspersky Scan Engine**: Kaspersky の ICAP スキャンエンジンです
* **ClamAV (c-icap 経由)**: オープンソースのウイルス対策ソリューションです

### 6.3 パフォーマンスに関する考慮事項

システムのパフォーマンスを確保するため、次の方法を推奨します:

* **非同期スキャン**: 大きなファイルをバックグラウンドタスクでスキャンし、アップロードのレスポンスをブロックしません
* **キャッシュ**: 同一ファイル（ハッシュ値が同じファイル）のスキャン結果をキャッシュします
* **ICAP コネクションプール**: ICAP サーバーとの永続接続を維持し、接続のオーバーヘッドを削減します
* **負荷分散**: 複数の ICAP サーバーインスタンスでスキャンの負荷を分散します

***

## 7. MaiAgent の ICAP 統合の技術的な利点

### 7.1 セキュリティ上の利点

* **多層防御**: ファイルの保存前にスキャンを行い、悪意のあるコンテンツを防ぎます
* **即時ブロック**: 脅威を検出すると即座にブロックし、システムへの保存を防ぎます
* **専門エンジン**: 業界をリードするウイルス対策および DLP エンジンを統合します
* **完全な記録**: すべてのスキャン活動を詳細に記録し、セキュリティ監査に役立てます

### 7.2 コンプライアンス上の利点

* **標準プロトコル**: 業界標準の ICAP プロトコルを使用し、既存の企業セキュリティ基盤と容易に統合できます
* **監査証跡**: 完全なスキャン記録でコンプライアンス要件を満たします
* **柔軟な設定**: 業界ごとのコンプライアンス要件に応じてスキャン方針を調整できます
* **データ保護**: DLP エンジンに対応し、機密情報の漏えいを防ぎます

### 7.3 運用上の利点

* **疎結合のアーキテクチャ**: ICAP スキャンロジックをアプリケーションから分離し、保守を容易にします
* **水平スケーリング**: ICAP サーバーを容易に追加でき、より多くのスキャンリクエストを処理できます
* **一元管理**: 企業は既存の ICAP 基盤を使い、すべてのアプリケーションのコンテンツスキャンを一元管理できます
* **詳細なログ**: 完全なスキャンログで、トラブルシューティングとパフォーマンスの最適化を支援します

***

## 8. 関連ドキュメント

* [AI セキュリティ保護機構](/tech/ja/advanced-genai-tech/guardrails.md) - MaiAgent の多層セキュリティ戦略について説明します
* [ファイルアップロードとナレッジベース管理](https://docs.maiagent.ai/km/km-basic-settings)

### 参考リンク

* [ICAP RFC 3507](https://datatracker.ietf.org/doc/html/rfc3507)
* [Chunked Transfer Encoding (RFC 7230)](https://datatracker.ietf.org/doc/html/rfc7230#section-4.1)
* [Open ICAP Forum](https://www.icap-forum.org/)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.maiagent.ai/tech/ja/advanced-genai-tech/icap-content-validation.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
