# Day 5：権限委任とガードレールで、エージェントを囲う（約3分）

**ねらい：** 「権限のないツールは見せない」「承認はエージェントの権限の外に置く」「ガードレールはモデルの外に置く」を、設定とデモで見せる。
**映すもの：** Keycloak の管理画面（agent-concierge クライアント）、`application.properties`、ガードレールのコード、`demo/openshift/policies/`、台本版デモの場面3・5・7・8。

| 時間 | 画面 | ナレーション | テロップ |
| --- | --- | --- | --- |
| 0:00 | タイトル画面 | 今日の結論です。エージェントの安全は、プロンプトの「やってはいけません」ではなく、外側の仕組みで守ります。 | Day 5：統制層 |
| 0:10 | Keycloak：agent-concierge の Client scopes / Scope 設定 | エージェント用のクライアントは、Full scope allowed をオフにしました。利用者がどんな権限を持っていても、エージェントに渡るのは参照と更新の2つだけです。承認や監査の権限は、最初から渡りません。 | 委任するのは必要な権限だけ |
| 0:46 | `application.properties` の HTTP 権限 | アプリ側でも、/mcp/read は参照ロール、/mcp/write は更新ロールを要求します。トークンの宛先が agent-tools であることも確認しています。 | 経路ごとにロールを要求 |
| 1:03 | ターミナル：場面3（bob） | 参照権限だけの bob で /mcp/write に接続すると、403 で拒否されます。bob のエージェントには、振込ツールが選択肢にも出てきません。 | 見えないツールは使えない |
| 1:33 | ターミナル：場面5（承認） | 30万円の振込は承認待ちになります。エージェントのトークンで承認しようとしても 403。依頼者本人の alice が承認画面から承認しても、職務分掌で拒否されます。承認できるのは carol だけです。 | 承認はエージェントの外 |
| 2:08 | `InputSafetyGuardrail.java` と場面7 | ガードレールは、ツールが実行される前に引数を検査します。「以前の指示を無視して」という文言や、カード番号を含むメモは止めます。止めた記録は、トレースと監査証跡にも残ります。 | 止めた事実も記録する |
| 2:25 | 場面8（連打） | 更新系は1分10回までに制限しました。暴走しても、最大の影響を事前に数字で言えます。 | 最大影響を数字で言える |
| 2:34 | `demo/openshift/policies/` の AuthPolicy と RateLimitPolicy | 本番では、同じ判断を Connectivity Link のゲートウェイで行います。経路ごとに AuthPolicy と RateLimitPolicy を付け、LLM の経路には TokenRateLimitPolicy でトークン量の上限をかけます。アプリ側の確認は内側の防御として残します。 | 本番はゲートウェイで二重に |
| 3:03 | 締め | 明日は、失敗しても元に戻ることと、全部が一本のトレースで見えることを確かめます。 | 次回：補償と可観測性 |

**収録メモ：** TokenRateLimitPolicy は製品バージョンでの確認が済んでいない（社内ゲート G2）。動画では「本番での構成例」と言い、サポートを断言しない。
