Amazon Bedrock で単一リージョン Claude Code のデータ所在地を強制
本文の状態
日本語全文を表示中
詳細モードで約16分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
AWS Machine Learning Blog
AWS は、特定の地域でのデータ残存要件を満たすため、Amazon Bedrock 上で Claude Code を単一リージョンに強制する実装パターンと IAM ポリシーの適用方法を公開した。
AI深層分析を開く2026年8月7日 01:54
AI深層分析
キーポイント
単一リージョン強制の実現方法
Anthropic の Mantle エンドポイントには制限があるため、AWS は従来の Invoke API とアプリケーション推論プロファイル、および IAM リージョン条件を組み合わせることで要件を満たす方法を提示している。
クロスリージョン推論との使い分け
通常はスループット向上のためにクロスリージョン推論が推奨されるが、特定の AWS 地域への厳格なデータ残存を要求するケースでは本記事の単一リージョンパターンを使用すべきであると明記している。
実装に必要な前提条件と権限
Claude Code v2.1.94 以降、Bedrock モデルアクセスの有効化、および Mantle または Classic API に応じた IAM 権限の付与が必須であり、AWS CloudTrail での検証も可能である。
データレジデンシーの実装には2つのエンドポイント経路が存在する
Classic Amazon Bedrock (bedrock-runtime) ではアプリケーション推論プロファイルとIAM条件を用いて単一リージョンを実現し、Mantle (bedrock-mantle) ではAWS_REGION環境変数で直接解決する。
各エンドポイントのリージョン対応状況とモデル構成は異なる
Classic Amazon Bedrock はロンドンリージョンでのみClaude Opus 4.6およびSonnet 4.6に対応し、Mantle はアイルランドや米国東部など複数のリージョンでより多くのモデルをサポートしている。
重要な引用
Prompts, completions, and intermediate processing were required to stay inside a single AWS Region.
Use the single-Region patterns in this post only when your compliance requirement is a specific AWS Region rather than a geography.
To keep a request in one Region, you create an application inference profile that points at the in-Region foundation model.
Single-Region routing is native. You set AWS_REGION, and Mantle resolves the endpoint to that Region directly with no application inference profile needed.
編集コメントを表示
編集コメント
この記事は、単なる機能紹介に留まらず、法的なデータ残存要件を技術的に満たすための具体的な実装戦略を示している。特に Mantle と従来の API の挙動の違いを明確にし、コンプライアンス担当者にとっての判断材料を提供している点が評価できる。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
米国に本社を置くグローバル企業が、一見シンプルに見えるデータ所在地の要件を持って当社を訪れました。エンジニアが Claude Code を利用できるようにしてほしいという依頼です。ただし条件は厳格で、Amazon Bedrock のモデル推論処理は London(eu-west-2 AWS リージョン)内で行われなければなりません。単に London から呼び出すだけでは不十分です。
コンプライアンスチームの立場は明確でした。プロンプト、回答生成結果、中間処理のすべてを、単一の AWS リージョン内に保持する必要があります。大まかな適合では認められません。
まず私たちは最新の手法を試しました。Anthropic の Mantle エンドポイントを Amazon Bedrock で利用する経路です。しかし、ここで制限に直面しました。そこで古典的な方法に戻り、Amazon Bedrock の Invoke API にアプリケーション推論プロファイルを組み合わせるアプローチを採用しました。これに AWS Identity and Access Management (IAM) のリージョン条件を付加することで、要件を満たすことができました。
本稿では、両方の経路を紹介し、選択がなぜリージョンによって異なるのか、それらを強制する AWS Identity and Access Management (IAM) ポリシー、そして AWS CloudTrail を用いた適合性の検証方法について解説します。このパターンは、Amazon Bedrock のモデル ID を対象とするツール全般に適用可能です。
重要な前提: ほとんどの Amazon Bedrock ワークロードでは、クロスリージョン推論(CRIS)がデフォルトとして最適です。これによりスループットが向上し、アプリケーションで利用可能な容量が増加するとともに、最新モデルをいち早く利用できるようになります。
本記事で紹介するシングルリージョンのパターンは、データ所在地の要件が「特定の地理的エリア」ではなく、「特定の AWS リージョン」である場合にのみ使用してください。「EU 内であればどこでもよい」というデータ所在地の要件であれば、EU クロスリージョンプロファイルの方がよりシンプルな解決策となります。
前提条件
作業を開始する前に、以下の準備が整っていることを確認してください。
- 使用する予定の Claude モデルに対して Amazon Bedrock のモデルアクセス が有効化された AWS アカウント。
Claude Code が実行するアイデンティティに対する IAM 権限はパスによって異なります。パス 1(Mantle)では、bedrock-mantle:CreateInference、bedrock-mantle:Get*、および bedrock-mantle:List* が必要です。
- パス 2(従来の Amazon Bedrock):
bedrock:CreateInferenceProfile、bedrock:InvokeModel、およびbedrock:InvokeModelWithResponseStream。
- 両方のパスにおいて、リージョンスコープのポリシーをロールまたはユーザーに付与するために
iam:CreatePolicy、iam:AttachRolePolicy、およびiam:PutRolePolicyの権限が必要です。
- Claude Code v2.1.94 以降(Path 1 では Mantle サポートが必要ですが、これは v2.1.94 で追加されました)。
- ターゲットリージョンの認証情報で設定された AWS Command Line Interface (AWS CLI) がインストールされていること。
Two endpoints, two paths
Amazon Bedrock は、Claude モデルを 2 つの異なるエンドポイントを通じて提供しています。どちらのエンドポイントを利用するかによって、データ所在地(データレジデンシー)の遵守方法や、それを適用可能なリージョンが決まります。
Classic Amazon Bedrock (bedrock-runtime) は、従来の Amazon Bedrock Invoke API です。Claude Code では、CLAUDE_CODE_USE_BEDROCK=1 を設定するとこのエンドポイントが使用されます。単一リージョンでのルーティングには推論プロファイルが必要です。デフォルトではシステム定義の推論プロファイルは複数リージョンにまたがる構成になっています。ある 1 つのリージョン内でリクエストを完結させるには、そのリージョン内の基盤モデルを指すアプリケーション用推論プロファイルを作成する必要があります。
Mantle (bedrock-mantle) は、Anthropic のネイティブ API 形式で Claude を提供する新しい Amazon Bedrock エンドポイントです。Claude Code では、CLAUDE_CODE_USE_MANTLE=1 を設定するとこちらが使用されます。単一リージョンでのルーティングはネイティブでサポートされており、AWS_REGION を指定するだけで、Mantle はアプリケーション用推論プロファイルを必要とせずに、直接そのリージョンのエンドポイントに解決します。

