Claude Media
「Session token not found」— Bedrockでの原因と直し方

「Session token not found」— Bedrockでの原因と直し方

Bedrock接続でSession token not found or invalidが毎回出るのは、v2.1.207に限定されたリージョン解決の不具合が原因です。切り分け方とv2.1.208での修正点を書きました。

AWS認証情報が正しいのに毎回失敗するBedrockのエラー

Amazon BedrockでClaude Codeを使っていて、プロンプトを送るたびに次のエラーで止まることがあります。

API Error: UnauthorizedException: Session token not found or invalid

aws sts get-caller-identityは成功し、aws bedrock-runtime invoke-modelを直接叩いても同じ認証情報でモデル応答が返ってくるのに、Claude Codeだけが失敗し続けるパターンです。/setup-bedrockウィザードの検証ステップさえ成功したうえで、直後に送った最初のメッセージが同じエラーで落ちます。

これはissue #76701で報告された、Claude Code v2.1.207に限定された既知のリグレッションです。原因はAWS側の認証情報ではなく、Claude Code内部のリージョン解決ロジックにあります。

なぜ検証は通るのにリクエストだけ失敗するのか

原因は、AWS SSOプロファイルが認証情報を取得するsso_regionと、Bedrockモデルを呼び出すリージョンが食い違う構成です。公式ドキュメントは次のように説明しています。

Claude Code requests role credentials from the IAM Identity Center region named by the profile's sso_region, which doesn't need to match the region you run Amazon Bedrock in. In v2.1.207, the Amazon Bedrock region overrode sso_region, so a profile whose IAM Identity Center instance is in a different region failed to authenticate with a Session token not found or invalid error.

つまりv2.1.207では、本来別々でよいはずの2つのリージョン設定のうち、Bedrock側のリージョンがsso_regionを上書きしてしまっていました。IAM Identity Centerのインスタンスがeu-north-1にあるのにBedrockをeu-central-1で呼ぶ、といった構成が典型的な発症条件です。この公式の説明はAWS SSOプロファイル構成についてのものですが、issue内ではAWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEYによる静的IAM認証情報(SSOプロファイル不使用)でも同一のエラーが報告されており、両者の関係は公式には説明されていません。

ウィザードの検証やAWS CLIの直接呼び出しが成功するのに実際のリクエストだけ失敗する理由もここにあります。issue内の報告では、ListInferenceProfiles(推論プロファイル一覧の取得)も同じエラーで失敗しており、特定のAPI呼び出しに限らずリージョン解決を経由する処理全体が影響を受けていました。一方で、既に起動済みのセッションは動き続け、新規にclaudeを起動した直後のセッションだけが失敗するという報告も複数あります。

切り分け手順

このエラーに遭遇したら、次の順で確認します。

  1. バージョンを確認する: claude --version2.1.207かどうかを見ます。それ以外のバージョンで同じ文面のエラーが出ている場合は、後述の別エラーとの混同を疑います
  2. sso_regionAWS_REGIONを比較する: ~/.aws/configのプロファイルに設定されたsso_regionと、Bedrockを呼ぶ側のリージョン(AWS_REGIONAWS_DEFAULT_REGION、またはプロファイルのregion)が一致しているかを確認します
  3. AWS側の資格情報を独立に確認する: aws sts get-caller-identity --profile <profile>と、可能であればaws bedrock-runtime invoke-modelを同じプロファイルで直接実行し、Claude Codeを介さずに認証・呼び出しが通ることを確かめます
claude --version
aws sts get-caller-identity --profile your-profile
grep -A3 "sso_region\|^region" ~/.aws/config

3つとも問題がなければ、Claude Code側のバージョン起因である可能性が高くなります。

--debug apiのログで区別する

claude --debug apiで起動すると、資格情報解決とAPIリクエストのタイミングをログで追えます。このリグレッションに典型的なパターンは、[API:auth] AWS credential resolve doneという資格情報解決の成功ログが出た直後に、API error (attempt 1/11): UnauthorizedException: Session token not found or invalidというエラーが即座に続く形です。

資格情報の解決そのものは毎回成功しているのに、その直後のAPIリクエストだけが拒否される点が特徴です。これは「AWS credentials expired or invalid」のような実際の失効エラーとは挙動が異なります。このリグレッションでは資格情報の解決ログが一貫して成功した直後に、リクエスト送信側だけが即座に拒否されます。

issue #76701に寄せられた報告は、macOS・WSL2・ネイティブLinuxの3つのOS、AWS SSOプロファイルと静的IAM認証情報の両方の認証方式、Sonnet・Opus・Haikuを含む複数のモデルにまたがっていました。共通していたのはClaude Codeのバージョンがv2.1.207である点だけで、OSや認証方式、モデルの違いによるものではないことが報告の早い段階で確認されています。

直し方

v2.1.208以降へアップデートします。 v2.1.208のリリースノートに、このリグレッションの修正が明記されています。

Fixed Bedrock auth failing with "Session token not found or invalid" for AWS SSO profiles
whose sso_region differs from the Bedrock region (2.1.207 regression)

