コンテンツにスキップ
Classmethod Step Functions Agentcore

Step Functions の AgentCore 統合で IAM ロールの権限を「ハーネス」経由で AI に判定させてみた

  • URL: https://dev.classmethod.jp/articles/step-functions-agentcore-optimized-integration/
  • 日付: 2026-06-04
  • Tier: Tier 3
  • 要旨: 2026年6月3日に追加されたStep FunctionsへのAgentCore Optimized Integration機能を検証。IAMポリシーの過剰権限チェックをユースケースに、SDK呼び出し→AgentCore(claude-sonnet-4-6)判定→Choice分岐のフローをLambdaなしで構築。実装上の罠(AllowedToolsの明示指定、RuntimeSessionId最低33文字等)を詳述した。

詳細

AgentCoreハーネスの構成

  • モデル: global.anthropic.claude-sonnet-4-6
  • AllowedTools: [] を明示(未指定だとビルトインツールが有効になりloopが失敗する)
  • MaxIterations: 1(推論のみ用途)

Step Functions実装の注意点

  • Resource URI: arn:aws:states:::bedrockagentcore:invokeHarness(ハイフンなし)
  • HarnessArn: arn:aws:bedrock-agentcore:...(ハイフンあり)→混同しやすい
  • RuntimeSessionId は最低33文字必要(短いとバリデーションエラー)
  • 実行ロールには bedrock-agentcore:InvokeHarness だけでなく bedrock-agentcore:InvokeAgentRuntime も必要
  • Map内ItemProcessorに "QueryLanguage": "JSONata" を書くと SCHEMA_VALIDATION_FAILED(トップレベルのみ指定)
  • ペイロードサイズ上限256 KiB

動作確認結果

  • OVERPRIVILEGED(AdministratorAccess付きロール): 2625ms、verdict + reason を正確に返した
  • ACCEPTABLE(最小権限ロール): 4598ms
  • boto3では ストリーミングレスポンス、Step Functions経由ではConverse形状の集約レスポンス

セキュリティ上の注意

  • IAMポリシーの Sid フィールド等にプロンプトインジェクション文字列を仕込める → 信頼できないロールを評価する場合は対策が必要
  • $contains() による文字列マッチング分岐はデモ用。本番では verdict フィールドのJSONパースで判定すること

CFnの注意

  • ハーネス名のパターン: ^[a-zA-Z][a-zA-Z0-9_]{0,39}$(ハイフン不可)