コンテンツにスキップ

Amazon Bedrock のルート

設定の「AWS プロファイル/SSM」のプロファイルを使って、claude や opencode のセッションのモデルを Amazon Bedrock で動かせます。 セッションには AWS の資格情報が渡りません。ワークスペースの中のゲートウェイが、モデル呼び出しを 1 つずつ署名します。

設定 >「AWS プロファイル/SSM」で、プロファイルのフォームの「モデルのルート」に印を付けます。

  • 印の意味: そのプロファイルのロールが bedrock:InvokeModel*(モデルを実行する呼び出し)だけを許可し、それより広い 権限を持たないことを、あなたが示すものです。あなたの申告にすぎません。AF はロールの権限を読めないので、権限を確かめた プロファイルにだけ付けてください。
  • ゲートウェイがすること: ワークスペースの中で動き、各モデル呼び出しをプロファイルの短命な資格情報で署名して転送します。 呼び出しをするセッションには AWS の資格情報が渡りません。
  • 転送するもの: invoke、invoke-with-response-stream、converse、converse-stream だけです。モデルの一覧取得 など、ほかの AWS 操作はできません。
  • 印のないプロファイルはルートとして拒否され、その理由は呼び出しへの応答に出ます。
  • ルートのトークンは、1 つのセッション、今の設定のプロファイル、セッションが選んだルートに結び付いています。そのセッション 自身のプロセスにしか使えません。ゲートウェイはワークスペース内のソケットで待ち受け、呼び出してきたプロセスを確かめるので、 トークンを写した別のセッションは拒否されます。
  • トークンが失効するとき: セッションの停止・削除・アーカイブ・作り直し、選択の変更、プロファイルの編集・印の解除・削除。 何にも失効させられなかったトークンも、セッションが動かなくなってから 10 分で切れます。
  • 変更が効くとき: セッションの作成・開始と、新しい AWS 認証情報が要るモデル呼び出しは、先に設定を読み直します。 読み直しに成功すれば、その前に保存した変更はすぐ効きます。すでに動いていて、ゲートウェイが認証情報を持っているセッションは、 変更から最大 30 秒は呼び出しを続けられます。読み直しに失敗したとき(ワークスペースから Control Plane に届かない、または 15 秒以内に読めない)は、最後に読めた一覧を使い、呼び出しだけでなく作成・開始・新しい認証情報の取得も許します。それはその 読み取りから 15 分までで、その後はすべての呼び出しを拒否します。
  • 「使用前に確認」を付けたプロファイルは、セッションの開始時に確認を求め、以後もモデル呼び出しのたびに 確認し直します。許可するまで、呼び出しは理由とともにすぐ失敗します。
  • 使いかた: claude のセッションの起動ダイアログで、モデルのルート の Amazon Bedrock を選びます (claude の経路 を参照)。印の付いたプロファイルが 1 つ以上あるときだけ選べます。 この経路はまだ一般には提供しておらず、今は運用者が有効にしたワークスペースでだけ選べます。
  • opencode: ターミナル(CLI)のセッションなら、同じように選べます。モデルは amazon-bedrock/… から選びます (opencode の Amazon Bedrock ルート)。

以下は 1 つのアカウントで確かめたことで、AWS の文書から取ったものではありません。 お使いのアカウントについては、AWS の最新の Bedrock モデルアクセスの文書で確かめてください。アカウントでモデルが有効になっていれば、どれも要らないことがあります。

  • Bedrock コンソールで Anthropic のユースケースフォームを送信します。
  • そのアカウントでモデルをまだ呼んだことがないとき、最初の呼び出しは aws-marketplace:Subscribe(と aws-marketplace:ViewSubscriptions)を許可された主体から行う必要があります。bedrock:InvokeModel* だけのロールでは、最初の呼び出しが AccessDenied になります。最初の 1 回だけより広い権限の主体で呼び出しておくと、 その後は絞ったルート用ロールで動きます。

このルートの claude のセッションでは、リージョンの横の Bedrock のモデル ID 欄にモデルを Bedrock の表記どおりに 入力します。anthropic.claude-sonnet-4-5-20250929-v1:0 のようなモデル ID か、同じ ID の前に us.、eu.、apac.、 jp.、au.、us-gov.、global. が付いたシステム推論プロファイル ID(例: us.anthropic.claude-opus-4-6-v1)です。 この欄は必須で、このルートを選んでいる間は起動ダイアログの通常のモデル選択は隠れます。ルートのリージョンの Bedrock コンソールに出ていて、アカウントがアクセスできる ID を選んでください。セッションはサブエージェントや claude 自身の小さな 裏方の呼び出しも含めてすべての呼び出しにその 1 つの ID を使い、ほかのモデルへ切り替えることはありません。別のモデルを 名指しする呼び出しは、AWS へ届く前にゲートウェイが拒否します(route_model_not_selected)。ティア名(Opus / Sonnet / Haiku)、claude-… の ID、ARN は起動の時点で断ります。それらだと claude が自分で Bedrock の ID を選び、アカウントが 使えなければ古いモデルを順に試して、試行ごとにゲートウェイへの呼び出しと使用量の行が 1 つずつ付くからです。AF は ID が アカウントで使えるかを確かめられません(ルートのロールはモデルの呼び出ししかできません)。アカウントやリージョンが使えない ID だと、最初のターンで AccessDenied や model_not_found のような Bedrock 自身の答えで失敗するので、別の ID で新しい セッションを始めてください。ダイアログは最後に使った ID をプロファイルごとにこのブラウザに覚えます。REST API や af の MCP ツールからは、ルートと一緒に ID を model として送ります。

