AIエージェントのセキュリティ: アクセス権、シークレット、human-in-the-loop
AIエージェントは、CRMを検索し、メールを書き、コマンドを実行し、タスクを更新し、外部APIを呼び出すことができます。だからこそ、AIエージェントのセキュリティは最初の事故の後ではなく、リリース前に設計する必要があります。よくある問題は、広すぎる権限、プロンプトやログへのシークレット混入、そして人の確認なしに動ける状態での human-in-the-loop 不在です。
- アクセス権 - エージェントには本当に必要なシステムと項目だけを見せる
- シークレット - APIキー、トークン、パスワードをプロンプト、git、通常ログに置かない
- Human-in-the-loop - 重要な操作は人の承認を通す
- 基本原則 - "念のため全部" ではなく、必要最小限の権限だけを与える
- 実務上の効果 - 情報漏えい、誤操作、高額なロールバックのリスクを下げられる
なぜAIエージェントは通常のボットより危険なのか
通常のチャットボットは質問に答えるだけのことが多いです。AIエージェントはそれより広く動きます。文書を読み、ツールを呼び出し、データベースのレコードを変更し、請求書を作成し、顧客にメッセージを送り、コードを実行することもあります。自律性が高いほど、失敗のコストは大きくなります。
典型的なリスク:
- CRM、メール、ナレッジベース、決済に同時アクセスしている;
- 個人情報、商用条件、社内指示が一つのコンテキストに入る;
- 社員が "テスト用に一時的に" 本物のトークンをシステムプロンプトへ貼る;
- ログにユーザー入力全文とシークレットが保存される;
- 確認なしで顧客メッセージ送信、レコード削除、誤った操作実行を行う。
要点: エージェントの安全性は単に "モデルを守る" ことではありません。アクセス制御、シークレット管理、ログ、承認フローまで含みます。
アクセス権: フルアクセスではなく最小権限
最も多い失敗は、"その方が連携が早い" という理由でエージェントに管理者権限を与えることです。最初は便利でも、本番では危険です。
アクセスを制限する方法
- 役割を分ける - サポート用エージェントは財務レポートを見るべきではなく、分析用エージェントは顧客に送信すべきではありません。
- データ範囲を絞る - CRM全体ではなく、必要なエンティティ、項目、プロジェクトだけにする。
- 読み取りと書き込みを分ける - まず read-only、必要な場所だけ書き込み権限を追加する。
- サービスアカウントを使う - 社員個人のログインを使わない。
- 定期レビューを行う - 権限は定期的に見直し、永続化させない。
| 方針 | 何が起こるか | リスク |
|---|---|---|
| エージェントに管理者権限 | 全てを見て変更できる | 失敗時の被害が最大 |
| 必要データのみ read-only | 解析はできるが壊しにくい | 低リスクで監査しやすい |
| Role + scope + approve | 制限された上で承認後のみ変更 | 速度と統制のバランスが良い |
特に注意すべき領域
- CRM - 連絡先、案件、メモ、電話番号、メール;
- メールとメッセンジャー - 外部送信のリスク;
- ファイル保管 - 契約書、報告書、個人情報;
- 金融サービス - 請求、支払い、返金;
- ターミナル系ツール - コマンド、デプロイ、マイグレーション、データ削除。
1つのエージェントが5つのシステムへアクセスする必要があるなら、責務の狭い複数エージェントに分けるべきではないかをまず考えるべきです。
シークレット: 漏えいが起こりやすい場所
シークレットは "すごいハック" で漏れるより、置いてはいけない場所に置かれることで漏れる方が多いです。
- 誤ってgitへ入った
.env; - 便利だからと入れたシステムプロンプト;
- 委託先に送ったスクリーンショット、チケット、資料;
- リクエストとレスポンスのログ;
- テスト用JSONや開発ノートブック。
シークレット管理の基本ルール
- シークレットは secret manager または保護された環境変数に置き、プロンプト本文に入れない。
- トークンはツール層で注入 し、モデル層には渡さない。
- ログでは機密項目をマスク する - キー、パスワード、cookie、カード番号、access token。
- dev、stage、prodを分離 する - 別のキー、scope、制限を使う。
- 失効とローテーションを準備 する - 漏れたらすぐに差し替えられるようにする。
良い実装例: モデルは create_invoice() や search_crm() のようなツールがあることだけを知り、実際のAPIキーは見ません。
Human-in-the-loop: 人が確認すべきタイミング
全ての操作に手動承認が必要なわけではありません。しかし、human-in-the-loop によって時間以上のお金を守れる操作があります。
承認を入れるべき例:
- 会社名義で顧客へ送るメッセージ;
- 価格、割引、契約条件、案件ステータスの変更;
- データ、ファイル、レコードの削除;
- サーバーコマンドやデプロイ;
- 法務または財務上の影響がある操作。
実務的な制御モード
| モード | 仕組み | 向いている場面 |
|---|---|---|
| 完全自動 | エージェントが判断して実行する | 低リスクの社内作業のみ |
| Draft mode | エージェントが下書きを作り、人が confirm する | サポート、営業、文書対応 |
| 2段階承認 | 危険操作には別の approve が必要 | お金、本番、削除、権限変更 |
多くのSMBでは、エージェントが 情報収集と下書き作成 を行い、外部または重要な操作だけ人が確認する形が最も現実的です。
ログ、監査、インシデント調査
エージェントが失敗したとき、企業は次を把握する必要があります。
- どんな入力を受け取ったか;
- どのツールを呼んだか;
- ツールが何を返したか;
- 誰が承認したか、またはなぜ自動実行されたか;
- 結果をどれだけ早く戻せるか。
そのために有用なのは:
- ツール呼び出しログ;
- ユーザーIDとセッションID;
- プロンプトまたは設定のバージョン;
- 手動承認の記録;
- シークレットを露出しないマスク済みエラーログ。
重要: マスクせずに全部を記録すると、そのログ自体が漏えい源になります。監査は必要ですが、平文のパスワードやトークン保存と引き換えにしてはいけません。
より安全なAIエージェント構成
多くのプロジェクトに合う最小構成は次の通りです。
- エージェントまたは役割ごとの専用サービスアカウント
- 権限の狭いツール を使い、万能な "何でもする" ツールを避ける
- Secret manager / env を使い、キーをプロンプトやリポジトリに置かない
- 承認ステップ を外部、金融、破壊的操作に入れる
- マスク付きログと監視
- キーのローテーションと権限レビュー を定期実施する
リリース前の確認項目
- 本当に必要でない限り管理者権限で動かしていない;
- リポジトリに本物のトークンやパスワードがない;
- テストデータに実在の個人情報がない;
- 重要操作が承認なしで実行されない;
- 各ツールの読み取り範囲と変更範囲が明確;
- インシデント時にエージェントを停止する手順がある。
よくある導入ミス
- 1つのエージェントで全部やる - サポート、財務、管理をまとめる。
- プロンプトにシークレットを入れる - "デバッグしやすいから"。
- read-only段階がない - 初日から書き込みと削除が可能。
- human-in-the-loopがない - 高額ミスが起きるまで放置。
- 監査証跡がない - インシデント後に何が起きたか再現できない。
エージェントの自律性が高いほど、LLM統合者としてだけでなく、セキュリティエンジニアとして考える必要があります。
まとめ
AIエージェントのセキュリティは、最小権限、適切なシークレット管理、そして危険操作への human-in-the-loop の3つが中心です。最初からscopeを絞り、キーをモデルから隠し、承認と監査を入れれば、AIは新たな事故要因ではなく、チームを加速する仕組みになります。
CRM、サポート、社内業務にAIエージェントを導入したい場合は、お問い合わせください。
よくある質問
セキュリティの観点で、AIエージェントは通常のチャットボットと何が違いますか?
AIエージェントは答えるだけでなく実行もします。 ツール呼び出し、DB参照、レコード変更、メール送信、各種操作の実行ができるため、問題は誤回答だけでなく、実システム上の誤操作になります。
社内向けなら管理者権限を与えてもよいですか?
通常は避けるべきです。 社内利用でも、誤操作、漏えい、誤ったツール呼び出しのリスクは消えません。専用サービスアカウント、可能な限り read-only、狭い書き込み権限の方が安全です。
エージェント用ツールのAPIキーはどこに保存すべきですか?
Secret manager または保護された環境変数です。 システムプロンプト、markdown文書、ソースコード、通常ログには置かないでください。モデルはツールを呼ぶだけで、キー注入はモデル外で行うべきです。
全ての操作に human-in-the-loop は必要ですか?
いいえ。 検索、下書き、分類、安全な分析は自動化できることが多いです。ただし、外部メッセージ、金銭、データ削除、ステータス変更、サーバーコマンドは人の確認がある方がはるかに安全です。
もしシークレットが既にログやプロンプトに入ってしまったら?
漏えい済みとして扱ってください。 キーを失効またはローテーションし、ログやリポジトリから除去し、接続先システムを確認し、プロンプト、ロガー、テストファイル、開発プロセスの原因を修正します。