コンテンツにスキップ

AIエージェントのアクションを承認する

このガイドでは、エージェント型スキャンがリスクのあるアクションを実行する前に確認を求めるように設定する方法と、スキャンのページから回答する方法について説明します。

AIエージェントは何をテストするかを自分で判断し、そのアクションの一部は実在の人物に影響したり、実際のデータを変更したりします。Approval of actions を使うと、エージェントが事前に確認を求めるかどうかを選べます。リクエストはスキャンの Approvals タブで待機し、承認、拒否、または独自の指示を添えた返信で応えます。

動画では、スキャンフォームでの設定を示し、続いて3件のリクエストに回答します。

Approval of actions は、エージェント型スキャンプロファイル(Deep Agentic Scan、Mobile Shielding Scan、Single Vulnerability Assessment)の Guardrails ステップにある設定です。任意の設定で、既定ではエージェントがリスクのあるアクションを自動で実行します。

report.ostorlab.co にアクセスします

1. リスクのあるアクションの扱いを選ぶ

New Scan をクリックし、通常どおりスキャンを設定します(アセットとエージェント型スキャンプロファイル)。Guardrails ステップの Approval of actions で、3つのオプションから選びます。

Approval of actions

オプション 動作
Run without asking エージェントはリスクのあるアクションを自動で実行します。誰にも確認しません。既定のオプションです。
Ask me, block if no answer エージェントはあなたの回答を待ちます。誰も回答しなければ、アクションは実行されません。
Ask me, run if no answer エージェントはあなたの回答を待ちます。誰も回答しなければ、エージェント自身の判断で続行します。

残りのステップを完了して Submit をクリックします。このオプションはスキャン全体に適用され、Dig Deeper はフォローアップの評価にも引き継ぎます。

2. エージェントが確認を求める場面を知る

確認を求める場面はエージェントが判断します。この設定は、すべてのツール呼び出しを一時停止するものではありません。エージェントは次の場合に確認を求めます。

  • SMSの送信やコンテンツの公開など、実在の人物に影響するアクションの前
  • 破壊的なアクション、または元に戻せないアクションの前
  • スキャンの範囲を外れるアクションの前
  • 行き詰まり、安全に選べない場合。たとえば、対象が範囲内かどうか判断できない場合や、あなただけが持つ認証情報やコードが必要な場合

リクエストが待機している間も、スキャンのほかのテストは実行され続けます。あなたの判断を待っているアクションだけが止まります。

3. Approvals タブを開く

スキャンを開きます。承認モードが Run without asking 以外の場合、結果メニューの Risks の下に Approvals タブが表示されます。エージェントがあなたを待っている間は、タブにオレンジ色のドットと件数が表示されます。タブには、回答待ちのリクエストが最初に並びます。

Approvals タブ

Ostorlab は、リクエストが届いたこともお知らせします。スキャンを閲覧できる組織の管理者とユーザーに、このタブへのリンク付きメールを送り、通知も追加します。閲覧者には通知されません。1つのスキャンについて、同じ人への通知は10分に1回までです。

4. リクエストを読む

Waiting for your answer の各カードは、エージェントが書いたメッセージです。何をしたいのか、そしてその理由が書かれています。回答する前に読んでください。長いメッセージは短縮されます。全文を読むには Show details をクリックします。

5. リクエストに回答する

各カードでは、3つの方法で回答できます。

  • Approve:エージェントは、メッセージで説明したことだけを続行します。以降のリクエストには、新たな承認が必要です。
  • Deny:エージェントは続行せず、拒否を再試行したり回避したりしません。理由を伝えるには、先に Add a message をクリックします。Deny はメッセージを理由として送信します。
  • Add a message、続いて Send reply:メッセージが回答としてエージェントに届きます。質問の場合は、それが回答になります。アクションの場合は、承認ではなくガイダンスです。エージェントは再検討し、それでも続行したい場合はもう一度確認を求めます。

メッセージで回答する

メッセージを入力している間は Approve が無効になります。承認にメッセージは添えられません。

待機中のすべてのリクエストをまとめて承認するには、タブの上部にある Approve all をクリックして確定します。エージェントは依頼した内容をすべて、再確認なしで続行します。この操作は元に戻せません。

Approve all

6. 履歴を確認する

回答済みのリクエストは、あなたの回答とともに History に移動します。

履歴

ステータス 意味
Approved リクエストを承認しました。
Denied リクエストを拒否しました。理由がある場合は Reason に表示されます。
Replied メッセージで回答しました。Reply に表示されます。
Timed out リクエストがタイムアウトしてキャンセルされ、History に表示されます。

スキャンが終了した場合や、エージェントが回答の確認をやめた場合、まだ保留中のリクエストは No longer waiting に「The agent is no longer waiting」というメッセージとともに表示されます。返信がエージェントに届かないため、回答はできません。これはキャンセル済みのリクエストとは異なり、キャンセル済みのものは History に Timed out と表示されます。

待機終了

誰も回答しなかった場合

既定では、エージェントは1件のリクエストに対する回答を最大24時間待ちます。その後は、承認モードが決めます。

  • Ask me, block if no answer:アクションは実行されず、エージェントはほかのテストを続けます。
  • Ask me, run if no answer:エージェントは自身の判断でアクションを続行します。

対象が範囲内かどうかを尋ねる質問は例外です。誰も回答しない場合、エージェントはどちらのモードでもその対象を範囲外として扱い、手を付けません。

拒否や返信だけでは、どちらのモードでもアクションは実行されません。

回答できる人

admin または user のロールを持つユーザーが回答できます。閲覧者は Approvals タブを開いてリクエストを読めますが、回答はできません。

API を使用する

GraphQL API のスキャン作成ミューテーションは approvalMode 引数を受け付け、スキャンはそれを approvalMode フィールドで返します。

approvalMode: FAIL_CLOSED
  • AUTO_APPROVE:Run without asking
  • FAIL_CLOSED:Ask me, block if no answer
  • FAIL_OPEN:Ask me, run if no answer

スキャンのリクエストの一覧取得と回答は、サインインしたユーザーで行います。API キーでは回答できません。

query {
  humanInputRequests(scanId: 42, status: PENDING) {
    id
    message
    status
    createdAt
  }
}
mutation {
  answerHumanInputRequest(
    humanInputRequestId: 7
    decision: DENIED
    responseText: "Do not touch /admin. It is out of scope."
  ) {
    humanInputRequest {
      id
      status
      responseText
    }
  }
}
  • status は PENDING、APPROVED、DENIED、REPLIED、CANCELLED のいずれかです。CANCELLED は History に Timed out と表示されます。エージェントが待機を終了した PENDING リクエストは No longer waiting に表示されます。
  • decision は APPROVED、DENIED、REPLIED のいずれかです。REPLIED には responseText が必要で、DENIED では理由として responseText を任意で指定でき、APPROVED には指定できません。

次のステップ