予算と予約(デプロイが提供する Bedrock ルート)

Section titled “予算と予約(デプロイが提供する Bedrock ルート)”

デプロイ自身が Bedrock ルートを提供し、テナント管理者がメンバーごとの月額予算とテナントの月額上限を決めている場合の話です。

  • 予約: 呼び出しを送る前に、ゲートウェイはその呼び出しの事前の上限額を予約します。モデルのコンテキスト全体を最も高い入力単価で、 要求された出力上限を最も高い出力単価で見積もった合計です。この全額がメンバーの予算とテナントの上限の両方に収まるときだけ 呼び出しが通り、予約は終了後に実費へ精算されます。Claude Code は数万トークンの出力を要求するので、短い呼び出しより予約がずっと大きくなります。
  • 下限(floor): リストの中で最も安いモデルの呼び出しを 1 回通せる最小の予算、つまり各モデルの「出力 1 トークン」の予約のうち最小のものです。これを下回ると、どのモデルの呼び出しも通りません。 テナントの表示(GET /api/admin/tenants/{slug}/provided-routes/deployment)に、モデルごとの予約と下限(reservations、floor_micro)が出ます。
  • 保存時の 400: 0 より大きく下限より小さい、メンバーまたはデフォルトの予算と、付与がオンのときの上限は、どの呼び出しも通らないので拒否されます。 下限以上にするか、使わないなら 0 にします。0 が通るのは予算と、付与がオフのときの上限です。付与がオンで上限が 0 の場合は、別の理由 (付与したテナントには 0 より大きい上限が要る)で拒否されます。付与がオフの間、上限は効かないので下限との照合もしません。
  • 保存時の警告: 下限以上で、モデルの「出力を最大まで使う」予約には足りない額は保存され、応答に警告が付きます。要求する出力上限が小さい 呼び出しだけが通ります。
  • 呼び出し時の 503(route_budget_exhausted): 呼び出しの予約が、今月の予算または上限の残りに収まりません。何も使っていないときは、 予算が 1 回の呼び出しの予約より小さいとメッセージに出ます。テナント管理者に引き上げを頼んでください。拒否された呼び出しは使用量の行を残しません。

認証や接続に関する拒否はゲートウェイ自身が HTTP 401(待てば直りうるものは 503)で返し、 必ず x-should-retry: false を付けます。claude は再試行せず、メッセージ中のコードとともに 1 回だけ表示します。 (転送できない要求は固有のステータスのままです: route_operation_not_allowed と route_model_not_selected は 404、 route_bad_model は 400、route_request_too_large は 413。)

コード 意味 対処
route_token_invalid(401) ルートのトークンがない、未知、期限切れ、または失効した(セッション停止、プロファイルや選択の変更)。 セッションを起動し直す。
route_caller_forbidden(401) トークンを、発行先のセッション以外のプロセスが提示した。トークンは失効しない。 そのセッション自身のターミナルからモデルを呼ぶ。他のセッションからは呼ばない。
route_connection_forbidden(401) セッション開始後に、プロファイルのモデルのルートの印が外された、または削除された(セッション作成時の同じ拒否は 403)。トークンは失効する。 印を付け直すか、別のプロファイルで新しいセッションを始める。
route_session_ended、route_selection_changed、route_connection_changed(401) セッションが終わった、このルートをもう選んでいない、またはプロファイルが編集された。トークンは失効する。 新しいセッションを始める。
route_login_required、route_confirmation_required(401) プロファイルに SSO サインイン、または「使用前に確認」の承認が要る。 サインインまたは許可すると、次の呼び出しは通る。
route_connection_unavailable(503) Agent がいま設定の AWS プロファイルを読めない。 少し待ってやり直す。
route_upstream_unavailable、route_credentials_unavailable(503) いま Bedrock または資格情報に届かない。 少し待ってやり直す。
route_model_mismatch(400、起動時) このルートの claude のセッションを、Bedrock のモデル ID ではないモデルで始めようとした。空、opus のようなティア名、claude-… の ID、ARN のどれか(起動ダイアログ、REST API、af の MCP ツール、スケジュールのどれからでも)。何も起動していない。 us.anthropic.… のような Bedrock のモデル ID をモデルとして送る。
route_model_not_selected(404) セッションを始めたときの Bedrock のモデル ID と違うモデルを名指しした。AWS には何も送っていない。トークンは失効しない。 その ID で新しいセッションを始める。

AccessDenied や model_not_found のような Bedrock の答えはそのまま転送されます。ゲートウェイのコードではありません。