図 1: 単一リージョンの Claude Code を利用する 2 つの経路
ただし、各エンドポイントには独自の地域別可用性とモデルラインナップがあります。
| クラシック Amazon Bedrock | Mantle | |
|---|---|---|
| in-Region Claude サポート対応リージョン | eu-west-2 (London) のみ (Claude Opus 4.6、Sonnet 4.6 の場合) | アイルランド、ストックホルム、東京、メルボルン、米国東部(バージニア北部)、米国東部(オハイオ)、米国西部(オレゴン) |
| モデル ID | anthropic.claude-opus-4-6-v1、anthropic.claude-sonnet-4-6 | anthropic.claude-sonnet-5、anthropic.claude-opus-4-8、anthropic.claude-haiku-4-5 |
| シングルリージョン機構 | アプリケーション推論プロファイル + IAM 条件 | AWS_REGION + IAM 条件 |
Claude Code は、同じセッション内で両方のエンドポイントを実行できます(環境変数を両方設定してください)。モデル ID が anthropic. で始まり、us. プレフィックスがない場合は Mantle にルーティングされます。それ以外は従来の Invoke が使用されます。
選択するリージョンが決定要因となります。ロンドン (eu-west-2) をターゲットにする場合、パス 2 を利用してください。Mantle はそこではリージョン内ルーティングを提供しておらず、従来の Amazon Bedrock では Claude Opus 4.6 と Sonnet 4.6 のリージョン内推論をサポートしています。アイルランド、ストックホルム、東京、メルボルン、米国東部(バージニア北部)、米国東部(オハイオ)、米国西部(オレゴン)のいずれかをターゲットにする場合はパス 1 を利用してください。Mantle のネイティブルーティングが機能し、セットアップの手間を減らして最新モデルにアクセスできます。それ以外のリージョンをターゲットにする場合、どちらのパターンも現在では機能しません。その場合は AWS アカウントチームへエスカレーションしてください。
リージョン別のモデル利用状況については、Amazon Bedrock の AWS リージョン別サポート対象モデル を参照してください。
パス 1: サポートされる単一リージョンでの Mantle の利用
コンプライアンス要件が Mantle が提供する 7 つのリージョン(アイルランド、ストックホルム、東京、メルボルン、米国東部(バージニア北部)、米国東部(オハイオ)、米国西部(オレゴン))のいずれかに該当する場合、Mantle の方がよりシンプルな選択肢です。推論プロファイルを作成することなく、直接単一リージョンへのルーティングが可能になり、Claude Sonnet 5 を含む最新モデルにもアクセスできます。
Claude Code を Mantle で使用し、ターゲットとするリージョンに固定するには、以下のように設定します。
# Route Claude Code through the Mantle endpoint
# Ireland, an in-Region Mantle Region
export CLAUDE_CODE_USE_MANTLE=1
export AWS_REGION=eu-west-1
# Pin the model family aliases to Mantle model IDs
export ANTHROPIC_DEFAULT_OPUS_MODEL='anthropic.claude-opus-4-8'
export ANTHROPIC_DEFAULT_SONNET_MODEL='anthropic.claude-sonnet-5'
export ANTHROPIC_DEFAULT_HAIKU_MODEL='anthropic.claude-haiku-4-5'claude コマンドを実行し、/status の出力を確認してください。プロバイダーが「Amazon Bedrock (Mantle)」と表示され、リージョンが一致していることを確認します。Mantle は Claude Code v2.1.94 以降で利用可能です。
セットアップの概要は以下の通りです。環境変数を 3 つ設定するだけで、IAM ポリシー以外に追加の AWS リソースをプロビジョンする必要はありません。
Claude Code 自体には認証情報が含まれていません。代わりに、開発者の環境に既に存在する AWS 認証情報を用いて Amazon Bedrock の呼び出しに署名を行います。このポリシーは、開発者が使用する IAM プリンシパル(例:AWS IAM Identity Center を通じて想定されるロールや、ローカルプロファイルの背後にある IAM ユーザー)に付与してください。これにより、Amazon Bedrock への呼び出しが対象リージョン内のみで許可されます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowClaudeCodeMantleInIrelandOnly",
"Effect": "Allow",
"Action": [
"bedrock-mantle:CreateInference",
"bedrock-mantle:Get*",
"bedrock-mantle:List*"
],
"Resource": "arn:aws:bedrock-mantle:eu-west-1:111122223333:project/*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "eu-west-1"
}
}
}
]
}アカウント ID の 111122223333 を実際の値に置き換えてください。aws:RequestedRegion 条件により、アイルランドのエンドポイントに対して行われない Mantle の呼び出しはすべて拒否されます。そのため、開発者が誤って AWS_REGION を設定しても、IAM が呼び出しをブロックします。この記事で解説するのは、まさにこのリージョン制限(ガードレール)です。
なお、Mantle におけるモデルの固定(ピンニング)動作は異なります。ここではリソースが「プロジェクト」であり、「モデル」ではないため、アイデンティティポリシーはリージョン制御のみを担います。
使用するモデルは、ANTHROPIC_DEFAULT_*_MODEL という変数から指定されます。承認されたモデルの一覧を強制するには、サービスコントロールポリシー を利用してください。これがパス 2 と異なる点です。パス 2 では、基盤モデルの Amazon リソース名 (ARN) を用いることで、単一のアイデンティティポリシーでリージョンとモデルの両方を固定できます。
パス 2: Regions Mantle がカバーしていない領域向けのアプリケーション推論プロファイル
顧客のコンプライアンス要件は「ロンドン」に限定されていました。Mantle のリージョン別利用可能状況表を見ると、その理由が明確になります。eu-west-2 リージョンでは、Mantle 上で提供されるのはグローバルエンドポイントと EU エンドポイントのみで、リージョン内限定のオプションはありません。**EU エンドポイントは EU 全域を横断してルーティングされるため、ロンドンからのリクエストがフランクフルト、アイルランド、あるいはパリで処理されてしまう可能性があります。これは顧客が避けたい事態そのものです。
ロンドンに対応できるのは、従来の Amazon Bedrock のみです。ただし、従来の Amazon Bedrock にも制約があります。リージョン内での利用可能範囲は限定的なのです。
Claude Opus 4.6 および Claude Sonnet 4.6 のモデルカードによると、現在、これらのモデルがリージョン内推論を提供できるのは eu-west-2 リージョンのみです。Opus 4.7 や 4.8 は対象外で、従来の Amazon Bedrock では Geo-only(地理限定)となっています。そのため、今回のロンドン向けデプロイでは Claude Opus 4.6 と Sonnet 4.6 に依存することになります。
一部の基盤モデルは、モデル ID で直接呼び出すことができません。Amazon Bedrock では、推論プロファイルを通じて呼び出す必要があります。そのため、Claude Code をこれらのモデル ID のいずれかに直接指定すると、呼び出しが失敗します。
Amazon Bedrock は、「オンデマンドスループットがサポートされていない」というエラーを返し、推論プロファイルの ID または ARN で再試行するよう求めます。しかし、システム定義の推論プロファイルはクロスリージョン用(eu. および global. プレフィックス)であり、まさに回避しようとしているものです。
このソリューションは、アプリケーション推論プロファイル です。これは、特定のリージョンにある基盤モデルの ARN をソースとして作成するプロファイルで、London の基盤モデル ARN を指すことで、Claude Code が受け入れ、単一リージョンのモデルに解決されるプロファイル形状の ARN が得られます。
各モデルファミリーごとに 1 つのプロファイルを作成してください。
aws bedrock create-inference-profile \
--region eu-west-2 \
--inference-profile-name "claude-code-opus-london" \
--model-source copyFrom="arn:aws:bedrock:eu-west-2::foundation-model/anthropic.claude-opus-4-6-v1"
aws bedrock create-inference-profile \
--region eu-west-2 \
--inference-profile-name "claude-code-sonnet-london" \
--model-source copyFrom="arn:aws:bedrock:eu-west-2::foundation-model/anthropic.claude-sonnet-4-6"各呼び出しでは、arn:aws:bedrock:eu-west-2::application-inference-profile/ のような inferenceProfileArn が返されます。この値とプロファイル ARN の両方を保存しておいてください。Claude Code はこれらをモデルとして使用します。また、アプリケーション推論プロファイルを使えば、AWS 請求書上でプロファイルごとのコストや利用状況を追跡することも可能です。
Claude Code をこれらのプロファイル ARN に接続するには、以下の手順を実行します。
# Route Claude Code through classic Bedrock in London
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_REGION=eu-west-2
# Map the model aliases to the London application inference profiles
export ANTHROPIC_DEFAULT_OPUS_MODEL='arn:aws:bedrock:eu-west-2::application-inference-profile/'
export ANTHROPIC_DEFAULT_SONNET_MODEL='arn:aws:bedrock:eu-west-2::application-inference-profile/'チーム全体での展開時には、各エンジニアのシェル設定ではなく、管理された settings ファイル にこれらの値を設定してください。これにより、設定の一貫性を保ちつつ、中央集権的に管理することが可能になります。
セットアップの概要:各モデルファミリーごとにアプリケーション推論プロファイルを作成し(計2つ)、環境変数4つ(CLAUDE_CODE_USE_BEDROCK、AWS_REGION、および 2 つの ANTHROPIC_DEFAULT_*_MODEL 変数)を設定し、IAM ポリシーも適用します。パス1と比較すると、モデルファミリーごとに追加で約5分のプロビジョニングが必要です。
IAM ポリシーはパス 1 と似ていますが、Resource リストにはアプリケーション推論プロファイルの ARN、その基盤となるファウンデーションモデルの ARN、および Amazon Bedrock の IAM アクションが追加されています。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowClaudeCodeInLondonOnly",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream",
"bedrock:GetInferenceProfile",
"bedrock:ListInferenceProfiles"
],
"Resource": [
"arn:aws:bedrock:eu-west-2::application-inference-profile/",
"arn:aws:bedrock:eu-west-2::application-inference-profile/",
"arn:aws:bedrock:eu-west-2::foundation-model/anthropic.claude-opus-4-6-v1",
"arn:aws:bedrock:eu-west-2::foundation-model/anthropic.claude-sonnet-4-6"
],
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "eu-west-2"
}
}
}
]
}エンドツーエンドで検証します。Claude Code で /status を実行し、プロバイダーが Amazon Bedrock を読み取り、リージョンがロンドンであることを確認してください。
シングル・リージョン準拠の検証
Amazon Bedrock 上で Claude Code を利用する際、すべての呼び出しは対象リージョンの AWS CloudTrail にのみ記録され、他の場所には残らないようにする必要があります。ただし、その確認方法はデプロイしたパスによって異なります。2 つのエンドポイントは異なるイベント名、イベントソース、そして CloudTrail のイベントタイプでログを出力するためです。
パス 2(従来の Amazon Bedrock): モデルの呼び出しは、bedrock.amazonaws.com というイベントソースの下で InvokeModel として記録されます。イベント履歴から以下のように検索してください。
aws cloudtrail lookup-events \
--region eu-west-2 \
--lookup-attributes AttributeKey=EventName,AttributeValue=InvokeModelコンプライアンスを満たすイベントには、以下の 3 つの重要なフィールドが含まれています。
{
"eventName": "InvokeModel",
"eventSource": "bedrock.amazonaws.com",
"awsRegion": "eu-west-2",
"requestParameters": {
"modelId": "arn:aws:bedrock:eu-west-2:111122223333:application-inference-profile/opus-london"
}
}もし InvokeModel イベントが表示されない場合は、モデル呼び出しのログ記録がオフになっている可能性があります。トレイルで Amazon Bedrock のデータイベントを有効化し、再度お試しください。
パス1(Mantle): Mantle は、bedrock-mantle.amazonaws.com イベントソースの下で推論を CreateInference としてログ出力します。これは CloudTrail データイベント です。何かを検証する前に、トレイルまたはイベントデータストア上で高度なイベントセレクターを使用して bedrock-mantle のデータイベントを有効にする必要があります。ログ出力が開始されたら、AWS CloudTrail Lake 内のイベントデータストアに対してクエリを実行します。
SELECT eventName, awsRegion, element_at(requestParameters, 'model') AS model
FROM
WHERE eventSource = 'bedrock-mantle.amazonaws.com'
AND eventName = 'CreateInference'コンプライアンス対応のMantleイベントには、ターゲットリージョンが awsRegion に、固定されたモデルが requestParameters.model に含まれます。
{
"eventName": "CreateInference",
"eventSource": "bedrock-mantle.amazonaws.com",
"awsRegion": "eu-west-1",
"requestParameters": {
"model": "anthropic.claude-sonnet-5"
}
}どのパスであっても、3 つのチェックでコンプライアンスが証明されます。第一に、すべてのイベントにおける awsRegion が対象とするリージョンと一致している必要があります。第二に、他のすべてのリージョンで同じクエリを再実行した場合、結果がゼロになるはずです。
第三に、errorCode: AccessDenied というイベントは、実際のクライアントからのものではなく、意図的なテストの結果として発生したものであると特定する必要があります。
適切なパスの選択
2 つのパスを比較します。
| パス 1 (Mantle) | パス 2 (Classic Amazon Bedrock) | |
|---|---|---|
| in-Region Claude サポート対応リージョン | 7 | 1 (ロンドンのみ) |
| in-Region サポート対応モデル | Sonnet 5, Opus 4.8, Haiku 4.5 | Opus 4.6, Sonnet 4.6 |
| 作成する AWS リソース | 0 | アプリケーション推論プロファイル 2 つ |
| 設定する環境変数 | 3 | 4 |
| IAM 以外のセットアップ手順 | 環境変数のみ | CLI コマンド 2 回 + 環境変数 |
コミットする前に、Amazon Bedrock のモデルカード で現在のリージョンごとの利用可否を確認してください。新しいモデルが追加されるたびに利用状況は変動します。
クリーンアップ
作成したアプリケーション推論プロファイルを削除したい場合は、AWS CLI を使用して削除します。
aws bedrock delete-inference-profile \
--region eu-west-2 \
--inference-profile-identifier
aws bedrock delete-inference-profile \
--region eu-west-2 \
--inference-profile-identifierアプリケーション推論プロファイルには、
原文を表示
A US-headquartered global organization recently came to us with a deceptively simple data-residency request: let their engineers use Claude Code. The requirement: Amazon Bedrock model inference had to be processed in London (the eu-west-2 AWS Region), not merely called from London. Their compliance team had drawn a hard line. Prompts, completions, and intermediate processing were required to stay inside a single AWS Region. Approximate compliance wasn’t on the table.
We tried the newest path first (Anthropic’s Mantle endpoint on Amazon Bedrock) and encountered a limitation. Then we went back to the classic Amazon Bedrock Invoke API with an application inference profile. That combination, plus an AWS Identity and Access Management (IAM) Region condition, satisfied the requirement.
In this post, we show you both paths, why the choice depends on your Region, the AWS Identity and Access Management (IAM) policy that enforces them, and how to verify compliance in AWS CloudTrail. The pattern applies to tools that target an Amazon Bedrock model ID.
Important context: for most Amazon Bedrock workloads, cross-Region inference (CRIS) is the right default. It smooths throughput, increases the capacity available to your application, and gives you access to newer models first. Use the single-Region patterns in this post only when your compliance requirement is a specific AWS Region rather than a geography. If “somewhere in the EU” satisfies your data residency need, an EU cross-Region profile is the more straightforward answer.
Prerequisites
Before you begin, confirm that you have:
- An AWS account with Amazon Bedrock model access enabled for the Claude models that you intend to use.
- IAM permissions for the identity Claude Code runs as, which differ by path:
Path 1 (Mantle): bedrock-mantle:CreateInference, bedrock-mantle:Get*, and bedrock-mantle:List*.
- Path 2 (classic Amazon Bedrock): bedrock:CreateInferenceProfile, bedrock:InvokeModel, and bedrock:InvokeModelWithResponseStream.
- Both paths: iam:CreatePolicy, iam:AttachRolePolicy, and iam:PutRolePolicy to attach the Region-scoped policy to that role or user.
- Claude Code v2.1.94 or later (Path 1 requires Mantle support, which was added in v2.1.94).
- AWS Command Line Interface (AWS CLI) installed and configured with credentials for the target Region.
Two endpoints, two paths
Amazon Bedrock exposes Claude models through two distinct endpoints. The one that you use determines how you enforce data residency. It also determines which Regions you can enforce it in.
Classic Amazon Bedrock (bedrock-runtime) is the original Amazon Bedrock Invoke API. Claude Code uses it when you set CLAUDE_CODE_USE_BEDROCK=1. Single-Region routing requires an inference profile. By default, the system-defined inference profiles are cross-Region. To keep a request in one Region, you create an application inference profile that points at the in-Region foundation model.
Mantle (bedrock-mantle) is a newer Amazon Bedrock endpoint that serves Claude through Anthropic’s native API shape. Claude Code uses it when you set CLAUDE_CODE_USE_MANTLE=1. Single-Region routing is native. You set AWS_REGION, and Mantle resolves the endpoint to that Region directly with no application inference profile needed.