アップデート後は、sso_regionとBedrockのリージョンが異なる構成のままで問題ありません。この修正はリージョン解決ロジック自体を直したもので、どちらかのリージョン設定を揃え直す必要はありません。

アップデートがすぐにできない場合、issue内では2つの回避策が報告されています。

  • v2.1.206以前へ一時的に固定する: curl -fsSL https://claude.ai/install.sh | bash -s -- 2.1.206のようにバージョンを指定してインストールし直す方法です。ネイティブインストールでは実行ファイルへのシンボリックリンクを差し替えるだけで済んだ報告もあります
  • sso_regionとBedrockのリージョンを一致させる: 一時的な回避としては有効ですが、IAM Identity Centerのインスタンスを動かせない構成では使えません

固定は暫定策です。claude --versionで今のバージョンを確認し、可能であれば早めにv2.1.208以降へ更新するのが最終的な対処になります。

IDE拡張機能や外部クライアントでは別インストールが必要な場合がある

CLIバイナリをv2.1.206に固定しても直らない、という報告がissue内にありました。原因はVS Code拡張機能が独自にClaude Codeの実行ファイルを持っており、PATH上のバイナリとは別に更新される点です。拡張機能側のバージョンも合わせて固定するには、拡張機能パネルの歯車アイコンから「Install Another Version」でv2.1.207より前のバージョンを選び直す必要があります。

同様に、Claude Codeバイナリを直接呼び出さずに@anthropic-ai/claude-agent-sdkへ依存する外部クライアント(Zedの外部エージェント機能など)では、CLI本体がv2.1.208に上がっても、そのクライアントが依存するSDKのバージョンが追いついていなければ同じエラーが残ります。この場合はクライアント側の依存バージョンを個別に確認します。

似た文面のエラーと混同しない

Claude CodeのBedrock・AWS認証エラーには、文面が紛らわしいものがいくつかあります。原因も対処もそれぞれ別物なので、切り分けの参考にしてください。

エラー文面原因詳細記事
Session token not found or invalid原因v2.1.207のリージョン解決リグレッション(本記事)詳細記事本記事
AWS credentials expired or invalid原因awsAuthRefresh設定時、自動リフレッシュでも有効な資格情報が得られない401エラー詳細記事AWS credentials expired or invalidの直し方
Could not load credentials原因クラウドプロバイダーのCLIがシェル上で未認証詳細記事「Could not load credentials」の直し方
claude.ai rejected the session token原因claude.aiログイントークンの失効(Bedrock認証とは無関係)詳細記事「rejected the session token」エラーの対処

特にclaude.ai rejected the session tokenは文言に「session token」を含むため混同しやすい点に注意します。これはBedrockのAWS認証エラーではなく、Claude Code自身のclaude.aiログイントークンの失効です(/mcpのコネクタ詳細画面に表示されますが、コネクタ自体の認可とは別物で、Bedrock認証とは無関係です)。原因も直し方もまったく異なります。

IAMポリシーの設計やクロスリージョン推論プロファイルの一般的な組み方自体に問題がある場合は、Claude Code Bedrock IAM設定とクロスリージョン推論プロファイルの組み方を参照してください。本記事はSession token not found or invalidという特定のエラー文面の切り分けに絞っています。

Bedrock APIキー認証は資格情報チェーンを経由しない

このリグレッションは、AWS SSOプロファイルおよび静的IAM認証情報がたどる、AWSのデフォルト資格情報プロバイダーチェーンの解決経路で報告されています。AWS_BEARER_TOKEN_BEDROCKによるBedrock APIキー認証は、公式ドキュメント上このプロバイダーチェーンを経由しない認証方式です。issue #76701の報告の中にBedrock APIキー認証での再現例はありません。SSOプロファイルの運用が複雑になりがちなCI環境などでは、Bedrock APIキーへの切り替えも選択肢に入ります。

なお、Claude Codeは解決済みの資格情報を一定時間メモリ上に保持し、有効期限の5分前まで(有効期限が無い場合は1時間)再利用します。APIからの資格情報エラーはこのキャッシュを破棄し、次のリクエストで再解決を試みますが、v2.1.207のリグレッションはこのキャッシュ機構ではなくリージョン解決ロジック自体の不具合だったため、再解決してもエラーは解消しませんでした。この挙動を切り分けの一環で無効化して毎回チェーンを解決し直したい場合はCLAUDE_CODE_SKIP_AWS_CRED_CACHE=1を設定します(Bedrock APIキー認証にはこのキャッシュ自体が適用されません)。

まとめ

Session token not found or invalidというエラーが、認証情報が正しいのに毎回出る場合は、まずClaude Codeのバージョンを疑います。v2.1.207に限定されたリグレッションで、AWS SSOプロファイルのsso_regionとBedrockを呼ぶリージョンが異なる構成で発症し、v2.1.208で修正済みです。claude --versionで該当バージョンを確認し、アップデートで解決します。VS Code拡張機能やSDK依存の外部クライアントを使っている場合は、CLI本体とは別に更新が必要になることがある点も見落とさないようにします。

この記事を共有:XはてブLinkedIn