Upgrade to Pro — share decks privately, control downloads, hide ads and more …

sono-tsuru-zenbu-tsukaete-daijobu

 sono-tsuru-zenbu-tsukaete-daijobu

AIエージェントに「全ツール使い放題(root)」を渡すと、意図しない操作が高速に実行され被害が拡大するリスクがあります。
本資料では、ツール実行の直前に「誰が・どのツールを・どの対象に」実行するのかを、ユーザー属性(department × role)と実行パラメータに基づいてリアルタイムに認可判断する方法を紹介します。

Okta を属性の信頼源として利用し、Amazon Verified Permissions(Cedar)でポリシーベースの認可を行い、Bedrock AgentCore(Strands Agent)に認可チェックを組み込む構成で、最小権限・監査可能・緊急停止(breakglass)可能なエージェント運用を実現します。

ALLOW/DENY の判断ログを残し、「事故を防ぐ」だけでなく「すぐ説明できる」体制づくりを目指します。

Avatar for 平林 徹

平林 徹

March 11, 2026

Other Decks in Technology

Transcript

  1. JAWS DAYS 2026 Mashup for the Future そのツール、全部使えて大丈夫? 〜ランチ15分で学ぶ、 Okta

    × Bedrock AgentCoreの認可制御レシピ〜 ネクストモード / 平林 徹
  2. #jawsug #jawsdays2026 #jawsdays2026_d そのツール、全部使えて大丈夫?〜ランチ15分で学ぶ、Okta × Bedrock AgentCoreの認可制御レシピ〜 ネクストモードについて NTT東日本の信頼基盤 ×

    クラスメソッドの AWS技術力 提供サービス セキュリティ 生産性向上 クラウド ネクストモードの強み 1 全行程を伴走 2 自社実践の裏付け 3 現場の味方 導入実績と評価 423 社(累計取引社数) 1,570 契約(累計) *2025.10 時点 累計 Okta New-Logo Partner of the Year 3年連続受賞 Netskope Top Hunter Award 2年連続受賞
  3. #jawsug #jawsdays2026 #jawsdays2026_d エージェント時代の認可 そのツール、全部使えて大丈夫?〜ランチ15分で学ぶ、Okta × Bedrock AgentCoreの認可制御レシピ〜 従来 トークン発行時に権限が決まる

    以降はAP 側でscopeあるからOKの世界 粒度は read/write くらいで割り切りがち → エージェント時代 ツール実行時にリアルタイム判断 誰が、どのツールを、どの対象に ユーザの属性で動的に評価
  4. #jawsug #jawsdays2026 #jawsdays2026_d 今日の持ち帰り そのツール、全部使えて大丈夫?〜ランチ15分で学ぶ、Okta × Bedrock AgentCoreの認可制御レシピ〜 ツール実行時に「属性(department ×

    role)」で動的に認可判断する Okta = 属性の信頼源(department / role) Amazon Verified Permissions(Cedar)= ポリシーベースの認可エンジン AgentCore(Strands Agent)= 認可チェックをコードに組み込む これらを組み合わせれば、最小権限+監査可能+緊急停止可能なエージェントが作れる
  5. #jawsug #jawsdays2026 #jawsdays2026_d なぜこの構成? そのツール、全部使えて大丈夫?〜ランチ15分で学ぶ、Okta × Bedrock AgentCoreの認可制御レシピ〜 AgentCore 認可チェックをコード内に統合

    ツール実行前で確実に遮断 agentcore deploy で簡単デプロイ Verified Permissions 実行時 にポリシー評価できる Cedar でポリシーを Git 管理できる 追加ライセンス不要 まとめ AgentCore:実行直前のブレーキをコードで確実に入れる Verified Permissions + Cedar:動的認可をポリシーとして運用できる
  6. #jawsug #jawsdays2026 #jawsdays2026_d 属性によって動作が変わる仕組み そのツール、全部使えて大丈夫?〜ランチ15分で学ぶ、Okta × Bedrock AgentCoreの認可制御レシピ〜 👤 Slack

    ユーザ /secure-agent Slack Web API (users.info) Lambda (BFF) 署名検証 + user_id→email user_id→email Okta Management API Strands Agent (AgentCore Runtime) Amazon Verified Permissions (Cedar) 属性取得 IsAuthorized() ALLOW / DENY 🔧 ツール実行 Backlog API / EC2 / Google Drive HTTPS POST email+prompt 許可されたツールのみ実行
  7. #jawsug #jawsdays2026 #jawsdays2026_d 同じエージェントでも違う結果 そのツール、全部使えて大丈夫?〜ランチ15分で学ぶ、Okta × Bedrock AgentCoreの認可制御レシピ〜 ① 役職の壁

    決裁Backlog エンジニア管理職 → ALLOW エンジニア社員 → DENY ② 部門の壁 EC2起動停止 エンジニア社員 → ALLOW 営業社員 → DENY ③ 役職×部門の交差 管理者限定GoogleDrive 営業管理者 → ALLOW エンジニア社員 → DENY 「個人の属性」で結果が変わる
  8. #jawsug #jawsdays2026 #jawsdays2026_d ツール実装コード( Python) そのツール、全部使えて大丈夫?〜ランチ15分で学ぶ、Okta × Bedrock AgentCoreの認可制御レシピ〜 @tool

    def operate_aws_resources(email: str, instance_id: str, operation: str) -> dict: """EC2 インスタンスの起動・停止を実行する """ user = get_okta_user(email) # Okta → 属性取得 auth = check_permission(user, "operate_aws_resources") # AVP → Cedar 判定 if auth["decision"] != "ALLOW": return {"error": "Access Denied", "department": user["department"], "role": user["role"]} ec2 = boto3.client("ec2", region_name="us-east-1") # ※本番は環境変数化 if operation == "start": ec2.start_instances(InstanceIds=[instance_id]) elif operation == "stop": ec2.stop_instances(InstanceIds=[instance_id]) return {"result": f"{operation} executed", "instance_id": instance_id}
  9. #jawsug #jawsdays2026 #jawsdays2026_d Cedar ポリシー そのツール、全部使えて大丈夫?〜ランチ15分で学ぶ、Okta × Bedrock AgentCoreの認可制御レシピ〜 //

    manager のみ: 決裁情報 Backlog を検索できる permit ( principal, action == NextMode::Action::"search_backlog_kessai", resource ) when { principal.role == "manager" }; // engineering のみ: AWS リソースを操作できる permit ( principal, action == NextMode::Action::"operate_aws_resources", resource ) when { principal.department == "engineering" };
  10. #jawsug #jawsdays2026 #jawsdays2026_d 監査ログ( CloudWatch) そのツール、全部使えて大丈夫?〜ランチ15分で学ぶ、Okta × Bedrock AgentCoreの認可制御レシピ〜 {

    "event": "authorization_decision", "user": "[email protected]", "action": "search_backlog_kessai", "decision": "ALLOW", "principal": { "department": "engineering", "role": "manager" } } ALLOW と DENY の両方を記録 — 「許可した」ことも証跡として残す 「誰が / 何を / いつ / 結果 / 根拠」をJSONで出力 CloudWatch Alarmで検知、CloudWatch Logs Insightsで分析できる 「事故が起きない」ではなく「事故をすぐ説明できる」体制を作る
  11. #jawsug #jawsdays2026 #jawsdays2026_d ブレークグラス(緊急停止) そのツール、全部使えて大丈夫?〜ランチ15分で学ぶ、Okta × Bedrock AgentCoreの認可制御レシピ〜 // 緊急停止ポリシー(breakglass)

    forbid ( principal, action, resource ); Cedar の鉄則 forbid は permit より 常に優先する 通常運用 6つの permit ポリシー → インシデント発生! forbid を AVP に登録 → 全ツール即時遮断 コードのデプロイ不要
  12. #jawsug #jawsdays2026 #jawsdays2026_d まとめ そのツール、全部使えて大丈夫?〜ランチ15分で学ぶ、Okta × Bedrock AgentCoreの認可制御レシピ〜 Okta = 属性ソース

    Verified Permissions = 認可エンジン AgentCore = 許可されたツールを許可された範囲で実行する相棒 「ツール実行時の動的認可」+「監査ログ」がセットで効果を発揮 小さく始められる — ツールとポリシーを段階的に増やせる 認可の仕組みでエージェントの安全性と説明可能性を両立