**Figure 1: Two paths for single-Region Claude Code
However, each endpoint has its own Regional availability and model lineup:
| Classic Amazon Bedrock | Mantle | |
|---|---|---|
| Regions with in-Region Claude support | eu-west-2 (London) only (for Claude Opus 4.6, Sonnet 4.6) | Ireland, Stockholm, Tokyo, Melbourne, US East (N. Virginia), US East (Ohio), US West (Oregon) |
| Model IDs | anthropic.claude-opus-4-6-v1, anthropic.claude-sonnet-4-6 | anthropic.claude-sonnet-5, anthropic.claude-opus-4-8, anthropic.claude-haiku-4-5 |
| Single-Region mechanism | Application inference profile + IAM condition | AWS_REGION + IAM condition |
Claude Code can run both endpoints in the same session (set both env vars). Model IDs starting with anthropic. and no us. prefix route to Mantle. Everything else goes to classic Invoke.
Your Region drives the choice. Targeting London (eu-west-2)? Use Path 2. Mantle offers no in-Region routing there, and classic Amazon Bedrock supports in-Region inference for Claude Opus 4.6 and Sonnet 4.6. Targeting one of Ireland, Stockholm, Tokyo, Melbourne, US East (N. Virginia), US East (Ohio), or US West (Oregon)? Use Path 1. Mantle’s native routing works there and gives you access to newer models with less setup. Targeting a different Region? Neither pattern works today. Escalate to your AWS account team.
For model availability by Region, refer to Supported models by AWS Region in Amazon Bedrock.
Path 1: Mantle for a supported single Region
If your compliance requirement points at one of Mantle’s seven in-Region Regions (Ireland, Stockholm, Tokyo, Melbourne, US East (N. Virginia), US East (Ohio), or US West (Oregon)), Mantle is the more straightforward path. You get direct single-Region routing without creating any inference profiles, and access to newer models including Claude Sonnet 5.
Configure Claude Code to use Mantle and pin it to your target Region:
# Route Claude Code through the Mantle endpoint
# Ireland, an in-Region Mantle Region
export CLAUDE_CODE_USE_MANTLE=1
export AWS_REGION=eu-west-1
# Pin the model family aliases to Mantle model IDs
export ANTHROPIC_DEFAULT_OPUS_MODEL='anthropic.claude-opus-4-8'
export ANTHROPIC_DEFAULT_SONNET_MODEL='anthropic.claude-sonnet-5'
export ANTHROPIC_DEFAULT_HAIKU_MODEL='anthropic.claude-haiku-4-5'Run the claude command and verify the /status output. The provider should read Amazon Bedrock (Mantle) and the Region should match. Mantle is available in Claude Code v2.1.94 and later.
Setup summary: three environment variables, no additional AWS resources to provision beyond the IAM policy.
Claude Code has no credentials of its own. Instead, it signs Amazon Bedrock calls with whatever AWS credentials are already in the developer’s environment. Attach this policy to that IAM principal: the role your developers assume (for example, through AWS IAM Identity Center) or the IAM user behind their local profile. It permits Amazon Bedrock calls only in your target Region:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowClaudeCodeMantleInIrelandOnly",
"Effect": "Allow",
"Action": [
"bedrock-mantle:CreateInference",
"bedrock-mantle:Get*",
"bedrock-mantle:List*"
],
"Resource": "arn:aws:bedrock-mantle:eu-west-1:111122223333:project/*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "eu-west-1"
}
}
}
]
}Replace 111122223333 with your account ID. The aws:RequestedRegion condition rejects any Mantle call not made against the Ireland endpoint, so even if a developer misconfigures AWS_REGION, IAM refuses the call. That is the Region guardrail this post is about. Note that model pinning works differently on Mantle: the resource is a project, not a model, so the identity policy controls only Region. Your model choice comes from the ANTHROPIC_DEFAULT_*_MODEL variables. To enforce an approved model list, use a service control policy. That is the asymmetry with Path 2, where the foundation-model Amazon Resource Name (ARN) lets one identity policy pin both Region and models.
Path 2: Application inference profile for Regions Mantle doesn’t cover
Our customer’s compliance requirement was London specifically, and Mantle’s Regional availability table shows why that matters. eu-west-2 offers only Global and EU endpoints on Mantle, with no in-Region-only option.** The EU endpoint routes across the whole EU geography, so a request from London can be processed in Frankfurt, Ireland, or Paris. That is exactly what the customer needed to prevent.
Classic Amazon Bedrock is the only option for London. Additionally, there is a constraint: in-Region availability on classic Amazon Bedrock is narrow.
Per the Claude Opus 4.6 and Claude Sonnet 4.6 model cards, eu-west-2 is currently the only Region where these models offer in-Region inference. Opus 4.7 and 4.8 don’t. They are Geo-only on classic Amazon Bedrock. So, the London deployment is anchored on Claude Opus 4.6 and Sonnet 4.6.
Some foundation models can’t be called directly by their model ID because Amazon Bedrock requires you to invoke them through an inference profile instead. So, when you point Claude Code straight at one of these model IDs, the call fails. Amazon Bedrock returns an error saying on-demand throughput isn’t supported and asks you to retry with the ID or ARN of an inference profile. But the system-defined inference profiles are the cross-Region ones (eu. and global. prefixes), which is exactly what we are trying to avoid.
The solution is an application inference profile. This is a profile you create with a foundation-model ARN in one Region as its model source. Point it at the London foundation model ARN and you get a profile-shaped ARN that Claude Code accepts and that resolves to a single-Region model.
Create one profile per model family:
aws bedrock create-inference-profile \
--region eu-west-2 \
--inference-profile-name "claude-code-opus-london" \
--model-source copyFrom="arn:aws:bedrock:eu-west-2::foundation-model/anthropic.claude-opus-4-6-v1"
aws bedrock create-inference-profile \
--region eu-west-2 \
--inference-profile-name "claude-code-sonnet-london" \
--model-source copyFrom="arn:aws:bedrock:eu-west-2::foundation-model/anthropic.claude-sonnet-4-6"Each call returns an inferenceProfileArn like arn:aws:bedrock:eu-west-2::application-inference-profile/. Save both. Claude Code uses them as models. Application inference profiles also give you per-profile cost and usage tracking in your AWS bill.
Wire Claude Code to the profile ARNs:
# Route Claude Code through classic Bedrock in London
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_REGION=eu-west-2
# Map the model aliases to the London application inference profiles
export ANTHROPIC_DEFAULT_OPUS_MODEL='arn:aws:bedrock:eu-west-2::application-inference-profile/'
export ANTHROPIC_DEFAULT_SONNET_MODEL='arn:aws:bedrock:eu-west-2::application-inference-profile/'For a team rollout, set these in a managed settings file rather than each engineer’s shell, so the configuration is consistent and centrally controlled.
Setup summary: 2 application inference profile creations (one per model family), four environment variables (CLAUDE_CODE_USE_BEDROCK, AWS_REGION, and the two ANTHROPIC_DEFAULT_*_MODEL variables), plus the IAM policy. Roughly 5 minutes of additional provisioning per model family versus Path 1.
The IAM policy looks similar to Path 1, but the Resource list now includes the application inference profile ARNs, their backing foundation-model ARNs, and the IAM actions for Amazon Bedrock:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowClaudeCodeInLondonOnly",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream",
"bedrock:GetInferenceProfile",
"bedrock:ListInferenceProfiles"
],
"Resource": [
"arn:aws:bedrock:eu-west-2::application-inference-profile/",
"arn:aws:bedrock:eu-west-2::application-inference-profile/",
"arn:aws:bedrock:eu-west-2::foundation-model/anthropic.claude-opus-4-6-v1",
"arn:aws:bedrock:eu-west-2::foundation-model/anthropic.claude-sonnet-4-6"
],
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "eu-west-2"
}
}
}
]
}Verify end to end. Run /status in Claude Code and confirm the provider reads Amazon Bedrock and the Region is London.
Verifying single-Region compliance
Every Claude Code Amazon Bedrock call must appear in the target Region’s AWS CloudTrail, and nowhere else. How you query for it depends on which path you deployed, because the two endpoints log under different event names, different event sources, and different CloudTrail event types.
Path 2 (classic Amazon Bedrock): Model invocations log as InvokeModel under the bedrock.amazonaws.com event source. Look them up in the event history:
aws cloudtrail lookup-events \
--region eu-west-2 \
--lookup-attributes AttributeKey=EventName,AttributeValue=InvokeModelA compliant event contains three fields that matter:
{
"eventName": "InvokeModel",
"eventSource": "bedrock.amazonaws.com",
"awsRegion": "eu-west-2",
"requestParameters": {
"modelId": "arn:aws:bedrock:eu-west-2:111122223333:application-inference-profile/opus-london"
}
}If no InvokeModel events appear, model-invocation logging might be off. Enable Amazon Bedrock data events on your trail and retry.
Path 1 (Mantle): Mantle logs inference as CreateInference under the bedrock-mantle.amazonaws.com event source, and it is a CloudTrail data event. Before you can verify anything, enable bedrock-mantle data events with an advanced event selector on a trail or event data store. Once logging is on, query the event data store in AWS CloudTrail Lake:
SELECT eventName, awsRegion, element_at(requestParameters, 'model') AS model
FROM
WHERE eventSource = 'bedrock-mantle.amazonaws.com'
AND eventName = 'CreateInference'A compliant Mantle event carries the target Region in awsRegion and the pinned model in requestParameters.model:
{
"eventName": "CreateInference",
"eventSource": "bedrock-mantle.amazonaws.com",
"awsRegion": "eu-west-1",
"requestParameters": {
"model": "anthropic.claude-sonnet-5"
}
}Regardless of path, three checks prove compliance. First, every event’s awsRegion must match your target Region. Second, rerunning the same query in every other Region should return zero results. Third, any errorCode: AccessDenied event should trace back to a deliberate test rather than a real client.
Choosing the right path
Compare the two paths:
| Path 1 (Mantle) | Path 2 (Classic Amazon Bedrock) | |
|---|---|---|
| Regions with in-Region Claude support | 7 | 1 (London only) |
| Models with in-Region support | Sonnet 5, Opus 4.8, Haiku 4.5 | Opus 4.6, Sonnet 4.6 |
| AWS resources to create | 0 | 2 application inference profiles |
| Environment variables to set | 3 | 4 |
| Setup steps beyond IAM | Env vars only | 2 CLI calls + env vars |
Verify the current in-Region status on the Amazon Bedrock model cards before committing. Availability moves as new models land.
Clean up
If you want to remove the application inference profiles you created, delete them with the AWS CLI:
aws bedrock delete-inference-profile \
--region eu-west-2 \
--inference-profile-identifier
aws bedrock delete-inference-profile \
--region eu-west-2 \
--inference-profile-identifierApplication inference profiles carry no o
関連記事
News to Guide
ニュースの次に確認する
発表内容を、現在の料金や仕様と照らし合わせられる関連ガイドです。
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み