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}$(ハイフン不可)