← 記事一覧へ

AIエージェントのセキュリティ: アクセス権、シークレット、human-in-the-loop

AIエージェントは、CRMを検索し、メールを書き、コマンドを実行し、タスクを更新し、外部APIを呼び出すことができます。だからこそ、AIエージェントのセキュリティは最初の事故の後ではなく、リリース前に設計する必要があります。よくある問題は、広すぎる権限、プロンプトやログへのシークレット混入、そして人の確認なしに動ける状態での human-in-the-loop 不在です。

  • アクセス権 - エージェントには本当に必要なシステムと項目だけを見せる
  • シークレット - APIキー、トークン、パスワードをプロンプト、git、通常ログに置かない
  • Human-in-the-loop - 重要な操作は人の承認を通す
  • 基本原則 - "念のため全部" ではなく、必要最小限の権限だけを与える
  • 実務上の効果 - 情報漏えい、誤操作、高額なロールバックのリスクを下げられる

なぜAIエージェントは通常のボットより危険なのか

通常のチャットボットは質問に答えるだけのことが多いです。AIエージェントはそれより広く動きます。文書を読み、ツールを呼び出し、データベースのレコードを変更し、請求書を作成し、顧客にメッセージを送り、コードを実行することもあります。自律性が高いほど、失敗のコストは大きくなります。

典型的なリスク:

  • CRM、メール、ナレッジベース、決済に同時アクセスしている;
  • 個人情報、商用条件、社内指示が一つのコンテキストに入る;
  • 社員が "テスト用に一時的に" 本物のトークンをシステムプロンプトへ貼る;
  • ログにユーザー入力全文とシークレットが保存される;
  • 確認なしで顧客メッセージ送信、レコード削除、誤った操作実行を行う。

要点: エージェントの安全性は単に "モデルを守る" ことではありません。アクセス制御、シークレット管理、ログ、承認フローまで含みます。

アクセス権: フルアクセスではなく最小権限

最も多い失敗は、"その方が連携が早い" という理由でエージェントに管理者権限を与えることです。最初は便利でも、本番では危険です。

アクセスを制限する方法

  1. 役割を分ける - サポート用エージェントは財務レポートを見るべきではなく、分析用エージェントは顧客に送信すべきではありません。
  2. データ範囲を絞る - CRM全体ではなく、必要なエンティティ、項目、プロジェクトだけにする。
  3. 読み取りと書き込みを分ける - まず read-only、必要な場所だけ書き込み権限を追加する。
  4. サービスアカウントを使う - 社員個人のログインを使わない。
  5. 定期レビューを行う - 権限は定期的に見直し、永続化させない。
方針 何が起こるか リスク
エージェントに管理者権限 全てを見て変更できる 失敗時の被害が最大
必要データのみ read-only 解析はできるが壊しにくい 低リスクで監査しやすい
Role + scope + approve 制限された上で承認後のみ変更 速度と統制のバランスが良い

特に注意すべき領域

  • CRM - 連絡先、案件、メモ、電話番号、メール;
  • メールとメッセンジャー - 外部送信のリスク;
  • ファイル保管 - 契約書、報告書、個人情報;
  • 金融サービス - 請求、支払い、返金;
  • ターミナル系ツール - コマンド、デプロイ、マイグレーション、データ削除。

1つのエージェントが5つのシステムへアクセスする必要があるなら、責務の狭い複数エージェントに分けるべきではないかをまず考えるべきです。

シークレット: 漏えいが起こりやすい場所

シークレットは "すごいハック" で漏れるより、置いてはいけない場所に置かれることで漏れる方が多いです。

  • 誤ってgitへ入った .env;
  • 便利だからと入れたシステムプロンプト;
  • 委託先に送ったスクリーンショット、チケット、資料;
  • リクエストとレスポンスのログ;
  • テスト用JSONや開発ノートブック。

シークレット管理の基本ルール

  1. シークレットは secret manager または保護された環境変数に置き、プロンプト本文に入れない。
  2. トークンはツール層で注入 し、モデル層には渡さない。
  3. ログでは機密項目をマスク する - キー、パスワード、cookie、カード番号、access token。
  4. dev、stage、prodを分離 する - 別のキー、scope、制限を使う。
  5. 失効とローテーションを準備 する - 漏れたらすぐに差し替えられるようにする。

良い実装例: モデルは create_invoice()search_crm() のようなツールがあることだけを知り、実際のAPIキーは見ません。

Human-in-the-loop: 人が確認すべきタイミング

全ての操作に手動承認が必要なわけではありません。しかし、human-in-the-loop によって時間以上のお金を守れる操作があります。

承認を入れるべき例:

  • 会社名義で顧客へ送るメッセージ;
  • 価格、割引、契約条件、案件ステータスの変更;
  • データ、ファイル、レコードの削除;
  • サーバーコマンドやデプロイ;
  • 法務または財務上の影響がある操作。

実務的な制御モード

モード 仕組み 向いている場面
完全自動 エージェントが判断して実行する 低リスクの社内作業のみ
Draft mode エージェントが下書きを作り、人が confirm する サポート、営業、文書対応
2段階承認 危険操作には別の approve が必要 お金、本番、削除、権限変更

多くのSMBでは、エージェントが 情報収集と下書き作成 を行い、外部または重要な操作だけ人が確認する形が最も現実的です。

ログ、監査、インシデント調査

エージェントが失敗したとき、企業は次を把握する必要があります。

  • どんな入力を受け取ったか;
  • どのツールを呼んだか;
  • ツールが何を返したか;
  • 誰が承認したか、またはなぜ自動実行されたか;
  • 結果をどれだけ早く戻せるか。

そのために有用なのは:

  • ツール呼び出しログ;
  • ユーザーIDとセッションID;
  • プロンプトまたは設定のバージョン;
  • 手動承認の記録;
  • シークレットを露出しないマスク済みエラーログ。

重要: マスクせずに全部を記録すると、そのログ自体が漏えい源になります。監査は必要ですが、平文のパスワードやトークン保存と引き換えにしてはいけません。

より安全なAIエージェント構成

多くのプロジェクトに合う最小構成は次の通りです。

  1. エージェントまたは役割ごとの専用サービスアカウント
  2. 権限の狭いツール を使い、万能な "何でもする" ツールを避ける
  3. Secret manager / env を使い、キーをプロンプトやリポジトリに置かない
  4. 承認ステップ を外部、金融、破壊的操作に入れる
  5. マスク付きログと監視
  6. キーのローテーションと権限レビュー を定期実施する

リリース前の確認項目

  • 本当に必要でない限り管理者権限で動かしていない;
  • リポジトリに本物のトークンやパスワードがない;
  • テストデータに実在の個人情報がない;
  • 重要操作が承認なしで実行されない;
  • 各ツールの読み取り範囲と変更範囲が明確;
  • インシデント時にエージェントを停止する手順がある。

よくある導入ミス

  1. 1つのエージェントで全部やる - サポート、財務、管理をまとめる。
  2. プロンプトにシークレットを入れる - "デバッグしやすいから"。
  3. read-only段階がない - 初日から書き込みと削除が可能。
  4. human-in-the-loopがない - 高額ミスが起きるまで放置。
  5. 監査証跡がない - インシデント後に何が起きたか再現できない。

エージェントの自律性が高いほど、LLM統合者としてだけでなく、セキュリティエンジニアとして考える必要があります。

まとめ

AIエージェントのセキュリティは、最小権限、適切なシークレット管理、そして危険操作への human-in-the-loop の3つが中心です。最初からscopeを絞り、キーをモデルから隠し、承認と監査を入れれば、AIは新たな事故要因ではなく、チームを加速する仕組みになります。

CRM、サポート、社内業務にAIエージェントを導入したい場合は、お問い合わせください。

よくある質問

セキュリティの観点で、AIエージェントは通常のチャットボットと何が違いますか?

AIエージェントは答えるだけでなく実行もします。 ツール呼び出し、DB参照、レコード変更、メール送信、各種操作の実行ができるため、問題は誤回答だけでなく、実システム上の誤操作になります。

社内向けなら管理者権限を与えてもよいですか?

通常は避けるべきです。 社内利用でも、誤操作、漏えい、誤ったツール呼び出しのリスクは消えません。専用サービスアカウント、可能な限り read-only、狭い書き込み権限の方が安全です。

エージェント用ツールのAPIキーはどこに保存すべきですか?

Secret manager または保護された環境変数です。 システムプロンプト、markdown文書、ソースコード、通常ログには置かないでください。モデルはツールを呼ぶだけで、キー注入はモデル外で行うべきです。

全ての操作に human-in-the-loop は必要ですか?

いいえ。 検索、下書き、分類、安全な分析は自動化できることが多いです。ただし、外部メッセージ、金銭、データ削除、ステータス変更、サーバーコマンドは人の確認がある方がはるかに安全です。

もしシークレットが既にログやプロンプトに入ってしまったら?

漏えい済みとして扱ってください。 キーを失効またはローテーションし、ログやリポジトリから除去し、接続先システムを確認し、プロンプト、ロガー、テストファイル、開発プロセスの原因を修正します。

お問い合わせ